From efa6dd08645adae441b319bd2c4d4b8bc5549a91 Mon Sep 17 00:00:00 2001 From: Thomas Thrainer <thomasth@google.com> Date: Mon, 29 Apr 2013 13:51:21 +0200 Subject: [PATCH] Add test for DRBD 8.4 /proc/drbd parsing The current parser already supports the output of DRBD 8.4 /proc/drbd, so add tests which actually verify this behaviour. Note that the empty lines in proc_drbd84.txt are actually present in the output of DRBD 8.4, they always appear when minors are not contiguous. Signed-off-by: Thomas Thrainer <thomasth@google.com> Signed-off-by: Michele Tartara <mtartara@google.com> Reviewed-by: Michele Tartara <mtartara@google.com> --- Makefile.am | 2 + test/data/proc_drbd84.txt | 16 +++++ test/data/proc_drbd84_sync.txt | 11 ++++ test/hs/Test/Ganeti/Block/Drbd/Parser.hs | 81 ++++++++++++++++++++++++ test/py/ganeti.block.bdev_unittest.py | 23 +++++-- 5 files changed, 127 insertions(+), 6 deletions(-) create mode 100644 test/data/proc_drbd84.txt create mode 100644 test/data/proc_drbd84_sync.txt diff --git a/Makefile.am b/Makefile.am index aa61abb7d..61f2adacc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1098,6 +1098,8 @@ TEST_FILES = \ test/data/proc_drbd83_sync.txt \ test/data/proc_drbd83_sync_want.txt \ test/data/proc_drbd83_sync_krnl2.6.39.txt \ + test/data/proc_drbd84.txt \ + test/data/proc_drbd84_sync.txt \ test/data/qa-minimal-nodes-instances-only.json \ test/data/sys_drbd_usermode_helper.txt \ test/data/vgreduce-removemissing-2.02.02.txt \ diff --git a/test/data/proc_drbd84.txt b/test/data/proc_drbd84.txt new file mode 100644 index 000000000..a8b3cbfb9 --- /dev/null +++ b/test/data/proc_drbd84.txt @@ -0,0 +1,16 @@ +version: 8.4.2 (api:1/proto:86-101) +GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by root@example.com, 2013-04-10 07:45:25 + 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- + ns:1048576 nr:0 dw:0 dr:1048776 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 + 1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- + ns:0 nr:1048576 dw:1048576 dr:0 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 + 2: cs:Unconfigured + + 4: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----- + ns:0 nr:0 dw:0 dr:200 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1048320 + + 6: cs:Connected ro:Secondary/Primary ds:Diskless/UpToDate C r----- + ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 + + 8: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown r----- + ns:0 nr:0 dw:0 dr:200 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1048320 diff --git a/test/data/proc_drbd84_sync.txt b/test/data/proc_drbd84_sync.txt new file mode 100644 index 000000000..20971ba15 --- /dev/null +++ b/test/data/proc_drbd84_sync.txt @@ -0,0 +1,11 @@ +version: 8.4.2 (api:1/proto:86-101) +GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by root@example.com, 2013-04-10 07:45:25 + 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown r----- + ns:0 nr:0 dw:33318 dr:730 al:15 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:1048320 + + 3: cs:Unconfigured + + 5: cs:SyncSource ro:Secondary/Secondary ds:UpToDate/Inconsistent C r---n- + ns:716992 nr:0 dw:0 dr:719432 al:0 bm:43 lo:0 pe:33 ua:18 ap:0 ep:1 wo:f oos:335744 + [============>.......] sync'ed: 68.5% (335744/1048576)K + finish: 0:00:05 speed: 64,800 (64,800) K/sec diff --git a/test/hs/Test/Ganeti/Block/Drbd/Parser.hs b/test/hs/Test/Ganeti/Block/Drbd/Parser.hs index 3b3b74fcf..9ca748582 100644 --- a/test/hs/Test/Ganeti/Block/Drbd/Parser.hs +++ b/test/hs/Test/Ganeti/Block/Drbd/Parser.hs @@ -92,6 +92,85 @@ case_drbd80_emptyversion = testFile "proc_drbd80-emptyversion.txt" $ UnconfiguredDevice 6 ] +-- | Test a DRBD 8.4 file with an ongoing synchronization. +case_drbd84_sync :: Assertion +case_drbd84_sync = testFile "proc_drbd84_sync.txt" $ + DRBDStatus + ( VersionInfo (Just "8.4.2") (Just "1") (Just "86-101") Nothing + (Just "7ad5f850d711223713d6dcadc3dd48860321070c") + (Just "root@example.com, 2013-04-10 07:45:25") + ) + [ DeviceInfo 0 StandAlone (LocalRemote Primary Unknown) + (LocalRemote UpToDate DUnknown) ' ' "r-----" + (PerfIndicators 0 0 33318 730 15 0 0 0 0 0 (Just 1) + (Just 'd') (Just 1048320)) + Nothing + Nothing + Nothing + Nothing, + UnconfiguredDevice 3, + DeviceInfo 5 SyncSource (LocalRemote Secondary Secondary) + (LocalRemote UpToDate Inconsistent) 'C' "r---n-" + (PerfIndicators 716992 0 0 719432 0 43 0 33 18 0 (Just 1) + (Just 'f') (Just 335744)) + (Just $ SyncStatus 68.5 335744 1048576 KiloByte (Time 0 0 5) 64800 + Nothing KiloByte Second) + Nothing + Nothing + Nothing + ] + +-- | Test a DRBD 8.4 file. +case_drbd84 :: Assertion +case_drbd84 = testFile "proc_drbd84.txt" $ + DRBDStatus + ( VersionInfo (Just "8.4.2") (Just "1") (Just "86-101") Nothing + (Just "7ad5f850d711223713d6dcadc3dd48860321070c") + (Just "root@example.com, 2013-04-10 07:45:25") + ) + [ DeviceInfo 0 Connected (LocalRemote Primary Secondary) + (LocalRemote UpToDate UpToDate) 'C' "r-----" + (PerfIndicators 1048576 0 0 1048776 0 64 0 0 0 0 (Just 1) + (Just 'f') (Just 0)) + Nothing + Nothing + Nothing + Nothing, + DeviceInfo 1 Connected (LocalRemote Secondary Primary) + (LocalRemote UpToDate UpToDate) 'C' "r-----" + (PerfIndicators 0 1048576 1048576 0 0 64 0 0 0 0 (Just 1) + (Just 'f') (Just 0)) + Nothing + Nothing + Nothing + Nothing, + UnconfiguredDevice 2, + DeviceInfo 4 WFConnection (LocalRemote Primary Unknown) + (LocalRemote UpToDate DUnknown) 'C' "r-----" + (PerfIndicators 0 0 0 200 0 0 0 0 0 0 (Just 1) + (Just 'f') (Just 1048320)) + Nothing + Nothing + Nothing + Nothing, + DeviceInfo 6 Connected (LocalRemote Secondary Primary) + (LocalRemote Diskless UpToDate) 'C' "r-----" + (PerfIndicators 0 0 0 0 0 0 0 0 0 0 (Just 1) (Just 'b') + (Just 0)) + Nothing + Nothing + Nothing + Nothing, + DeviceInfo 8 StandAlone (LocalRemote Secondary Unknown) + (LocalRemote UpToDate DUnknown) ' ' "r-----" + (PerfIndicators 0 0 0 200 0 0 0 0 0 0 (Just 1) + (Just 'f') (Just 1048320)) + Nothing + Nothing + Nothing + Nothing + ] + -- | Test a DRBD 8.3 file with a NULL caracter inside. case_drbd83_sync_krnl2_6_39 :: Assertion case_drbd83_sync_krnl2_6_39 = testFile "proc_drbd83_sync_krnl2.6.39.txt" $ @@ -404,6 +483,8 @@ case_commaInt_non_triplet = testCommaInt "61,736,12" 61736 testSuite "Block/Drbd/Parser" [ 'case_drbd80_emptyline, 'case_drbd80_emptyversion, + 'case_drbd84_sync, + 'case_drbd84, 'case_drbd83_sync_krnl2_6_39, 'case_drbd83_sync, 'case_drbd83_sync_want, diff --git a/test/py/ganeti.block.bdev_unittest.py b/test/py/ganeti.block.bdev_unittest.py index 279ffff25..58dcbac04 100755 --- a/test/py/ganeti.block.bdev_unittest.py +++ b/test/py/ganeti.block.bdev_unittest.py @@ -245,6 +245,8 @@ class TestDRBD8Status(testutils.GanetiTestCase): proc83_sync_data = testutils.TestDataFilename("proc_drbd83_sync.txt") proc83_sync_krnl_data = \ testutils.TestDataFilename("proc_drbd83_sync_krnl2.6.39.txt") + proc84_data = testutils.TestDataFilename("proc_drbd84.txt") + proc84_sync_data = testutils.TestDataFilename("proc_drbd84_sync.txt") self.proc80ev_data = \ testutils.TestDataFilename("proc_drbd80-emptyversion.txt") @@ -256,6 +258,9 @@ class TestDRBD8Status(testutils.GanetiTestCase): drbd.DRBD8Info.CreateFromFile(filename=proc83_sync_data) self.drbd_info83_sync_krnl = \ drbd.DRBD8Info.CreateFromFile(filename=proc83_sync_krnl_data) + self.drbd_info84 = drbd.DRBD8Info.CreateFromFile(filename=proc84_data) + self.drbd_info84_sync = \ + drbd.DRBD8Info.CreateFromFile(filename=proc84_sync_data) def testIOErrors(self): """Test handling of errors while reading the proc file.""" @@ -289,7 +294,7 @@ class TestDRBD8Status(testutils.GanetiTestCase): def testMinor0(self): """Test connected, primary device""" - for info in [self.drbd_info, self.drbd_info83]: + for info in [self.drbd_info, self.drbd_info83, self.drbd_info84]: stats = info.GetMinorStatus(0) self.failUnless(stats.is_in_use) self.failUnless(stats.is_connected and stats.is_primary and @@ -297,7 +302,7 @@ class TestDRBD8Status(testutils.GanetiTestCase): def testMinor1(self): """Test connected, secondary device""" - for info in [self.drbd_info, self.drbd_info83]: + for info in [self.drbd_info, self.drbd_info83, self.drbd_info84]: stats = info.GetMinorStatus(1) self.failUnless(stats.is_in_use) self.failUnless(stats.is_connected and stats.is_secondary and @@ -305,13 +310,14 @@ class TestDRBD8Status(testutils.GanetiTestCase): def testMinor2(self): """Test unconfigured device""" - for info in [self.drbd_info, self.drbd_info83, self.drbd_info80e]: + for info in [self.drbd_info, self.drbd_info83, + self.drbd_info80e, self.drbd_info84]: stats = info.GetMinorStatus(2) self.failIf(stats.is_in_use) def testMinor4(self): """Test WFconn device""" - for info in [self.drbd_info, self.drbd_info83]: + for info in [self.drbd_info, self.drbd_info83, self.drbd_info84]: stats = info.GetMinorStatus(4) self.failUnless(stats.is_in_use) self.failUnless(stats.is_wfconn and stats.is_primary and @@ -320,7 +326,7 @@ class TestDRBD8Status(testutils.GanetiTestCase): def testMinor6(self): """Test diskless device""" - for info in [self.drbd_info, self.drbd_info83]: + for info in [self.drbd_info, self.drbd_info83, self.drbd_info84]: stats = info.GetMinorStatus(6) self.failUnless(stats.is_in_use) self.failUnless(stats.is_connected and stats.is_secondary and @@ -328,7 +334,7 @@ class TestDRBD8Status(testutils.GanetiTestCase): def testMinor8(self): """Test standalone device""" - for info in [self.drbd_info, self.drbd_info83]: + for info in [self.drbd_info, self.drbd_info83, self.drbd_info84]: stats = info.GetMinorStatus(8) self.failUnless(stats.is_in_use) self.failUnless(stats.is_standalone and @@ -345,6 +351,11 @@ class TestDRBD8Status(testutils.GanetiTestCase): self.failUnless(stats.is_in_resync) self.failUnless(stats.sync_percent is not None) + def testDRBD84Sync(self): + stats = self.drbd_info84_sync.GetMinorStatus(5) + self.failUnless(stats.is_in_resync) + self.failUnless(stats.sync_percent is not None) + def testDRBDEmptyVersion(self): self.assertRaises(errors.BlockDeviceError, drbd.DRBD8Info.CreateFromFile, -- GitLab