Skip to content

Commit e6bba97

Browse files
committed
add test and providers
1 parent 53d1e8e commit e6bba97

6 files changed

Lines changed: 38 additions & 5 deletions

File tree

libcloud/storage/drivers/azure_blobs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
import base64
2020
import hashlib
2121
import binascii
22-
from datetime import datetime, timedelta
2322
from typing import Literal
23+
from datetime import datetime, timedelta
2424

2525
from libcloud.utils.py3 import ET, b, httplib, tostring, urlquote, urlencode
2626
from libcloud.utils.xml import fixxpath

libcloud/storage/drivers/ovh.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def __init__(
8383
def list_regions(self):
8484
return REGION_TO_HOST_MAP.keys()
8585

86-
def get_object_cdn_url(self, obj, ex_expiry=S3_CDN_URL_EXPIRY_HOURS):
86+
def get_object_cdn_url(self, obj, ex_expiry=S3_CDN_URL_EXPIRY_HOURS, ex_method: str = "GET"):
8787
# In order to download (private) objects we need to be able to generate a valid CDN URL,
8888
# hence shamefully just use the working code from the S3StorageDriver.
89-
return S3StorageDriver.get_object_cdn_url(self, obj, ex_expiry=ex_expiry)
89+
return S3StorageDriver.get_object_cdn_url(self, obj, ex_expiry=ex_expiry, ex_method=ex_method)

libcloud/storage/drivers/scaleway.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def __init__(
8585
def list_regions(self):
8686
return REGION_TO_HOST_MAP.keys()
8787

88-
def get_object_cdn_url(self, obj, ex_expiry=S3_CDN_URL_EXPIRY_HOURS):
88+
def get_object_cdn_url(self, obj, ex_expiry=S3_CDN_URL_EXPIRY_HOURS, ex_method: str = "GET"):
8989
# In order to download (private) objects we need to be able to generate a valid CDN URL,
9090
# hence shamefully just use the working code from the S3StorageDriver.
91-
return S3StorageDriver.get_object_cdn_url(self, obj, ex_expiry=ex_expiry)
91+
return S3StorageDriver.get_object_cdn_url(self, obj, ex_expiry=ex_expiry, ex_method=ex_method)

libcloud/test/storage/test_aurora.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ def test_get_object_cdn_url(self):
3838
with self.assertRaises(LibcloudError):
3939
self.driver.get_object_cdn_url(obj)
4040

41+
def test_get_object_cdn_url_put(self):
42+
self.mock_response_klass.type = "get_object"
43+
obj = self.driver.get_object(container_name="test2", object_name="test")
44+
45+
with self.assertRaises(LibcloudError):
46+
self.driver.get_object_cdn_url(obj)
47+
4148

4249
if __name__ == "__main__":
4350
sys.exit(unittest.main())

libcloud/test/storage/test_azure_blobs.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,15 @@ def test_get_object_cdn_url(self):
511511
self.assertEqual(len(query["sig"]), 1)
512512
self.assertGreater(len(query["sig"][0]), 0)
513513

514+
def test_get_object_cdn_url_put(self):
515+
obj = self.driver.get_object(container_name="test_container200", object_name="test")
516+
517+
url = urlparse.urlparse(self.driver.get_object_cdn_url(obj, ex_method="PUT"))
518+
query = urlparse.parse_qs(url.query)
519+
520+
self.assertEqual(len(query["sig"]), 1)
521+
self.assertGreater(len(query["sig"][0]), 0)
522+
514523
def test_get_object_container_doesnt_exist(self):
515524
# This method makes two requests which makes mocking the response a bit
516525
# trickier

libcloud/test/storage/test_s3.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,23 @@ def test_get_object_cdn_url(self):
530530
with self.assertRaises(NotImplementedError):
531531
self.driver.get_object_cdn_url(obj)
532532

533+
def test_get_object_cdn_url_put(self):
534+
self.mock_response_klass.type = "get_object"
535+
obj = self.driver.get_object(container_name="test2", object_name="test")
536+
537+
# cdn urls can only be generated using a V4 connection
538+
if issubclass(self.driver.connectionCls, S3SignatureV4Connection):
539+
cdn_url = self.driver.get_object_cdn_url(obj, ex_method="PUT", ex_expiry=12)
540+
url = urlparse.urlparse(cdn_url)
541+
query = urlparse.parse_qs(url.query)
542+
543+
self.assertEqual(len(query["X-Amz-Signature"]), 1)
544+
self.assertGreater(len(query["X-Amz-Signature"][0]), 0)
545+
self.assertEqual(query["X-Amz-Expires"], ["43200"])
546+
else:
547+
with self.assertRaises(NotImplementedError):
548+
self.driver.get_object_cdn_url(obj)
549+
533550
def test_get_object_container_doesnt_exist(self):
534551
# This method makes two requests which makes mocking the response a bit
535552
# trickier

0 commit comments

Comments
 (0)