s33r 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/../s3_test_constants'
2
+
3
+ context 'S3 sync methods' do
4
+ setup do
5
+ @base_dir = File.dirname(__FILE__)
6
+ @text_filename = @base_dir + '/../files/textfile.txt'
7
+ @graphic_filename = @base_dir + '/../files/wave.jpg'
8
+ end
9
+
10
+ specify 'should return MD5 checksum for text files' do
11
+ md5sum(@text_filename).should.equal('bbf560d44f092d22a30d3a562436ad8c')
12
+ end
13
+
14
+ specify 'should return MD5 checksum for graphic files' do
15
+ md5sum(@graphic_filename).should.equal('80b669f252257eedd8a2606cb1a0df6a')
16
+ end
17
+
18
+ specify 'should be able to map a directory structure to S3 bucket keys' do
19
+ fix
20
+ end
21
+
22
+ specify 'should return an array of local files to put to S3 based on differences between MD5 checksums' do
23
+ fix
24
+ end
25
+
26
+ specify 'should convert S3 bucket keys into a "virtual" directory and file structure' do
27
+ fix
28
+ end
29
+ end
@@ -0,0 +1,22 @@
1
+ base = File.dirname(__FILE__)
2
+ require File.join(base, '../s3_test_constants')
3
+
4
+ context 'LibXML extensions' do
5
+ setup do
6
+ @with_xml_str = File.open(File.join(base, '../files/s3_object.xml')).read
7
+ @doc = XML.get_xml_doc(@with_xml_str)
8
+ end
9
+
10
+ specify 'should make it easy to get an XML::Document from an XML string' do
11
+ @doc.should_be_an_instance_of XML::Document
12
+ clean_xml(@doc.to_s).should.equal clean_xml(@with_xml_str)
13
+ end
14
+
15
+ specify 'should return content of the first node matching a path' do
16
+ @doc.xget('//Size').should.equal '14'
17
+ end
18
+
19
+ specify 'should return nil if no matching path' do
20
+ @doc.xget('//madeup').should.equal nil
21
+ end
22
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../s3_test_constants'
2
+ require_gem 'FakeWeb'
3
+
4
+ class TestClient < Test::Unit::TestCase
5
+ def setup
6
+ @client = Client.new(S3Testing::ACCESS_KEY, S3Testing::SECRET_ACCESS_KEY, :ssl => false)
7
+ @client2 = Client.new(S3Testing::ACCESS_KEY, S3Testing::SECRET_ACCESS_KEY)
8
+ @bucket = 'testingtesting'
9
+ @url = url_join('http://', HOST, @bucket)
10
+ FakeWeb.register_uri(@url, :status => 200)
11
+ end
12
+
13
+ def test_returns_ssl_setting_correctly
14
+ assert !(@client.use_ssl?)
15
+ assert @client2.use_ssl?
16
+ end
17
+
18
+ def test_catches_max_keys_too_high_in_bucket_listing_request
19
+ assert_raise(S3Exception::BucketListingMaxKeysError) do
20
+ @client.list_bucket('duff', :max_keys => (S3::BUCKET_LIST_MAX_MAX_KEYS + 1))
21
+ end
22
+ end
23
+
24
+ def test_fetches_bucket_listing_ok
25
+ resp = @client.list_bucket(@bucket)
26
+ assert resp.ok?
27
+ end
28
+
29
+ def test_recursively_put_files_into_bucket_with_paths_as_keys
30
+ flunk 'Test conversion of paths to keys'
31
+ end
32
+
33
+ def test_has_attached_bucket_listing_object_for_get_on_bucket
34
+ flunk 'Check that responses to list_bucket have an attached BucketListing instance'
35
+ end
36
+
37
+ def test_keys_dont_have_leading_slashes_stripped_when_putting_resources
38
+ flunk 'Keys with leading slashes should not have the slash stripped'
39
+ end
40
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/../s3_test_constants'
2
+ require_gem 'FakeWeb'
3
+
4
+ class TestNamedBucket < Test::Unit::TestCase
5
+ def test_should_wrap_bucket_listing
6
+ flunk 'Keep a copy of the current bucket listing inside as a property'
7
+ end
8
+
9
+ def test_should_enable_easy_updates_on_bucket_listing
10
+ flunk 'Enable prefix, marker etc. to be reset from NamedBucket and refresh wrapped bucket listing object'
11
+ end
12
+ end
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Name>testingtesting</Name><Prefix/><Marker/><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated><Contents><Key>/home/ell/dir1/four.txt</Key><LastModified>2006-08-19T22:53:29.000Z</LastModified><ETag>"24ce59274b89287b3960c184153ac24b"</ETag><Size>14</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir1/three.txt</Key><LastModified>2006-08-19T22:53:28.000Z</LastModified><ETag>"d01f8d7ad25e962f59f661126e4a5057"</ETag><Size>15</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/five.txt</Key><LastModified>2006-08-19T22:53:29.000Z</LastModified><ETag>"495f6ea4d6c70f64f767b08818c876dd"</ETag><Size>14</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/six.txt</Key><LastModified>2006-08-19T22:53:30.000Z</LastModified><ETag>"1d7407ec32f45f4ac15b121a45932059"</ETag><Size>13</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/subdir21/seven.txt</Key><LastModified>2006-08-19T22:53:31.000Z</LastModified><ETag>"b6bc8a2efb68c39c1e06469d32bc66f2"</ETag><Size>15</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/subdir22/eight.txt</Key><LastModified>2006-08-19T22:53:31.000Z</LastModified><ETag>"61fa424274f4caacbc7d4b6fd575ce1a"</ETag><Size>15</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/subdir22/subdir221/nine.txt</Key><LastModified>2006-08-19T22:53:32.000Z</LastModified><ETag>"d3dc4897b611eb4b0a2cd7bb99eb2f50"</ETag><Size>14</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/subdir22/subdir221/ten.txt</Key><LastModified>2006-08-19T22:53:32.000Z</LastModified><ETag>"5ecc5853945efc6448d17ea80d2aa4c0"</ETag><Size>13</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/one.txt</Key><LastModified>2006-08-19T22:53:27.000Z</LastModified><ETag>"420f7bf33402d3e6715d623bdac0dbcc"</ETag><Size>13</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/two.txt</Key><LastModified>2006-08-19T22:53:27.000Z</LastModified><ETag>"3be782e5229216c508fcb3be5fc8505d"</ETag><Size>13</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents></ListBucketResult>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Name>testing2</Name><Prefix>/home/ell/</Prefix><Marker></Marker><MaxKeys>100</MaxKeys><Delimiter>/</Delimiter><IsTruncated>false</IsTruncated><Contents><Key>/home/ell/one.txt</Key><LastModified>2006-08-19T22:53:27.000Z</LastModified><ETag>"420f7bf33402d3e6715d623bdac0dbcc"</ETag><Size>13</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/two.txt</Key><LastModified>2006-08-19T22:53:27.000Z</LastModified><ETag>"3be782e5229216c508fcb3be5fc8505d"</ETag><Size>13</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><CommonPrefixes><Prefix>/home/ell/dir1/</Prefix></CommonPrefixes><CommonPrefixes><Prefix>/home/ell/dir2/</Prefix></CommonPrefixes></ListBucketResult>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
3
+ <Name>testing3</Name>
4
+ <Prefix></Prefix>
5
+ <Marker></Marker>
6
+ <MaxKeys>100</MaxKeys>
7
+ <IsTruncated>false</IsTruncated>
8
+ </ListBucketResult>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><ListBucketResult xmlns="http:testing</Name><Prefix/><Marker/><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated><Contents><Key>/home/ell/dir1/four.txt</Key><LastModified>2006-08-19T22:53:29.000Z</LastModified><ETag>"24ce59274b89287b3960c184153ac24b"</ETag><Size>14</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir1/three.txt</Key><LastModified>2006-08-19T22:53:28.000Z</LastModified><ETag>"d01f8d7ad25e962f59f661126e4a5057"</ETag><Size>15</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/five.txt</Key><LastModified>2006-08-19T22:53:29.000Z</LastModified><ETag>"495f6ea4d6c70f64f767b08818c876dd"</ETag><Size>14</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/six.txt</Key><LastModified>2006-08-19T22:53:30.000Z</LastModified><ETag>"1d7407ec32f45f4ac15b121a45932059"</ETag><Size>13</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/subdir21/seven.txt</Key><LastModified>2006-08-19T22:53:31.000Z</LastModified><ETag>"b6bc8a2efb68c39c1e06469d32bc66f2"</ETag><Size>15</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/subdir22/eight.txt</Key><LastModified>2006-08-19T22:53:31.000Z</LastModified><ETag>"61fa424274f4caacbc7d4b6fd575ce1a"</ETag><Size>15</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/subdir22/subdir221/nine.txt</Key><LastModified>2006-08-19T22:53:32.000Z</LastModified><ETag>"d3dc4897b611eb4b0a2cd7bb99eb2f50"</ETag><Size>14</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/dir2/subdir22/subdir221/ten.txt</Key><LastModified>2006-08-19T22:53:32.000Z</LastModified><ETag>"5ecc5853945efc6448d17ea80d2aa4c0"</ETag><Size>13</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/one.txt</Key><LastModified>2006-08-19T22:53:27.000Z</LastModified><ETag>"420f7bf33402d3e6715d623bdac0dbcc"</ETag><Size>13</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>/home/ell/two.txt</Key><LastModified>2006-08-19T22:53:27.000Z</LastModified><ETag>"3be782e5229216c508fcb3be5fc8505d"</ETag><Size>13</Size><Owner><ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID><DisplayName>elliotsmith3</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents></ListBucketResult>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Contents>
3
+ <Key>/home/ell/dir1/four.txt</Key>
4
+ <LastModified>2006-08-19T22:53:29.000Z</LastModified>
5
+ <ETag>"24ce59274b89287b3960c184153ac24b"</ETag>
6
+ <Size>14</Size>
7
+ <Owner>
8
+ <ID>56efddfead5aa65da942f156fb2b294f44d78fd932d701331edc5fba19620fd4</ID>
9
+ <DisplayName>elliotsmith3</DisplayName>
10
+ </Owner>
11
+ <StorageClass>STANDARD</StorageClass>
12
+ </Contents>
@@ -0,0 +1,10 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/switchtower.rake, and they will automatically be available to Rake.
3
+
4
+ require(File.join(File.dirname(__FILE__), 'config', 'boot'))
5
+
6
+ require 'rake'
7
+ require 'rake/testtask'
8
+ require 'rake/rdoctask'
9
+
10
+ require 'tasks/rails'
Binary file
@@ -0,0 +1,25 @@
1
+ # loaded by all test classes
2
+ require 'rubygems'
3
+ require_gem 'rspec'
4
+
5
+ require File.dirname(__FILE__) + '/../lib/s33r'
6
+ include S3
7
+ include S3::Sync
8
+
9
+ # set up some constants
10
+ module S3Testing
11
+ ACCESS_KEY = '44CF9590006BF252F707'
12
+ SECRET_ACCESS_KEY = 'OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV'
13
+ end
14
+
15
+ # convenience for highlighting todos
16
+ def fix
17
+ fail 'todo'
18
+ end
19
+
20
+ # clean newlines and tabs from XML to make comparisons easier
21
+ def clean_xml(xml_str)
22
+ xml_str.gsub!(/\t/, '')
23
+ xml_str.gsub!(/\n/, '')
24
+ xml_str
25
+ end
@@ -0,0 +1,41 @@
1
+ # for setting up test bucket, so can gather responses from the real S3
2
+ require 'yaml'
3
+ require File.dirname(__FILE__) + '/../lib/s33r.rb'
4
+
5
+ config_file = '/home/ell/.s33r'
6
+
7
+ options = YAML::load_file(config_file)
8
+ access_key = options['access_key']
9
+ secret_key = options['secret_key']
10
+
11
+ bucket = 'elliotsmith-testing'
12
+
13
+ def bucketeer(client, bucket)
14
+ lambda do |key, text|
15
+ client.put_text bucket, '/home/ell/' + key, text
16
+ end
17
+ end
18
+
19
+ S3::Client.new(access_key, secret_key) do |client|
20
+
21
+ if !client.bucket_exists?(bucket)
22
+ client.create_bucket(bucket)
23
+
24
+ b = bucketeer(client, bucket)
25
+ b.call 'one.txt', 'one text file'
26
+ b.call 'two.txt', 'two text file'
27
+ b.call 'dir1/three.txt', 'three text file'
28
+ b.call 'dir1/four.txt', 'four text file'
29
+ b.call 'dir2/five.txt', 'five text file'
30
+ b.call 'dir2/six.txt', 'six text file'
31
+ b.call 'dir2/subdir21/seven.txt', 'seven text file'
32
+ b.call 'dir2/subdir22/eight.txt', 'eight text file'
33
+ b.call 'dir2/subdir22/subdir221/nine.txt', 'nine text file'
34
+ b.call 'dir2/subdir22/subdir221/ten.txt', 'ten text file'
35
+
36
+ end
37
+
38
+ # p client.list_bucket(bucket, :prefix => '/home/ell/dir1').body
39
+ # p client.list_bucket(bucket, :marker => '/home/ell/dir2/six.txt').body
40
+ p client.list_bucket(bucket).body
41
+ end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.11
2
+ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: s33r
5
5
  version: !ruby/object:Gem::Version
