qoobaa-s3 0.0.3

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.
data/test/s3_test.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'test_helper'
2
+
3
+ class S3Test < Test::Unit::TestCase
4
+
5
+ end
@@ -0,0 +1,133 @@
1
+ require 'test_helper'
2
+
3
+ class ServiceTest < Test::Unit::TestCase
4
+ def setup
5
+ @service_ok = S3::Service.new(
6
+ :access_key_id => "12345678901234567890",
7
+ :secret_access_key => "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDF"
8
+ )
9
+ @connection_ok = S3::Connection.new
10
+ @response_ok = Net::HTTPOK.new("1.1", "200", "OK")
11
+ stub(@service_ok).connection { @connection_ok }
12
+ stub(@connection_ok).request { @response_ok } # redefine it if needed
13
+
14
+ @buckets_empty_list = []
15
+ @buckets_empty_list_body = <<-EOEmptyBuckets
16
+ <?xml version=\"1.0\" encoding=\"UTF-8\"?>
17
+ <ListAllMyBucketsResult xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">
18
+ <Owner>
19
+ <ID>123u1odhkhfoadf</ID>
20
+ <DisplayName>JohnDoe</DisplayName>
21
+ </Owner>
22
+ <Buckets>
23
+ </Buckets>
24
+ </ListAllMyBucketsResult>
25
+ EOEmptyBuckets
26
+
27
+ @buckets_list = [
28
+ S3::Bucket.new(@service_ok, "data.example.com"),
29
+ S3::Bucket.new(@service_ok, "images")
30
+ ]
31
+ @buckets_list_body = <<-EOBuckets
32
+ <?xml version=\"1.0\" encoding=\"UTF-8\"?>
33
+ <ListAllMyBucketsResult xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">
34
+ <Owner>
35
+ <ID>123u1odhkhfoadf</ID>
36
+ <DisplayName>JohnDoe</DisplayName>
37
+ </Owner>
38
+ <Buckets>
39
+ <Bucket>
40
+ <Name>data.example.com</Name>
41
+ <CreationDate>2009-07-02T11:56:58.000Z</CreationDate>
42
+ </Bucket>
43
+ <Bucket>
44
+ <Name>images</Name>
45
+ <CreationDate>2009-06-05T12:26:33.000Z</CreationDate>
46
+ </Bucket>
47
+ </Buckets>
48
+ </ListAllMyBucketsResult>
49
+ EOBuckets
50
+ end
51
+
52
+ def test_buckets_and_parse_buckets_empty
53
+ stub(@response_ok).body { @buckets_empty_list_body }
54
+
55
+ expected = @buckets_empty_list
56
+ actual = @service_ok.buckets
57
+ assert_equal expected.length, actual.length
58
+ assert_equal expected, actual
59
+ end
60
+
61
+ def test_buckets_and_parse_buckets
62
+ stub(@response_ok).body { @buckets_list_body }
63
+
64
+ expected = @buckets_list
65
+ # ugly hack
66
+ actual = @service_ok.buckets(true).map { |obj| obj }
67
+ assert_equal expected, actual
68
+ end
69
+
70
+ def test_buckets_reload
71
+ stub(@response_ok).body { @buckets_empty_list_body }
72
+
73
+ expected = @buckets_empty_list
74
+ assert @service_ok.buckets, "retrive buckets"
75
+ actual = @service_ok.buckets
76
+ assert_equal expected.length, actual.length, "deliver from cache"
77
+
78
+ stub(@response_ok).body { @buckets_list_body }
79
+ expected = @buckets_empty_list
80
+ actual = @service_ok.buckets
81
+ assert_equal expected.length, actual.length, "deliver from cache"
82
+
83
+ expected = @buckets_list
84
+ actual = @service_ok.buckets(true)
85
+ assert_equal expected.length, actual.length
86
+ end
87
+
88
+ def test_buckets_build
89
+ stub(@connection_ok).request { flunk "should not connect to server" }
90
+
91
+ expected = "bucket_name"
92
+ actual = @service_ok.buckets.build("bucket_name")
93
+ assert_kind_of S3::Bucket, actual
94
+ assert_equal expected, actual.name
95
+ end
96
+
97
+ def test_buckets_find_first
98
+ stub(@response_ok).body { @buckets_list_body }
99
+
100
+ assert_nothing_raised do
101
+ actual = @service_ok.buckets.find_first("data.example.com")
102
+ assert_equal "data.example.com", actual.name
103
+ end
104
+ end
105
+
106
+ def test_buckets_find_first_fail
107
+ stub(@response_ok).body { @buckets_list_body }
108
+
109
+ assert_raises S3::Error::NoSuchBucket do
110
+ @service_ok.buckets.find_first("data2.example.com")
111
+ end
112
+ end
113
+
114
+ def test_buckets_find_all_on_empty_list
115
+ stub(@response_ok).body { @buckets_empty_list_body }
116
+
117
+ assert_nothing_raised do
118
+ expected = @buckets_empty_list
119
+ actual = @service_ok.buckets.find_all
120
+ assert_equal expected, actual
121
+ end
122
+ end
123
+
124
+ def test_buckets_find_all
125
+ stub(@response_ok).body { @buckets_list_body }
126
+
127
+ assert_nothing_raised do
128
+ expected = @buckets_list
129
+ actual = @service_ok.buckets.find_all
130
+ assert_equal expected, actual
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,143 @@
1
+ require 'test_helper'
2
+
3
+ class SignatureTest < Test::Unit::TestCase
4
+ # from http://docs.amazonwebservices.com/AmazonS3/latest/RESTAuthentication.html
5
+ def test_signature_for_object_get
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
+ def test_signature_for_object_put
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
+ def test_signature_for_list
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
+ def test_signature_for_fetch
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
+ def test_signature_for_delete
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
+ def test_signature_for_upload
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
+ # TODO:
94
+ # was:
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
+ def test_signature_for_list_all_my_buckets
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
+ def test_signature_for_unicode_keys
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
+ end
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'rr'
4
+
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ require 's3'
8
+
9
+ class Test::Unit::TestCase
10
+ include RR::Adapters::TestUnit
11
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: qoobaa-s3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - "Jakub Ku\xC5\xBAma"
8
+ - "Miros\xC5\x82aw Boruta"
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-07-03 00:00:00 -07:00
14
+ default_executable: s3cmd.rb
15
+ dependencies: []
16
+
17
+ description:
18
+ email: qoobaa@gmail.com
19
+ executables:
20
+ - s3cmd.rb
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - LICENSE
25
+ - README.rdoc
26
+ files:
27
+ - .document
28
+ - .gitignore
29
+ - LICENSE
30
+ - README.rdoc
31
+ - Rakefile
32
+ - VERSION
33
+ - bin/s3cmd.rb
34
+ - lib/s3.rb
35
+ - lib/s3/bucket.rb
36
+ - lib/s3/connection.rb
37
+ - lib/s3/exceptions.rb
38
+ - lib/s3/object.rb
39
+ - lib/s3/roxy/moxie.rb
40
+ - lib/s3/roxy/proxy.rb
41
+ - lib/s3/service.rb
42
+ - lib/s3/signature.rb
43
+ - s3.gemspec
44
+ - test/bucket_test.rb
45
+ - test/connection_test.rb
46
+ - test/s3_test.rb
47
+ - test/service_test.rb
48
+ - test/signature_test.rb
49
+ - test/test_helper.rb
50
+ has_rdoc: false
51
+ homepage: http://github.com/qoobaa/s3
52
+ post_install_message:
53
+ rdoc_options:
54
+ - --charset=UTF-8
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ requirements: []
70
+
71
+ rubyforge_project:
72
+ rubygems_version: 1.2.0
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: Library for accessing S3 objects and buckets, with command line tool
76
+ test_files:
77
+ - test/s3_test.rb
78
+ - test/bucket_test.rb
79
+ - test/service_test.rb
80
+ - test/signature_test.rb
81
+ - test/connection_test.rb
82
+ - test/test_helper.rb