host0 = inventories[0]
self.assertEqual(host0['name'], 'host-0')
self.assertEqual(host0['addr'], '1.2.3.4')
- self.assertEqual(host0['devices'][0]['osd_ids'], [1, 2])
- self.assertEqual(host0['devices'][1]['osd_ids'], [1])
- self.assertEqual(host0['devices'][2]['osd_ids'], [2])
+ # devices should be sorted by path name, so
+ # /dev/sdb, /dev/sdc, nvme0n1
+ self.assertEqual(host0['devices'][0]['osd_ids'], [1])
+ self.assertEqual(host0['devices'][1]['osd_ids'], [2])
+ self.assertEqual(host0['devices'][2]['osd_ids'], [1, 2])
host1 = inventories[1]
self.assertEqual(host1['name'], 'host-1')
self.assertEqual(host1['addr'], '1.2.3.5')
+ # devices should be sorted by path name, so
+ # /dev/sda, sdb
self.assertEqual(host1['devices'][0]['osd_ids'], [])
self.assertEqual(host1['devices'][1]['osd_ids'], [3])
+import datetime
import json
import os
import pytest
-from ceph.deployment.inventory import Devices
+from ceph.deployment.inventory import Devices, Device
+from ceph.utils import datetime_now
@pytest.mark.parametrize("filename",
ds = Devices.from_json(data)
assert len(ds.devices) == len(data)
assert Devices.from_json(ds.to_json()) == ds
+
+
+class TestDevicesEquality():
+ created_time1 = datetime_now()
+ created_time2 = created_time1 + datetime.timedelta(seconds=30)
+
+ @pytest.mark.parametrize(
+ "old_devices, new_devices, expected_equal",
+ [
+ ( # identical list should be equal
+ Devices([Device('/dev/sdb', available=True, created=created_time1),
+ Device('/dev/sdc', available=True, created=created_time1)]),
+ Devices([Device('/dev/sdb', available=True, created=created_time1),
+ Device('/dev/sdc', available=True, created=created_time1)]),
+ True,
+ ),
+ ( # differing only in created time should still be equal
+ Devices([Device('/dev/sdb', available=True, created=created_time1),
+ Device('/dev/sdc', available=True, created=created_time1)]),
+ Devices([Device('/dev/sdb', available=True, created=created_time2),
+ Device('/dev/sdc', available=True, created=created_time2)]),
+ True,
+ ),
+ ( # differing in some other field should make them not equal
+ Devices([Device('/dev/sdb', available=True, created=created_time1),
+ Device('/dev/sdc', available=True, created=created_time1)]),
+ Devices([Device('/dev/sdb', available=False, created=created_time1),
+ Device('/dev/sdc', available=True, created=created_time1)]),
+ False,
+ ),
+ ( # different amount of devices should not pass equality
+ Devices([Device('/dev/sdb', available=True, created=created_time1),
+ Device('/dev/sdc', available=True, created=created_time1)]),
+ Devices([Device('/dev/sdb', available=True, created=created_time1),
+ Device('/dev/sdc', available=True, created=created_time1),
+ Device('/dev/sdd', available=True, created=created_time1)]),
+ False,
+ ),
+ ( # differing order should not affect equality
+ Devices([Device('/dev/sdb', available=True, created=created_time1),
+ Device('/dev/sdc', available=True, created=created_time1)]),
+ Devices([Device('/dev/sdc', available=True, created=created_time1),
+ Device('/dev/sdb', available=True, created=created_time1)]),
+ True,
+ ),
+ ])
+ def test_equality(self, old_devices, new_devices, expected_equal):
+ assert (old_devices == new_devices) == expected_equal