6
- version: "0.1"
7
- date: 2006-07-25 00:00:00 +01:00
6
+ version: "0.2"
7
+ date: 2006-08-23 00:00:00 +01:00
8
8
  summary: A library for accessing Amazon S3
9
9
  require_paths:
10
10
  - lib
@@ -25,6 +25,7 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
25
25
  platform: ruby
26
26
  signing_key:
27
27
  cert_chain:
28
+ post_install_message:
28
29
  authors:
29
30
  - Elliot Smith
30
31
  files:
@@ -32,21 +33,37 @@ files:
32
33
  - bin/config.yml
33
34
  - lib/s33r
34
35
  - lib/s33r.rb
35
- - lib/s33r/external
36
+ - lib/s33r/sync.rb
36
37
  - lib/s33r/client.rb
37
- - lib/s33r/list_bucket_result.rb
38
+ - lib/s33r/mimetypes.rb
38
39
  - lib/s33r/net_http_overrides.rb
40
+ - lib/s33r/bucket_listing.rb
39
41
  - lib/s33r/s3_exception.rb
40
42
  - lib/s33r/core.rb
41
43
  - lib/s33r/named_bucket.rb
42
- - lib/s33r/external/mimetypes.rb
43
- - test/spec
44
- - test/spec/spec_core.rb
44
+ - lib/s33r/libxml_extensions.rb
45
+ - test/files
46
+ - test/test_bucket_setup.rb
47
+ - test/s3_test_constants.rb
48
+ - test/cases
49
+ - test/files/wave.jpg
50
+ - test/files/textfile.txt
51
+ - test/files/bucket_listing.xml
52
+ - test/files/s3_object.xml
53
+ - test/files/bucket_listing_broken.xml
54
+ - test/files/bucket_listing2.xml
55
+ - test/files/bucket_listing3.xml
56
+ - test/cases/spec_core.rb
57
+ - test/cases/spec_sync.rb
58
+ - test/cases/unit_client.rb
59
+ - test/cases/spec_bucket_listing.rb
60
+ - test/cases/unit_named_bucket.rb
61
+ - test/cases/spec_xml.rb
45
62
  - LICENSE.txt
