Ema has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/404704 )

Change subject: Add unit test cases for Server
......................................................................


Add unit test cases for Server

Basic test cases for most of the Server class, with the notable
exception of method createMonitoringInstances.

Change-Id: Icdc4f9753e95859623b512634c314649fcfda56d
---
A pybal/test/test_server.py
1 file changed, 128 insertions(+), 0 deletions(-)

Approvals:
  Ema: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/pybal/test/test_server.py b/pybal/test/test_server.py
new file mode 100644
index 0000000..3eefca4
--- /dev/null
+++ b/pybal/test/test_server.py
@@ -0,0 +1,128 @@
+# -*- coding: utf-8 -*-
+"""
+  PyBal unit tests
+  ~~~~~~~~~~~~~~~~
+
+  This module contains tests for `pybal.coordinator.Server`.
+
+"""
+
+import mock
+
+import pybal.coordinator
+
+from twisted.python import failure
+from twisted.internet.reactor import getDelayedCalls
+
+from .fixtures import PyBalTestCase
+
+class ServerTestCase(PyBalTestCase):
+    """Test case for `pybal.coordinator.Server`."""
+
+    def setUp(self):
+        super(ServerTestCase, self).setUp()
+
+        self.server = pybal.coordinator.Server(
+            'example.com', mock.MagicMock())
+
+        self.mockMonitor = mock.MagicMock()
+        self.server.addMonitor(self.mockMonitor)
+
+        self.exampleConfigDict = {
+            'host': "example1.example.com",
+            'weight': 66,
+            'enabled': True,
+            # FIXME: bug in Server.merge
+            #'rogue': "this attribute should not be merged"
+        }
+
+    def tearDown(self):
+        for call in getDelayedCalls():
+            if call.func.func_name == 'maybeParseConfig':
+                call.cancel()
+
+    def testAddMonitor(self):
+        self.assertIn(self.mockMonitor, self.server.monitors)
+
+    def testRemoveMonitors(self):
+        self.server.removeMonitors()
+        self.assertEqual(len(self.server.monitors), 0)
+        self.mockMonitor.stop.assert_called()
+
+    def testResolveHostname(self):
+        def callback(result):
+            self.assertTrue((result == True or isinstance(result, 
failure.Failure)))
+
+        deferred = self.server.resolveHostname()
+        deferred.addCallback(callback)
+        return deferred
+
+    def testDestroy(self):
+        self.server.destroy()
+        self.assertFalse(self.server.enabled)
+        self.assertEqual(len(self.server.monitors), 0)
+
+    def testInitialize(self):
+        def callback(result):
+            self.assertTrue(isinstance(result, bool))
+            self.assertEquals(self.server.ready, result)
+
+        self.server.createMonitoringInstances = mock.MagicMock()
+        deferred = self.server.initialize(coordinator=mock.MagicMock())
+        deferred.addCallback(callback)
+        return deferred
+
+    def testCalcStatus(self):
+        self.mockMonitor.up = True
+        self.assertTrue(self.server.calcStatus())
+        self.assertTrue(self.server.calcPartialStatus())
+
+        m = mock.MagicMock()
+        m.up = True
+        self.server.addMonitor(m)
+        self.assertTrue(self.server.calcStatus())
+        self.assertTrue(self.server.calcPartialStatus())
+
+        m.up = False
+        self.assertFalse(self.server.calcStatus())
+        self.assertTrue(self.server.calcPartialStatus())
+
+        self.mockMonitor.up = False
+        self.assertFalse(self.server.calcPartialStatus())
+
+        # Currently, no monitors implies False Status
+        self.server.removeMonitors()
+        self.assertFalse(self.server.calcStatus())
+        self.assertTrue(self.server.calcPartialStatus())
+
+    def testMaintainState(self):
+        self.server.pooled = True
+        self.server.enabled = False
+        self.server.maintainState()
+        self.assertFalse(self.server.pooled)
+
+        self.server.pooled = False
+        self.server.enabled = True
+        self.server.maintainState()
+        self.assertFalse(self.server.up)
+
+    def testMerge(self):
+        self.server.merge(self.exampleConfigDict)
+        self.assertEquals(self.server.host, self.exampleConfigDict['host'])
+        self.assertEquals(self.server.weight, self.exampleConfigDict['weight'])
+        self.assertEquals(self.server.enabled, 
self.exampleConfigDict['enabled'])
+        self.assertDictContainsSubset(self.exampleConfigDict, 
self.server.__dict__)
+
+    def testDumpState(self):
+        state = self.server.dumpState()
+        self.assertLessEqual(
+            {'pooled', 'weight', 'up', 'enabled'},
+            set(state.keys()))
+
+    def testBuildServer(self):
+        server = self.server.buildServer(
+            hostName=self.exampleConfigDict['host'],
+            configuration=self.exampleConfigDict,
+            lvsservice=mock.MagicMock())
+        self.assertTrue(isinstance(server, pybal.coordinator.Server))
+        self.assertFalse(server.modified)

-- 
To view, visit https://gerrit.wikimedia.org/r/404704
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Icdc4f9753e95859623b512634c314649fcfda56d
Gerrit-PatchSet: 3
Gerrit-Project: operations/debs/pybal
Gerrit-Branch: master
Gerrit-Owner: Mark Bergsma <m...@wikimedia.org>
Gerrit-Reviewer: Ema <e...@wikimedia.org>
Gerrit-Reviewer: Giuseppe Lavagetto <glavage...@wikimedia.org>
Gerrit-Reviewer: Volans <rcocci...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to