def setUp(self):
        BanlistTestCase.setUp(self)

        console = Mock()
        self.ip_banlist = IpBanlist(console, ET.fromstring(r"""
            <ip_banlist>
                <name>Banlist_name</name>
                <file>F:\temp\banlist.txt</file>
                <force_ip_range>no</force_ip_range>
                <message>$name is BANNED</message>
            </ip_banlist>
        """))
        self.assertFalse(self.ip_banlist._forceRange)
        self.ip_banlist.plugin.info = Mock(wraps=lambda x: sys.stdout.write(x + "\n"))
    def setUp(self):
        BanlistTestCase.setUp(self)

        console = Mock()
        self.ip_banlist = IpBanlist(console, ET.fromstring(r"""
            <ip_banlist>
                <name>Banlist_name</name>
                <file>F:\temp\banlist.txt</file>
                <force_ip_range>no</force_ip_range>
                <message>$name is BANNED</message>
            </ip_banlist>
        """))
        self.assertFalse(self.ip_banlist._forceRange)
        self.ip_banlist.plugin.info = Mock(wraps=lambda x: sys.stdout.write(x + "\n"))
예제 #3
0
class Test_IpBanlist(BanlistTestCase):
    def setUp(self):
        BanlistTestCase.setUp(self)

        console = Mock()
        self.ip_banlist = IpBanlist(
            console,
            ET.fromstring(r"""
            <ip_banlist>
                <name>Banlist_name</name>
                <file>F:\temp\banlist.txt</file>
                <force_ip_range>no</force_ip_range>
                <message>$name is BANNED</message>
            </ip_banlist>
        """))
        self.assertFalse(self.ip_banlist._forceRange)
        self.ip_banlist.plugin.info = Mock(
            wraps=lambda x: sys.stdout.write(x + "\n"))

    def tearDown(self):
        self.patcher_isfile.stop()
        self.patcher_open.stop()
        self.patcher_getModifiedTime.stop()

    def isBanned(self, ip):
        client = Mock()
        client.ip = ip
        return self.ip_banlist.isBanned(client)

    def test_empty_banlist(self):
        self.file_content = ''
        self.assertFalse(self.isBanned("11.22.33.44"))
        self.ip_banlist.plugin.verbose.assert_called_with(
            "ip '11.22.33.44' not found in banlist (Banlist_name 2000-01-01 00:00:00)"
        )

    def test_match_strict(self):
        self.file_content = '''\
11.22.33.44:-1
22.33.44.11foo
33.44.55.66
'''

        def assertBanned(ip, expected_matched_line):
            self.ip_banlist.plugin.info.reset_mock()
            self.assertTrue(self.isBanned(ip))
            self.ip_banlist.plugin.info.assert_called_with(
                "ip '%s' matches banlist entry '%s' (Banlist_name 2000-01-01 00:00:00)"
                % (ip, expected_matched_line))

        def assertNotBanned(ip):
            self.ip_banlist.plugin.verbose.reset_mock()
            self.assertFalse(self.isBanned(ip))
            self.ip_banlist.plugin.verbose.assert_called_with(
                "ip '%s' not found in banlist (Banlist_name 2000-01-01 00:00:00)"
                % ip)

        assertBanned("11.22.33.44", "11.22.33.44:-1")
        assertNotBanned("11.22.33.4")
        assertBanned("22.33.44.11", "22.33.44.11foo")
        assertNotBanned("22.33.44.1")
        assertBanned("33.44.55.66", "33.44.55.66")
        assertNotBanned("33.44.55.6")

    def test_commented_entries(self):
        self.file_content = '''\
//11.22.33.44:-1
# 22.33.44.11foo
//   33.44.55.66
12.12.12.12
'''

        def assertNotBanned(ip):
            self.ip_banlist.plugin.verbose.reset_mock()
            self.assertFalse(self.isBanned(ip))
            self.ip_banlist.plugin.verbose.assert_called_with(
                "ip '%s' not found in banlist (Banlist_name 2000-01-01 00:00:00)"
                % ip)

        assertNotBanned("11.22.33.44")
        assertNotBanned("22.33.44.11")
        assertNotBanned("33.44.55.66")

    def test_match_range(self):
        self.file_content = '''\
11.22.33.0:-1
22.33.44.0foo
33.44.55.0
44.55.0.0
55.0.0.0
'''

        def assertBanned(ip, expected_matched_line):
            self.ip_banlist.plugin.info.reset_mock()
            self.assertTrue(self.isBanned(ip))
            self.ip_banlist.plugin.info.assert_called_with(
                "ip '%s' matches (by range) banlist entry '%s' (Banlist_name 2000-01-01 00:00:00)"
                % (ip, expected_matched_line))

        def assertNotBanned(ip):
            self.ip_banlist.plugin.info.reset_mock()
            self.assertFalse(self.isBanned(ip))
            self.ip_banlist.plugin.info.assert_called_with(
                "ip '%s' not found in banlist (Banlist_name 2000-01-01 00:00:00)"
                % ip)

        assertBanned("11.22.33.44", "11.22.33.0:-1")
        assertBanned("11.22.33.4", "11.22.33.0:-1")
        assertBanned("22.33.44.11", "22.33.44.0foo")
        assertBanned("22.33.44.1", "22.33.44.0foo")
        assertBanned("33.44.55.66", "33.44.55.0")
        assertBanned("33.44.55.6", "33.44.55.0")
        assertBanned("44.55.0.1", "44.55.0.0")
        assertBanned("44.55.1.255", "44.55.0.0")
        assertBanned("44.55.255.255", "44.55.0.0")
        assertBanned("55.0.0.1", "55.0.0.0")
        assertBanned("55.41.25.15", "55.0.0.0")
        assertBanned("55.255.255.255", "55.0.0.0")

    def test_match_force_range(self):
        self.ip_banlist._forceRange = True
        self.file_content = '''\
11.22.33.44:-1
22.33.44.33foo
33.44.55.66
'''

        def assertBanned(ip, expected_matched_line):
            self.ip_banlist.plugin.info.reset_mock()
            self.assertTrue(self.isBanned(ip))
            self.ip_banlist.plugin.info.assert_called_with(
                "ip '%s' matches (by forced range) banlist entry '%s' (Banlist_name 2000-01-01 00:00:00)"
                % (ip, expected_matched_line))

        def assertNotBanned(ip):
            self.ip_banlist.plugin.verbose.reset_mock()
            self.assertFalse(self.isBanned(ip))
            self.ip_banlist.plugin.verbose.assert_called_with(
                "ip '%s' not found in banlist (Banlist_name 2000-01-01 00:00:00)"
                % ip)

        assertBanned("11.22.33.77", "11.22.33.44:-1")
        assertBanned("11.22.33.4", "11.22.33.44:-1")
        assertNotBanned("11.22.66.66")
        assertBanned("22.33.44.77", "22.33.44.33foo")
        assertBanned("22.33.44.1", "22.33.44.33foo")
        assertBanned("33.44.55.77", "33.44.55.66")
        assertBanned("33.44.55.6", "33.44.55.66")
