fakes3 0.1.7 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/fakes3/bucket.rb +1 -0
- data/lib/fakes3/bucket_query.rb +1 -1
- data/lib/fakes3/server.rb +9 -0
- data/lib/fakes3/sorted_object_list.rb +38 -1
- data/lib/fakes3/version.rb +1 -1
- data/lib/fakes3/xml_adapter.rb +10 -1
- data/test/right_aws_commands_test.rb +32 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4b5a4bfc64bf07bbf5ebaf3038c4ddf95c7a3e4
|
4
|
+
data.tar.gz: 86835f87289156cbbf1ef050d9892d020adbe281
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76f712e660a295b7b1b7435ccf7890a8eb87eefdcbdfa7847d512077792206e6463d63b93786ffb60bbb250e7ebc2885817db2acf85577937dfcff8e9ec004ab
|
7
|
+
data.tar.gz: 691fecdbc4e377f2f23a4e19256db8a018e6357beff5ceb3d0b77915da3f529f25862bbb4177d6de4165c7f4aec2c411396ded814ce5d2a9f817435ff9b0b14f
|
data/Gemfile.lock
CHANGED
data/lib/fakes3/bucket.rb
CHANGED
data/lib/fakes3/bucket_query.rb
CHANGED
data/lib/fakes3/server.rb
CHANGED
@@ -50,6 +50,13 @@ module FakeS3
|
|
50
50
|
@root_hostnames = [hostname,'localhost','s3.amazonaws.com','s3.localhost']
|
51
51
|
end
|
52
52
|
|
53
|
+
def validate_request(request)
|
54
|
+
req = request.webrick_request
|
55
|
+
return if req.nil?
|
56
|
+
return if not req.header.has_key?('expect')
|
57
|
+
req.continue if req.header['expect'].first=='100-continue'
|
58
|
+
end
|
59
|
+
|
53
60
|
def do_GET(request, response)
|
54
61
|
s_req = normalize_request(request)
|
55
62
|
|
@@ -379,6 +386,8 @@ module FakeS3
|
|
379
386
|
raise "Unknown Request"
|
380
387
|
end
|
381
388
|
|
389
|
+
validate_request(s_req)
|
390
|
+
|
382
391
|
return s_req
|
383
392
|
end
|
384
393
|
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'set'
|
2
2
|
module FakeS3
|
3
3
|
class S3MatchSet
|
4
|
-
attr_accessor :matches,:is_truncated
|
4
|
+
attr_accessor :matches,:is_truncated,:common_prefixes
|
5
5
|
def initialize
|
6
6
|
@matches = []
|
7
7
|
@is_truncated = false
|
8
|
+
@common_prefixes = []
|
8
9
|
end
|
9
10
|
end
|
10
11
|
|
@@ -73,9 +74,45 @@ module FakeS3
|
|
73
74
|
end
|
74
75
|
end
|
75
76
|
|
77
|
+
if delimiter
|
78
|
+
if prefix
|
79
|
+
base_prefix = prefix
|
80
|
+
else
|
81
|
+
base_prefix = ""
|
82
|
+
end
|
83
|
+
prefix_offset = base_prefix.length
|
84
|
+
end
|
85
|
+
|
76
86
|
count = 0
|
87
|
+
last_chunk = nil
|
77
88
|
@sorted_set.each do |s3_object|
|
78
89
|
if marker_found && (!prefix or s3_object.name.index(prefix) == 0)
|
90
|
+
if delimiter
|
91
|
+
name = s3_object.name
|
92
|
+
remainder = name.slice(prefix_offset, name.length)
|
93
|
+
chunks = remainder.split(delimiter, 2)
|
94
|
+
if chunks.length > 1
|
95
|
+
if (last_chunk != chunks[0])
|
96
|
+
# "All of the keys rolled up in a common prefix count as
|
97
|
+
# a single return when calculating the number of
|
98
|
+
# returns. See MaxKeys."
|
99
|
+
# (http://awsdocs.s3.amazonaws.com/S3/latest/s3-api.pdf)
|
100
|
+
count += 1
|
101
|
+
if count <= max_keys
|
102
|
+
ms.common_prefixes << base_prefix + chunks[0] + delimiter
|
103
|
+
last_chunk = chunks[0]
|
104
|
+
else
|
105
|
+
is_truncated = true
|
106
|
+
break
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Continue to the next key, since this one has a
|
111
|
+
# delimiter.
|
112
|
+
next
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
79
116
|
count += 1
|
80
117
|
if count <= max_keys
|
81
118
|
ms.matches << s3_object
|
data/lib/fakes3/version.rb
CHANGED
data/lib/fakes3/xml_adapter.rb
CHANGED
@@ -137,6 +137,14 @@ module FakeS3
|
|
137
137
|
end
|
138
138
|
end
|
139
139
|
|
140
|
+
def self.append_common_prefixes_to_list_bucket_result(lbr, prefixes)
|
141
|
+
return if prefixes.nil? or prefixes.size == 0
|
142
|
+
|
143
|
+
prefixes.each do |common_prefix|
|
144
|
+
lbr.CommonPrefixes { |contents| contents.Prefix(common_prefix) }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
140
148
|
def self.bucket_query(bucket_query)
|
141
149
|
output = ""
|
142
150
|
bucket = bucket_query.bucket
|
@@ -149,6 +157,7 @@ module FakeS3
|
|
149
157
|
lbr.MaxKeys(bucket_query.max_keys)
|
150
158
|
lbr.IsTruncated(bucket_query.is_truncated?)
|
151
159
|
append_objects_to_list_bucket_result(lbr,bucket_query.matches)
|
160
|
+
append_common_prefixes_to_list_bucket_result(lbr, bucket_query.common_prefixes)
|
152
161
|
}
|
153
162
|
output
|
154
163
|
end
|
@@ -189,6 +198,6 @@ module FakeS3
|
|
189
198
|
result.ETag("\"#{object.md5}\"")
|
190
199
|
}
|
191
200
|
output
|
192
|
-
end
|
201
|
+
end
|
193
202
|
end
|
194
203
|
end
|
@@ -55,6 +55,38 @@ class RightAWSCommandsTest < Test::Unit::TestCase
|
|
55
55
|
assert_equal buf_len,output.size
|
56
56
|
end
|
57
57
|
|
58
|
+
# Test that GET requests with a delimiter return a list of
|
59
|
+
def test_list_by_delimiter
|
60
|
+
@s3.create_bucket("s3media")
|
61
|
+
|
62
|
+
@s3.put("s3media", "delimited/item", "item")
|
63
|
+
|
64
|
+
expected_prefixes = []
|
65
|
+
(1..50).each do |i|
|
66
|
+
key_prefix = "delimited/%02d/" % i
|
67
|
+
@s3.put("s3media", key_prefix + "foo", "foo")
|
68
|
+
@s3.put("s3media", key_prefix + "fie", "fie")
|
69
|
+
expected_prefixes << key_prefix
|
70
|
+
end
|
71
|
+
|
72
|
+
key_names = []
|
73
|
+
common_prefixes = []
|
74
|
+
@s3.incrementally_list_bucket("s3media", {:prefix => "delimited", :delimiter => '/'}) do |currentResponse|
|
75
|
+
common_prefixes += currentResponse[:common_prefixes]
|
76
|
+
end
|
77
|
+
assert_equal ["delimited/"], common_prefixes
|
78
|
+
|
79
|
+
common_prefixes = []
|
80
|
+
@s3.incrementally_list_bucket("s3media", {:prefix => "delimited/", :delimiter => '/', "max-keys" => 5}) do |currentResponse|
|
81
|
+
key_names += currentResponse[:contents].map do |key|
|
82
|
+
key[:key]
|
83
|
+
end
|
84
|
+
common_prefixes += currentResponse[:common_prefixes]
|
85
|
+
end
|
86
|
+
assert_equal expected_prefixes, common_prefixes
|
87
|
+
assert_equal ["delimited/item"], key_names
|
88
|
+
end
|
89
|
+
|
58
90
|
def test_multi_directory
|
59
91
|
@s3.put("s3media","dir/right/123.txt","recursive")
|
60
92
|
output = ""
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fakes3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Curtis Spencer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|