Skip to content

Commit

Permalink
Merge pull request #1195 from lmlg/ceph-key-tests
Browse files Browse the repository at this point in the history
Implement tests for ceph-mon's rotate-key action
  • Loading branch information
sabaini authored Apr 22, 2024
2 parents cedd9fd + e083e56 commit 2e0beac
Showing 1 changed file with 64 additions and 0 deletions.
64 changes: 64 additions & 0 deletions zaza/openstack/charm_tests/ceph/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1748,3 +1748,67 @@ def test_persistent_config(self):
)
data = json.loads(result['Stdout'])
assert data['loglevel'] == 2


class CephMonKeyRotationTests(test_utils.BaseCharmTest):
"""Tests for the rotate-key action."""

def _get_all_keys(self, unit, entity_filter):
cmd = 'sudo ceph auth ls'
result = zaza_model.run_on_unit(unit, cmd)
# Don't use json formatting, as it's buggy upstream.
data = result['Stdout'].split()
ret = set()

for ix, line in enumerate(data):
# Structure:
# $ENTITY
# key:
# key contents
# That's why we need to move one position ahead.
if 'key:' in line and entity_filter(data[ix - 1]):
ret.add((data[ix - 1], data[ix + 1]))
return ret

def _check_key_rotation(self, entity, unit):
def entity_filter(name):
return name.startswith(entity)

old_keys = self._get_all_keys(unit, entity_filter)
action_obj = zaza_model.run_action(
unit_name=unit,
action_name='rotate-key',
action_params={'entity': entity}
)
zaza_utils.assertActionRanOK(action_obj)
zaza_model.wait_for_application_states()
new_keys = self._get_all_keys(unit, entity_filter)
self.assertNotEqual(old_keys, new_keys)
diff = new_keys - old_keys
self.assertEqual(len(diff), 1)
first = next(iter(diff))
# Check that the entity matches. The 'entity_filter'
# callable will return a true-like value if it
# matches the type of entity we're after (i.e: 'mgr')
self.assertTrue(entity_filter(first[0]))

def _get_rgw_client(self, unit):
ret = self._get_all_keys(unit, lambda x: x.startswith('client.rgw'))
if not ret:
return None
return next(iter(ret))[0]

def test_key_rotate(self):
"""Test that rotating the keys actually changes them."""
unit = 'ceph-mon/0'
self._check_key_rotation('mgr', unit)

try:
zaza_model.get_application('ceph-radosgw')
rgw_client = self._get_rgw_client(unit)
if rgw_client:
self._check_key_rotation(rgw_client, unit)
else:
logging.info('ceph-radosgw units present, but no RGW service')
except KeyError:
pass

0 comments on commit 2e0beac

Please sign in to comment.