From 340a5a23f4a8453294de2bc5fe54690241230875 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Tue, 26 Apr 2016 09:30:36 -0400 Subject: [PATCH] BF+ENH: fixed up testing querying cymru information + assert_dict_equal helper --- fail2ban/tests/banmanagertestcase.py | 43 +++++++++++++++------------- fail2ban/tests/utils.py | 8 +++++- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/fail2ban/tests/banmanagertestcase.py b/fail2ban/tests/banmanagertestcase.py index 09d2411e..8c58994c 100644 --- a/fail2ban/tests/banmanagertestcase.py +++ b/fail2ban/tests/banmanagertestcase.py @@ -28,7 +28,7 @@ import unittest from ..server.banmanager import BanManager from ..server.ticket import BanTicket - +from .utils import assert_dict_equal class AddFailure(unittest.TestCase): def setUp(self): @@ -74,15 +74,10 @@ class StatusExtendedCymruInfo(unittest.TestCase): def testCymruInfo(self): cymru_info = self.__banManager.getBanListExtendedCymruInfo() - if "assertDictEqual" in dir(self): - self.assertDictEqual(cymru_info, {"asn": [self.__asn], - "country": [self.__country], - "rir": [self.__rir]}) - else: - # Python 2.6 does not support assertDictEqual() - self.assertEqual(cymru_info["asn"], [self.__asn]) - self.assertEqual(cymru_info["country"], [self.__country]) - self.assertEqual(cymru_info["rir"], [self.__rir]) + assert_dict_equal(cymru_info, + {"asn": [self.__asn], + "country": [self.__country], + "rir": [self.__rir]}) def testCymruInfoASN(self): self.assertEqual( @@ -100,16 +95,24 @@ class StatusExtendedCymruInfo(unittest.TestCase): [self.__rir]) def testCymruInfoNxdomain(self): - ticket = BanTicket("10.0.0.0", 1167605999.0) self.__banManager = BanManager() + + # non-existing IP + ticket = BanTicket("0.0.0.0", 1167605999.0) self.assertTrue(self.__banManager.addBanTicket(ticket)) cymru_info = self.__banManager.getBanListExtendedCymruInfo() - if "assertDictEqual" in dir(self): - self.assertDictEqual(cymru_info, {"asn": ["nxdomain"], - "country": ["nxdomain"], - "rir": ["nxdomain"]}) - else: - # Python 2.6 does not support assertDictEqual() - self.assertEqual(cymru_info["asn"], ["nxdomain"]) - self.assertEqual(cymru_info["country"], ["nxdomain"]) - self.assertEqual(cymru_info["rir"], ["nxdomain"]) + assert_dict_equal(cymru_info, + {"asn": ["nxdomain"], + "country": ["nxdomain"], + "rir": ["nxdomain"]}) + + # even for private IPs ASNs defined + # Since it outputs for all active tickets we would get previous results + # and new ones + ticket = BanTicket("10.0.0.0", 1167606000.0) + self.assertTrue(self.__banManager.addBanTicket(ticket)) + cymru_info = self.__banManager.getBanListExtendedCymruInfo() + assert_dict_equal(cymru_info, + {"asn": ["nxdomain", "4565",], + "country": ["nxdomain", "unknown"], + "rir": ["nxdomain", "other"]}) diff --git a/fail2ban/tests/utils.py b/fail2ban/tests/utils.py index 0c29e638..8fc78683 100644 --- a/fail2ban/tests/utils.py +++ b/fail2ban/tests/utils.py @@ -312,4 +312,10 @@ else: kernel32.CloseHandle(process) return True else: - return False \ No newline at end of file + return False + +# Python 2.6 compatibility. in 2.7 assertDictEqual +def assert_dict_equal(a, b): + assert isinstance(a, dict), "Object is not dictionary: %r" % a + assert isinstance(b, dict), "Object is not dictionary: %r" % b + assert a==b, "Dictionaries differ:\n%r !=\n%r" % (a, b)