Browse Source

Update gcp permissions, initial work on test

FabioRosado 4 years ago
parent
commit
768de379c3
2 changed files with 28 additions and 1 deletions
  1. 6 1
      cloudbridge/providers/gcp/resources.py
  2. 22 0
      tests/test_object_store_service.py

+ 6 - 1
cloudbridge/providers/gcp/resources.py

@@ -1978,8 +1978,13 @@ class GCPBucketObject(BaseBucketObject):
     def generate_url(self, expires_in, write):
         """
         Generates a signed URL accessible to everyone.
+
+        Note that if the user asks for write permissions, we need
+        to set the `http_method` as PUT so the user can keep updating
+        the files with the same URL.
+
         """
-        http_method = "POST" if write else "GET"
+        http_method = "PUT" if write else "GET"
 
         # pylint:disable=protected-access
         return helpers.generate_signed_url(

+ 22 - 0
tests/test_object_store_service.py

@@ -193,6 +193,28 @@ class CloudObjectStoreServiceTestCase(ProviderTestBase):
                         " access generated url")
                 self.assertEqual(requests.get(url).content, content)
 
+    @helpers.skipIfNoService(['storage.buckets'])
+    def test_generate_url_write_permissions(self):
+        name = "cbtestbucketobjs-{0}".format(helpers.get_uuid())
+        test_bucket = self.provider.storage.buckets.create(name)
+
+        with cb_helpers.cleanup_action(lambda: test_bucket.delete()):
+            obj_name = "hello_upload_download.txt"
+            obj = test_bucket.objects.create(obj_name)
+
+            with cb_helpers.cleanup_action(lambda: obj.delete()):
+                content = b"Hello World. Generate a url."
+                obj.upload(content)
+                target_stream = BytesIO()
+                obj.save_content(target_stream)
+
+                url = obj.generate_url(100, write=True)
+                if isinstance(self.provider, TestMockHelperMixin):
+                    raise self.skipTest(
+                        "Skipping rest of test - mock providers can't"
+                        " access generated url")
+                self.assertEqual(requests.post(url).content, content)
+
     @helpers.skipIfNoService(['storage.buckets'])
     def test_upload_download_bucket_content_from_file(self):
         name = "cbtestbucketobjs-{0}".format(helpers.get_uuid())