sml-aws-s3 0.5.1.1225474505

Sign up to get free protection for your applications and to get access to all the features.
@@ -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