Exemple #1
0
def main():
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    del sys.setdefaultencoding
    import jcl
    from jcl.runner import JCLRunner
    runner = JCLRunner("JCL", jcl.version)
    runner.configure()
    runner.run()
Exemple #2
0
class JCLRunner_TestCase(unittest.TestCase):
    def setUp(self):
        self.runner = JCLRunner("JCL", jcl.version)

    def tearDown(self):
        self.runner = None
        sys.argv = [""]

    def test_configure_default(self):
        self.runner.configure()
        self.assertEquals(self.runner.config_file, "jcl.conf")
        self.assertEquals(self.runner.server, "localhost")
        self.assertEquals(self.runner.port, 5347)
        self.assertEquals(self.runner.secret, "secret")
        self.assertEquals(self.runner.service_jid, "jcl.localhost")
        self.assertEquals(self.runner.language, "en")
        self.assertEquals(self.runner.db_url, "sqlite:///var/spool/jabber/jcl.db")
        self.assertEquals(self.runner.pid_file, "/var/run/jabber/jcl.pid")
        self.assertFalse(self.runner.debug)
        self.assertEquals(self.runner.logger.getEffectiveLevel(),
                          logging.CRITICAL)

    def test_configure_configfile(self):
        self.runner.config_file = "src/jcl/tests/jcl.conf"
        self.runner.configure()
        self.assertEquals(self.runner.server, "test_localhost")
        self.assertEquals(self.runner.port, 42)
        self.assertEquals(self.runner.secret, "test_secret")
        self.assertEquals(self.runner.service_jid, "test_jcl.localhost")
        self.assertEquals(self.runner.language, "test_en")
        self.assertEquals(self.runner.db_url, "test_sqlite://root@localhost/var/spool/jabber/test_jcl.db")
        self.assertEquals(self.runner.pid_file, "/var/run/jabber/test_jcl.pid")
        self.assertFalse(self.runner.debug)
        self.assertEquals(self.runner.logger.getEffectiveLevel(),
                          logging.CRITICAL)

    def test_configure_uncomplete_configfile(self):
        self.runner.config_file = "src/jcl/tests/uncomplete_jcl.conf"
        self.runner.configure()
        self.assertEquals(self.runner.server, "test_localhost")
        self.assertEquals(self.runner.port, 42)
        self.assertEquals(self.runner.secret, "test_secret")
        self.assertEquals(self.runner.service_jid, "test_jcl.localhost")
        self.assertEquals(self.runner.language, "test_en")
        self.assertEquals(self.runner.db_url, "test_sqlite://root@localhost/var/spool/jabber/test_jcl.db")
        # pid_file is not in uncmplete_jcl.conf, must be default value
        self.assertEquals(self.runner.pid_file, "/var/run/jabber/jcl.pid")
        self.assertFalse(self.runner.debug)
        self.assertEquals(self.runner.logger.getEffectiveLevel(),
                          logging.CRITICAL)

    def test_configure_commandline_shortopt(self):
        sys.argv = ["", "-c", "src/jcl/test/jcl.conf",
                    "-S", "test2_localhost",
                    "-P", "43",
                    "-s", "test2_secret",
                    "-j", "test2_jcl.localhost",
                    "-l", "test2_en",
                    "-u", "sqlite:///tmp/test_jcl.db",
                    "-p", "/tmp/test_jcl.pid"]
        self.runner.configure()
        self.assertEquals(self.runner.server, "test2_localhost")
        self.assertEquals(self.runner.port, 43)
        self.assertEquals(self.runner.secret, "test2_secret")
        self.assertEquals(self.runner.service_jid, "test2_jcl.localhost")
        self.assertEquals(self.runner.language, "test2_en")
        self.assertEquals(self.runner.db_url, "sqlite:///tmp/test_jcl.db")
        self.assertEquals(self.runner.pid_file, "/tmp/test_jcl.pid")
        self.assertFalse(self.runner.debug)
        self.assertEquals(self.runner.logger.getEffectiveLevel(),
                          logging.CRITICAL)

    def test_configure_commandline_longopt(self):
        sys.argv = ["", "--config-file", "src/jcl/tests/jcl.conf",
                    "--server", "test2_localhost",
                    "--port", "43",
                    "--secret", "test2_secret",
                    "--service-jid", "test2_jcl.localhost",
                    "--language", "test2_en",
                    "--db-url", "sqlite:///tmp/test_jcl.db",
                    "--pid-file", "/tmp/test_jcl.pid"]
        self.runner.configure()
        self.assertEquals(self.runner.server, "test2_localhost")
        self.assertEquals(self.runner.port, 43)
        self.assertEquals(self.runner.secret, "test2_secret")
        self.assertEquals(self.runner.service_jid, "test2_jcl.localhost")
        self.assertEquals(self.runner.language, "test2_en")
        self.assertEquals(self.runner.db_url, "sqlite:///tmp/test_jcl.db")
        self.assertEquals(self.runner.pid_file, "/tmp/test_jcl.pid")
        self.assertFalse(self.runner.debug)
        self.assertEquals(self.runner.logger.getEffectiveLevel(),
                          logging.CRITICAL)

    def test_configure_commandline_shortopts_configfile(self):
        sys.argv = ["", "-c", "src/jcl/tests/jcl.conf"]
        self.runner.configure()
        self.assertEquals(self.runner.server, "test_localhost")
        self.assertEquals(self.runner.port, 42)
        self.assertEquals(self.runner.secret, "test_secret")
        self.assertEquals(self.runner.service_jid, "test_jcl.localhost")
        self.assertEquals(self.runner.language, "test_en")
        self.assertEquals(self.runner.db_url, "test_sqlite://root@localhost/var/spool/jabber/test_jcl.db")
        self.assertEquals(self.runner.pid_file, "/var/run/jabber/test_jcl.pid")
        self.assertFalse(self.runner.debug)
        self.assertEquals(self.runner.logger.getEffectiveLevel(),
                          logging.CRITICAL)

    def test_configure_commandline_longopts_configfile(self):
        sys.argv = ["", "--config-file", "src/jcl/tests/jcl.conf"]
        self.runner.configure()
        self.assertEquals(self.runner.server, "test_localhost")
        self.assertEquals(self.runner.port, 42)
        self.assertEquals(self.runner.secret, "test_secret")
        self.assertEquals(self.runner.service_jid, "test_jcl.localhost")
        self.assertEquals(self.runner.language, "test_en")
        self.assertEquals(self.runner.db_url, "test_sqlite://root@localhost/var/spool/jabber/test_jcl.db")
        self.assertEquals(self.runner.pid_file, "/var/run/jabber/test_jcl.pid")
        self.assertFalse(self.runner.debug)
        self.assertEquals(self.runner.logger.getEffectiveLevel(),
                          logging.CRITICAL)

    def test_configure_commandline_short_debug(self):
        sys.argv = ["", "-d"]
        old_debug_func = self.runner.logger.debug
        old_info_func = self.runner.logger.debug
        try:
            self.runner.logger.debug = lambda msg: None
            self.runner.logger.info = lambda msg: None
            self.runner.configure()
            self.assertTrue(self.runner.debug)
            self.assertEquals(self.runner.logger.getEffectiveLevel(),
                              logging.DEBUG)
        finally:
            self.runner.logger.debug = old_debug_func
            self.runner.logger.info = old_info_func

    def test_configure_commandline_long_debug(self):
        sys.argv = ["", "--debug"]
        old_debug_func = self.runner.logger.debug
        old_info_func = self.runner.logger.debug
        try:
            self.runner.logger.debug = lambda msg: None
            self.runner.logger.info = lambda msg: None
            self.runner.configure()
            self.assertTrue(self.runner.debug)
            self.assertEquals(self.runner.logger.getEffectiveLevel(),
                              logging.DEBUG)
        finally:
            self.runner.logger.debug = old_debug_func
            self.runner.logger.info = old_info_func

    def test_setup_pidfile(self):
        try:
            self.runner.pid_file = "/tmp/jcl.pid"
            self.runner.setup_pidfile()
            pidfile = open("/tmp/jcl.pid", "r")
            pid = int(pidfile.read())
            pidfile.close()
            self.assertEquals(pid, os.getpid())
        finally:
            os.remove("/tmp/jcl.pid")

    def test_run(self):
        """Test if run method of JCLComponent is executed"""
        self.has_run_func = False
        def run_func(component_self):
            self.has_run_func = True
            return (False, 0)

        self.runner.pid_file = "/tmp/jcl.pid"
        db_path = tempfile.mktemp("db", "jcltest", DB_DIR)
        db_url = "sqlite://" + db_path
        self.runner.db_url = db_url
        self.runner.config = None
        old_run_func = JCLComponent.run
        JCLComponent.run = run_func
        try:
            self.runner.run()
        finally:
            JCLComponent.run = old_run_func
        self.assertTrue(self.has_run_func)
        Account.dropTable()
        PresenceAccount.dropTable()
        User.dropTable()
        LegacyJID.dropTable()
        model.db_disconnect()
        os.unlink(db_path)
        self.assertFalse(os.access("/tmp/jcl.pid", os.F_OK))

    def test__run(self):
        self.runner.pid_file = "/tmp/jcl.pid"
        db_path = tempfile.mktemp("db", "jcltest", DB_DIR)
        db_url = "sqlite://" + db_path
        self.runner.db_url = db_url
        def do_nothing():
            return (False, 0)
        self.runner._run(do_nothing)
        model.db_connect()
        # dropTable should succeed because tables should exist
        Account.dropTable()
        PresenceAccount.dropTable()
        User.dropTable()
        LegacyJID.dropTable()
        model.db_disconnect()
        os.unlink(db_path)
        self.assertFalse(os.access("/tmp/jcl.pid", os.F_OK))

    def test__run_restart(self):
        self.runner.pid_file = "/tmp/jcl.pid"
        db_path = tempfile.mktemp("db", "jcltest", DB_DIR)
        db_url = "sqlite://" + db_path
        self.runner.db_url = db_url
        self.i = 0
        def restart(self):
            self.i += 1
            yield (True, 0)
            self.i += 1
            yield (False, 0)
            self.i += 1
        restart_generator = restart(self)
        self.runner._run(lambda : restart_generator.next())
        model.db_connect()
        # dropTable should succeed because tables should exist
        Account.dropTable()
        PresenceAccount.dropTable()
        User.dropTable()
        LegacyJID.dropTable()
        model.db_disconnect()
        os.unlink(db_path)
        self.assertFalse(os.access("/tmp/jcl.pid", os.F_OK))
        self.assertEquals(self.i, 2)

    def test__get_help(self):
        self.assertNotEquals(self.runner._get_help(), None)