fakes3 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/fakes3/cli.rb +2 -2
- data/lib/fakes3/file_store.rb +9 -1
- data/lib/fakes3/s3_object.rb +1 -1
- data/lib/fakes3/server.rb +2 -1
- data/lib/fakes3/version.rb +1 -1
- data/test/aws_sdk_commands_test.rb +40 -0
- data/test/post_test.rb +1 -1
- 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: d257019492e12513dd0de611fd983d31277420ee
|
4
|
+
data.tar.gz: fb8546e21de97909554805fc6082b07e7f43db48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d2cad4af718747f5b93ab6f6831c6230a209221c0d5950b8ba6b3976f78982edf7ddda23a33b144cd671bb661b3baec887c7a30eaa9af422473883d46e7397d
|
7
|
+
data.tar.gz: 125638e4c8b6d312cf34a26ebaa724dab1a87f70d2d61007f2e86f76e838a406731deba8f8fb50c2eac7ea54112b2cb8c01759a265ec9be5e21ac19e26976b45
|
data/lib/fakes3/cli.rb
CHANGED
@@ -9,7 +9,7 @@ module FakeS3
|
|
9
9
|
desc "server", "Run a server on a particular hostname"
|
10
10
|
method_option :root, :type => :string, :aliases => '-r', :required => true
|
11
11
|
method_option :port, :type => :numeric, :aliases => '-p', :required => true
|
12
|
-
method_option :address, :type => :string, :aliases => '-a', :required => false, :desc => "Bind to this address. Defaults to
|
12
|
+
method_option :address, :type => :string, :aliases => '-a', :required => false, :desc => "Bind to this address. Defaults to all IP addresses of the machine."
|
13
13
|
method_option :hostname, :type => :string, :aliases => '-H', :desc => "The root name of the host. Defaults to s3.amazonaws.com."
|
14
14
|
method_option :quiet, :type => :boolean, :aliases => '-q', :desc => "Quiet; do not write anything to standard output."
|
15
15
|
method_option :limit, :aliases => '-l', :type => :string, :desc => 'Rate limit for serving (ie. 50K, 1.0M)'
|
@@ -45,7 +45,7 @@ module FakeS3
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
address = options[:address]
|
48
|
+
address = options[:address]
|
49
49
|
ssl_cert_path = options[:sslcert]
|
50
50
|
ssl_key_path = options[:sslkey]
|
51
51
|
|
data/lib/fakes3/file_store.rb
CHANGED
@@ -85,7 +85,10 @@ module FakeS3
|
|
85
85
|
metadata = File.open(File.join(obj_root, "metadata")) { |file| YAML::load(file) }
|
86
86
|
real_obj.name = object_name
|
87
87
|
real_obj.md5 = metadata[:md5]
|
88
|
-
real_obj.content_type =
|
88
|
+
real_obj.content_type = request.query['response-content-type'] ||
|
89
|
+
metadata.fetch(:content_type) { "application/octet-stream" }
|
90
|
+
real_obj.content_disposition = request.query['response-content-disposition'] ||
|
91
|
+
metadata[:content_disposition]
|
89
92
|
real_obj.content_encoding = metadata.fetch(:content_encoding) # if metadata.fetch(:content_encoding)
|
90
93
|
real_obj.io = RateLimitableFile.open(File.join(obj_root, "content"), 'rb')
|
91
94
|
real_obj.size = metadata.fetch(:size) { 0 }
|
@@ -151,6 +154,7 @@ module FakeS3
|
|
151
154
|
obj.name = dst_name
|
152
155
|
obj.md5 = src_metadata[:md5]
|
153
156
|
obj.content_type = src_metadata[:content_type]
|
157
|
+
obj.content_disposition = src_metadata[:content_disposition]
|
154
158
|
obj.content_encoding = src_metadata[:content_encoding] # if src_metadata[:content_encoding]
|
155
159
|
obj.size = src_metadata[:size]
|
156
160
|
obj.modified_date = src_metadata[:modified_date]
|
@@ -206,6 +210,7 @@ module FakeS3
|
|
206
210
|
obj.name = object_name
|
207
211
|
obj.md5 = metadata_struct[:md5]
|
208
212
|
obj.content_type = metadata_struct[:content_type]
|
213
|
+
obj.content_disposition = metadata_struct[:content_disposition]
|
209
214
|
obj.content_encoding = metadata_struct[:content_encoding] # if metadata_struct[:content_encoding]
|
210
215
|
obj.size = metadata_struct[:size]
|
211
216
|
obj.modified_date = metadata_struct[:modified_date]
|
@@ -269,6 +274,9 @@ module FakeS3
|
|
269
274
|
metadata = {}
|
270
275
|
metadata[:md5] = Digest::MD5.file(content).hexdigest
|
271
276
|
metadata[:content_type] = request.header["content-type"].first
|
277
|
+
if request.header['content-disposition']
|
278
|
+
metadata[:content_disposition] = request.header['content-disposition'].first
|
279
|
+
end
|
272
280
|
content_encoding = request.header["content-encoding"].first
|
273
281
|
metadata[:content_encoding] = content_encoding
|
274
282
|
#if content_encoding
|
data/lib/fakes3/s3_object.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module FakeS3
|
2
2
|
class S3Object
|
3
3
|
include Comparable
|
4
|
-
attr_accessor :name,:size,:creation_date,:modified_date,:md5,:io,:content_type,:content_encoding,:custom_metadata
|
4
|
+
attr_accessor :name,:size,:creation_date,:modified_date,:md5,:io,:content_type,:content_disposition,:content_encoding,:custom_metadata
|
5
5
|
|
6
6
|
def hash
|
7
7
|
@name.hash
|
data/lib/fakes3/server.rb
CHANGED
@@ -124,6 +124,7 @@ module FakeS3
|
|
124
124
|
response.header['Content-Encoding'] = real_obj.content_encoding
|
125
125
|
end
|
126
126
|
|
127
|
+
response['Content-Disposition'] = real_obj.content_disposition if real_obj.content_disposition
|
127
128
|
stat = File::Stat.new(real_obj.io.path)
|
128
129
|
|
129
130
|
response['Last-Modified'] = Time.iso8601(real_obj.modified_date).httpdate
|
@@ -334,7 +335,7 @@ module FakeS3
|
|
334
335
|
|
335
336
|
response['Access-Control-Allow-Origin'] = '*'
|
336
337
|
response['Access-Control-Allow-Methods'] = 'PUT, POST, HEAD, GET, OPTIONS'
|
337
|
-
response['Access-Control-Allow-Headers'] = 'Accept, Content-Type, Authorization, Content-Length, ETag, X-CSRF-Token'
|
338
|
+
response['Access-Control-Allow-Headers'] = 'Accept, Content-Type, Authorization, Content-Length, ETag, X-CSRF-Token, Content-Disposition'
|
338
339
|
response['Access-Control-Expose-Headers'] = 'ETag'
|
339
340
|
end
|
340
341
|
|
data/lib/fakes3/version.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'test/test_helper'
|
2
2
|
require 'aws-sdk-v1'
|
3
|
+
require 'rest-client'
|
3
4
|
|
4
5
|
class AwsSdkCommandsTest < Test::Unit::TestCase
|
5
6
|
def setup
|
@@ -55,4 +56,43 @@ class AwsSdkCommandsTest < Test::Unit::TestCase
|
|
55
56
|
assert metadata_file[:amazon_metadata].has_key?('storage-class'), ':amazon_metadata does not contain field "storage-class"'
|
56
57
|
assert_equal 'REDUCED_REDUNDANCY', metadata_file[:amazon_metadata]['storage-class'], '"storage-class" does not equal expected value "REDUCED_REDUNDANCY"'
|
57
58
|
end
|
59
|
+
|
60
|
+
def test_content_disposition
|
61
|
+
bucket = @s3.buckets["test_bucket"]
|
62
|
+
bucket.objects.create("test_object", "asdf", :content_disposition => "application/test")
|
63
|
+
assert_equal "application/test", content_disposition("test_bucket", "test_object")
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_content_disposition_copy
|
67
|
+
bucket = @s3.buckets["test_bucket"]
|
68
|
+
object = bucket.objects.create("test_object", "asdf", :content_disposition => "application/test")
|
69
|
+
object.copy_to("test_copy_object")
|
70
|
+
assert_equal "application/test", content_disposition("test_bucket", "test_copy_object")
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_content_disposition_request_parameter
|
74
|
+
bucket = @s3.buckets["test_bucket"]
|
75
|
+
object = bucket.objects.create("test_object", "asdf")
|
76
|
+
url = object.url_for(:read, :response_content_disposition => "application/test", :signature_version => :v4)
|
77
|
+
assert_equal "application/test", response_header(url, :content_disposition)
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_content_type_request_parameter
|
81
|
+
bucket = @s3.buckets["test_bucket"]
|
82
|
+
object = bucket.objects.create("test_object", "asdf")
|
83
|
+
url = object.url_for(:read, :response_content_type => "application/test", :signature_version => :v4)
|
84
|
+
assert_equal "application/test", response_header(url, :content_type)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Unfortunately v1 of the AWS SDK doesn't support reading the content_disposition of an object
|
88
|
+
def content_disposition(bucket_name, key)
|
89
|
+
url = "http://localhost:#{@s3.client.port}/#{bucket_name}/#{key}"
|
90
|
+
response_header(url, :content_disposition)
|
91
|
+
end
|
92
|
+
|
93
|
+
def response_header(url, header_name)
|
94
|
+
RestClient.head(url.to_s) do |response|
|
95
|
+
response.headers[header_name]
|
96
|
+
end
|
97
|
+
end
|
58
98
|
end
|
data/test/post_test.rb
CHANGED
@@ -15,7 +15,7 @@ class PostTest < Test::Unit::TestCase
|
|
15
15
|
assert_equal(response.code, 200)
|
16
16
|
assert_equal(response.headers[:access_control_allow_origin],"*")
|
17
17
|
assert_equal(response.headers[:access_control_allow_methods], "PUT, POST, HEAD, GET, OPTIONS")
|
18
|
-
assert_equal(response.headers[:access_control_allow_headers], "Accept, Content-Type, Authorization, Content-Length, ETag, X-CSRF-Token")
|
18
|
+
assert_equal(response.headers[:access_control_allow_headers], "Accept, Content-Type, Authorization, Content-Length, ETag, X-CSRF-Token, Content-Disposition")
|
19
19
|
assert_equal(response.headers[:access_control_expose_headers], "ETag")
|
20
20
|
end
|
21
21
|
end
|
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: 1.
|
4
|
+
version: 1.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: 2017-
|
11
|
+
date: 2017-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|