From d41efc420aeebc18b3f87fb56470cab21b612546 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 empty version in /proc/drbd

The previous patch removed a (rather implicit) test for /proc/drbd not
containing a version line. This adds an explicit test for this case.

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                              |  1 +
 test/data/proc_drbd80-emptyversion.txt   |  9 +++++++++
 test/hs/Test/Ganeti/Block/Drbd/Parser.hs | 23 +++++++++++++++++++++++
 test/py/ganeti.block.bdev_unittest.py    |  8 ++++++++
 4 files changed, 41 insertions(+)
 create mode 100644 test/data/proc_drbd80-emptyversion.txt

diff --git a/Makefile.am b/Makefile.am
index 0d308c0df..aa61abb7d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1093,6 +1093,7 @@ TEST_FILES = \
 	test/data/ovfdata/wrong_xml.ovf \
 	test/data/proc_drbd8.txt \
 	test/data/proc_drbd80-emptyline.txt \
+	test/data/proc_drbd80-emptyversion.txt \
 	test/data/proc_drbd83.txt \
 	test/data/proc_drbd83_sync.txt \
 	test/data/proc_drbd83_sync_want.txt \
diff --git a/test/data/proc_drbd80-emptyversion.txt b/test/data/proc_drbd80-emptyversion.txt
new file mode 100644
index 000000000..cefd15ff0
--- /dev/null
+++ b/test/data/proc_drbd80-emptyversion.txt
@@ -0,0 +1,9 @@
+GIT-hash: 5c9f89594553e32adb87d9638dce591782f947e3 build by root@node1.example.com, 2009-05-22 12:47:52
+ 0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
+    ns:78728316 nr:0 dw:77675644 dr:1277039 al:254 bm:270 lo:0 pe:0 ua:0 ap:0
+        resync: used:0/61 hits:65657 misses:135 starving:0 dirty:0 changed:135
+        act_log: used:0/257 hits:11378843 misses:254 starving:0 dirty:0 changed:254
+ 1: cs:Unconfigured
+ 2: cs:Unconfigured
+ 5: cs:Unconfigured
+ 6: cs:Unconfigured
diff --git a/test/hs/Test/Ganeti/Block/Drbd/Parser.hs b/test/hs/Test/Ganeti/Block/Drbd/Parser.hs
index f9e57cfb8..3b3b74fcf 100644
--- a/test/hs/Test/Ganeti/Block/Drbd/Parser.hs
+++ b/test/hs/Test/Ganeti/Block/Drbd/Parser.hs
@@ -70,6 +70,28 @@ case_drbd80_emptyline = testFile "proc_drbd80-emptyline.txt" $
       UnconfiguredDevice 6
     ]
 
+-- | Test a DRBD 8.0 file with an empty version.
+case_drbd80_emptyversion :: Assertion
+case_drbd80_emptyversion = testFile "proc_drbd80-emptyversion.txt" $
+  DRBDStatus
+    ( VersionInfo Nothing Nothing Nothing Nothing
+        (Just "5c9f89594553e32adb87d9638dce591782f947e3")
+        (Just "root@node1.example.com, 2009-05-22 12:47:52")
+    )
+    [ DeviceInfo 0 Connected (LocalRemote Primary Secondary)
+        (LocalRemote UpToDate UpToDate) 'C' "r---"
+        (PerfIndicators 78728316 0 77675644 1277039 254 270 0 0 0 0
+          Nothing Nothing Nothing)
+        Nothing
+        (Just $ AdditionalInfo 0 61 65657 135 0 0 135)
+        (Just $ AdditionalInfo 0 257 11378843 254 0 0 254)
+        Nothing,
+      UnconfiguredDevice 1,
+      UnconfiguredDevice 2,
+      UnconfiguredDevice 5,
+      UnconfiguredDevice 6
+    ]
+
 -- | 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" $
@@ -381,6 +403,7 @@ case_commaInt_non_triplet = testCommaInt "61,736,12" 61736
 
 testSuite "Block/Drbd/Parser"
           [ 'case_drbd80_emptyline,
+            'case_drbd80_emptyversion,
             '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 486768356..279ffff25 100755
--- a/test/py/ganeti.block.bdev_unittest.py
+++ b/test/py/ganeti.block.bdev_unittest.py
@@ -246,6 +246,9 @@ class TestDRBD8Status(testutils.GanetiTestCase):
     proc83_sync_krnl_data = \
       testutils.TestDataFilename("proc_drbd83_sync_krnl2.6.39.txt")
 
+    self.proc80ev_data = \
+      testutils.TestDataFilename("proc_drbd80-emptyversion.txt")
+
     self.drbd_info = drbd.DRBD8Info.CreateFromFile(filename=proc_data)
     self.drbd_info80e = drbd.DRBD8Info.CreateFromFile(filename=proc80e_data)
     self.drbd_info83 = drbd.DRBD8Info.CreateFromFile(filename=proc83_data)
@@ -342,6 +345,11 @@ class TestDRBD8Status(testutils.GanetiTestCase):
     self.failUnless(stats.is_in_resync)
     self.failUnless(stats.sync_percent is not None)
 
+  def testDRBDEmptyVersion(self):
+    self.assertRaises(errors.BlockDeviceError,
+                      drbd.DRBD8Info.CreateFromFile,
+                      filename=self.proc80ev_data)
+
 
 class TestRADOSBlockDevice(testutils.GanetiTestCase):
   def setUp(self):
-- 
GitLab