diff --git a/registry.py b/registry.py index 8d11025..3ab1e18 100755 --- a/registry.py +++ b/registry.py @@ -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 diff --git a/test.py b/test.py index 8bd56ee..bd520fe 100644 --- a/test.py +++ b/test.py @@ -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")