From e80edd3b2dc7b2e75f86155c6d5c7d9bc684d148 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Wed, 6 Feb 2013 14:04:43 +0100 Subject: [PATCH] qa_config: Add __repr__ for instance/node classes Having a readable representation makes debugging easier. Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: Bernardo Dal Seno <bdalseno@google.com> --- qa/qa_config.py | 22 +++++++++++++ test/py/qa.qa_config_unittest.py | 54 ++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/qa/qa_config.py b/qa/qa_config.py index d879d2df3..664baace9 100644 --- a/qa/qa_config.py +++ b/qa/qa_config.py @@ -70,6 +70,17 @@ class _QaInstance(object): return cls(name=data["name"], nicmac=nicmac) + def __repr__(self): + status = [ + "%s.%s" % (self.__class__.__module__, self.__class__.__name__), + "name=%s" % self.name, + "nicmac=%s" % self.nicmac, + "used=%s" % self._used, + "disk_template=%s" % self._disk_template, + ] + + return "<%s at %#x>" % (" ".join(status), id(self)) + def Use(self): """Marks instance as being in use. @@ -150,6 +161,17 @@ class _QaNode(object): """ return cls(primary=data["primary"], secondary=data.get("secondary")) + def __repr__(self): + status = [ + "%s.%s" % (self.__class__.__module__, self.__class__.__name__), + "primary=%s" % self.primary, + "secondary=%s" % self.secondary, + "added=%s" % self._added, + "use_count=%s" % self._use_count, + ] + + return "<%s at %#x>" % (" ".join(status), id(self)) + def Use(self): """Marks a node as being in use. diff --git a/test/py/qa.qa_config_unittest.py b/test/py/qa.qa_config_unittest.py index b3e4b58c3..ce987f887 100755 --- a/test/py/qa.qa_config_unittest.py +++ b/test/py/qa.qa_config_unittest.py @@ -350,5 +350,59 @@ class TestQaConfig(unittest.TestCase): exclude=acquired, _cfg=self.config) +class TestRepresentation(unittest.TestCase): + def _Check(self, target, part): + self.assertTrue(part in repr(target).split()) + + def testQaInstance(self): + inst = qa_config._QaInstance("inst1.example.com", []) + self._Check(inst, "name=inst1.example.com") + self._Check(inst, "nicmac=[]") + + # Default values + self._Check(inst, "disk_template=None") + self._Check(inst, "used=None") + + # Use instance + inst.Use() + self._Check(inst, "used=True") + + # Disk template + inst.SetDiskTemplate(constants.DT_DRBD8) + self._Check(inst, "disk_template=%s" % constants.DT_DRBD8) + + # Release instance + inst.Release() + self._Check(inst, "used=False") + self._Check(inst, "disk_template=None") + + def testQaNode(self): + node = qa_config._QaNode("primary.example.com", "192.0.2.1") + self._Check(node, "primary=primary.example.com") + self._Check(node, "secondary=192.0.2.1") + self._Check(node, "added=False") + self._Check(node, "use_count=0") + + # Mark as added + node.MarkAdded() + self._Check(node, "added=True") + + # Use node + for i in range(1, 5): + node.Use() + self._Check(node, "use_count=%s" % i) + + # Release node + for i in reversed(range(1, 5)): + node.Release() + self._Check(node, "use_count=%s" % (i - 1)) + + self._Check(node, "use_count=0") + + # Mark as added + node.MarkRemoved() + self._Check(node, "added=False") + + if __name__ == "__main__": testutils.GanetiTestProgram() -- GitLab