Ori.livneh has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/174034

Change subject: Add pybal.test.fixtures and pybal.test.test_monitors
......................................................................

Add pybal.test.fixtures and pybal.test.test_monitors

* Move fixtures and test helpers to pybal.test.fixtures.
* Use twisted.trial.unittest, so we can test deferreds.
* Add some idleconnection tests

Change-Id: Ib204667ea275ce70c077c4d53a1ef860ef765526
---
A pybal/test/fixtures.py
M pybal/test/test_ipvs.py
M pybal/test/test_monitor.py
A pybal/test/test_monitors.py
M pybal/test/test_util.py
M tox.ini
6 files changed, 122 insertions(+), 43 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/debs/pybal 
refs/changes/34/174034/1

diff --git a/pybal/test/fixtures.py b/pybal/test/fixtures.py
new file mode 100644
index 0000000..8b60466
--- /dev/null
+++ b/pybal/test/fixtures.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+"""
+  PyBal unit tests
+  ~~~~~~~~~~~~~~~~
+
+  This module contains fixtures and helpers for PyBal's test suite.
+
+"""
+import unittest
+
+import pybal.util
+import twisted.trial.unittest
+
+
+class ServerStub(object):
+    """Test stub for `pybal.Server`."""
+    def __init__(self, host, ip=None, weight=None, port=None):
+        self.host = host
+        self.ip = ip
+        self.weight = weight
+        self.port = port
+        self.ip4_addresses = set()
+        self.ip6_addresses = set()
+        if ip is not None:
+            (self.ip6_addresses if ':' in ip else self.ip4_addresses).add(ip)
+
+    def __hash__(self):
+        return hash((self.host, self.ip, self.weight, self.port))
+
+
+class StubCoordinator(object):
+    """Test stub for `pybal.pybal.Coordinator`."""
+
+    def __init__(self):
+        self.up = None
+        self.reason = None
+
+    def resultUp(self, monitor):
+        self.up = True
+
+    def resultDown(self, monitor, reason=None):
+        self.up = False
+        self.reason = reason
+
+
+class PyBalTestCase(twisted.trial.unittest.TestCase):
+    """Base class for PyBal test cases."""
+
+    # Use the newer `TestCase.assertRaises` in Python 2.7's stdlib
+    # rather than the one provided by twisted.trial.unittest.
+    assertRaises = unittest.TestCase.assertRaises
+
+    def setUp(self):
+        self.coordinator = StubCoordinator()
+        self.config = pybal.util.ConfigDict()
+        self.server = ServerStub(host='localhost', ip='127.0.0.1', port=80)
diff --git a/pybal/test/test_ipvs.py b/pybal/test/test_ipvs.py
index 7139970..f636c30 100644
--- a/pybal/test/test_ipvs.py
+++ b/pybal/test/test_ipvs.py
@@ -6,26 +6,14 @@
   This module contains tests for `pybal.ipvs`.
 
 """
-import unittest
-
 import pybal.ipvs
 import pybal.util
 import pybal.pybal
 
-
-class ServerStub(object):
-    """Test stub for `pybal.Server`."""
-    def __init__(self, host, ip=None, weight=None, port=None):
-        self.host = host
-        self.ip = ip
-        self.weight = weight
-        self.port = port
-
-    def __hash__(self):
-        return hash((self.host, self.ip, self.weight, self.port))
+from .fixtures import PyBalTestCase, ServerStub
 
 
-class IPVSManagerTestCase(unittest.TestCase):
+class IPVSManagerTestCase(PyBalTestCase):
     """Test case for `pybal.ipvs.IPVSManager`."""
 
     def testSubCommandService(self):
@@ -110,13 +98,13 @@
             subcommand, '-e -t [2620::123]:443 -r localhost -w 25')
 
 
-class LVSServiceTestCase(unittest.TestCase):
+class LVSServiceTestCase(PyBalTestCase):
     """Test case for `pybal.ipvs.LVSService`."""
 
     def setUp(self):
-        self.config = pybal.util.ConfigDict({'dryrun': 'true'})
+        super(LVSServiceTestCase, self).setUp()
+        self.config['dryrun'] = 'true'
         self.service = ('tcp', '127.0.0.1', 80, 'rr')
-        self.server = ServerStub('localhost', port=8080)
         pybal.pybal.BGPFailover.prefixes.clear()
 
         def stubbedModifyState(cls, cmdList):
@@ -175,10 +163,10 @@
         lvs_service.addServer(self.server)
         self.assertTrue(self.server.pooled)
         self.assertEquals(lvs_service.ipvsManager.cmdList,
-                          ['-a -t 127.0.0.1:80 -r localhost'])
+                          ['-a -t 127.0.0.1:80 -r 127.0.0.1'])
         lvs_service.addServer(self.server)
         self.assertEquals(lvs_service.ipvsManager.cmdList,
-                          ['-e -t 127.0.0.1:80 -r localhost'])
+                          ['-e -t 127.0.0.1:80 -r 127.0.0.1'])
 
     def testRemoveServer(self):
         """Test `LVSService.removeServer`."""
@@ -187,7 +175,7 @@
         lvs_service.removeServer(self.server)
         self.assertFalse(self.server.pooled)
         self.assertEquals(lvs_service.ipvsManager.cmdList,
-                          ['-d -t 127.0.0.1:80 -r localhost'])
+                          ['-d -t 127.0.0.1:80 -r 127.0.0.1'])
 
     def testInitServer(self):
         """Test `LVSService.initServer`."""
diff --git a/pybal/test/test_monitor.py b/pybal/test/test_monitor.py
index 144a423..a6d9a4b 100644
--- a/pybal/test/test_monitor.py
+++ b/pybal/test/test_monitor.py
@@ -12,28 +12,14 @@
 import pybal.util
 import twisted.internet
 
-
-class StubCoordinator(object):
-    """Test stub for `pybal.pybal.Coordinator`."""
-
-    def __init__(self):
-        self.up = None
-        self.reason = None
-
-    def resultUp(self, monitor):
-        self.up = True
-
-    def resultDown(self, monitor, reason=None):
-        self.up = False
-        self.reason = reason
+from .fixtures import PyBalTestCase
 
 
-class MonitoringProtocolTestCase(unittest.TestCase):
+class MonitoringProtocolTestCase(PyBalTestCase):
     """Test case for `pybal.monitor.MonitoringProtocol`."""
 
     def setUp(self):
-        self.coordinator = StubCoordinator()
-        self.config = pybal.util.ConfigDict()
+        super(MonitoringProtocolTestCase, self).setUp()
         self.monitor = pybal.monitor.MonitoringProtocol(
             self.coordinator, None, self.config)
         self.monitor.__name__ = 'TestMonitor'
diff --git a/pybal/test/test_monitors.py b/pybal/test/test_monitors.py
new file mode 100644
index 0000000..9b8d5d3
--- /dev/null
+++ b/pybal/test/test_monitors.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+"""
+  PyBal unit tests
+  ~~~~~~~~~~~~~~~~
+
+  This module contains tests for `pybal.monitors`.
+
+"""
+import unittest
+
+import pybal.util
+from pybal.monitors.idleconnection import IdleConnectionMonitoringProtocol
+
+from .fixtures import PyBalTestCase
+
+
+class IdleConnectionMonitoringProtocolTestCase(PyBalTestCase):
+    """Test case for `pybal.monitors.IdleConnectionMonitoringProtocol`."""
+
+    def setUp(self):
+        self.config = pybal.util.ConfigDict()
+        self.monitor = IdleConnectionMonitoringProtocol(
+            None, None, self.config)
+
+    def testInit(self):
+        """Test `IdleConnectionMonitoringProtocol.__init__`."""
+        monitor = IdleConnectionMonitoringProtocol(None, None, self.config)
+        self.assertEquals(
+            monitor.maxDelay, IdleConnectionMonitoringProtocol.MAX_DELAY)
+        self.assertEquals(
+            monitor.toCleanReconnect,
+            IdleConnectionMonitoringProtocol.TIMEOUT_CLEAN_RECONNECT
+        )
+        self.config['idleconnection.max-delay'] = '123'
+        self.config['idleconnection.timeout-clean-reconnect'] = '456'
+        monitor = IdleConnectionMonitoringProtocol(None, None, self.config)
+        self.assertEquals(monitor.maxDelay, 123)
+        self.assertEquals(monitor.toCleanReconnect, 456)
+
+    def testRun(self):
+        """Test `IdleConnectionMonitoringProtocol.run`."""
+        pass
diff --git a/pybal/test/test_util.py b/pybal/test/test_util.py
index 8f1e7a9..5f244cc 100644
--- a/pybal/test/test_util.py
+++ b/pybal/test/test_util.py
@@ -13,13 +13,16 @@
 import pybal
 import pybal.util
 
+from .fixtures import PyBalTestCase
 
-class LogFileTestCase(unittest.TestCase):
+
+class LogFileTestCase(PyBalTestCase):
     """Test case for `pybal.util.LogFile`."""
 
     TIMESTAMP_REGEXP = r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+'
 
     def setUp(self):
+        super(LogFileTestCase, self).setUp()
         file_handle, self.path = tempfile.mkstemp('.pybal.test.log')
         os.close(file_handle)
         self.log_file = pybal.util.LogFile(self.path)
@@ -49,11 +52,12 @@
             self.assertIn('test', f.read())
 
 
-class ConfigDictTestCase(unittest.TestCase):
+class ConfigDictTestCase(PyBalTestCase):
     """Test case for `pybal.util.ConfigDict`."""
 
     def setUp(self):
-        self.config = pybal.util.ConfigDict({
+        super(ConfigDictTestCase, self).setUp()
+        self.config.update({
             'int': '3',
             'truthy': 'true',
             'falsy': 'false',
diff --git a/tox.ini b/tox.ini
index ff66407..e20b77e 100644
--- a/tox.ini
+++ b/tox.ini
@@ -3,17 +3,20 @@
 
 [testenv]
 commands = trial pybal
-deps = twisted
+deps =
+  twisted
 
 [testenv:cover]
 commands =
   coverage run --source pybal --branch {envdir}/bin/trial pybal
   coverage report --omit=pybal/test --show-missing
-deps = twisted coverage
+deps =
+  twisted
+  coverage
 
 [testenv:flake8]
 commands = flake8
 deps = flake8
 
 [flake8]
-exclude = .tox,pybal,pybal.egg-info
+exclude = build,.tox,pybal,pybal.egg-info

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib204667ea275ce70c077c4d53a1ef860ef765526
Gerrit-PatchSet: 1
Gerrit-Project: operations/debs/pybal
Gerrit-Branch: master
Gerrit-Owner: Ori.livneh <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to