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