diff --git a/Makefile.am b/Makefile.am index 2b20bf00f52b4f9c9bc8bf10f3c600470a622e34..996feff90f76dc4a7f23eac0e49160decdfb1493 100644 --- a/Makefile.am +++ b/Makefile.am @@ -106,6 +106,7 @@ DIRS = \ qa \ test \ test/data \ + test/data/bdev-rbd \ test/data/ovfdata \ test/data/ovfdata/other \ test/py \ @@ -986,6 +987,18 @@ TEST_FILES = \ test/data/bdev-drbd-disk.txt \ test/data/bdev-drbd-net-ip4.txt \ test/data/bdev-drbd-net-ip6.txt \ + test/data/bdev-rbd/json_output_empty.txt \ + test/data/bdev-rbd/json_output_extra_matches.txt \ + test/data/bdev-rbd/json_output_no_matches.txt \ + test/data/bdev-rbd/json_output_ok.txt \ + test/data/bdev-rbd/plain_output_new_extra_matches.txt \ + test/data/bdev-rbd/plain_output_new_no_matches.txt \ + test/data/bdev-rbd/plain_output_new_ok.txt \ + test/data/bdev-rbd/plain_output_old_empty.txt \ + test/data/bdev-rbd/plain_output_old_extra_matches.txt \ + test/data/bdev-rbd/plain_output_old_no_matches.txt \ + test/data/bdev-rbd/plain_output_old_ok.txt \ + test/data/bdev-rbd/output_invalid.txt \ test/data/cert1.pem \ test/data/cert2.pem \ test/data/instance-minor-pairing.txt \ diff --git a/test/data/bdev-rbd/json_output_empty.txt b/test/data/bdev-rbd/json_output_empty.txt new file mode 100644 index 0000000000000000000000000000000000000000..0967ef424bce6791893e9a57bb952f80fd536e93 --- /dev/null +++ b/test/data/bdev-rbd/json_output_empty.txt @@ -0,0 +1 @@ +{} diff --git a/test/data/bdev-rbd/json_output_extra_matches.txt b/test/data/bdev-rbd/json_output_extra_matches.txt new file mode 100644 index 0000000000000000000000000000000000000000..321c43829c95d80605885ddcce97275fe4bb4c19 --- /dev/null +++ b/test/data/bdev-rbd/json_output_extra_matches.txt @@ -0,0 +1 @@ +{"4":{"pool":"rbd","name":"d7ab910a-4933-4ffe-88d0-faf2ce31390a.rbd.disk0","snap":"-","device":"\/dev\/rbd4"},"1":{"pool":"rbd","name":"b9e31bb3-4d4f-4a2c-bc63-207a0bc4b287.rbd.disk0","snap":"-","device":"\/dev\/rbd1"},"2":{"pool":"rbd","name":"abe7957a-ec96-490f-9c08-53b1c51cecf0.rbd.disk0","snap":"-","device":"\/dev\/rbd2"},"3":{"pool":"rbd","name":"d7ab910a-4933-4ffe-88d0-faf2ce31390a.rbd.disk0","snap":"-","device":"\/dev\/rbd3"}} diff --git a/test/data/bdev-rbd/json_output_no_matches.txt b/test/data/bdev-rbd/json_output_no_matches.txt new file mode 100644 index 0000000000000000000000000000000000000000..a29878850a3646af1132bb6217eb849f3f382124 --- /dev/null +++ b/test/data/bdev-rbd/json_output_no_matches.txt @@ -0,0 +1 @@ +{"1":{"pool":"rbd","name":"b9e31bb3-4d4f-4a2c-bc63-207a0bc4b287.rbd.disk0","snap":"-","device":"\/dev\/rbd1"},"2":{"pool":"rbd","name":"abe7957a-ec96-490f-9c08-53b1c51cecf0.rbd.disk0","snap":"-","device":"\/dev\/rbd2"}} diff --git a/test/data/bdev-rbd/json_output_ok.txt b/test/data/bdev-rbd/json_output_ok.txt new file mode 100644 index 0000000000000000000000000000000000000000..0d5173f5da496da1ef571e7628a9dabd24193a3f --- /dev/null +++ b/test/data/bdev-rbd/json_output_ok.txt @@ -0,0 +1 @@ +{"1":{"pool":"rbd","name":"b9e31bb3-4d4f-4a2c-bc63-207a0bc4b287.rbd.disk0","snap":"-","device":"\/dev\/rbd1"},"2":{"pool":"rbd","name":"abe7957a-ec96-490f-9c08-53b1c51cecf0.rbd.disk0","snap":"-","device":"\/dev\/rbd2"},"3":{"pool":"rbd","name":"d7ab910a-4933-4ffe-88d0-faf2ce31390a.rbd.disk0","snap":"-","device":"\/dev\/rbd3"}} diff --git a/test/data/bdev-rbd/output_invalid.txt b/test/data/bdev-rbd/output_invalid.txt new file mode 100644 index 0000000000000000000000000000000000000000..27aa7b10a13c4c1a66578dbdb4b38b27660466a1 --- /dev/null +++ b/test/data/bdev-rbd/output_invalid.txt @@ -0,0 +1 @@ +invalid rbd output diff --git a/test/data/bdev-rbd/plain_output_new_empty.txt b/test/data/bdev-rbd/plain_output_new_empty.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/test/data/bdev-rbd/plain_output_new_extra_matches.txt b/test/data/bdev-rbd/plain_output_new_extra_matches.txt new file mode 100644 index 0000000000000000000000000000000000000000..f7bc907189f378c23a72b3969aadd1c7e2088bb4 --- /dev/null +++ b/test/data/bdev-rbd/plain_output_new_extra_matches.txt @@ -0,0 +1,5 @@ +id pool image snap device +4 rbd d7ab910a-4933-4ffe-88d0-faf2ce31390a.rbd.disk0 - /dev/rbd4 +1 rbd b9e31bb3-4d4f-4a2c-bc63-207a0bc4b287.rbd.disk0 - /dev/rbd1 +2 rbd abe7957a-ec96-490f-9c08-53b1c51cecf0.rbd.disk0 - /dev/rbd2 +3 rbd d7ab910a-4933-4ffe-88d0-faf2ce31390a.rbd.disk0 - /dev/rbd3 diff --git a/test/data/bdev-rbd/plain_output_new_no_matches.txt b/test/data/bdev-rbd/plain_output_new_no_matches.txt new file mode 100644 index 0000000000000000000000000000000000000000..bc126b3dc55c17576dcde6de74dee86fe6f9b142 --- /dev/null +++ b/test/data/bdev-rbd/plain_output_new_no_matches.txt @@ -0,0 +1,3 @@ +id pool image snap device +1 rbd b9e31bb3-4d4f-4a2c-bc63-207a0bc4b287.rbd.disk0 - /dev/rbd1 +2 rbd abe7957a-ec96-490f-9c08-53b1c51cecf0.rbd.disk0 - /dev/rbd2 diff --git a/test/data/bdev-rbd/plain_output_new_ok.txt b/test/data/bdev-rbd/plain_output_new_ok.txt new file mode 100644 index 0000000000000000000000000000000000000000..bc250941f13c875be3c0fdcfad15073f2f6b7200 --- /dev/null +++ b/test/data/bdev-rbd/plain_output_new_ok.txt @@ -0,0 +1,3 @@ +1 rbd b9e31bb3-4d4f-4a2c-bc63-207a0bc4b287.rbd.disk0 - /dev/rbd1 +2 rbd abe7957a-ec96-490f-9c08-53b1c51cecf0.rbd.disk0 - /dev/rbd2 +3 rbd d7ab910a-4933-4ffe-88d0-faf2ce31390a.rbd.disk0 - /dev/rbd3 diff --git a/test/data/bdev-rbd/plain_output_old_empty.txt b/test/data/bdev-rbd/plain_output_old_empty.txt new file mode 100644 index 0000000000000000000000000000000000000000..0bb19ea0cf424ddf3b92098c1b3f36286872d756 --- /dev/null +++ b/test/data/bdev-rbd/plain_output_old_empty.txt @@ -0,0 +1 @@ +id pool image snap device diff --git a/test/data/bdev-rbd/plain_output_old_extra_matches.txt b/test/data/bdev-rbd/plain_output_old_extra_matches.txt new file mode 100644 index 0000000000000000000000000000000000000000..52848e4966df87c5f26bcf56fa621ef5cd522bf8 --- /dev/null +++ b/test/data/bdev-rbd/plain_output_old_extra_matches.txt @@ -0,0 +1,5 @@ +id pool image snap device +4 rbd d7ab910a-4933-4ffe-88d0-faf2ce31390a.rbd.disk0 - /dev/rbd4 +1 rbd b9e31bb3-4d4f-4a2c-bc63-207a0bc4b287.rbd.disk0 - /dev/rbd1 +2 rbd abe7957a-ec96-490f-9c08-53b1c51cecf0.rbd.disk0 - /dev/rbd2 +3 rbd d7ab910a-4933-4ffe-88d0-faf2ce31390a.rbd.disk0 - /dev/rbd3 diff --git a/test/data/bdev-rbd/plain_output_old_no_matches.txt b/test/data/bdev-rbd/plain_output_old_no_matches.txt new file mode 100644 index 0000000000000000000000000000000000000000..3632b483ca1c95c9a0c39b90e8d16bc92bf13e68 --- /dev/null +++ b/test/data/bdev-rbd/plain_output_old_no_matches.txt @@ -0,0 +1,3 @@ +id pool image snap device +1 rbd b9e31bb3-4d4f-4a2c-bc63-207a0bc4b287.rbd.disk0 - /dev/rbd1 +2 rbd abe7957a-ec96-490f-9c08-53b1c51cecf0.rbd.disk0 - /dev/rbd2 diff --git a/test/data/bdev-rbd/plain_output_old_ok.txt b/test/data/bdev-rbd/plain_output_old_ok.txt new file mode 100644 index 0000000000000000000000000000000000000000..c2e1e5c3abe994cde859a3893041435f786a2c43 --- /dev/null +++ b/test/data/bdev-rbd/plain_output_old_ok.txt @@ -0,0 +1,4 @@ +id pool image snap device +1 rbd b9e31bb3-4d4f-4a2c-bc63-207a0bc4b287.rbd.disk0 - /dev/rbd1 +2 rbd abe7957a-ec96-490f-9c08-53b1c51cecf0.rbd.disk0 - /dev/rbd2 +3 rbd d7ab910a-4933-4ffe-88d0-faf2ce31390a.rbd.disk0 - /dev/rbd3 diff --git a/test/py/ganeti.bdev_unittest.py b/test/py/ganeti.bdev_unittest.py index 4aa310687d9ea6602d35f091cb808cc5ad791f36..8243375c5bf85b4c3b5584c3f803714ac5980432 100755 --- a/test/py/ganeti.bdev_unittest.py +++ b/test/py/ganeti.bdev_unittest.py @@ -346,35 +346,72 @@ class TestDRBD8Status(testutils.GanetiTestCase): class TestRADOSBlockDevice(testutils.GanetiTestCase): - def test_ParseRbdShowmappedOutput(self): - volume_name = "abc9778-8e8ace5b.rbd.disk0" - output_ok = \ - ("0\trbd\te69f28e5-9817.rbd.disk0\t-\t/dev/rbd0\n" - "1\t/dev/rbd0\tabc9778-8e8ace5b.rbd.disk0\t-\t/dev/rbd16\n" - "line\twith\tfewer\tfields\n" - "") - output_empty = "" - output_no_matches = \ - ("0\trbd\te69f28e5-9817.rbd.disk0\t-\t/dev/rbd0\n" - "1\trbd\tabcdef01-9817.rbd.disk0\t-\t/dev/rbd10\n" - "2\trbd\tcdef0123-9817.rbd.disk0\t-\t/dev/rbd12\n" - "something\twith\tfewer\tfields" - "") - output_extra_matches = \ - ("0\t/dev/rbd0\tabc9778-8e8ace5b.rbd.disk0\t-\t/dev/rbd11\n" - "1\trbd\te69f28e5-9817.rbd.disk0\t-\t/dev/rbd0\n" - "2\t/dev/rbd0\tabc9778-8e8ace5b.rbd.disk0\t-\t/dev/rbd16\n" - "something\twith\tfewer\tfields" - "") - - parse_function = bdev.RADOSBlockDevice._ParseRbdShowmappedOutput - self.assertEqual(parse_function(output_ok, volume_name), "/dev/rbd16") + def setUp(self): + """Set up input data""" + testutils.GanetiTestCase.setUp(self) + + self.plain_output_old_ok = \ + testutils.ReadTestData("bdev-rbd/plain_output_old_ok.txt") + self.plain_output_old_no_matches = \ + testutils.ReadTestData("bdev-rbd/plain_output_old_no_matches.txt") + self.plain_output_old_extra_matches = \ + testutils.ReadTestData("bdev-rbd/plain_output_old_extra_matches.txt") + self.plain_output_old_empty = \ + testutils.ReadTestData("bdev-rbd/plain_output_old_empty.txt") + self.plain_output_new_ok = \ + testutils.ReadTestData("bdev-rbd/plain_output_new_ok.txt") + self.plain_output_new_no_matches = \ + testutils.ReadTestData("bdev-rbd/plain_output_new_no_matches.txt") + self.plain_output_new_extra_matches = \ + testutils.ReadTestData("bdev-rbd/plain_output_new_extra_matches.txt") + # This file is completely empty, and as such it's not shipped. + self.plain_output_new_empty = "" + self.json_output_ok = testutils.ReadTestData("bdev-rbd/json_output_ok.txt") + self.json_output_no_matches = \ + testutils.ReadTestData("bdev-rbd/json_output_no_matches.txt") + self.json_output_extra_matches = \ + testutils.ReadTestData("bdev-rbd/json_output_extra_matches.txt") + self.json_output_empty = \ + testutils.ReadTestData("bdev-rbd/json_output_empty.txt") + self.output_invalid = testutils.ReadTestData("bdev-rbd/output_invalid.txt") + + self.volume_name = "d7ab910a-4933-4ffe-88d0-faf2ce31390a.rbd.disk0" + + def test_ParseRbdShowmappedJson(self): + parse_function = bdev.RADOSBlockDevice._ParseRbdShowmappedJson + + self.assertEqual(parse_function(self.json_output_ok, self.volume_name), + "/dev/rbd3") + self.assertEqual(parse_function(self.json_output_empty, self.volume_name), + None) + self.assertEqual(parse_function(self.json_output_no_matches, + self.volume_name), None) self.assertRaises(errors.BlockDeviceError, parse_function, - output_empty, volume_name) - self.assertEqual(parse_function(output_no_matches, volume_name), None) + self.json_output_extra_matches, self.volume_name) self.assertRaises(errors.BlockDeviceError, parse_function, - output_extra_matches, volume_name) - + self.output_invalid, self.volume_name) + + def test_ParseRbdShowmappedPlain(self): + parse_function = bdev.RADOSBlockDevice._ParseRbdShowmappedPlain + + self.assertEqual(parse_function(self.plain_output_new_ok, + self.volume_name), "/dev/rbd3") + self.assertEqual(parse_function(self.plain_output_old_ok, + self.volume_name), "/dev/rbd3") + self.assertEqual(parse_function(self.plain_output_new_empty, + self.volume_name), None) + self.assertEqual(parse_function(self.plain_output_old_empty, + self.volume_name), None) + self.assertEqual(parse_function(self.plain_output_new_no_matches, + self.volume_name), None) + self.assertEqual(parse_function(self.plain_output_old_no_matches, + self.volume_name), None) + self.assertRaises(errors.BlockDeviceError, parse_function, + self.plain_output_new_extra_matches, self.volume_name) + self.assertRaises(errors.BlockDeviceError, parse_function, + self.plain_output_old_extra_matches, self.volume_name) + self.assertRaises(errors.BlockDeviceError, parse_function, + self.output_invalid, self.volume_name) class TestComputeWrongFileStoragePathsInternal(unittest.TestCase): def testPaths(self):