fakes3 0.1.7 → 0.2.0
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.
- 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
|