From c9eb37c86aec62128ff62e74bbf52d2431564d99 Mon Sep 17 00:00:00 2001 From: ankk98 Date: Sat, 17 May 2025 00:49:05 +0530 Subject: [PATCH 1/3] Add ability to specify s3 restore object tier in post_object_restore #740 --- lib/fog/aws/requests/storage/post_object_restore.rb | 12 +++++++++--- tests/requests/storage/object_tests.rb | 5 +++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/fog/aws/requests/storage/post_object_restore.rb b/lib/fog/aws/requests/storage/post_object_restore.rb index 9b9b05d750..8f17e89c56 100644 --- a/lib/fog/aws/requests/storage/post_object_restore.rb +++ b/lib/fog/aws/requests/storage/post_object_restore.rb @@ -7,6 +7,7 @@ class Real # @param bucket_name [String] Name of bucket containing object # @param object_name [String] Name of object to restore # @option days [Integer] Number of days to restore object for. Defaults to 100000 (a very long time) + # @option tier [String] Glacier retrieval tier. Can be 'Standard', 'Bulk', or 'Expedited' # # @return [Excon::Response] response: # * status [Integer] 200 (OK) Object is previously restored @@ -15,11 +16,16 @@ class Real # # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPOSTrestore.html # - def post_object_restore(bucket_name, object_name, days = 100000) + def post_object_restore(bucket_name, object_name, days = 100000, tier = nil) raise ArgumentError.new('bucket_name is required') unless bucket_name raise ArgumentError.new('object_name is required') unless object_name - data = '' + days.to_s + '' + data = '' + data += '' + days.to_s + '' + if tier + data += '' + tier + '' + end + data += '' headers = {} headers['Content-MD5'] = Base64.encode64(OpenSSL::Digest::MD5.digest(data)).strip @@ -39,7 +45,7 @@ def post_object_restore(bucket_name, object_name, days = 100000) end class Mock # :nodoc:all - def post_object_restore(bucket_name, object_name, days = 100000) + def post_object_restore(bucket_name, object_name, days = 100000, tier = nil) response = get_object(bucket_name, object_name) response.body = nil response diff --git a/tests/requests/storage/object_tests.rb b/tests/requests/storage/object_tests.rb index 053112163b..d37496a6d1 100644 --- a/tests/requests/storage/object_tests.rb +++ b/tests/requests/storage/object_tests.rb @@ -96,6 +96,11 @@ Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object') end + tests("#post_object_restore('#{@directory.identity}', 'fog_object', 5, 'Bulk')").succeeds do + pending unless Fog.mocking? + Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object', 5, 'Bulk') + end + tests("#put_object_acl('#{@directory.identity}', 'fog_object', 'private')").succeeds do Fog::Storage[:aws].put_object_acl(@directory.identity, 'fog_object', 'private') end From 1755b2dc91452d5b143f55f981704aaec0370081 Mon Sep 17 00:00:00 2001 From: ankk98 Date: Mon, 19 May 2025 23:39:48 +0530 Subject: [PATCH 2/3] Refactor post_object_restore to accept options hash for parameters, deprecating bare days parameter usage #740 --- .../requests/storage/post_object_restore.rb | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/fog/aws/requests/storage/post_object_restore.rb b/lib/fog/aws/requests/storage/post_object_restore.rb index 8f17e89c56..bdcd921321 100644 --- a/lib/fog/aws/requests/storage/post_object_restore.rb +++ b/lib/fog/aws/requests/storage/post_object_restore.rb @@ -6,8 +6,9 @@ class Real # # @param bucket_name [String] Name of bucket containing object # @param object_name [String] Name of object to restore - # @option days [Integer] Number of days to restore object for. Defaults to 100000 (a very long time) - # @option tier [String] Glacier retrieval tier. Can be 'Standard', 'Bulk', or 'Expedited' + # @param options [Hash] Optional parameters + # @option options [Integer] :days Number of days to restore object for. Defaults to 100000 (a very long time) + # @option options [String] :tier Glacier retrieval tier. Can be 'Standard', 'Bulk', or 'Expedited' # # @return [Excon::Response] response: # * status [Integer] 200 (OK) Object is previously restored @@ -16,10 +17,18 @@ class Real # # @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPOSTrestore.html # - def post_object_restore(bucket_name, object_name, days = 100000, tier = nil) + def post_object_restore(bucket_name, object_name, options = {}) raise ArgumentError.new('bucket_name is required') unless bucket_name raise ArgumentError.new('object_name is required') unless object_name + unless options.is_a?(Hash) + Fog::Logger.deprecation("post_object_restore with a bare days parameter is deprecated, use post_object_restore(bucket_name, object_name, :days => days) instead [light_black](#{caller.first})[/]") + options = { :days => options } + end + + days = options[:days] || 100000 + tier = options[:tier] + data = '' data += '' + days.to_s + '' if tier @@ -45,7 +54,12 @@ def post_object_restore(bucket_name, object_name, days = 100000, tier = nil) end class Mock # :nodoc:all - def post_object_restore(bucket_name, object_name, days = 100000, tier = nil) + def post_object_restore(bucket_name, object_name, options = {}) + unless options.is_a?(Hash) + Fog::Logger.deprecation("post_object_restore with a bare days parameter is deprecated, use post_object_restore(bucket_name, object_name, :days => days) instead [light_black](#{caller.first})[/]") + options = { :days => options } + end + response = get_object(bucket_name, object_name) response.body = nil response From 2f99ab4a245aa995af5615f8515b448d0e8181e6 Mon Sep 17 00:00:00 2001 From: ankk98 Date: Mon, 19 May 2025 23:48:23 +0530 Subject: [PATCH 3/3] Update post_object_restore tests to use options hash for parameters and add additional test case for days parameter #740 --- tests/requests/storage/object_tests.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/requests/storage/object_tests.rb b/tests/requests/storage/object_tests.rb index d37496a6d1..7740aead7d 100644 --- a/tests/requests/storage/object_tests.rb +++ b/tests/requests/storage/object_tests.rb @@ -96,9 +96,14 @@ Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object') end - tests("#post_object_restore('#{@directory.identity}', 'fog_object', 5, 'Bulk')").succeeds do + tests("#post_object_restore('#{@directory.identity}', 'fog_object', :days => 5, :tier => 'Bulk')").succeeds do pending unless Fog.mocking? - Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object', 5, 'Bulk') + Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object', :days => 5, :tier => 'Bulk') + end + + tests("#post_object_restore('#{@directory.identity}', 'fog_object', 5)").succeeds do + pending unless Fog.mocking? + Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object', 5) end tests("#put_object_acl('#{@directory.identity}', 'fog_object', 'private')").succeeds do