@@ -26,7 +26,7 @@ def test_default_ca_file_exists
2626class TestQueryParameters < TestCase
2727
2828 def assert_canon_params ( params , expected )
29- actual = @client . send ( :encode_params , params )
29+ actual = @client . send ( :canon_params , params )
3030 assert_equal ( expected , actual )
3131 end
3232
@@ -108,21 +108,40 @@ def test_encode_key_val
108108end
109109
110110class TestCanonicalize < TestCase
111- def test_v2
111+ def test_sig_v5_params
112112 params = {
113113 "\u469a \u287b \u35d0 \u8ef3 \u6727 \u502a \u0810 \ud091 \u00c8 \uc170 " => "\u0f45 \u1a76 \u341a \u654c \uc23f \u9b09 \uabe2 \u8343 \u1b27 \u60d0 " ,
114114 "\u7449 \u7e4b \uccfb \u59ff \ufe5f \u83b7 \uadcc \u900c \ucfd1 \u7813 " => "\u8db7 \u5022 \u92d3 \u42ef \u207d \u8730 \uacfe \u5617 \u0946 \u4e30 " ,
115115 "\u7470 \u9314 \u901c \u9eae \u40d8 \u4201 \u82d8 \u8c70 \u1d31 \ua042 " => "\u17d9 \u0ba8 \u9358 \uaadf \ua42a \u48be \ufb96 \u6fe9 \ub7ff \u32f3 " ,
116116 "\uc2c5 \u2c1d \u2620 \u3617 \u96b3 F\u8605 \u20e8 \uac21 \u5934 " => "\ufba9 \u41aa \ubd83 \u840b \u2615 \u3e6e \u652d \ua8b5 \ud56b U"
117117 }
118+ body = ''
119+ additional_headers = nil
118120 expected_date = 'Fri, 07 Dec 2012 17:18:00 -0000'
119- expected_canon = "Fri, 07 Dec 2012 17:18:00 -0000\n POST\n foo.bar52.com\n /Foo/BaR2/qux\n %E4%9A%9A%E2%A1%BB%E3%97%90%E8%BB%B3%E6%9C%A7%E5%80%AA%E0%A0%90%ED%82%91%C3%88%EC%85%B0=%E0%BD%85%E1%A9%B6%E3%90%9A%E6%95%8C%EC%88%BF%E9%AC%89%EA%AF%A2%E8%8D%83%E1%AC%A7%E6%83%90&%E7%91%89%E7%B9%8B%EC%B3%BB%E5%A7%BF%EF%B9%9F%E8%8E%B7%EA%B7%8C%E9%80%8C%EC%BF%91%E7%A0%93=%E8%B6%B7%E5%80%A2%E9%8B%93%E4%8B%AF%E2%81%BD%E8%9C%B0%EA%B3%BE%E5%98%97%E0%A5%86%E4%B8%B0&%E7%91%B0%E9%8C%94%E9%80%9C%E9%BA%AE%E4%83%98%E4%88%81%E8%8B%98%E8%B1%B0%E1%B4%B1%EA%81%82=%E1%9F%99%E0%AE%A8%E9%8D%98%EA%AB%9F%EA%90%AA%E4%A2%BE%EF%AE%96%E6%BF%A9%EB%9F%BF%E3%8B%B3&%EC%8B%85%E2%B0%9D%E2%98%A0%E3%98%97%E9%9A%B3F%E8%98%85%E2%83%A8%EA%B0%A1%E5%A4%B4=%EF%AE%A9%E4%86%AA%EB%B6%83%E8%90%8B%E2%98%95%E3%B9%AE%E6%94%AD%EA%A2%B5%ED%95%ABU"
121+ expected_canon = expected_date + "\n POST\n foo.bar52.com\n /Foo/BaR2/qux\n %E4%9A%9A%E2%A1%BB%E3%97%90%E8%BB%B3%E6%9C%A7%E5%80%AA%E0%A0%90%ED%82%91%C3%88%EC%85%B0=%E0%BD%85%E1%A9%B6%E3%90%9A%E6%95%8C%EC%88%BF%E9%AC%89%EA%AF%A2%E8%8D%83%E1%AC%A7%E6%83%90&%E7%91%89%E7%B9%8B%EC%B3%BB%E5%A7%BF%EF%B9%9F%E8%8E%B7%EA%B7%8C%E9%80%8C%EC%BF%91%E7%A0%93=%E8%B6%B7%E5%80%A2%E9%8B%93%E4%8B%AF%E2%81%BD%E8%9C%B0%EA%B3%BE%E5%98%97%E0%A5%86%E4%B8%B0&%E7%91%B0%E9%8C%94%E9%80%9C%E9%BA%AE%E4%83%98%E4%88%81%E8%8B%98%E8%B1%B0%E1%B4%B1%EA%81%82=%E1%9F%99%E0%AE%A8%E9%8D%98%EA%AB%9F%EA%90%AA%E4%A2%BE%EF%AE%96%E6%BF%A9%EB%9F%BF%E3%8B%B3&%EC%8B%85%E2%B0%9D%E2%98%A0%E3%98%97%E9%9A%B3F%E8%98%85%E2%83%A8%EA%B0%A1%E5%A4%B4=%EF%AE%A9%E4%86%AA%EB%B6%83%E8%90%8B%E2%98%95%E3%B9%AE%E6%94%AD%EA%A2%B5%ED%95%ABU\n cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e\n cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
120122 actual_date , actual_canon = @client . send ( :canonicalize ,
121- 'PoSt' , HOST , '/Foo/BaR2/qux' , params , : date => expected_date )
123+ 'PoSt' , HOST , '/Foo/BaR2/qux' , params , body , additional_headers , options : { : date => expected_date } )
122124 assert_equal ( expected_canon , actual_canon )
123125 assert_equal ( expected_date , actual_date )
124126 end
125127
128+ def test_sig_v5_json
129+ params_hash = {
130+ "\u469a \u287b \u35d0 \u8ef3 \u6727 \u502a \u0810 \ud091 \u00c8 \uc170 " => "\u0f45 \u1a76 \u341a \u654c \uc23f \u9b09 \uabe2 \u8343 \u1b27 \u60d0 " ,
131+ "\u7449 \u7e4b \uccfb \u59ff \ufe5f \u83b7 \uadcc \u900c \ucfd1 \u7813 " => "\u8db7 \u5022 \u92d3 \u42ef \u207d \u8730 \uacfe \u5617 \u0946 \u4e30 " ,
132+ "\u7470 \u9314 \u901c \u9eae \u40d8 \u4201 \u82d8 \u8c70 \u1d31 \ua042 " => "\u17d9 \u0ba8 \u9358 \uaadf \ua42a \u48be \ufb96 \u6fe9 \ub7ff \u32f3 " ,
133+ "\uc2c5 \u2c1d \u2620 \u3617 \u96b3 F\u8605 \u20e8 \uac21 \u5934 " => "\ufba9 \u41aa \ubd83 \u840b \u2615 \u3e6e \u652d \ua8b5 \ud56b U"
134+ }
135+ params = { }
136+ body = JSON . generate ( Hash [ params_hash . sort ] )
137+ additional_headers = nil
138+ expected_date = 'Fri, 07 Dec 2012 17:18:00 -0000'
139+ expected_canon = expected_date + "\n POST\n foo.bar52.com\n /Foo/BaR2/qux\n \n 069842dc1b1158ce098fb8cbabf4695fe5b6dbbe0189293c45253b80522d6c56aaed43cfeeb541222d5a34d56f57e2b420b70856d1f09ba346418e7a5bca6397\n cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
140+ actual_date , actual_canon = @client . send ( :canonicalize ,
141+ 'PoSt' , HOST , '/Foo/BaR2/qux' , params , body , additional_headers , options : { :date => expected_date } )
142+ assert_equal ( expected_canon , actual_canon )
143+ assert_equal ( expected_date , actual_date )
144+ end
126145end
127146
128147class TestSign < TestCase
@@ -133,60 +152,62 @@ def test_hmac_sha512
133152 "\u7470 \u9314 \u901c \u9eae \u40d8 \u4201 \u82d8 \u8c70 \u1d31 \ua042 " => "\u17d9 \u0ba8 \u9358 \uaadf \ua42a \u48be \ufb96 \u6fe9 \ub7ff \u32f3 " ,
134153 "\uc2c5 \u2c1d \u2620 \u3617 \u96b3 F\u8605 \u20e8 \uac21 \u5934 " => "\ufba9 \u41aa \ubd83 \u840b \u2615 \u3e6e \u652d \ua8b5 \ud56b U"
135154 }
155+ body = ''
156+ additional_headers = nil
136157 expected_date = 'Fri, 07 Dec 2012 17:18:00 -0000'
137- expected_sig = '0508065035a03b2a1de2f453e629e791d180329e157f65df6b3e0f08299d4321e1c5c7a7c7ee6b9e5fc80d1fb6fbf3ad5eb7c44dd3b3985a02c37aca53ec3698 '
158+ expected_sig = 'de886475f5ee8cf32872a7c10869e4dce7a0038f8b0da01d903469c6240473dfd1abf98b40b34b9ad7fbc99d5df3f2279e7105fd9101c428b94faaeec5e179cf '
138159 actual_date , actual_sig = @client . send ( :sign ,
139- 'PoSt' , HOST , '/Foo/BaR2/qux' , params , : date => expected_date )
160+ 'PoSt' , HOST , '/Foo/BaR2/qux' , params , body , additional_headers , options : { : date => expected_date } )
140161 assert_equal ( expected_sig , actual_sig )
141162 assert_equal ( expected_date , actual_date )
142163 end
143164
144165end
145166
146167class MockResponse < Object
147- attr_reader :code
168+ attr_reader :code
148169
149- def initialize ( code )
150- @code = code
151- end
170+ def initialize ( code )
171+ @code = code
172+ end
152173end
153174
154175class TestRetryRequests < TestCase
155176 def setup
156- super
157- @mock_http = mock ( )
158- Net ::HTTP . expects ( :start ) . yields ( @mock_http )
177+ super
178+ @mock_http = mock ( )
179+ Net ::HTTP . expects ( :start ) . yields ( @mock_http )
159180
160- @limited_response = MockResponse . new ( '429' )
161- @ok_response = MockResponse . new ( '200' )
181+ @limited_response = MockResponse . new ( '429' )
182+ @ok_response = MockResponse . new ( '200' )
162183 end
163184
164185 def test_non_limited_response
165- @mock_http . expects ( :request ) . returns ( @ok_response )
166- @client . expects ( :sleep ) . never
167- actual_response = @client . request ( 'GET' , '/foo/bar' )
168- assert_equal ( @ok_response , actual_response )
186+ @mock_http . expects ( :request ) . returns ( @ok_response )
187+ @client . expects ( :sleep ) . never
188+ actual_response = @client . request ( 'GET' , '/foo/bar' )
189+ assert_equal ( @ok_response , actual_response )
169190 end
170191
171192 def test_single_limited_response
172- @mock_http . expects ( :request ) . twice . returns ( @limited_response , @ok_response )
173- @client . expects ( :rand ) . returns ( 0.123 )
174- @client . expects ( :sleep ) . with ( 1.123 )
175- actual_response = @client . request ( 'GET' , '/foo/bar' )
176- assert_equal ( @ok_response , actual_response )
193+ @mock_http . expects ( :request ) . twice . returns ( @limited_response , @ok_response )
194+ @client . expects ( :rand ) . returns ( 0.123 )
195+ @client . expects ( :sleep ) . with ( 1.123 )
196+ actual_response = @client . request ( 'GET' , '/foo/bar' )
197+ assert_equal ( @ok_response , actual_response )
177198 end
178199
179200 def test_all_limited_responses
180- @mock_http . expects ( :request ) . times ( 7 ) . returns ( @limited_response )
181- @client . expects ( :rand ) . times ( 6 ) . returns ( 0.123 )
182- @client . expects ( :sleep ) . with ( 1.123 )
183- @client . expects ( :sleep ) . with ( 2.123 )
184- @client . expects ( :sleep ) . with ( 4.123 )
185- @client . expects ( :sleep ) . with ( 8.123 )
186- @client . expects ( :sleep ) . with ( 16.123 )
187- @client . expects ( :sleep ) . with ( 32.123 )
188- actual_response = @client . request ( 'GET' , '/foo/bar' )
189- assert_equal ( @limited_response , actual_response )
201+ @mock_http . expects ( :request ) . times ( 7 ) . returns ( @limited_response )
202+ @client . expects ( :rand ) . times ( 6 ) . returns ( 0.123 )
203+ @client . expects ( :sleep ) . with ( 1.123 )
204+ @client . expects ( :sleep ) . with ( 2.123 )
205+ @client . expects ( :sleep ) . with ( 4.123 )
206+ @client . expects ( :sleep ) . with ( 8.123 )
207+ @client . expects ( :sleep ) . with ( 16.123 )
208+ @client . expects ( :sleep ) . with ( 32.123 )
209+ actual_response = @client . request ( 'GET' , '/foo/bar' )
210+ assert_equal ( @limited_response , actual_response )
190211 end
191212
192213end
0 commit comments