sml-aws-s3 0.5.1.1225474505

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,66 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class TypecastingTest < Test::Unit::TestCase
4
+ # Make it easier to call methods in tests
5
+ Parsing::Typecasting.public_instance_methods.each do |method|
6
+ Parsing::Typecasting.send(:module_function, method)
7
+ end
8
+
9
+ def test_array_with_one_element_that_is_a_hash
10
+ value = [{'Available' => 'true'}]
11
+ assert_equal [{'available' => true}], Parsing::Typecasting.typecast(value)
12
+ end
13
+
14
+ def test_hash_with_one_key_whose_value_is_an_array
15
+ value = {
16
+ 'Bucket' =>
17
+ [
18
+ {'Available' => 'true'}
19
+ ]
20
+ }
21
+
22
+ expected = {
23
+ 'bucket' =>
24
+ [
25
+ {'available' => true}
26
+ ]
27
+ }
28
+ assert_equal expected, Parsing::Typecasting.typecast(value)
29
+ end
30
+
31
+ end
32
+
33
+ class XmlParserTest < Test::Unit::TestCase
34
+ def test_bucket_is_always_forced_to_be_an_array_unless_empty
35
+ one_bucket = Parsing::XmlParser.new(Fixtures::Buckets.bucket_list_with_one_bucket)
36
+ more_than_one = Parsing::XmlParser.new(Fixtures::Buckets.bucket_list_with_more_than_one_bucket)
37
+
38
+ [one_bucket, more_than_one].each do |bucket_list|
39
+ assert_kind_of Array, bucket_list['buckets']['bucket']
40
+ end
41
+
42
+ no_buckets = Parsing::XmlParser.new(Fixtures::Buckets.empty_bucket_list)
43
+ assert no_buckets.has_key?('buckets')
44
+ assert_nil no_buckets['buckets']
45
+ end
46
+
47
+ def test_bucket_contents_are_forced_to_be_an_array_unless_empty
48
+ one_key = Parsing::XmlParser.new(Fixtures::Buckets.bucket_with_one_key)
49
+ more_than_one = Parsing::XmlParser.new(Fixtures::Buckets.bucket_with_more_than_one_key)
50
+ [one_key, more_than_one].each do |bucket_with_contents|
51
+ assert_kind_of Array, bucket_with_contents['contents']
52
+ end
53
+
54
+ no_keys = Parsing::XmlParser.new(Fixtures::Buckets.empty_bucket)
55
+ assert !no_keys.has_key?('contents')
56
+ end
57
+
58
+ def test_policy_grants_are_always_an_array
59
+ policy = Parsing::XmlParser.new(Fixtures::Policies.policy_with_one_grant)
60
+ assert_kind_of Array, policy['access_control_list']['grant']
61
+ end
62
+
63
+ def test_empty_xml_response_is_not_parsed
64
+ assert_equal({}, Parsing::XmlParser.new(''))
65
+ end
66
+ end
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+ class BaseResponseTest < Test::Unit::TestCase
3
+ def setup
4
+ @headers = {'content-type' => 'text/plain', 'date' => Time.now}
5
+ @response = FakeResponse.new()
6
+ @base_response = Base::Response.new(@response)
7
+ end
8
+
9
+ def test_status_predicates
10
+ response = Proc.new {|code| Base::Response.new(FakeResponse.new(:code => code))}
11
+ assert response[200].success?
12
+ assert response[300].redirect?
13
+ assert response[400].client_error?
14
+ assert response[500].server_error?
15
+ end
16
+
17
+ def test_headers_passed_along_from_original_response
18
+ assert_equal @response.headers, @base_response.headers
19
+ assert_equal @response['date'], @base_response['date']
20
+ original_headers, new_headers = {}, {}
21
+ @response.headers.each {|k,v| original_headers[k] = v}
22
+ @base_response.each {|k,v| new_headers[k] = v}
23
+ assert_equal original_headers, new_headers
24
+ end
25
+ end
26
+
27
+ class ErrorResponseTest < Test::Unit::TestCase
28
+ def test_error_responses_are_always_in_error
29
+ assert Error::Response.new(FakeResponse.new).error?
30
+ assert Error::Response.new(FakeResponse.new(:code => 200)).error?
31
+ assert Error::Response.new(FakeResponse.new(:headers => {'content-type' => 'text/plain'})).error?
32
+ end
33
+ end
34
+
35
+ class S3ObjectResponseTest < Test::Unit::TestCase
36
+ def test_etag_extracted
37
+ mock_connection_for(S3Object, :returns => {:headers => {"etag" => %("acbd18db4cc2f85cedef654fccc4a4d8")}}).once
38
+ object_response = S3Object.create('name_does_not_matter', 'data does not matter', 'bucket does not matter')
39
+ assert_equal "acbd18db4cc2f85cedef654fccc4a4d8", object_response.etag
40
+ end
41
+ end
42
+
43
+ class ResponseClassFinderTest < Test::Unit::TestCase
44
+ class CampfireBucket < Bucket
45
+ end
46
+
47
+ class BabyBase < Base
48
+ end
49
+
50
+ def test_on_base
51
+ assert_equal Base::Response, FindResponseClass.for(Base)
52
+ assert_equal Base::Response, FindResponseClass.for(AWS::S3::Base)
53
+
54
+ end
55
+
56
+ def test_on_subclass_with_corresponding_response_class
57
+ assert_equal Bucket::Response, FindResponseClass.for(Bucket)
58
+ assert_equal Bucket::Response, FindResponseClass.for(AWS::S3::Bucket)
59
+ end
60
+
61
+ def test_on_subclass_with_intermediary_parent_that_has_corresponding_response_class
62
+ assert_equal Bucket::Response, FindResponseClass.for(CampfireBucket)
63
+ end
64
+
65
+ def test_on_subclass_with_no_corresponding_response_class_and_no_intermediary_parent
66
+ assert_equal Base::Response, FindResponseClass.for(BabyBase)
67
+ end
68
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class ServiceTest < Test::Unit::TestCase
4
+ def test_bucket_list_with_empty_bucket_list
5
+ mock_connection_for(Service, :returns => {:body => Fixtures::Buckets.empty_bucket_list, :code => 200})
6
+ list = Service.buckets(:reload)
7
+ assert_equal [], list
8
+ end
9
+
10
+ def test_bucket_list_with_bucket_list_containing_one_bucket
11
+ mock_connection_for(Service, :returns => {:body => Fixtures::Buckets.bucket_list_with_one_bucket, :code => 200})
12
+ list = Service.buckets(:reload)
13
+ assert_equal 1, list.size
14
+ assert_equal 'marcel_molina', list.first.name
15
+ end
16
+
17
+ def test_bucket_list_with_bucket_list_containing_more_than_one_bucket
18
+ mock_connection_for(Service, :returns => {:body => Fixtures::Buckets.bucket_list_with_more_than_one_bucket, :code => 200})
19
+ list = Service.buckets(:reload)
20
+ assert_equal 2, list.size
21
+ assert_equal %w(marcel_molina marcel_molina_jr), list.map {|bucket| bucket.name}.sort
22
+ end
23
+ end
@@ -0,0 +1,107 @@
1
+ require 'test/unit'
2
+ $:.unshift File.dirname(__FILE__) + '/../lib'
3
+ require 'aws/s3'
4
+ require File.dirname(__FILE__) + '/mocks/fake_response'
5
+ require File.dirname(__FILE__) + '/fixtures'
6
+ require_library_or_gem 'ruby-debug'
7
+ require_library_or_gem 'flexmock'
8
+ require_library_or_gem 'flexmock/test_unit'
9
+
10
+
11
+ # Data copied from http://docs.amazonwebservices.com/AmazonS3/2006-03-01/RESTAuthentication.html
12
+ module AmazonDocExampleData
13
+ module Example1
14
+ module_function
15
+
16
+ def request
17
+ request = Net::HTTP::Put.new('/quotes/nelson')
18
+ request['Content-Md5'] = 'c8fdb181845a4ca6b8fec737b3581d76'
19
+ request['Content-Type'] = 'text/html'
20
+ request['Date'] = 'Thu, 17 Nov 2005 18:49:58 GMT'
21
+ request['X-Amz-Meta-Author'] = 'foo@bar.com'
22
+ request['X-Amz-Magic'] = 'abracadabra'
23
+ request
24
+ end
25
+
26
+ def canonical_string
27
+ "PUT\nc8fdb181845a4ca6b8fec737b3581d76\ntext/html\nThu, 17 Nov 2005 18:49:58 GMT\nx-amz-magic:abracadabra\nx-amz-meta-author:foo@bar.com\n/quotes/nelson"
28
+ end
29
+
30
+ def access_key_id
31
+ '44CF9590006BF252F707'
32
+ end
33
+
34
+ def secret_access_key
35
+ 'OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV'
36
+ end
37
+
38
+ def signature
39
+ 'jZNOcbfWmD/A/f3hSvVzXZjM2HU='
40
+ end
41
+
42
+ def authorization_header
43
+ 'AWS 44CF9590006BF252F707:jZNOcbfWmD/A/f3hSvVzXZjM2HU='
44
+ end
45
+ end
46
+
47
+ module Example3
48
+ module_function
49
+
50
+ def request
51
+ request = Net::HTTP::Get.new('/quotes/nelson')
52
+ request['Date'] = date
53
+ request
54
+ end
55
+
56
+ def date
57
+ 'Thu Mar 9 01:24:20 CST 2006'
58
+ end
59
+
60
+ def access_key_id
61
+ Example1.access_key_id
62
+ end
63
+
64
+ def secret_access_key
65
+ Example1.secret_access_key
66
+ end
67
+
68
+ def expires
69
+ 1141889120
70
+ end
71
+
72
+ def query_string
73
+ 'AWSAccessKeyId=44CF9590006BF252F707&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D'
74
+ end
75
+
76
+ def canonical_string
77
+ "GET\n\n\n1141889120\n/quotes/nelson"
78
+ end
79
+
80
+ end
81
+ end
82
+
83
+ class Test::Unit::TestCase
84
+ include AWS::S3
85
+
86
+ def sample_proxy_settings
87
+ {:host => 'http://google.com', :port => 8080, :user => 'marcel', :password => 'secret'}
88
+ end
89
+
90
+ def mock_connection_for(klass, options = {})
91
+ data = options[:returns]
92
+ return_values = case data
93
+ when Hash
94
+ FakeResponse.new(data)
95
+ when Array
96
+ data.map {|hash| FakeResponse.new(hash)}
97
+ else
98
+ abort "Response data for mock connection must be a Hash or an Array. Was #{data.inspect}."
99
+ end
100
+
101
+ connection = flexmock('Mock connection') do |mock|
102
+ mock.should_receive(:request).and_return(*return_values).at_least.once
103
+ end
104
+
105
+ flexmock(klass).should_receive(:connection).and_return(connection)
106
+ end
107
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sml-aws-s3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1.1225474505
5
+ platform: ruby
6
+ authors:
7
+ - Marcel Molina Jr.
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-10-27 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: xml-simple
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: builder
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: "0"
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: mime-types
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ description: Client library for Amazon's Simple Storage Service's REST API
43
+ email: marcel@vernix.org
44
+ executables:
45
+ - s3sh
46
+ extensions: []
47
+
48
+ extra_rdoc_files:
49
+ - README
50
+ - COPYING
51
+ - INSTALL
52
+ files:
53
+ - Rakefile
54
+ - lib/aws/s3.rb
55
+ - lib/aws/s3/acl.rb
56
+ - lib/aws/s3/authentication.rb
57
+ - lib/aws/s3/base.rb
58
+ - lib/aws/s3/bittorrent.rb
59
+ - lib/aws/s3/bucket.rb
60
+ - lib/aws/s3/connection.rb
61
+ - lib/aws/s3/error.rb
62
+ - lib/aws/s3/exceptions.rb
63
+ - lib/aws/s3/extensions.rb
64
+ - lib/aws/s3/logging.rb
65
+ - lib/aws/s3/object.rb
66
+ - lib/aws/s3/owner.rb
67
+ - lib/aws/s3/parsing.rb
68
+ - lib/aws/s3/response.rb
69
+ - lib/aws/s3/service.rb
70
+ - lib/aws/s3/version.rb
71
+ - bin/setup.rb
72
+ - bin/s3sh
73
+ - README
74
+ - COPYING
75
+ - INSTALL
76
+ has_rdoc: true
77
+ homepage: http://amazon.rubyforge.org
78
+ post_install_message:
79
+ rdoc_options:
80
+ - --title
81
+ - AWS::S3 -- Support for Amazon S3's REST api
82
+ - --main
83
+ - README
84
+ - --line-numbers
85
+ - --inline-source
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: "0"
93
+ version:
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: "0"
99
+ version:
100
+ requirements: []
101
+
102
+ rubyforge_project: amazon
103
+ rubygems_version: 1.2.0
104
+ signing_key:
105
+ specification_version: 2
106
+ summary: Client library for Amazon's Simple Storage Service's REST API
107
+ test_files:
108
+ - test/acl_test.rb
109
+ - test/authentication_test.rb
110
+ - test/base_test.rb
111
+ - test/bucket_test.rb
112
+ - test/connection_test.rb
113
+ - test/error_test.rb
114
+ - test/extensions_test.rb
115
+ - test/fixtures.rb
116
+ - test/logging_test.rb
117
+ - test/object_test.rb
118
+ - test/parsing_test.rb
119
+ - test/response_test.rb
120
+ - test/service_test.rb
121
+ - test/test_helper.rb