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 <[email protected]> --- Makefile.am | 2 ++ test/data/proc_drbd84.txt | 16 ++++++++++++++++ test/data/proc_drbd84_sync.txt | 11 +++++++++++ test/py/ganeti.block.bdev_unittest.py | 23 +++++++++++++++++------ 4 files changed, 46 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 a6557f3..af26c37 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1096,6 +1096,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 0000000..c06488b --- /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 [email protected], 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 0000000..e564c8a --- /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 [email protected], 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/py/ganeti.block.bdev_unittest.py b/test/py/ganeti.block.bdev_unittest.py index 4867683..0b0f0f3 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.drbd_info = drbd.DRBD8Info.CreateFromFile(filename=proc_data) self.drbd_info80e = drbd.DRBD8Info.CreateFromFile(filename=proc80e_data) @@ -253,6 +255,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.""" @@ -286,7 +291,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 @@ -294,7 +299,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 @@ -302,13 +307,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 @@ -317,7 +323,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 @@ -325,7 +331,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 @@ -342,6 +348,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) + class TestRADOSBlockDevice(testutils.GanetiTestCase): def setUp(self): -- 1.8.2.1
