From a48a1e826ac0a74ab05a16c441cda4e4b34b1241 Mon Sep 17 00:00:00 2001 From: David Ames Date: Thu, 16 Jul 2020 14:14:44 -0700 Subject: [PATCH] Collapse available and available.auth Most reactive charms react on identity-service.available but the current interface distinguishes between available and available.auth. It is somewhat assumed by most charms that identity-service.available is equivalent to identity-service.available.auth, as what charms are concerned with is the ability to authenticate against the cloud. Collapse the difference between identity-service.available and identity-service.available.auth. Continue to set identity-service.available.auth for any charms that may rely on it. Change-Id: I494feea5f3ef8706140ce712b1e025e52b0dfbd1 Closes-Bug: #1818113 --- requires.py | 12 +----------- tox.ini | 5 +++++ unit_tests/test_requires.py | 18 ++++-------------- 3 files changed, 10 insertions(+), 25 deletions(-) diff --git a/requires.py b/requires.py index adcbcdd..45e33dd 100644 --- a/requires.py +++ b/requires.py @@ -44,6 +44,7 @@ class KeystoneRequires(RelationBase): def update_state(self): if self.base_data_complete(): self.set_state('{relation_name}.available') + self.set_state('{relation_name}.available.auth') if self.ssl_data_complete(): self.set_state('{relation_name}.available.ssl') else: @@ -52,10 +53,6 @@ class KeystoneRequires(RelationBase): self.set_state('{relation_name}.available.ssl_legacy') else: self.remove_state('{relation_name}.available.ssl_legacy') - if self.auth_data_complete(): - self.set_state('{relation_name}.available.auth') - else: - self.remove_state('{relation_name}.available.auth') else: self.remove_state('{relation_name}.available') self.remove_state('{relation_name}.available.ssl') @@ -79,13 +76,6 @@ class KeystoneRequires(RelationBase): 'auth_host': self.auth_host(), 'auth_protocol': self.auth_protocol(), 'auth_port': self.auth_port(), - } - if all(data.values()): - return True - return False - - def auth_data_complete(self): - data = { 'service_tenant': self.service_tenant(), 'service_username': self.service_username(), 'service_password': self.service_password(), diff --git a/tox.ini b/tox.ini index 4bb9117..3dec020 100644 --- a/tox.ini +++ b/tox.ini @@ -33,6 +33,11 @@ basepython = python3.8 deps = -r{toxinidir}/test-requirements.txt commands = stestr run {posargs} +[testenv:py3] +basepython = python3 +deps = -r{toxinidir}/test-requirements.txt +commands = stestr run {posargs} + [testenv:pep8] basepython = python3 deps = -r{toxinidir}/test-requirements.txt diff --git a/unit_tests/test_requires.py b/unit_tests/test_requires.py index 2c27bfb..0a7c51b 100644 --- a/unit_tests/test_requires.py +++ b/unit_tests/test_requires.py @@ -115,18 +115,13 @@ class TestKeystoneRequires(unittest.TestCase): self.patch_kr('auth_host', '5') self.patch_kr('auth_protocol', '6') self.patch_kr('auth_port', '7') - assert self.kr.base_data_complete() is True - self.auth_port.return_value = None - assert self.kr.base_data_complete() is False - - def test_auth_data_complete(self): self.patch_kr('service_tenant', '1') self.patch_kr('service_username', '2') self.patch_kr('service_password', '3') self.patch_kr('service_tenant_id', '4') - assert self.kr.auth_data_complete() is True + assert self.kr.base_data_complete() is True self.service_tenant.return_value = None - assert self.kr.auth_data_complete() is False + assert self.kr.base_data_complete() is False def test_ssl_data_complete(self): self.patch_kr('ssl_cert_admin', '1') @@ -158,7 +153,6 @@ class TestKeystoneRequires(unittest.TestCase): self.patch_kr('base_data_complete', False) self.patch_kr('ssl_data_complete', False) self.patch_kr('ssl_data_complete_legacy', False) - self.patch_kr('auth_data_complete', False) self.patch_kr('set_state') self.patch_kr('remove_state') # test when not all base data is available. @@ -173,11 +167,11 @@ class TestKeystoneRequires(unittest.TestCase): # test when just the base data is available. self.base_data_complete.return_value = True self.kr.update_state() - self.set_state.assert_called_once_with('{relation_name}.available') + self.set_state.assert_any_call('{relation_name}.available') + self.set_state.assert_any_call('{relation_name}.available.auth') self.remove_state.assert_any_call('{relation_name}.available.ssl') self.remove_state.assert_any_call( '{relation_name}.available.ssl_legacy') - self.remove_state.assert_any_call('{relation_name}.available.auth') self.set_state.reset_mock() self.remove_state.reset_mock() # test ssl_data_complete @@ -187,7 +181,6 @@ class TestKeystoneRequires(unittest.TestCase): self.set_state.assert_any_call('{relation_name}.available.ssl') self.remove_state.assert_any_call( '{relation_name}.available.ssl_legacy') - self.remove_state.assert_any_call('{relation_name}.available.auth') self.set_state.reset_mock() self.remove_state.reset_mock() # test ssl_data_complete_legacy @@ -197,11 +190,8 @@ class TestKeystoneRequires(unittest.TestCase): self.set_state.assert_any_call('{relation_name}.available.ssl') self.set_state.assert_any_call( '{relation_name}.available.ssl_legacy') - self.remove_state.assert_any_call('{relation_name}.available.auth') self.set_state.reset_mock() self.remove_state.reset_mock() - # test auth_data_complete() - self.auth_data_complete.return_value = True self.kr.update_state() self.set_state.assert_any_call('{relation_name}.available') self.set_state.assert_any_call('{relation_name}.available.ssl')