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

Reply via email to