Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions google-cloud-storage/acceptance/storage/bucket_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,16 @@
_(bucket.lifecycle.count).must_equal original_count
end

it "omits Accept-Encoding: gzip header for file uploads" do
global_headers = storage.service.service.request_options.header || {}
_(global_headers["Accept-Encoding"]).wont_equal "gzip"

uploaded = bucket.create_file StringIO.new('{"metadata":"test"}'), "test-upload-metadata.json", content_type: "application/json"

_(uploaded.name).must_equal "test-upload-metadata.json"
uploaded.delete
end

it "does not error when getting a file that does not exist" do
random_bucket = storage.bucket "#{bucket_name}_does_not_exist"
_(random_bucket).must_be :nil?
Expand Down
9 changes: 9 additions & 0 deletions google-cloud-storage/acceptance/storage/file_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,15 @@
bucket.files(versions: true).all { |f| f.delete generation: true rescue nil }
end

it "does not send Accept-Encoding: gzip globally during file uploads" do
global_headers = storage.service.service.request_options.header || {}
_(global_headers["Accept-Encoding"]).wont_equal "gzip"

uploaded = bucket.create_file StringIO.new('{"metadata":"test"}'), "upload-metadata.json", content_type: "application/json"
_(uploaded.name).must_equal "upload-metadata.json"
uploaded.delete
end

it "should upload and download a file" do
original = File.new files[:logo][:path]
uploaded = bucket.create_file original, "CloudLogo.png",
Expand Down
2 changes: 1 addition & 1 deletion google-cloud-storage/lib/google/cloud/storage/file.rb
Original file line number Diff line number Diff line change
Expand Up @@ -985,7 +985,7 @@ def update generation: nil,
# @param [Boolean] skip_decompress Optional. If `true`, the data for a
# Storage object returning a `Content-Encoding: gzip` response header
# will *not* be automatically decompressed by this client library. The
# default is `nil`. Note that all requests by this client library send
# default is `nil`. Note that download requests by this client library send
# the `Accept-Encoding: gzip` header, so decompressive transcoding is
# not performed in the Storage service. (See [Transcoding of
# gzip-compressed files](https://cloud.google.com/storage/docs/transcoding))
Expand Down
2 changes: 1 addition & 1 deletion google-cloud-storage/lib/google/cloud/storage/service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ def initialize project, credentials, retries: nil,
@service.request_options.header ||= {}
@service.request_options.header["x-goog-api-client"] =
"gl-ruby/#{RUBY_VERSION} gccl/#{Google::Cloud::Storage::VERSION}"
@service.request_options.header["Accept-Encoding"] = "gzip"
@service.request_options.quota_project = quota_project if quota_project
@service.request_options.max_elapsed_time = max_elapsed_time if max_elapsed_time
@service.request_options.base_interval = base_interval if base_interval
Expand Down Expand Up @@ -586,6 +585,7 @@ def download_file bucket_name, file_path, target_path, generation: nil,
key: nil, range: nil, user_project: nil, options: {}
options = key_options(key).merge(options)
options = range_header options, range
options[:header] = (options[:header] || {}).merge("Accept-Encoding" => "gzip")

execute do
service.get_object \
Expand Down
15 changes: 15 additions & 0 deletions google-cloud-storage/test/google/cloud/storage/bucket_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,21 @@
mock.verify
end

it "omits Accept-Encoding: gzip header for file uploads" do
new_file_name = random_file_path
new_file_contents = StringIO.new "Hello world"

mock = Minitest::Mock.new
mock.expect :insert_object, create_file_gapi(bucket.name, new_file_name) do |b_name, file_obj, **kwargs|
headers = (kwargs[:options] && kwargs[:options][:header]) || {}
b_name == bucket.name && headers["Accept-Encoding"] != "gzip"
end

bucket.service.mocked_service = mock
bucket.create_file new_file_contents, new_file_name
mock.verify
end

it "raises when given a file that does not exist" do
bad_file_path = "/this/file/does/not/exist.ext"

Expand Down
38 changes: 19 additions & 19 deletions google-cloud-storage/test/google/cloud/storage/file_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -247,7 +247,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp(gzip: true)],
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -273,7 +273,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp(gzip: true)],
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -297,7 +297,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file.name], download_dest: tmpfile.path, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: tmpfile.path, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -320,7 +320,7 @@ def file_user_project.md5

mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file_user_project.name], download_dest: tmpfile, generation: generation, user_project: "test", options: {}
[bucket.name, file_user_project.name], download_dest: tmpfile, generation: generation, user_project: "test", options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -341,7 +341,7 @@ def file.md5
downloadio = StringIO.new
mock = Minitest::Mock.new
mock.expect :get_object, [StringIO.new(data), download_http_resp],
[bucket.name, file.name], download_dest: downloadio, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: downloadio, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -362,7 +362,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [StringIO.new(gzipped_data), download_http_resp(gzip: true)],
[bucket.name, file.name], download_dest: downloadio, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: downloadio, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -383,7 +383,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [StringIO.new(gzipped_data), download_http_resp(gzip: true)],
[bucket.name, file.name], download_dest: downloadio, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: downloadio, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -404,7 +404,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [StringIO.new("yay!"), download_http_resp],
[bucket.name, file.name], download_dest: downloadio, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: downloadio, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -427,7 +427,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [nil, download_http_resp], # using encryption keys seems to return nil
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: key_options
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: key_headers.merge("Accept-Encoding" => "gzip") }

bucket.service.mocked_service = mock

Expand All @@ -442,7 +442,7 @@ def file.md5
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { 'Range' => 'bytes=3-6' }}
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { "Range" => "bytes=3-6", "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -457,7 +457,7 @@ def file.md5
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { 'Range' => 'bytes=-6' }}
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { "Range" => "bytes=-6", "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -477,7 +477,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -504,7 +504,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -531,7 +531,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -558,7 +558,7 @@ def file.crc32c; "crc32c="; end

mock = Minitest::Mock.new
mock.expect :get_object, [StringIO.new(data), download_http_resp],
[bucket.name, file.name], download_dest: path, generation: 1234567890, user_project: nil, options: {}
[bucket.name, file.name], download_dest: path, generation: 1234567890, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -577,7 +577,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand Down Expand Up @@ -608,7 +608,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: tmpfile, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -633,7 +633,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file.name], download_dest: tmpfile.path, generation: generation, user_project: nil, options: {}
[bucket.name, file.name], download_dest: tmpfile.path, generation: generation, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand Down
28 changes: 16 additions & 12 deletions google-cloud-storage/test/google/cloud/storage/lazy/file_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: {}
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -221,7 +221,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket_name, file_name], download_dest: tmpfile.path, generation: nil, user_project: nil, options: {}
[bucket_name, file_name], download_dest: tmpfile.path, generation: nil, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -244,7 +244,7 @@ def file_user_project.md5

mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket.name, file_user_project.name], download_dest: tmpfile, generation: nil, user_project: "test", options: {}
[bucket.name, file_user_project.name], download_dest: tmpfile, generation: nil, user_project: "test", options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -265,7 +265,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [StringIO.new("yay!"), download_http_resp],
[bucket_name, file_name], download_dest: downloadio, generation: nil, user_project: nil, options: {}
[bucket_name, file_name], download_dest: downloadio, generation: nil, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -285,7 +285,7 @@ def file.md5

mock = Minitest::Mock.new
mock.expect :get_object, [StringIO.new("yay!"), download_http_resp],
[bucket_name, file_name], download_dest: downloadio, generation: nil, user_project: nil, options: {}
[bucket_name, file_name], download_dest: downloadio, generation: nil, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -307,8 +307,12 @@ def file.md5
tmpfile.write "yay!"

mock = Minitest::Mock.new

expected_options = key_options.dup
expected_options[:header] ||= {}
expected_options[:header]["Accept-Encoding"] = "gzip"
mock.expect :get_object, [nil, download_http_resp], # using encryption keys seems to return nil
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: key_options
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: expected_options

bucket.service.mocked_service = mock

Expand All @@ -328,7 +332,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: {}
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -355,7 +359,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: {}
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -382,7 +386,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: {}
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -409,7 +413,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: {}
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand Down Expand Up @@ -440,7 +444,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: {}
[bucket_name, file_name], download_dest: tmpfile, generation: nil, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand All @@ -465,7 +469,7 @@ def file.crc32c; "crc32c="; end
Tempfile.open "google-cloud" do |tmpfile|
mock = Minitest::Mock.new
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket_name, file_name], download_dest: tmpfile.path, generation: nil, user_project: nil, options: {}
[bucket_name, file_name], download_dest: tmpfile.path, generation: nil, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

bucket.service.mocked_service = mock

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def stub.list_buckets *args
mock.expect :get_bucket, find_bucket_gapi(bucket_name), [bucket_name], **get_bucket_args
mock.expect :get_object, find_file_gapi(bucket_name, file_name), [bucket_name, file_name], **get_object_args
mock.expect :get_object, [tmpfile, download_http_resp],
[bucket_name, file_name], download_dest: tmpfile, generation: 1234567890, user_project: nil, options: {}
[bucket_name, file_name], download_dest: tmpfile, generation: 1234567890, user_project: nil, options: { header: { "Accept-Encoding" => "gzip" } }

anonymous_storage.service.mocked_service = mock

Expand Down
Loading