46
63
  - README.txt
47
64
  - MIT-LICENSE
48
- test_files:
49
- - test/spec/spec_core.rb
65
+ test_files: []
66
+
50
67
  rdoc_options: []
51
68
 
52
69
  extra_rdoc_files: []
@@ -1 +0,0 @@
1
- # TODO: parser to provide a tree representation of keys in a bucket
@@ -1,87 +0,0 @@
1
- require 'rubygems'
2
- require_gem 'rspec'
3
-
4
- require File.dirname(__FILE__) + '/../../lib/s33r.rb'
5
- include S3
6
-
7
- context 'S3 module' do
8
-
9
- setup do
10
- @for_request_method = 'PUT'
11
- @for_request_path = "/quotes/nelson"
12
- @for_request_headers = {
13
- "Content-Md5" => "c8fdb181845a4ca6b8fec737b3581d76",
14
- "Content-Type" => "text/html",
15
- "Date" => "Thu, 17 Nov 2005 18:49:58 GMT",
16
- "X-Amz-Meta-Author" => "foo@bar.com",
17
- "X-Amz-Magic" => "abracadabra"
18
- }
19
- @with_access_key = '44CF9590006BF252F707'
20
- @with_secret_access_key = 'OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV'
21
-
22
- @for_incomplete_headers = @for_request_headers.clone.delete_if do |key,value|
23
- 'Content-Type' == key or 'Date' == key
24
- end
25
-
26
- @correct_canonical_string = "PUT\nc8fdb181845a4ca6b8fec737b3581d76\n" +
27
- "text/html\nThu, 17 Nov 2005 18:49:58 GMT\nx-amz-magic:abracadabra\n" +
28
- "x-amz-meta-author:foo@bar.com\n/quotes/nelson"
29
- @correct_signature = "jZNOcbfWmD/A/f3hSvVzXZjM2HU="
30
- @correct_auth_header = "AWS #{@with_access_key}:#{@correct_signature}"
31
- end
32
-
33
- specify 'should generate correct canonical strings' do
34
- generate_canonical_string(@for_request_method, @for_request_path,
35
- @for_request_headers).should.equal @correct_canonical_string
36
- end
37
-
38
- specify 'should generate correct signatures' do
39
- generate_signature(@with_secret_access_key,
40
- @correct_canonical_string).should.equal @correct_signature
41
- end
42
-
43
- specify 'should generate correct auth headers' do
44
- generate_auth_header_value(@for_request_method, @for_request_path, @for_request_headers,
45
- @with_access_key, @with_secret_access_key).should.equal @correct_auth_header
46
- end
47
-
48
- specify 'should not generate auth header if bad HTTP method passed' do
49
- lambda { generate_auth_header_value('duff', nil, nil, nil, nil) }.should.raise
50
- S3Exception::MethodNotAvailable
51
- end
52
-
53
- specify 'should not generate auth header if required headers missing' do
54
- lambda { generate_auth_header_value('PUT', '/', @for_incomplete_headers,
55
- nil, nil) }.should.raise S3Exception::MissingRequiredHeaders
56
- end
57
-
58
- specify 'when generating auth header, should allow addition of Date and Content-Type headers' do
59
- now = Time.now
60
-
61
- fixed_headers = add_default_headers(@for_incomplete_headers, :date => now,
62
- :content_type => 'text/html')
63
-
64
- fixed_headers['Date'].should.equal now.httpdate
65
- fixed_headers['Content-Type'].should.equal 'text/html'
66
- end
67
-
68
- specify 'should not generate canned ACL header if invalid canned ACL supplied' do
69
- lambda { canned_acl_header('duff') }.should.raise
70
- S3Exception::UnsupportedCannedACL
71
- end
72
-
73
- specify 'should correctly add canned ACL headers' do
74
- new_headers = canned_acl_header('private', { 'Content-Type' => 'text/html' })
75
- new_headers.should.have(2).keys
76
- new_headers.keys.should.include 'Content-Type'
77
- new_headers.keys.should.include 'x-amz-acl'
78
- new_headers['x-amz-acl'].should.equal 'private'
79
- end
80
-
81
- specify 'should set sensible defaults for missing Content-Type and Date headers' do
82
- fixed_headers = add_default_headers(@for_incomplete_headers)
83
- fixed_headers['Content-Type'].should.equal ''
84
- fixed_headers.include?('Date').should.not.be nil
85
- end
86
-
87
- end