Fix broken v4 caching due to leader-get asymmetry
leader-get decodes using json, but leader-set just sets the keys. This wasn't taken into consideration when fetching all the keys to filter for cached keys when a relation is leaving. This is resolved in this patch. func-test-pr: https://github.com/openstack-charmers/zaza-openstack-tests/pull/1153 Change-Id: I2d44ec0c43c1ecffd9ac77a1162ead4e4a01aabe (cherry picked from commitd925ac7566
) (cherry picked from commit0a18ac23ce
)
This commit is contained in:
parent
6f7fca7507
commit
159f33149e
@ -565,7 +565,14 @@ class CertCache:
|
|||||||
"""
|
"""
|
||||||
value = hookenv.leader_get(key)
|
value = hookenv.leader_get(key)
|
||||||
if value:
|
if value:
|
||||||
return json.loads(value)
|
if key is not None:
|
||||||
|
# load the value that was json serialised in _store()
|
||||||
|
return json.loads(value)
|
||||||
|
else:
|
||||||
|
# due to a weird asymetry been leader_set and leader_get,
|
||||||
|
# leader_get() already deserialises as json so if no key was
|
||||||
|
# specified, it's already been deserialised.
|
||||||
|
return value
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -856,6 +856,21 @@ class TestLibCharmVaultPKI(unit_tests.test_utils.CharmTestCase):
|
|||||||
self.assertEqual(vault_pki.CertCache(request)._fetch("mine"),
|
self.assertEqual(vault_pki.CertCache(request)._fetch("mine"),
|
||||||
'the-value')
|
'the-value')
|
||||||
|
|
||||||
|
@patch.object(vault_pki.hookenv, 'leader_get')
|
||||||
|
def test_certcache__fetch_none(self, mock_leader_get):
|
||||||
|
request = self._default_request()
|
||||||
|
# due to weird asymetry between leader_get and leader_set, if no
|
||||||
|
# attribute is passed to leader_get() then the result is the
|
||||||
|
# deserialised set of key, values as a dictionary.
|
||||||
|
leader_get = {
|
||||||
|
'a': 'an-a',
|
||||||
|
'b': 'an-b',
|
||||||
|
}
|
||||||
|
|
||||||
|
mock_leader_get.return_value = leader_get
|
||||||
|
self.assertEqual(vault_pki.CertCache(request)._fetch(None), leader_get)
|
||||||
|
mock_leader_get.assert_called_once_with(None)
|
||||||
|
|
||||||
@patch.object(vault_pki.hookenv, 'leader_set')
|
@patch.object(vault_pki.hookenv, 'leader_set')
|
||||||
def test_certcache__store(self, mock_leader_set):
|
def test_certcache__store(self, mock_leader_set):
|
||||||
request = self._default_request()
|
request = self._default_request()
|
||||||
|
Loading…
Reference in New Issue
Block a user