class Test_IpBanlist(BanlistTestCase):

    def setUp(self):
        BanlistTestCase.setUp(self)

        console = Mock()
        self.ip_banlist = IpBanlist(console, ET.fromstring(r"""
            <ip_banlist>
                <name>Banlist_name</name>
                <file>F:\temp\banlist.txt</file>
                <force_ip_range>no</force_ip_range>
                <message>$name is BANNED</message>
            </ip_banlist>
        """))
        self.assertFalse(self.ip_banlist._forceRange)
        self.ip_banlist.plugin.info = Mock(wraps=lambda x: sys.stdout.write(x + "\n"))


    def tearDown(self):
        self.patcher_isfile.stop()
        self.patcher_open.stop()
        self.patcher_getModifiedTime.stop()


    def isBanned(self, ip):
        client = Mock()
        client.ip = ip
        return self.ip_banlist.isBanned(client)


    def test_empty_banlist(self):
        self.file_content = ''
        self.assertFalse(self.isBanned("11.22.33.44"))
        self.ip_banlist.plugin.verbose.assert_called_with("ip '11.22.33.44' not found in banlist (Banlist_name 2000-01-01 00:00:00)")


    def test_match_strict(self):
        self.file_content = '''\
11.22.33.44:-1
22.33.44.11foo
33.44.55.66
'''
        def assertBanned(ip, expected_matched_line):
            self.ip_banlist.plugin.info.reset_mock()
            self.assertTrue(self.isBanned(ip))
            self.ip_banlist.plugin.info.assert_called_with("ip '%s' matches banlist entry '%s' (Banlist_name 2000-01-01 00:00:00)" % (ip, expected_matched_line))

        def assertNotBanned(ip):
            self.ip_banlist.plugin.verbose.reset_mock()
            self.assertFalse(self.isBanned(ip))
            self.ip_banlist.plugin.verbose.assert_called_with("ip '%s' not found in banlist (Banlist_name 2000-01-01 00:00:00)" % ip)

        assertBanned("11.22.33.44", "11.22.33.44:-1")
        assertNotBanned("11.22.33.4")
        assertBanned("22.33.44.11", "22.33.44.11foo")
        assertNotBanned("22.33.44.1")
        assertBanned("33.44.55.66", "33.44.55.66")
        assertNotBanned("33.44.55.6")


    def test_commented_entries(self):
        self.file_content = '''\
//11.22.33.44:-1
# 22.33.44.11foo
//   33.44.55.66
12.12.12.12
'''
        def assertNotBanned(ip):
            self.ip_banlist.plugin.verbose.reset_mock()
            self.assertFalse(self.isBanned(ip))
            self.ip_banlist.plugin.verbose.assert_called_with("ip '%s' not found in banlist (Banlist_name 2000-01-01 00:00:00)" % ip)

        assertNotBanned("11.22.33.44")
        assertNotBanned("22.33.44.11")
        assertNotBanned("33.44.55.66")


    def test_match_range(self):
        self.file_content = '''\
11.22.33.0:-1
22.33.44.0foo
33.44.55.0
44.55.0.0
55.0.0.0
'''
        def assertBanned(ip, expected_matched_line):
            self.ip_banlist.plugin.info.reset_mock()
            self.assertTrue(self.isBanned(ip))
            self.ip_banlist.plugin.info.assert_called_with("ip '%s' matches (by range) banlist entry '%s' (Banlist_name 2000-01-01 00:00:00)" % (ip, expected_matched_line))

        def assertNotBanned(ip):
            self.ip_banlist.plugin.info.reset_mock()
            self.assertFalse(self.isBanned(ip))
            self.ip_banlist.plugin.info.assert_called_with("ip '%s' not found in banlist (Banlist_name 2000-01-01 00:00:00)" % ip)


        assertBanned("11.22.33.44", "11.22.33.0:-1")
        assertBanned("11.22.33.4", "11.22.33.0:-1")
        assertBanned("22.33.44.11", "22.33.44.0foo")
        assertBanned("22.33.44.1", "22.33.44.0foo")
        assertBanned("33.44.55.66", "33.44.55.0")
        assertBanned("33.44.55.6", "33.44.55.0")
        assertBanned("44.55.0.1", "44.55.0.0")
        assertBanned("44.55.1.255", "44.55.0.0")
        assertBanned("44.55.255.255", "44.55.0.0")
        assertBanned("55.0.0.1", "55.0.0.0")
        assertBanned("55.41.25.15", "55.0.0.0")
        assertBanned("55.255.255.255", "55.0.0.0")


    def test_match_force_range(self):
        self.ip_banlist._forceRange = True
        self.file_content = '''\
11.22.33.44:-1
22.33.44.33foo
33.44.55.66
'''
        def assertBanned(ip, expected_matched_line):
            self.ip_banlist.plugin.info.reset_mock()
            self.assertTrue(self.isBanned(ip))
            self.ip_banlist.plugin.info.assert_called_with("ip '%s' matches (by forced range) banlist entry '%s' (Banlist_name 2000-01-01 00:00:00)" % (ip, expected_matched_line))

        def assertNotBanned(ip):
            self.ip_banlist.plugin.verbose.reset_mock()
            self.assertFalse(self.isBanned(ip))
            self.ip_banlist.plugin.verbose.assert_called_with("ip '%s' not found in banlist (Banlist_name 2000-01-01 00:00:00)" % ip)

        assertBanned("11.22.33.77", "11.22.33.44:-1")
        assertBanned("11.22.33.4", "11.22.33.44:-1")
        assertNotBanned("11.22.66.66")
        assertBanned("22.33.44.77", "22.33.44.33foo")
        assertBanned("22.33.44.1", "22.33.44.33foo")
        assertBanned("33.44.55.77", "33.44.55.66")
        assertBanned("33.44.55.6", "33.44.55.66")