Add a mock swiftclient for testing, add unit tests for private PPAs and private non-PPA runs, fix some issues discovered through the testing.
parent
2de94184b3
commit
e2932055a9
@ -0,0 +1,70 @@
|
||||
# Mock the swiftclient Python library, the bare minimum for ADT purposes
|
||||
# Author: Łukasz 'sil2100' Zemczak <lukasz.zemczak@ubuntu.com>
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
from urllib.request import urlopen
|
||||
|
||||
|
||||
# We want to use this single Python module file to mock out the exception
|
||||
# module as well.
|
||||
sys.modules["swiftclient.exceptions"] = sys.modules[__name__]
|
||||
|
||||
|
||||
class ClientException(Exception):
|
||||
def __init__(self, msg, http_status=''):
|
||||
super(ClientException, self).__init__(msg)
|
||||
self.msg = msg
|
||||
self.http_status = http_status
|
||||
|
||||
|
||||
class Connection:
|
||||
def __init__(self, authurl, user, key, tenant_name, auth_version):
|
||||
self._mocked_swift = 'http://localhost:18085'
|
||||
|
||||
def get_container(self, container, marker=None, limit=None, prefix=None,
|
||||
delimiter=None, end_marker=None, path=None,
|
||||
full_listing=False, headers=None, query_string=None):
|
||||
url = os.path.join(self._mocked_swift, container) + '?' + query_string
|
||||
req = None
|
||||
try:
|
||||
req = urlopen(url, timeout=30)
|
||||
code = req.getcode()
|
||||
if code == 200:
|
||||
result_paths = req.read().decode().strip().splitlines()
|
||||
elif code == 204: # No content
|
||||
result_paths = []
|
||||
else:
|
||||
raise ClientException('MockedError', http_status=str(code))
|
||||
except IOError as e:
|
||||
# 401 "Unauthorized" is swift's way of saying "container does not exist"
|
||||
# But here we just assume swiftclient handles this via the usual
|
||||
# ClientException.
|
||||
raise ClientException('MockedError', http_status=str(e.code) if hasattr(e, 'code') else '')
|
||||
finally:
|
||||
if req is not None:
|
||||
req.close()
|
||||
|
||||
return (None, result_paths)
|
||||
|
||||
def get_object(self, container, obj):
|
||||
url = os.path.join(self._mocked_swift, container, obj)
|
||||
req = None
|
||||
try:
|
||||
req = urlopen(url, timeout=30)
|
||||
code = req.getcode()
|
||||
if code == 200:
|
||||
contents = req.read()
|
||||
else:
|
||||
raise ClientException('MockedError', http_status=str(code))
|
||||
except IOError as e:
|
||||
# 401 "Unauthorized" is swift's way of saying "container does not exist"
|
||||
# But here we just assume swiftclient handles this via the usual
|
||||
# ClientException.
|
||||
raise ClientException('MockedError', http_status=str(e.code) if hasattr(e, 'code') else '')
|
||||
finally:
|
||||
if req is not None:
|
||||
req.close()
|
||||
|
||||
return (None, contents)
|
Loading…
Reference in new issue