tests: improve idempotency and isolation

Use sort_keys when serializing in json format for idempotency under
Python 3; Mock out calls to get_osds in broker test to ensure that
a local install of ceph-common does not cause unit test failures.

Change-Id: I6ce4075fd38e8431372a359cc88332d2da7a3974
This commit is contained in:
James Page 2018-01-09 13:50:15 +00:00
parent d94dc3e7b9
commit 1ccf7c2b25
4 changed files with 23 additions and 15 deletions

View File

@ -338,7 +338,7 @@ def save_service(service_name, service):
service['groups'] = {}
return monitor_key_set(service='admin',
key="cephx.services.{}".format(service_name),
value=json.dumps(service))
value=json.dumps(service, sort_keys=True))
def save_group(group, group_name):
@ -346,7 +346,7 @@ def save_group(group, group_name):
group_key = get_group_key(group_name=group_name)
return monitor_key_set(service='admin',
key=group_key,
value=json.dumps(group))
value=json.dumps(group, sort_keys=True))
def get_group_key(group_name):

View File

@ -2148,11 +2148,11 @@ def dirs_need_ownership_update(service):
return False
# A dict of valid ceph upgrade paths. Mapping is old -> new
UPGRADE_PATHS = {
'firefly': 'hammer',
'hammer': 'jewel',
'jewel': 'luminous',
}
UPGRADE_PATHS = collections.OrderedDict([
('firefly', 'hammer'),
('hammer', 'jewel'),
('jewel', 'luminous'),
])
# Map UCA codenames to ceph codenames
UCA_CODENAME_MAP = {

View File

@ -64,7 +64,7 @@ class CephBrokerTestCase(unittest.TestCase):
key='cephx.groups.images',
service='admin',
value=json.dumps({"pools": ["glance", "cinder"],
"services": ["nova"]}))
"services": ["nova"]}, sort_keys=True))
_check_call.assert_called_with([
'ceph', 'auth', 'caps',
'client.nova', 'mon', 'allow r', 'osd',
@ -83,7 +83,8 @@ class CephBrokerTestCase(unittest.TestCase):
_monitor_key_set.assert_called_with(
key='cephx.groups.images',
service='admin',
value=json.dumps({"pools": ["glance", "cinder"], "services": []}))
value=json.dumps({"pools": ["glance", "cinder"], "services": []},
sort_keys=True))
@patch.object(ceph.broker, 'monitor_key_set')
@patch.object(ceph.broker, 'monitor_key_get')
@ -98,7 +99,8 @@ class CephBrokerTestCase(unittest.TestCase):
_monitor_key_set.assert_called_with(
key='cephx.groups.images',
service='admin',
value=json.dumps({"pools": ["glance"], "services": []}))
value=json.dumps({"pools": ["glance"], "services": []},
sort_keys=True))
def test_pool_permission_list_for_service(self):
service = {
@ -142,7 +144,7 @@ class CephBrokerTestCase(unittest.TestCase):
}
ceph.broker.save_service(service=service, service_name='nova')
_monitor_key_set.assert_called_with(
value='{"groups": {}, "group_names": {"rwx": "images"}}',
value=json.dumps(service, sort_keys=True),
key='cephx.services.nova',
service='admin')
@ -195,7 +197,7 @@ class CephBrokerTestCase(unittest.TestCase):
_monitor_key_set.assert_called_with(
key='cephx.groups.images',
service='admin',
value=json.dumps(group))
value=json.dumps(group, sort_keys=True))
@patch.object(ceph.broker, 'monitor_key_get')
def test_get_group_empty_str(self, _monitor_key_get):
@ -254,13 +256,16 @@ class CephBrokerTestCase(unittest.TestCase):
{'exit-code': 1,
'stderr': "Unknown operation 'invalid_op'"})
@patch.object(ceph.broker, 'get_osds')
@patch.object(ceph.broker, 'ReplicatedPool')
@patch.object(ceph.broker, 'pool_exists')
@patch.object(ceph.broker, 'log')
def test_process_requests_create_pool_w_pg_num(self, mock_log,
mock_pool_exists,
mock_replicated_pool):
mock_replicated_pool,
mock_get_osds):
mock_pool_exists.return_value = False
mock_get_osds.return_value = [0, 1, 2]
reqs = json.dumps({'api-version': 1,
'ops': [{
'op': 'create-pool',

View File

@ -507,8 +507,11 @@ class CephTestCase(unittest.TestCase):
utils.osd_noout(True)
def test_pretty_print_upgrade_paths(self):
expected = (['firefly -> hammer', 'jewel -> luminous',
'hammer -> jewel'])
expected = ([
'firefly -> hammer',
'hammer -> jewel',
'jewel -> luminous',
])
self.assertEqual(utils.pretty_print_upgrade_paths(), expected)