From 36bf79739c6a3be5b82d4c4eb69535439a2b7b1d Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Fri, 4 Sep 2009 13:52:00 +0200
Subject: [PATCH] Add simple unittest for manpages

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Luca Bigliardi <shammash@google.com>
---
 test/docs_unittest.py | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/test/docs_unittest.py b/test/docs_unittest.py
index 0ede50b8c..447061f1e 100755
--- a/test/docs_unittest.py
+++ b/test/docs_unittest.py
@@ -24,6 +24,7 @@
 import unittest
 import re
 
+from ganeti import _autoconf
 from ganeti import utils
 from ganeti import cmdlib
 from ganeti.rapi import connector
@@ -115,5 +116,36 @@ class TestDocs(unittest.TestCase):
                      utils.CommaJoin(undocumented)))
 
 
+class TestManpages(unittest.TestCase):
+  """Manpage tests"""
+
+  @staticmethod
+  def _ReadManFile(name):
+    return utils.ReadFile("%s/man/%s.sgml" %
+                          (testutils.GetSourceDir(), name))
+
+  @staticmethod
+  def _LoadScript(name):
+    return utils.LoadModule("scripts/%s" % name)
+
+  def test(self):
+    for script in _autoconf.GNT_SCRIPTS:
+      self._CheckManpage(script,
+                         self._ReadManFile(script),
+                         self._LoadScript(script).commands.keys())
+
+  def _CheckManpage(self, script, mantext, commands):
+    missing = []
+
+    for cmd in commands:
+      pattern = "<cmdsynopsis>\s*<command>%s</command>" % re.escape(cmd)
+      if not re.findall(pattern, mantext, re.S):
+        missing.append(cmd)
+
+    self.failIf(missing,
+                msg=("Manpage for '%s' missing documentation for %s" %
+                     (script, utils.CommaJoin(missing))))
+
+
 if __name__ == "__main__":
   unittest.main()
-- 
GitLab