Browse Source

Add existing unit tests from github.com/tim/erlang-oauth-tests

Tim Fletcher 12 years ago
parent
commit
6587faff5c

+ 9 - 3
Makefile

@@ -1,5 +1,11 @@
-all:
-	@erl -make
+all: clean compile
 
 clean:
-	@rm -rf ebin/*.beam erl_crash.dump
+	@rm -rf ebin/*.beam
+
+compile:
+	@test -d ebin || mkdir ebin
+	@erl -make
+
+test: clean compile
+	@escript test.escript

+ 45 - 0
test.escript

@@ -0,0 +1,45 @@
+#!/usr/bin/env escript
+
+-include_lib("eunit/include/eunit.hrl").
+
+main([]) ->
+  code:add_path("ebin"),
+  Tests = lists:append([signature_base_string_tests(), plaintext_tests(), hmac_sha1_tests(), rsa_sha1_tests()]),
+  halt(case eunit:test(Tests) of ok -> 0; {error, _} -> 1 end).
+
+signature_base_string_tests() ->
+  test_with("base_string_test_*", [method, url, params, base_string], fun (Method, URL, Params, BaseString) ->
+    [?_assertEqual(BaseString, oauth:signature_base_string(Method, URL, Params))]
+  end).
+
+plaintext_tests() ->
+  test_with("plaintext_test_*", [consumer, token_secret, signature], fun (Consumer, TokenSecret, Signature) ->
+    SignatureTest = ?_assertEqual(Signature, oauth:plaintext_signature(Consumer, TokenSecret)),
+    VerifyTest = ?_assertEqual(true, oauth:plaintext_verify(Signature, Consumer, TokenSecret)),
+    [SignatureTest, VerifyTest]
+  end).
+
+hmac_sha1_tests() ->
+  test_with("hmac_sha1_test_*", [base_string, consumer, token_secret, signature], fun (BaseString, Consumer, TokenSecret, Signature) ->
+    SignatureTest = ?_assertEqual(Signature, oauth:hmac_sha1_signature(BaseString, Consumer, TokenSecret)),
+    VerifyTest = ?_assertEqual(true, oauth:hmac_sha1_verify(Signature, BaseString, Consumer, TokenSecret)),
+    [SignatureTest, VerifyTest]
+  end).
+
+rsa_sha1_tests() ->
+  Pkey = data_path("rsa_sha1_private_key.pem"),
+  Cert = data_path("rsa_sha1_certificate.pem"),
+  [BaseString, Signature] = read([base_string, signature], "rsa_sha1_test"),
+  SignatureTest = ?_assertEqual(Signature, oauth:rsa_sha1_signature(BaseString, {"", Pkey, rsa_sha1})),
+  VerifyTest = ?_assertEqual(true, oauth:rsa_sha1_verify(Signature, BaseString, {"", Cert, rsa_sha1})),
+  [SignatureTest, VerifyTest].
+
+test_with(FilenamePattern, Keys, Fun) ->
+  lists:flatten(lists:map(fun (Path) -> apply(Fun, read(Keys, Path)) end, filelib:wildcard(data_path(FilenamePattern)))).
+
+data_path(Basename) ->
+  filename:join([filename:dirname(filename:absname(escript:script_name())), "testdata", Basename]).
+
+read(Keys, Filename) ->
+  {ok, Proplist} = file:consult(data_path(Filename)),
+  [proplists:get_value(K, Proplist) || K <- Keys].

+ 7 - 0
testdata/base_string_test_A

@@ -0,0 +1,7 @@
+{base_string, "GET&http%3A%2F%2Fexample.com%2F&n%3Dv"}.
+
+{method, "GET"}.
+
+{url, "http://example.com/"}.
+
+{params, [{"n", "v"}]}.

+ 13 - 0
testdata/base_string_test_B

@@ -0,0 +1,13 @@
+{base_string, "POST&https%3A%2F%2Fphotos.example.net%2Frequest_token&oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dhsu94j3884jdopsl%26oauth_signature_method%3DPLAINTEXT%26oauth_timestamp%3D1191242090%26oauth_version%3D1.0"}.
+
+{method, "POST"}.
+
+{url, "https://photos.example.net/request_token"}.
+
+{params, [
+  {"oauth_version", "1.0"},
+  {"oauth_consumer_key", "dpf43f3p2l4k3l03"},
+  {"oauth_timestamp", "1191242090"},
+  {"oauth_nonce", "hsu94j3884jdopsl"},
+  {"oauth_signature_method", "PLAINTEXT"}
+]}.

+ 16 - 0
testdata/base_string_test_C

@@ -0,0 +1,16 @@
+{base_string, "GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal"}.
+
+{method, "GET"}.
+
+{url, "http://photos.example.net/photos"}.
+
+{params, [
+  {"file", "vacation.jpg"},
+  {"size", "original"},
+  {"oauth_version", "1.0"},
+  {"oauth_consumer_key", "dpf43f3p2l4k3l03"},
+  {"oauth_token", "nnch734d00sl2jdk"},
+  {"oauth_timestamp", "1191242096"},
+  {"oauth_nonce", "kllo9940pd9333jh"},
+  {"oauth_signature_method", "HMAC-SHA1"}
+]}.

+ 21 - 0
testdata/base_string_test_D

@@ -0,0 +1,21 @@
+% cf. http://tools.ietf.org/html/rfc5849#section-3.4.1.1
+
+{base_string, "POST&http%3A%2F%2Fexample.com%2Frequest&a2%3Dr%2520b%26a3%3D2%2520q%26a3%3Da%26b5%3D%253D%25253D%26c%2540%3D%26c2%3D%26oauth_consumer_key%3D9djdj82h48djs9d2%26oauth_nonce%3D7d8f3e4a%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D137131201%26oauth_token%3Dkkk9d7dh3k39sjv7"}.
+
+{method, "POST"}.
+
+{url, "http://example.com/request"}.
+
+{params, [
+  {"b5", "=%3D"}
+, {"a3", "a"}
+, {"c@", ""}
+, {"a2", "r b"}
+, {"oauth_consumer_key", "9djdj82h48djs9d2"}
+, {"oauth_token", "kkk9d7dh3k39sjv7"}
+, {"oauth_signature_method", "HMAC-SHA1"}
+, {"oauth_timestamp", "137131201"}
+, {"oauth_nonce", "7d8f3e4a"}
+, {"c2", ""}
+, {"a3", "2 q"}
+]}.

+ 9 - 0
testdata/hmac_sha1_test_A

@@ -0,0 +1,9 @@
+% cf. http://wiki.oauth.net/TestCases
+
+{signature, "egQqG5AJep5sJ7anhXju1unge2I="}.
+
+{base_string, "bs"}.
+
+{consumer, {"", "cs", hmac_sha1}}.
+
+{token_secret, ""}.

+ 9 - 0
testdata/hmac_sha1_test_B

@@ -0,0 +1,9 @@
+% cf. http://wiki.oauth.net/TestCases
+
+{signature, "VZVjXceV7JgPq/dOTnNmEfO0Fv8="}.
+
+{base_string, "bs"}.
+
+{consumer, {"", "cs", hmac_sha1}}.
+
+{token_secret, "ts"}.

+ 9 - 0
testdata/hmac_sha1_test_C

@@ -0,0 +1,9 @@
+% cf. http://wiki.oauth.net/TestCases
+
+{signature, "tR3+Ty81lMeYAr/Fid0kMTYa/WM="}.
+
+{base_string, "GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal"}.
+
+{consumer, {"", "kd94hf93k423kf44", hmac_sha1}}.
+
+{token_secret, "pfkkdhi9sl3r4s00"}.

+ 7 - 0
testdata/plaintext_test_A

@@ -0,0 +1,7 @@
+% cf. http://oauth.net/core/1.0/#rfc.section.9.4.1
+
+{signature, "djr9rjt0jd78jf88&jjd999tj88uiths3"}.
+
+{consumer, {"", "djr9rjt0jd78jf88", plaintext}}.
+
+{token_secret, "jjd999tj88uiths3"}.

+ 7 - 0
testdata/plaintext_test_B

@@ -0,0 +1,7 @@
+% cf. http://oauth.net/core/1.0/#rfc.section.9.4.1
+
+{signature, "djr9rjt0jd78jf88&jjd99%24tj88uiths3"}.
+
+{consumer, {"", "djr9rjt0jd78jf88", plaintext}}.
+
+{token_secret, "jjd99$tj88uiths3"}.

+ 7 - 0
testdata/plaintext_test_C

@@ -0,0 +1,7 @@
+% cf. http://oauth.net/core/1.0/#rfc.section.9.4.1
+
+{signature, "djr9rjt0jd78jf88&"}.
+
+{consumer, {"", "djr9rjt0jd78jf88", plaintext}}.
+
+{token_secret, ""}.

+ 11 - 0
testdata/rsa_sha1_certificate.pem

@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBpjCCAQ+gAwIBAgIBATANBgkqhkiG9w0BAQUFADAZMRcwFQYDVQQDDA5UZXN0
+IFByaW5jaXBhbDAeFw03MDAxMDEwODAwMDBaFw0zODEyMzEwODAwMDBaMBkxFzAV
+BgNVBAMMDlRlc3QgUHJpbmNpcGFsMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQC0YjCwIfYoprq/FQO6lb3asXrxLlJFuCvtinTF5p0GxvQGu5O3gYytUvtC2JlY
+zypSRjVxwxrsuRcP3e641SdASwfrmzyvIgP08N4S0IFzEURkV1wp/IpH7kH41Etb
+mUmrXSwfNZsnQRE5SYSOhh+LcK2wyQkdgcMv11l4KoBkcwIDAQABMA0GCSqGSIb3
+DQEBBQUAA4GBAGZLPEuJ5SiJ2ryq+CmEGOXfvlTtEL2nuGtr9PewxkgnOjZpUy+d
+4TvuXJbNQc8f4AMWL/tO9w0Fk80rWKp9ea8/df4qMq5qlFWlx6yOLQxumNOmECKb
+WpkUQDIDJEoFUzKMVuJf4KO/FJ345+BNLGgbJ6WujreoM1X/gYfdnJ/J
+-----END CERTIFICATE-----

+ 15 - 0
testdata/rsa_sha1_private_key.pem

@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQC0YjCwIfYoprq/FQO6lb3asXrxLlJFuCvtinTF5p0GxvQGu5O3
+gYytUvtC2JlYzypSRjVxwxrsuRcP3e641SdASwfrmzyvIgP08N4S0IFzEURkV1wp
+/IpH7kH41EtbmUmrXSwfNZsnQRE5SYSOhh+LcK2wyQkdgcMv11l4KoBkcwIDAQAB
+AoGAWFlbZXlM2r5G6z48tE+RTKLvB1/btgAtq8vLw/5e3KnnbcDD6fZO07m4DRaP
+jRryrJdsp8qazmUdcY0O1oK4FQfpprknDjP+R1XHhbhkQ4WEwjmxPstZMUZaDWF5
+8d3otc23mCzwh3YcUWFu09KnMpzZsK59OfyjtkS44EDWpbECQQDXgN0ODboKsuEA
+VAhAtPUqspU9ivRa6yLai9kCnPb9GcztrsJZQm4NHcKVbmD2F2L4pDRx4Pmglhfl
+V7G/a6T7AkEA1kfU0+DkXc6I/jXHJ6pDLA5s7dBHzWgDsBzplSdkVQbKT3MbeYje
+ByOxzXhulOWLBQW/vxmW4HwU95KTRlj06QJASPoBYY3yb0cN/J94P/lHgJMDCNky
+UEuJ/PoYndLrrN/8zow8kh91xwlJ6HJ9cTiQMmTgwaOOxPuu0eI1df4M2wJBAJJS
+WrKUT1z/O+zbLDOZwGTFNPzvzRgmft4z4A1J6OlmyZ+XKpvDKloVtcRpCJoEZPn5
+AwaroquID4k/PfI7rIECQHeWa6+kPADv9IrK/92mujujS0MSEiynDw5NjTnHAH0v
+8TrXzs+LCWDN/gbOCKPfnWRkgwgOeC8NN3h0zUIIUtA=
+-----END RSA PRIVATE KEY-----

+ 3 - 0
testdata/rsa_sha1_test

@@ -0,0 +1,3 @@
+{signature, "jvTp/wX1TYtByB1m+Pbyo0lnCOLIsyGCH7wke8AUs3BpnwZJtAuEJkvQL2/9n4s5wUmUl4aCI4BwpraNx4RtEXMe5qg5T1LVTGliMRpKasKsW//e+RinhejgCuzoH26dyF8iY2ZZ/5D1ilgeijhV/vBka5twt399mXwaYdCwFYE="}.
+
+{base_string, "GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacaction.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3D13917289812797014437%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D1196666512%26oauth_version%3D1.0%26size%3Doriginal"}.