radosgw-s3 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,223 @@
1
+ # encoding: utf-8
2
+ require "test_helper"
3
+
4
+ class ObjectTest < Test::Unit::TestCase
5
+ def setup
6
+ @service = S3::Service.new(
7
+ :access_key_id => "1234",
8
+ :host => "192.168.1.248",
9
+ :secret_access_key => "1337"
10
+ )
11
+ @bucket_images = S3::Bucket.send(:new, @service, "images")
12
+ @object_lena = S3::Object.send(:new, @bucket_images, :key => "Lena.png")
13
+ @object_lena.content = "test"
14
+ @object_carmen = S3::Object.send(:new, @bucket_images, :key => "Carmen.png")
15
+ @object_mac = S3::Object.send(:new, @bucket_images, :key => "Mac.png", :cache_control => "max-age=315360000")
16
+ @object_mac.content = "test2"
17
+
18
+ @response_binary = Net::HTTPOK.new("1.1", "200", "OK")
19
+ @response_binary.stubs(:body).returns("test".respond_to?(:force_encoding) ? "test".force_encoding(Encoding::BINARY) : "test")
20
+ @response_binary["etag"] = ""
21
+ @response_binary["content-type"] = "image/png"
22
+ @response_binary["content-disposition"] = "inline"
23
+ @response_binary["content-encoding"] = nil
24
+ @response_binary["last-modified"] = Time.now.httpdate
25
+ @response_binary["content-length"] = 20
26
+ @response_binary["x-amz-meta-test"] = "metadata"
27
+
28
+ @xml_body = <<-EOXML
29
+ <?xml version="1.0" encoding="UTF-8"?>
30
+ <CopyObjectResult> <LastModified>#{Time.now.httpdate}</LastModified> <ETag>"etag"</ETag> </CopyObjectResult>
31
+ EOXML
32
+ @response_xml = Net::HTTPOK.new("1.1", "200", "OK")
33
+ @response_xml.stubs(:body).returns(@xml_body)
34
+ end
35
+
36
+ test "initializing" do
37
+ assert_raise ArgumentError do S3::Object.send(:new, nil, :key => "") end # should not allow empty key
38
+
39
+ assert_nothing_raised do
40
+ S3::Object.send(:new, nil, :key => "Lena.png")
41
+ S3::Object.send(:new, nil, :key => "Lena playboy.png")
42
+ S3::Object.send(:new, nil, :key => "Lena Söderberg.png")
43
+ S3::Object.send(:new, nil, :key => "/images/pictures/test images/Lena not full.png")
44
+ end
45
+ end
46
+
47
+ test "==" do
48
+ expected = false
49
+ actual = @object_lena == nil
50
+ assert_equal(expected, actual)
51
+ end
52
+
53
+ test "full key" do
54
+ expected = "images/Lena.png"
55
+ actual = @object_lena.full_key
56
+ assert_equal expected, actual
57
+ end
58
+
59
+ test "url" do
60
+ bucket1 = S3::Bucket.send(:new, @service, "images")
61
+
62
+ object11 = S3::Object.send(:new, bucket1, :key => "Lena.png")
63
+ expected = "http://images.s3.amazonaws.com/Lena.png"
64
+ actual = object11.url
65
+ assert_equal expected, actual
66
+
67
+ object12 = S3::Object.send(:new, bucket1, :key => "Lena Söderberg.png")
68
+ expected = "http://images.s3.amazonaws.com/Lena%20S%C3%B6derberg.png"
69
+ actual = object12.url
70
+ assert_equal expected, actual
71
+
72
+ object13 = S3::Object.send(:new, bucket1, :key => "Lena Söderberg [1].png")
73
+ expected = "http://images.s3.amazonaws.com/Lena%20S%C3%B6derberg%20%5B1%5D.png"
74
+ actual = object13.url
75
+ assert_equal expected, actual
76
+
77
+ bucket2 = S3::Bucket.send(:new, @service, "images_new")
78
+
79
+ object21 = S3::Object.send(:new, bucket2, :key => "Lena.png")
80
+ expected = "http://s3.amazonaws.com/images_new/Lena.png"
81
+ actual = object21.url
82
+ assert_equal expected, actual
83
+ end
84
+
85
+ test "cname url" do
86
+ bucket1 = S3::Bucket.send(:new, @service, "images.example.com")
87
+
88
+ object11 = S3::Object.send(:new, bucket1, :key => "Lena.png")
89
+ expected = "http://images.example.com/Lena.png"
90
+ actual = object11.cname_url
91
+ assert_equal expected, actual
92
+
93
+ object12 = S3::Object.send(:new, bucket1, :key => "Lena Söderberg.png")
94
+ expected = "http://images.example.com/Lena%20S%C3%B6derberg.png"
95
+ actual = object12.cname_url
96
+ assert_equal expected, actual
97
+
98
+ bucket2 = S3::Bucket.send(:new, @service, "images_new")
99
+
100
+ object21 = S3::Object.send(:new, bucket2, :key => "Lena.png")
101
+ expected = nil
102
+ actual = object21.cname_url
103
+ assert_equal expected, actual
104
+ end
105
+
106
+ test "destroy" do
107
+ @object_lena.expects(:object_request).with(:delete)
108
+ assert @object_lena.destroy
109
+ end
110
+
111
+ test "save" do
112
+ @object_lena.expects(:object_request).with(:put, :body=>"test", :headers=>{ :x_amz_acl=>"private", :x_amz_storage_class=>"STANDARD", :content_type=>"application/octet-stream" }).returns(@response_binary)
113
+ assert @object_lena.save
114
+ end
115
+
116
+ test "save with cache control headers" do
117
+ assert_equal "max-age=315360000", @object_mac.cache_control
118
+ @object_mac.expects(:object_request).with(:put, :body=>"test2", :headers=>{ :x_amz_acl=>"private", :x_amz_storage_class=>"STANDARD", :content_type=>"application/octet-stream", :cache_control=>"max-age=315360000" }).returns(@response_binary)
119
+ assert @object_mac.save
120
+ end
121
+
122
+ test "content and parse headers" do
123
+ @object_lena.expects(:object_request).with(:get, {}).returns(@response_binary)
124
+
125
+ expected = /test/n
126
+ actual = @object_lena.content(true)
127
+ assert_match expected, actual
128
+ assert_equal "image/png", @object_lena.content_type
129
+
130
+ assert @object_lena.content
131
+
132
+ @object_lena.expects(:object_request).with(:get, {}).returns(@response_binary)
133
+ assert @object_lena.content(true)
134
+ end
135
+
136
+ test "retrieve" do
137
+ @object_lena.expects(:object_request).with(:head, {}).returns(@response_binary)
138
+ assert @object_lena.retrieve
139
+ end
140
+
141
+ test "retrieve headers" do
142
+ @object_lena.expects(:object_request).twice.with(:head, {}).returns(@response_binary)
143
+ assert @object_lena.retrieve
144
+
145
+ meta = {"x-amz-meta-test" => ["metadata"]}
146
+ assert_equal meta, @object_lena.retrieve.metadata
147
+ end
148
+
149
+ test "retrieve dont set content" do
150
+ @object_lena.send(:remove_instance_variable, :@content)
151
+
152
+ @response_binary.stubs(:body).returns(nil)
153
+ @object_lena.expects(:object_request).with(:head, {}).returns(@response_binary)
154
+ assert @object_lena.retrieve
155
+
156
+ @object_lena.expects(:object_request).with(:get, {}).returns(@response_binary)
157
+ @response_binary.stubs(:body).returns("hello")
158
+
159
+ assert_equal "hello", @object_lena.content
160
+ end
161
+
162
+ test "exists" do
163
+ @object_lena.expects(:retrieve).returns(true)
164
+ assert @object_lena.exists?
165
+
166
+ @object_carmen.expects(:retrieve).raises(S3::Error::NoSuchKey.new(nil, nil))
167
+ assert ! @object_carmen.exists?
168
+ end
169
+
170
+ test "ACL writer" do
171
+ expected = nil
172
+ actual = @object_lena.acl
173
+ assert_equal expected, actual
174
+
175
+ assert @object_lena.acl = :public_read
176
+
177
+ expected = "public-read"
178
+ actual = @object_lena.acl
179
+ assert_equal expected, actual
180
+
181
+ assert @object_lena.acl = :private
182
+
183
+ expected = "private"
184
+ actual = @object_lena.acl
185
+ assert_equal expected, actual
186
+ end
187
+
188
+ test "storage-class writer" do
189
+ expected = nil
190
+ actual = @object_lena.storage_class
191
+ assert_equal expected, actual
192
+
193
+ assert @object_lena.storage_class = :standard
194
+
195
+ expected = "STANDARD"
196
+ actual = @object_lena.storage_class
197
+ assert_equal expected, actual
198
+
199
+ assert @object_lena.storage_class = :reduced_redundancy
200
+
201
+ expected = "REDUCED_REDUNDANCY"
202
+ actual = @object_lena.storage_class
203
+ assert_equal expected, actual
204
+ end
205
+
206
+ test "replace" do
207
+ @bucket_images.expects(:bucket_request).with(:put, :path => "Lena-copy.png", :headers => { :x_amz_acl => "private", :content_type => "application/octet-stream", :x_amz_copy_source => "images/Lena.png", :x_amz_metadata_directive => "REPLACE" }).returns(@response_xml)
208
+
209
+ new_object = @object_lena.copy(:key => "Lena-copy.png")
210
+
211
+ assert_equal "Lena-copy.png", new_object.key
212
+ assert_equal "Lena.png", @object_lena.key
213
+ end
214
+
215
+ test "copy" do
216
+ @bucket_images.expects(:bucket_request).with(:put, :path => "Lena-copy.png", :headers => { :x_amz_acl => "private", :content_type => "application/octet-stream", :x_amz_copy_source => "images/Lena.png", :x_amz_metadata_directive => "COPY" }).returns(@response_xml)
217
+
218
+ new_object = @object_lena.copy(:key => "Lena-copy.png", :replace => false)
219
+
220
+ assert_equal "Lena-copy.png", new_object.key
221
+ assert_equal "Lena.png", @object_lena.key
222
+ end
223
+ end
@@ -0,0 +1,133 @@
1
+ require "test_helper"
2
+
3
+ class ServiceTest < Test::Unit::TestCase
4
+ def setup
5
+ @buckets_list_body = <<-EOBuckets
6
+ <?xml version="1.0" encoding="UTF-8"?>\n<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>123u1odhkhfoadf</ID> <DisplayName>JohnDoe</DisplayName> </Owner> <Buckets> <Bucket> <Name>data.example.com</Name> <CreationDate>2009-07-02T11:56:58.000Z</CreationDate> </Bucket> <Bucket> <Name>images</Name> <CreationDate>2009-06-05T12:26:33.000Z</CreationDate> </Bucket> </Buckets> </ListAllMyBucketsResult>
7
+ EOBuckets
8
+
9
+ @bucket_not_exists = <<-EOBucketNoexists
10
+ <?xml version="1.0" encoding="UTF-8"?>\n<Error> <Code>NoSuchBucket</Code> <Message>The specified bucket does not exists</Message> <BucketName>data2.example.com</BucketName> <RequestId>8D7519AAE74E9E99</RequestId> <HostId>DvKnnNSMnPHd1oXukyRaFNv8Lg/bpwhuUtY8Kj7eDLbaIrIT8JebSnHwi89AK1P+</HostId> </Error>
11
+ EOBucketNoexists
12
+
13
+ @bucket_exists = <<-EOBucketexists
14
+ <?xml version="1.0" encoding="UTF-8"?>\n<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>data.synergypeople.net</Name> <Prefix></Prefix> <Marker></Marker> <MaxKeys>1000</MaxKeys> <IsTruncated>false</IsTruncated> </ListBucketResult>
15
+ EOBucketexists
16
+
17
+ @service_empty_buckets_list = S3::Service.new(
18
+ :access_key_id => "12345678901234567890",
19
+ :host => "192.168.1.248",
20
+ :secret_access_key => "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDF"
21
+ )
22
+ @response_empty_buckets_list = Net::HTTPOK.new("1.1", "200", "OK")
23
+ @service_empty_buckets_list.stubs(:service_request).returns(@response_empty_buckets_list)
24
+ @response_empty_buckets_list.stubs(:body).returns(@buckets_empty_list_body)
25
+
26
+ @service_buckets_list = S3::Service.new(
27
+ :access_key_id => "12345678901234567890",
28
+ :host => "192.168.1.248",
29
+ :secret_access_key => "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDF"
30
+ )
31
+ @response_buckets_list = Net::HTTPOK.new("1.1", "200", "OK")
32
+ @service_buckets_list.stubs(:service_request).returns(@response_buckets_list)
33
+ @response_buckets_list.stubs(:body).returns(@buckets_list_body)
34
+
35
+ @service_bucket_exists = S3::Service.new(
36
+ :access_key_id => "12345678901234567890",
37
+ :host => "192.168.1.248",
38
+ :secret_access_key => "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDF"
39
+ )
40
+ @response_bucket_exists = Net::HTTPNotFound.new("1.1", "200", "OK")
41
+ @service_bucket_exists.stubs(:service_request).returns(@response_bucket_exists)
42
+ @response_bucket_exists.stubs(:body).returns(@bucket_exists)
43
+
44
+ @service_bucket_not_exists = S3::Service.new(
45
+ :access_key_id => "12345678901234567890",
46
+ :host => "192.168.1.248",
47
+ :secret_access_key => "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDF"
48
+ )
49
+ @response_bucket_not_exists = Net::HTTPNotFound.new("1.1", "404", "Not Found")
50
+ @service_bucket_not_exists.stubs(:service_request).raises(S3::Error::NoSuchBucket.new(404, @response_bucket_not_exists))
51
+ @response_bucket_not_exists.stubs(:body).returns(@bucket_not_exists)
52
+
53
+ @buckets_empty_list = []
54
+ @buckets_empty_list_body = <<-EOEmptyBuckets
55
+ <?xml version="1.0" encoding="UTF-8"?>\n<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>123u1odhkhfoadf</ID> <DisplayName>JohnDoe</DisplayName> </Owner> <Buckets> </Buckets> </ListAllMyBucketsResult>
56
+ EOEmptyBuckets
57
+
58
+ @buckets_list = [
59
+ S3::Bucket.send(:new, @service_buckets_list, "data.example.com"),
60
+ S3::Bucket.send(:new, @service_buckets_list, "images")
61
+ ]
62
+ end
63
+
64
+ test "no :access_key_id" do
65
+ assert_raise ArgumentError do
66
+ @service_bucket_exists = S3::Service.new(
67
+ :access_key_id => nil,
68
+ :host => "192.168.1.248",
69
+ :secret_access_key => "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDF"
70
+ )
71
+ end
72
+ end
73
+
74
+ test "no :secret_access_key" do
75
+ assert_raise ArgumentError do
76
+ @service_bucket_exists = S3::Service.new(
77
+ :access_key_id => "12345678901234567890",
78
+ :host => "192.168.1.248",
79
+ :secret_access_key => nil
80
+ )
81
+ end
82
+ end
83
+
84
+ test "buckets and parse buckets empty" do
85
+ expected = @buckets_empty_list
86
+ actual = @service_empty_buckets_list.buckets
87
+ assert_equal expected.length, actual.length
88
+ assert_equal expected, actual
89
+ end
90
+
91
+ test "buckets and parse buckets" do
92
+ expected = @buckets_list
93
+ # ugly hack
94
+ actual = @service_buckets_list.buckets.map { |obj| obj }
95
+ assert_equal expected, actual
96
+ end
97
+
98
+ test "buckets build" do
99
+ @service_empty_buckets_list.stubs(:service_request)
100
+
101
+ expected = "bucket_name"
102
+ actual = @service_empty_buckets_list.buckets.build("bucket_name")
103
+ assert_kind_of S3::Bucket, actual
104
+ assert_equal expected, actual.name
105
+ end
106
+
107
+ test "buckets find first" do
108
+ assert_nothing_raised do
109
+ actual = @service_buckets_list.buckets.find_first("data.example.com")
110
+ assert_equal "data.example.com", actual.name
111
+ end
112
+ end
113
+
114
+ test "buckets find first return nil" do
115
+ assert_equal nil, @service_bucket_not_exists.buckets.find_first("data2.example.com")
116
+ end
117
+
118
+ test "buckets find all on empty list" do
119
+ assert_nothing_raised do
120
+ expected = @buckets_empty_list
121
+ actual = @service_empty_buckets_list.buckets.find_all
122
+ assert_equal expected, actual
123
+ end
124
+ end
125
+
126
+ test "buckets find all" do
127
+ assert_nothing_raised do
128
+ expected = @buckets_list
129
+ actual = @service_buckets_list.buckets.find_all
130
+ assert_equal expected, actual
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,228 @@
1
+ require "test_helper"
2
+
3
+ class SignatureTest < Test::Unit::TestCase
4
+ # from http://docs.amazonwebservices.com/AmazonS3/latest/RESTAuthentication.html
5
+ test "signature for object get" do
6
+ request = Net::HTTP::Get.new("/photos/puppy.jpg")
7
+ request["host"] = "johnsmith.s3.amazonaws.com"
8
+ request["date"] = "Tue, 27 Mar 2007 19:36:42 +0000"
9
+
10
+ actual = S3::Signature.generate(
11
+ :host => request["host"],
12
+ :request => request,
13
+ :access_key_id => "0PN5J17HBGZHT7JJ3X82",
14
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o"
15
+ )
16
+ expected = "AWS 0PN5J17HBGZHT7JJ3X82:xXjDGYUmKxnwqr5KXNPGldn5LbA="
17
+ assert_equal expected, actual
18
+ end
19
+
20
+ test "signature for object put" do
21
+ request = Net::HTTP::Put.new("/photos/puppy.jpg");
22
+ request["content-type"] = "image/jpeg"
23
+ request["content-length"] = "94328"
24
+ request["host"] = "johnsmith.s3.amazonaws.com"
25
+ request["date"] = "Tue, 27 Mar 2007 21:15:45 +0000"
26
+
27
+ actual = S3::Signature.generate(
28
+ :host => request["host"],
29
+ :request => request,
30
+ :access_key_id => "0PN5J17HBGZHT7JJ3X82",
31
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o"
32
+ )
33
+ expected = "AWS 0PN5J17HBGZHT7JJ3X82:hcicpDDvL9SsO6AkvxqmIWkmOuQ="
34
+ assert_equal expected, actual
35
+ end
36
+
37
+ test "signature for list" do
38
+ request = Net::HTTP::Get.new("/?prefix=photos&max-keys=50&marker=puppy");
39
+ request["user-agent"] = "Mozilla/5.0"
40
+ request["host"] = "johnsmith.s3.amazonaws.com"
41
+ request["date"] = "Tue, 27 Mar 2007 19:42:41 +0000"
42
+
43
+ actual = S3::Signature.generate(
44
+ :host => request["host"],
45
+ :request => request,
46
+ :access_key_id => "0PN5J17HBGZHT7JJ3X82",
47
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o"
48
+ )
49
+ expected = "AWS 0PN5J17HBGZHT7JJ3X82:jsRt/rhG+Vtp88HrYL706QhE4w4="
50
+ assert_equal expected, actual
51
+ end
52
+
53
+ test "signature for fetch" do
54
+ request = Net::HTTP::Get.new("/?acl");
55
+ request["host"] = "johnsmith.s3.amazonaws.com"
56
+ request["date"] = "Tue, 27 Mar 2007 19:44:46 +0000"
57
+
58
+ actual = S3::Signature.generate(
59
+ :host => request["host"],
60
+ :request => request,
61
+ :access_key_id => "0PN5J17HBGZHT7JJ3X82",
62
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o"
63
+ )
64
+ expected = "AWS 0PN5J17HBGZHT7JJ3X82:thdUi9VAkzhkniLj96JIrOPGi0g="
65
+ assert_equal expected, actual
66
+ end
67
+
68
+ test "signature for delete" do
69
+ request = Net::HTTP::Delete.new("/johnsmith/photos/puppy.jpg");
70
+ request["user-agent"] = "dotnet"
71
+ request["host"] = "s3.amazonaws.com"
72
+ request["date"] = "Tue, 27 Mar 2007 21:20:27 +0000"
73
+ request["x-amz-date"] = "Tue, 27 Mar 2007 21:20:26 +0000"
74
+
75
+ actual = S3::Signature.generate(
76
+ :host => request["host"],
77
+ :request => request,
78
+ :access_key_id => "0PN5J17HBGZHT7JJ3X82",
79
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o"
80
+ )
81
+ expected = "AWS 0PN5J17HBGZHT7JJ3X82:k3nL7gH3+PadhTEVn5Ip83xlYzk="
82
+ assert_equal expected, actual
83
+ end
84
+
85
+ test "signature for upload" do
86
+ request = Net::HTTP::Put.new("/db-backup.dat.gz");
87
+ request["user-agent"] = "curl/7.15.5"
88
+ request["host"] = "static.johnsmith.net:8080"
89
+ request["date"] = "Tue, 27 Mar 2007 21:06:08 +0000"
90
+ request["x-amz-acl"] = "public-read"
91
+ request["content-type"] = "application/x-download"
92
+ request["content-md5"] = "4gJE4saaMU4BqNR0kLY+lw=="
93
+ # FIXME: Net::HTTP doesn't allow to have multiple headers with the same name
94
+ # request.add_field add additional spaces (breaks signature)
95
+ #request["x-amz-meta-reviewedby"] = "joe@johnsmith.net"
96
+ #request["x-amz-meta-reviewedby"] = "jane@johnsmith.net"
97
+ request["x-amz-meta-reviewedby"] = "joe@johnsmith.net,jane@johnsmith.net"
98
+ request["x-amz-meta-filechecksum"] = "0x02661779"
99
+ request["x-amz-meta-checksumalgorithm"] = "crc32"
100
+ request["content-disposition"] = "attachment; filename=database.dat"
101
+ request["content-encoding"] = "gzip"
102
+ request["content-length"] = "5913339"
103
+
104
+ actual = S3::Signature.generate(
105
+ :host => "static.johnsmith.net",
106
+ :request => request,
107
+ :access_key_id => "0PN5J17HBGZHT7JJ3X82",
108
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o"
109
+ )
110
+ expected = "AWS 0PN5J17HBGZHT7JJ3X82:C0FlOtU8Ylb9KDTpZqYkZPX91iI="
111
+ assert_equal expected, actual
112
+ end
113
+
114
+ test "signature for list all my buckets" do
115
+ request = Net::HTTP::Get.new("/");
116
+ request["host"] = "s3.amazonaws.com"
117
+ request["date"] = "Wed, 28 Mar 2007 01:29:59 +0000"
118
+
119
+ actual = S3::Signature.generate(
120
+ :host => request["host"],
121
+ :request => request,
122
+ :access_key_id => "0PN5J17HBGZHT7JJ3X82",
123
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o"
124
+ )
125
+ expected = "AWS 0PN5J17HBGZHT7JJ3X82:Db+gepJSUbZKwpx1FR0DLtEYoZA="
126
+ assert_equal expected, actual
127
+ end
128
+
129
+ test "signature for unicode keys" do
130
+ request = Net::HTTP::Get.new("/dictionary/fran%C3%A7ais/pr%c3%a9f%c3%a8re");
131
+ request["host"] = "s3.amazonaws.com"
132
+ request["date"] = "Wed, 28 Mar 2007 01:49:49 +0000"
133
+
134
+ actual = S3::Signature.generate(
135
+ :host => request["host"],
136
+ :request => request,
137
+ :access_key_id => "0PN5J17HBGZHT7JJ3X82",
138
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o"
139
+ )
140
+ expected = "AWS 0PN5J17HBGZHT7JJ3X82:dxhSBHoI6eVSPcXJqEghlUzZMnY="
141
+ assert_equal expected, actual
142
+ end
143
+
144
+ test "temporary signature for object get" do
145
+ actual = S3::Signature.generate_temporary_url_signature(
146
+ :bucket => "johnsmith",
147
+ :resource => "photos/puppy.jpg",
148
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o",
149
+ :expires_at => 1175046589
150
+ )
151
+ expected = "gs6xNznrLJ4Bd%2B1y9pcy2HOSVeg%3D"
152
+ assert_equal expected, actual
153
+ end
154
+
155
+ test "temporary signature for object get with non-unreserved URI characters" do
156
+ actual = S3::Signature.generate_temporary_url_signature(
157
+ :bucket => "johnsmith",
158
+ :resource => "photos/puppy[1].jpg",
159
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o",
160
+ :expires_at => 1175046589
161
+ )
162
+ expected = "gwCM0mVb9IrEPiUf8iaml6EISPc%3D"
163
+ assert_equal expected, actual
164
+ end
165
+
166
+ test "temporary signature for object post" do
167
+ actual = S3::Signature.generate_temporary_url_signature(
168
+ :bucket => "johnsmith",
169
+ :resource => "photos/puppy.jpg",
170
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o",
171
+ :expires_at => 1175046589,
172
+ :method => :post
173
+ )
174
+ expected = "duIzwO2KTEMIlbSYbFFS86Wj0LI%3D"
175
+ assert_equal expected, actual
176
+ end
177
+
178
+ test "temporary signature for object put with headers" do
179
+ actual = S3::Signature.generate_temporary_url_signature(
180
+ :bucket => "johnsmith",
181
+ :resource => "photos/puppy.jpg",
182
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o",
183
+ :expires_at => 1175046589,
184
+ :method => :put,
185
+ :headers => {'x-amz-acl' => 'public-read'}
186
+ )
187
+ expected = "SDMxjIkOKIVR47nWfJ57UNPXxFM%3D"
188
+ assert_equal expected, actual
189
+ end
190
+
191
+ test "temporary signature for object delete" do
192
+ actual = S3::Signature.generate_temporary_url_signature(
193
+ :bucket => "johnsmith",
194
+ :resource => "photos/puppy.jpg",
195
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o",
196
+ :expires_at => 1175046589,
197
+ :method => :delete
198
+ )
199
+ expected = "5Vg7A4HxgS6tVCYzBx%2BkMR8sztY%3D"
200
+ assert_equal expected, actual
201
+ end
202
+
203
+ test "temporary url for object get with bucket in the hostname" do
204
+ actual = S3::Signature.generate_temporary_url(
205
+ :bucket => "johnsmith",
206
+ :resource => "photos/puppy.jpg",
207
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o",
208
+ :expires_at => 1175046589,
209
+ :add_bucket_to_host => true
210
+ )
211
+ expected = "http://johnsmith.s3.amazonaws.com/photos/puppy.jpg?AWSAccessKeyId=&Expires=1175046589&Signature=gs6xNznrLJ4Bd%2B1y9pcy2HOSVeg%3D"
212
+ assert_equal expected, actual
213
+ end
214
+
215
+ test "temporary url for object put with headers" do
216
+ actual = S3::Signature.generate_temporary_url(
217
+ :bucket => "johnsmith",
218
+ :resource => "photos/puppy.jpg",
219
+ :access_key => '0PN5J17HBGZHT7JJ3X82',
220
+ :secret_access_key => "uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o",
221
+ :expires_at => 1175046589,
222
+ :method => :put,
223
+ :headers => {'x-amz-acl' => 'public-read'}
224
+ )
225
+ expected = "http://s3.amazonaws.com/johnsmith/photos/puppy.jpg?AWSAccessKeyId=0PN5J17HBGZHT7JJ3X82&Expires=1175046589&Signature=SDMxjIkOKIVR47nWfJ57UNPXxFM%3D"
226
+ assert_equal expected, actual
227
+ end
228
+ end