password can contain colons

This commit is contained in:
Andrey Pohilko
2017-02-11 08:44:05 +06:00
parent d2e86beb16
commit f374ecf0f1
2 changed files with 45 additions and 7 deletions

View File

@@ -54,15 +54,27 @@ class Registry:
self.http = None
self.last_error = None
def parse_login(self, login):
if login != None:
if not ':' in login:
self.last_error = "Please provide -l in the form USER:PASSWORD"
return (None, None)
self.last_error = None
return login.split(':', 1)
return (None, None)
@staticmethod
def create(host, login, no_validate_ssl):
r = Registry
if login != None:
if not ':' in login:
r.last_error = "Please provide -l in the form USER:PASSWORD"
print(r.last_error)
exit(1)
(r.username, r.password) = login.split(':')
r = Registry()
(r.username, r.password) = r.parse_login(login)
if r.last_error != None:
print(r.last_error)
exit(1)
r.hostname = host
r.no_validate_ssl = no_validate_ssl

26
test.py
View File

@@ -19,6 +19,28 @@ class TestRequests:
self.return_value.status_code = status_code
self.return_value.text = text
class TestParseLogin(unittest.TestCase):
def setUp(self):
self.registry = Registry()
def test_login_args_ok(self):
(username, password) = self.registry.parse_login("username:password")
self.assertEqual(username, "username")
self.assertEqual(password, "password")
self.assertEqual(self.registry.last_error, None)
def test_login_args_double_colon(self):
(username, password) = self.registry.parse_login("username:pass:word")
self.assertEqual(username, "username")
self.assertEqual(password, "pass:word")
self.assertEqual(self.registry.last_error, None)
def test_login_args_no_colon(self):
(username, password) = self.registry.parse_login("username/password")
self.assertEqual(username, None)
self.assertEqual(password, None)
self.assertEqual(self.registry.last_error, "Please provide -l in the form USER:PASSWORD")
class TestRegistrySend(unittest.TestCase):
@@ -52,6 +74,7 @@ class TestRegistrySend(unittest.TestCase):
self.registry.http.reset_return_value(200)
response = self.registry.send('/v2/catalog')
self.assertEqual(response.status_code, 200)
self.assertEqual(self.registry.last_error, None)
self.registry.http.request.assert_called_with('GET',
'http://testdomain.com/v2/catalog',
auth = ("test_login", "test_password"),
@@ -152,6 +175,7 @@ class TestListDigest(unittest.TestCase):
)
self.assertEqual(response, 'sha256:85295b0e7456a8fbbc886722b483f87f2bff553fa0beeaf37f5d807aff7c1e52')
self.assertEqual(self.registry.last_error, None)
def test_invalid_status_code(self):
self.registry.http.reset_return_value(400)
@@ -194,6 +218,7 @@ class TestListLayers(unittest.TestCase):
)
self.assertEqual(response, "layers_list")
self.assertEqual(self.registry.last_error, None)
def test_list_layers_schema_version_1_ok(self):
@@ -218,6 +243,7 @@ class TestListLayers(unittest.TestCase):
)
self.assertEqual(response, "layers_list")
self.assertEqual(self.registry.last_error, None)
def test_list_layers_invalid_status_code(self):
self.registry.http.reset_return_value(400, "whatever")