From 49f986e766fb568347818d7bec945054f7b51b8a Mon Sep 17 00:00:00 2001
From: Guido Trotter <ultrotter@google.com>
Date: Fri, 21 May 2010 15:12:05 +0100
Subject: [PATCH] TestSingleFileEventHandler: abstract notifier type

Rather than hardcode that we have two notifiers, and notifier 0 is the
terminating one, we abstract this with class level constants. This makes
it easier to add more, with different features.

The only real change is that now the callback class takes as input the
whole test object, rather than just the notified array, to have access
to those constants.

The rest is just replacing of hardcoded 0s and 1s with
self.NOTIFIER_TERM and self.NOTIFIER_NORM, and of notifier_count with
len(self.NOTIFIERS).

Signed-off-by: Guido Trotter <ultrotter@google.com>
Reviewed-by: Balazs Lecz <leczb@google.com>
---
 test/ganeti.asyncnotifier_unittest.py | 83 ++++++++++++++-------------
 1 file changed, 42 insertions(+), 41 deletions(-)

diff --git a/test/ganeti.asyncnotifier_unittest.py b/test/ganeti.asyncnotifier_unittest.py
index f487af772..b379ba1ef 100755
--- a/test/ganeti.asyncnotifier_unittest.py
+++ b/test/ganeti.asyncnotifier_unittest.py
@@ -41,79 +41,80 @@ import testutils
 class TestSingleFileEventHandler(testutils.GanetiTestCase):
   """Test daemon.Mainloop"""
 
+  NOTIFIERS = [NOTIFIER_TERM, NOTIFIER_NORM] = range(2)
+
   def setUp(self):
     testutils.GanetiTestCase.setUp(self)
     self.mainloop = daemon.Mainloop()
-    notifier_count = 2
-    self.chk_files = [self._CreateTempFile() for i in range(notifier_count)]
-    self.notified = [False for i in range(notifier_count)]
+    self.chk_files = [self._CreateTempFile() for i in self.NOTIFIERS]
+    self.notified = [False for i in self.NOTIFIERS]
     # We need one watch manager per notifier, as those contain the file
     # descriptor which is monitored by asyncore
-    self.wms = [pyinotify.WatchManager() for i in range(notifier_count)]
-    self.cbk = [self.OnInotifyCallback(self.notified, i)
-                  for i in range(notifier_count)]
+    self.wms = [pyinotify.WatchManager() for i in self.NOTIFIERS]
+    self.cbk = [self.OnInotifyCallback(self, i)
+                 for i in range(len(self.NOTIFIERS))]
     self.ihandler = [asyncnotifier.SingleFileEventHandler(self.wms[i],
                                                           self.cbk[i],
                                                           self.chk_files[i])
-                      for i in range(notifier_count)]
+                      for i in range(len(self.NOTIFIERS))]
     self.notifiers = [asyncnotifier.AsyncNotifier(self.wms[i],
                                                   self.ihandler[i])
-                       for i in range(notifier_count)]
-    # notifier 0 is enabled by default, as we use it to get out of the loop
-    self.ihandler[0].enable()
+                       for i in range(len(self.NOTIFIERS))]
+    # TERM notifier is enabled by default, as we use it to get out of the loop
+    self.ihandler[self.NOTIFIER_TERM].enable()
 
   class OnInotifyCallback:
-    def __init__(self, notified, i):
-      self.notified = notified
+    def __init__(self, testobj, i):
+      self.testobj = testobj
+      self.notified = testobj.notified
       self.i = i
 
     def __call__(self, enabled):
       self.notified[self.i] = True
-      # notifier 0 is special as we use it to terminate the mainloop
-      if self.i == 0:
+      if self.i == self.testobj.NOTIFIER_TERM:
         os.kill(os.getpid(), signal.SIGTERM)
 
   def testReplace(self):
-    utils.WriteFile(self.chk_files[0], data="dummy")
+    utils.WriteFile(self.chk_files[self.NOTIFIER_TERM], data="dummy")
     self.mainloop.Run()
-    self.assert_(self.notified[0])
-    self.assert_(not self.notified[1])
+    self.assert_(self.notified[self.NOTIFIER_TERM])
+    self.assert_(not self.notified[self.NOTIFIER_NORM])
 
   def testEnableDisable(self):
-    self.ihandler[0].enable()
-    self.ihandler[0].disable()
-    self.ihandler[0].disable()
-    self.ihandler[0].enable()
-    self.ihandler[0].disable()
-    self.ihandler[0].enable()
-    utils.WriteFile(self.chk_files[0], data="dummy")
+    self.ihandler[self.NOTIFIER_TERM].enable()
+    self.ihandler[self.NOTIFIER_TERM].disable()
+    self.ihandler[self.NOTIFIER_TERM].disable()
+    self.ihandler[self.NOTIFIER_TERM].enable()
+    self.ihandler[self.NOTIFIER_TERM].disable()
+    self.ihandler[self.NOTIFIER_TERM].enable()
+    utils.WriteFile(self.chk_files[self.NOTIFIER_TERM], data="dummy")
     self.mainloop.Run()
-    self.assert_(self.notified[0])
-    self.assert_(not self.notified[1])
+    self.assert_(self.notified[self.NOTIFIER_TERM])
+    self.assert_(not self.notified[self.NOTIFIER_NORM])
 
   def testDoubleEnable(self):
-    self.ihandler[0].enable()
-    self.ihandler[0].enable()
-    utils.WriteFile(self.chk_files[0], data="dummy")
+    self.ihandler[self.NOTIFIER_TERM].enable()
+    self.ihandler[self.NOTIFIER_TERM].enable()
+    utils.WriteFile(self.chk_files[self.NOTIFIER_TERM], data="dummy")
     self.mainloop.Run()
-    self.assert_(self.notified[0])
-    self.assert_(not self.notified[1])
+    self.assert_(self.notified[self.NOTIFIER_TERM])
+    self.assert_(not self.notified[self.NOTIFIER_NORM])
 
   def testDefaultDisabled(self):
-    utils.WriteFile(self.chk_files[1], data="dummy")
-    utils.WriteFile(self.chk_files[0], data="dummy")
+    utils.WriteFile(self.chk_files[self.NOTIFIER_NORM], data="dummy")
+    utils.WriteFile(self.chk_files[self.NOTIFIER_TERM], data="dummy")
     self.mainloop.Run()
-    self.assert_(self.notified[0])
-    # notifier 1 is disabled by default
-    self.assert_(not self.notified[1])
+    self.assert_(self.notified[self.NOTIFIER_TERM])
+    # NORM notifier is disabled by default
+    self.assert_(not self.notified[self.NOTIFIER_NORM])
 
   def testBothEnabled(self):
-    self.ihandler[1].enable()
-    utils.WriteFile(self.chk_files[1], data="dummy")
-    utils.WriteFile(self.chk_files[0], data="dummy")
+    self.ihandler[self.NOTIFIER_NORM].enable()
+    utils.WriteFile(self.chk_files[self.NOTIFIER_NORM], data="dummy")
+    utils.WriteFile(self.chk_files[self.NOTIFIER_TERM], data="dummy")
     self.mainloop.Run()
-    self.assert_(self.notified[0])
-    self.assert_(self.notified[1])
+    self.assert_(self.notified[self.NOTIFIER_TERM])
+    self.assert_(self.notified[self.NOTIFIER_NORM])
 
 
 if __name__ == "__main__":
-- 
GitLab