class ServermonitorTestCase(TestCase): """ TestCase suitable for testing the ServermonitorPlugin class """ def setUp(self): # less logging self.logger = logging.getLogger('output') self.logger.setLevel(logging.ERROR) self.logger.propagate = False from b3.fake import FakeConsole, FakeClient # create a Fake parser self.parser_conf = XmlConfigParser() self.parser_conf.loadFromString( """<configuration><settings name="server"><set name="game_log"></set></settings></configuration>""" ) self.console = FakeConsole(self.parser_conf) self.console.startup() # load the admin plugin # load the admin plugin if B3version(b3_version) >= B3version("1.10dev"): admin_plugin_conf_file = '@b3/conf/plugin_admin.ini' else: admin_plugin_conf_file = '@b3/conf/plugin_admin.xml' with logging_disabled(): self.adminPlugin = AdminPlugin(self.console, admin_plugin_conf_file) self.adminPlugin.onLoadConfig() self.adminPlugin._commands = { } # work around known bug in the Admin plugin which makes the _command property shared between all instances self.adminPlugin.onStartup() # make sure the admin plugin obtained by other plugins is our admin plugin when(self.console).getPlugin('admin').thenReturn(self.adminPlugin) # load our plugin self.conf = CfgConfigParser() self.p = ServermonitorPlugin(self.console, self.conf) self.superadmin = FakeClient(self.console, name="Superadmin", guid="Superadmin_guid", groupBits=128) self.logger.propagate = True def init_plugin(self, config_content): self.logger.setLevel(VERBOSE) self.conf.loadFromString(config_content) self.p.onLoadConfig() self.p.onStartup()
class IpbanTestCase(unittest2.TestCase): def setUp(self): self.parser_conf = MainConfig(CfgConfigParser(allow_no_value=True)) self.parser_conf.loadFromString(dedent(r"""""")) self.console = FakeConsole(self.parser_conf) self.console.gameName = 'f00' self.console.startup() with logging_disabled(): self.adminPlugin = AdminPlugin(self.console, '@b3/conf/plugin_admin.ini') self.adminPlugin.onLoadConfig() self.adminPlugin.onStartup() self.evt_queue = [] # make sure the admin plugin obtained by other plugins is our admin plugin when(self.console).getPlugin('admin').thenReturn(self.adminPlugin) with logging_disabled(): from b3.fake import FakeClient # prepare a few players self.mike = FakeClient(self.console, name="Mike", exactName="Mike", guid="MIKEGUID", groupBits=16, ip='1.1.1.1') self.paul = FakeClient(self.console, name="Paul", exactName="Paul", guid="PAULGUID", groupBits=1, ip='2.2.2.2') self.john = FakeClient(self.console, name="John", exactName="John", guid="JOHNGUID", groupBits=0, ip='3.3.3.3') self.mary = FakeClient(self.console, name="Mary", exactName="Mary", guid="MARYGUID", groupBits=0, ip='4.4.4.4') self.conf = CfgConfigParser() self.p = IpbanPlugin(self.console, self.conf) # return some mock data when(self.p).getBanIps().thenReturn(['2.2.2.2', '6.6.6.6', '7.7.7.7']) when(self.p).getTempBanIps().thenReturn(['3.3.3.3', '8.8.8.8', '9.9.9.9']) def tearDown(self): self.console.working = False self.mike.disconnects() self.paul.disconnects() self.john.disconnects() self.mary.disconnects() def init(self, config_content=None): if config_content: self.conf.loadFromString(config_content) else: self.conf.loadFromString(dedent(r""" [settings] maxlevel: user """)) self.p.onLoadConfig() self.p.onStartup()
class ServermonitorTestCase(TestCase): """ TestCase suitable for testing the ServermonitorPlugin class """ def setUp(self): # less logging self.logger = logging.getLogger('output') self.logger.setLevel(logging.ERROR) self.logger.propagate = False from b3.fake import FakeConsole, FakeClient # create a Fake parser self.parser_conf = XmlConfigParser() self.parser_conf.loadFromString("""<configuration><settings name="server"><set name="game_log"></set></settings></configuration>""") self.console = FakeConsole(self.parser_conf) self.console.startup() # load the admin plugin # load the admin plugin if B3version(b3_version) >= B3version("1.10dev"): admin_plugin_conf_file = '@b3/conf/plugin_admin.ini' else: admin_plugin_conf_file = '@b3/conf/plugin_admin.xml' with logging_disabled(): self.adminPlugin = AdminPlugin(self.console, admin_plugin_conf_file) self.adminPlugin.onLoadConfig() self.adminPlugin._commands = {} # work around known bug in the Admin plugin which makes the _command property shared between all instances self.adminPlugin.onStartup() # make sure the admin plugin obtained by other plugins is our admin plugin when(self.console).getPlugin('admin').thenReturn(self.adminPlugin) # load our plugin self.conf = CfgConfigParser() self.p = ServermonitorPlugin(self.console, self.conf) self.superadmin = FakeClient(self.console, name="Superadmin", guid="Superadmin_guid", groupBits=128) self.logger.propagate = True def init_plugin(self, config_content): self.logger.setLevel(VERBOSE) self.conf.loadFromString(config_content) self.p.onLoadConfig() self.p.onStartup()
class IpbanTestCase(unittest2.TestCase): def setUp(self): self.parser_conf = MainConfig(CfgConfigParser(allow_no_value=True)) self.parser_conf.loadFromString(dedent(r"""""")) self.console = FakeConsole(self.parser_conf) self.console.gameName = 'f00' self.console.startup() with logging_disabled(): self.adminPlugin = AdminPlugin(self.console, '@b3/conf/plugin_admin.ini') self.adminPlugin.onLoadConfig() self.adminPlugin.onStartup() self.evt_queue = [] # make sure the admin plugin obtained by other plugins is our admin plugin when(self.console).getPlugin('admin').thenReturn(self.adminPlugin) with logging_disabled(): from b3.fake import FakeClient # prepare a few players self.mike = FakeClient(self.console, name="Mike", exactName="Mike", guid="MIKEGUID", groupBits=16, ip='1.1.1.1') self.paul = FakeClient(self.console, name="Paul", exactName="Paul", guid="PAULGUID", groupBits=1, ip='2.2.2.2') self.john = FakeClient(self.console, name="John", exactName="John", guid="JOHNGUID", groupBits=0, ip='3.3.3.3') self.mary = FakeClient(self.console, name="Mary", exactName="Mary", guid="MARYGUID", groupBits=0, ip='4.4.4.4') self.conf = CfgConfigParser() self.p = IpbanPlugin(self.console, self.conf) # return some mock data when(self.p).getBanIps().thenReturn(['2.2.2.2', '6.6.6.6', '7.7.7.7']) when(self.p).getTempBanIps().thenReturn( ['3.3.3.3', '8.8.8.8', '9.9.9.9']) def tearDown(self): self.console.working = False self.mike.disconnects() self.paul.disconnects() self.john.disconnects() self.mary.disconnects() def init(self, config_content=None): if config_content: self.conf.loadFromString(config_content) else: self.conf.loadFromString( dedent(r""" [settings] maxlevel: user """)) self.p.onLoadConfig() self.p.onStartup()
class IpbanTestCase(unittest2.TestCase): def setUp(self): if B3version(b3_version) >= B3version("1.10dev"): from b3.config import MainConfig self.parser_conf = MainConfig(CfgConfigParser(allow_no_value=True)) self.parser_conf.loadFromString(dedent(r"""""")) admin_plugin_conf_file = '@b3/conf/plugin_admin.ini' else: self.parser_conf = XmlConfigParser() self.parser_conf.loadFromString( dedent(r"""<configuration></configuration>""")) admin_plugin_conf_file = '@b3/conf/plugin_admin.xml' self.console = FakeConsole(self.parser_conf) self.console.gameName = 'f00' self.console.startup() with logging_disabled(): self.adminPlugin = AdminPlugin(self.console, admin_plugin_conf_file) self.adminPlugin.onLoadConfig() self.adminPlugin.onStartup() self.evt_queue = [] # make sure the admin plugin obtained by other plugins is our admin plugin when(self.console).getPlugin('admin').thenReturn(self.adminPlugin) with logging_disabled(): from b3.fake import FakeClient # prepare a few players self.mike = FakeClient(self.console, name="Mike", exactName="Mike", guid="MIKEGUID", groupBits=16, ip='1.1.1.1') self.paul = FakeClient(self.console, name="Paul", exactName="Paul", guid="PAULGUID", groupBits=1, ip='2.2.2.2') self.john = FakeClient(self.console, name="John", exactName="John", guid="JOHNGUID", groupBits=0, ip='3.3.3.3') self.mary = FakeClient(self.console, name="Mary", exactName="Mary", guid="MARYGUID", groupBits=0, ip='4.4.4.4') self.conf = CfgConfigParser() self.p = IpbanPlugin(self.console, self.conf) # return some mock data when(self.p).getBanIps().thenReturn(['2.2.2.2', '6.6.6.6', '7.7.7.7']) when(self.p).getTempBanIps().thenReturn( ['3.3.3.3', '8.8.8.8', '9.9.9.9']) def tearDown(self): self.console.working = False self.mike.disconnects() self.paul.disconnects() self.john.disconnects() self.mary.disconnects() def init(self, config_content=None): if config_content: self.conf.loadFromString(config_content) else: self.conf.loadFromString( dedent(r""" [settings] maxlevel: user """)) self.p.onLoadConfig() self.p.onStartup() #################################################################################################################### # # # TEST CONFIG # # # #################################################################################################################### def test_with_config_content(self): # GIVEN self.init( dedent(r""" [settings] maxlevel: admin """)) # THEN self.assertEqual(self.p._maxLevel, 40) def test_with_empty_config(self): # GIVEN self.init(dedent(r""" [settings] """)) # THEN self.assertEqual(self.p._maxLevel, 1) #################################################################################################################### # # # TEST EVENTS # # # #################################################################################################################### def test_higher_group_level_client_connect(self): # GIVEN self.init() self.mike.kick = Mock() # WHEN self.mike.connects('1') # THEN self.assertGreater(self.mike.maxLevel, self.p._maxLevel) self.assertEqual(self.mike.kick.call_count, 0) def test_ip_banned_client_connect(self): # GIVEN self.init() self.paul.kick = Mock() # WHEN self.paul.connects('1') # THEN self.assertLessEqual(self.paul.maxLevel, self.p._maxLevel) self.assertIn(self.paul.ip, self.p.getBanIps()) self.paul.kick.assert_called_once_with( 'Netblocker: Client refused: 2.2.2.2 (Paul) has an active Ban') def test_ip_temp_banned_client_connect(self): # GIVEN self.init() self.john.kick = Mock() # WHEN self.john.connects('1') # THEN self.assertLessEqual(self.paul.maxLevel, self.p._maxLevel) self.assertIn(self.john.ip, self.p.getTempBanIps()) self.john.kick.assert_called_once_with( 'Netblocker: Client refused: 3.3.3.3 (John) has an active TempBan') def test_clean_client_connect(self): # GIVEN self.init() self.mary.kick = Mock() # WHEN self.mary.connects('1') # THEN self.assertLessEqual(self.paul.maxLevel, self.p._maxLevel) self.assertNotIn(self.mary.ip, self.p.getBanIps()) self.assertNotIn(self.mary.ip, self.p.getTempBanIps()) self.assertEqual(self.mary.kick.call_count, 0)
class Censor_functional_tests(unittest.TestCase): def setUp(self): # create a FakeConsole parser self.parser_conf = XmlConfigParser() self.parser_conf.loadFromString(r"""<configuration/>""") self.console = FakeConsole(self.parser_conf) self.console.startup() self.joe = FakeClient(self.console, name="Joe", exactName="Joe", guid="zaerezarezar", groupBits=1, team=b3.TEAM_UNKNOWN) def init_plugin(self, config_content): self.conf = XmlConfigParser() self.conf.setXml(config_content) self.p = CensorPlugin(self.console, self.conf) self.p.onLoadConfig() self.p.onStartup() def test_conf(self, timer_patch): self.init_plugin(r""" <configuration plugin="censor"> <settings name="settings"> <set name="max_level">40</set> <!-- ignore bad words that have equal or less characters: --> <set name="ignore_length">3</set> </settings> <badwords> <penalty type="warning" reasonkeyword="default_reason"/> <badword name="foo" lang="en"> <regexp>\bf[o0]{2}\b</regexp> </badword> </badwords> <badnames> <penalty type="warning" reasonkeyword="badname"/> <badname name="c**t"> <word>c**t</word> </badname> </badnames> </configuration> """) self.assertEqual(1, len(self.p._badWords)) def test_joe_says_badword(self, timer_patch): self.init_plugin(r""" <configuration plugin="censor"> <settings name="settings"> <set name="max_level">40</set> <!-- ignore bad words that have equal or less characters: --> <set name="ignore_length">3</set> </settings> <badwords> <penalty type="warning" reasonkeyword="default_reason"/> <badword name="foo" lang="en"> <regexp>\bf[o0]{2}\b</regexp> </badword> </badwords> <badnames> <penalty type="warning" reasonkeyword="badname"/> <badname name="c**t"> <word>c**t</word> </badname> </badnames> </configuration> """) self.joe.warn = Mock() self.joe.connects(0) self.joe.says("qsfdl f0o!") self.assertEqual(1, self.joe.warn.call_count) def test_cunt_connects(self, timer_patch): self.init_plugin(r""" <configuration plugin="censor"> <settings name="settings"> <set name="max_level">40</set> <!-- ignore bad words that have equal or less characters: --> <set name="ignore_length">3</set> </settings> <badwords> <penalty type="warning" reasonkeyword="default_reason"/> <badword name="foo" lang="en"> <regexp>\bf[o0]{2}\b</regexp> </badword> </badwords> <badnames> <penalty type="warning" reasonkeyword="badname"/> <badname name="c**t"> <word>c**t</word> </badname> </badnames> </configuration> """) self.joe.name = self.joe.exactName = "c**t" self.joe.warn = Mock() self.joe.connects(0) self.assertEqual(1, self.joe.warn.call_count) def test_2_letters_badword_when_ignore_length_is_2(self, timer_patch): self.init_plugin(r""" <configuration plugin="censor"> <settings name="settings"> <set name="max_level">40</set> <!-- ignore bad words that have equal or less characters: --> <set name="ignore_length">2</set> </settings> <badwords> <penalty type="warning" reasonkeyword="default_reason"/> <badword name="TG" lang="fr"> <regexp>\bTG\b</regexp> </badword> </badwords> <badnames> <penalty type="warning" reasonkeyword="badname"/> </badnames> </configuration> """) self.joe.warn = Mock() self.joe.warn.reset_mock() self.joe.connects(0) self.joe.says("tg") self.assertEqual(0, self.joe.warn.call_count) def test_2_letters_badword_when_ignore_length_is_1(self, timer_patch): self.init_plugin(r""" <configuration plugin="censor"> <settings name="settings"> <set name="max_level">40</set> <!-- ignore bad words that have equal or less characters: --> <set name="ignore_length">1</set> </settings> <badwords> <penalty type="warning" reasonkeyword="default_reason"/> <badword name="TG" lang="fr"> <regexp>\bTG\b</regexp> </badword> </badwords> <badnames> <penalty type="warning" reasonkeyword="badname"/> </badnames> </configuration> """) self.joe.warn = Mock() self.joe.warn.reset_mock() self.joe.connects(0) self.joe.says("tg") self.assertEqual(1, self.joe.warn.call_count)