コード例 #1
0
    def test_get_command(self):
        c = CommandFactory.get_command('')
        self.assertEqual(len(c.arguments), 1)
        self.assertEqual(c.arguments[0], '')

        c = CommandFactory.get_command(' ')
        self.assertEqual(len(c.arguments), 1)
        self.assertEqual(c.arguments[0], '')

        c = CommandFactory.get_command('a ')
        self.assertEqual(len(c.arguments), 1)
        self.assertEqual(c.arguments[0], 'a')

        c = CommandFactory.get_command("żółć@ 'drugi argument'")
        self.assertEqual(len(c.arguments), 2)
        self.assertEqual(c.arguments[0], 'żółć@')
        self.assertEqual(c.arguments[1], 'drugi argument')

        c = CommandFactory.get_command(
            "it's ''a' 'crazy' 'almost a good day' xD'' ")
        self.assertEqual(len(c.arguments), 5)
        self.assertEqual(c.arguments[0], "it's")
        self.assertEqual(c.arguments[1], "'a")
        self.assertEqual(c.arguments[2], 'crazy')
        self.assertEqual(c.arguments[3], 'almost a good day')
        self.assertEqual(c.arguments[4], "xD''")
コード例 #2
0
 def test_unrecognized(self, mock_logging):
     self.q1.get = MagicMock(
         return_value=CommandFactory.get_command('unrecognized command'))
     self.mt.run()
     self.assertEqual(
         self.q2.get(),
         MumjolandiaResponseObject(
             MumjolandiaReturnValue.mumjolandia_unrecognized_command,
             CommandFactory.get_command('unrecognized command')))
コード例 #3
0
 def test_sanity_supervisors_not_called(self, mock_food, mock_task,
                                        mock_logging):
     self.q1.get = MagicMock(return_value=CommandFactory.get_command(''))
     self.mt.run()
     self.assertEqual(
         self.q2.get(),
         MumjolandiaResponseObject(
             MumjolandiaReturnValue.mumjolandia_unrecognized_command,
             CommandFactory.get_command('')))
     self.assertEqual(mock_food.call_count, 0)
     self.assertEqual(mock_task.call_count, 0)
コード例 #4
0
class Console:
    def __init__(self):
        self.command_factory = CommandFactory()
        self.async_command = None
        self.thread = None

    def get_next_command(self):
        return self.command_factory.get_command(input())

    def get_next_text(self):
        return input()

    def get_async_command(self):
        if self.async_command is None:
            if self.thread is None:
                self.thread = threading.Thread(target=self.__thread_get_input,
                                               args=())
                self.thread.start()
            return_value = None
        else:
            return_value = self.async_command
            self.async_command = None
            self.thread = None
        return CommandFactory().get_command(return_value)

    def __thread_get_input(self):
        self.async_command = input()
コード例 #5
0
 def test_pass_random_command(self, mock_command, mock_passer):
     with HiddenPrints():
         self.cli.run()
         self.assertEqual(mock_passer.call_args[0][0],
                          CommandFactory.get_command('task task ls'))
         self.assertEqual(mock_command.call_count, 1)
         self.assertEqual(mock_passer.call_count, 1)
コード例 #6
0
 def test_exit(self, mock_logging):
     self.q1.get = MagicMock(
         return_value=CommandFactory.get_command('exit'))
     self.mt.run()
     self.assertEqual(
         self.q2.get(),
         MumjolandiaResponseObject(
             status=MumjolandiaReturnValue.mumjolandia_exit))
コード例 #7
0
 def test_calling_exit_with_mode(self, mock_command, mock_passer):
     with HiddenPrints():
         self.cli.mode = MumjolandiaCliMode.task
         self.cli.run()
         self.assertEqual(mock_passer.call_args[0][0],
                          CommandFactory.get_command('exit'))
         self.assertEqual(mock_command.call_count, 1)
         self.assertEqual(mock_passer.call_count, 1)
コード例 #8
0
 def _MumjolandiaConnectionHandler__parse_received_message(self, message):
     if message == 'exit':
         self.server_loop_exit_flag = True
         return_value = 'Server shutting down'
     else:
         return_value = MumjolandiaResultParser().parse(
             self.data_passer.pass_command(
                 CommandFactory.get_command(message)))
     return return_value
コード例 #9
0
 def get_async_command(self):
     if self.async_command is None:
         if self.thread is None:
             self.thread = threading.Thread(target=self.__thread_get_input,
                                            args=())
             self.thread.start()
         return_value = None
     else:
         return_value = self.async_command
         self.async_command = None
         self.thread = None
     return CommandFactory().get_command(return_value)
コード例 #10
0
    def test_change_modes(self, mock_command, mock_passer):
        with HiddenPrints():
            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.none)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('test'))
            self.assertEqual(mock_command.call_count, 2)
            self.assertEqual(mock_passer.call_count, 1)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.task)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('task test'))
            self.assertEqual(mock_command.call_count, 4)
            self.assertEqual(mock_passer.call_count, 2)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.food)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('food test'))
            self.assertEqual(mock_command.call_count, 6)
            self.assertEqual(mock_passer.call_count, 3)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.food)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('food test'))
            self.assertEqual(mock_command.call_count, 8)
            self.assertEqual(mock_passer.call_count, 4)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.none)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('test'))
            self.assertEqual(mock_command.call_count, 10)
            self.assertEqual(mock_passer.call_count, 5)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.game)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('game test'))
            self.assertEqual(mock_command.call_count, 12)
            self.assertEqual(mock_passer.call_count, 6)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.none)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('test'))
            self.assertEqual(mock_command.call_count, 14)
            self.assertEqual(mock_passer.call_count, 7)
コード例 #11
0
    def test_pass_command(self, mock_clear, mock_wait):
        qi = Queue()
        qo = Queue()
        qi.put = MagicMock(return_value=None)
        qo.get = MagicMock(
            return_value=MumjolandiaReturnValue.mumjolandia_exit)
        qo.task_done = MagicMock(return_value=None)
        mutex = threading.Lock()
        event = threading.Event()
        dp = MumjolandiaDataPasser(qi, qo, mutex, event)
        command = CommandFactory.get_command('xD')
        return_value = dp.pass_command(command)

        qi.put.assert_called_with(command)
        qo.get.assert_called_with()
        qo.task_done.assert_called_with()
        self.assertEqual(mock_wait.call_count, 1)
        self.assertEqual(mock_clear.call_count, 1)
        self.assertEqual(return_value, MumjolandiaReturnValue.mumjolandia_exit)
コード例 #12
0
class MumjolandiaStarter:
    def __init__(self, sysargs):
        self.commands = None
        self.__init_commands(
            sysargs[1:])  # rest of arguments are user passed commands
        self.config = ConfigLoader.get_config()
        self.log_location = ConfigLoader.get_mumjolandia_location(
        ) + 'data/log.log'
        self.command_queue_request = Queue()
        self.command_queue_response = Queue()
        self.command_responded_event = threading.Event()
        self.data_passer = None
        self.command_mutex = threading.Lock()
        self.mumjolandia_thread = None
        self.__run_init()

    def run(self):
        self.__run_mumjolandia()
        if ConfigLoader.get_config().background_server == 'true':
            self.run_server()
        self.run_cli()

    def run_cli(self):
        cli = MumjolandiaCli(self.data_passer, self.commands)
        cli.setName('cli thread')
        cli.start()

    def run_server(self):
        server = MumjolandiaServer(self.data_passer)
        server.setName('mumjolandia server')
        server.start()

    def get_mumjolandia_thread(self):
        return self.mumjolandia_thread

    def set_commands(self, commands):
        self.commands = CommandFactory().get_command(commands)
        self.commands.append(CommandFactory().get_command('exit'))

    def __run_mumjolandia(self):
        self.mumjolandia_thread = MumjolandiaThread(
            self.command_queue_request, self.command_queue_response,
            self.command_responded_event)
        self.mumjolandia_thread.setName('mumjolandia thread')
        self.mumjolandia_thread.start()

    def __run_init(self):
        if not os.path.isdir(ConfigLoader.get_mumjolandia_location() + "data"):
            try:
                os.mkdir(ConfigLoader.get_mumjolandia_location() + "data")
            except OSError as e:
                pass
        try:
            if os.path.isfile(self.log_location):
                os.remove(self.log_location)
        except OSError as e:
            pass
        try:
            handlers = []
            if self.config.log_to_display.lower() == 'True'.lower():
                handlers.append(logging.StreamHandler())
            if self.config.log_to_file.lower() == 'True'.lower():
                handlers.append(logging.FileHandler(self.log_location))
            if len(handlers) == 0:
                logging.getLogger().disabled = True
            else:
                logging.basicConfig(
                    format=
                    '%(asctime)s [%(levelname).1s] %(module)s::%(funcName)s --- %(message)s',
                    datefmt='%d/%m/%Y %H:%M:%S',
                    handlers=handlers,
                    level=self.config.log_level.upper())
        except ValueError:
            logging.error('Logging level: "' + self.config.log_level +
                          '" is incorrect.')
        self.data_passer = MumjolandiaDataPasser(self.command_queue_request,
                                                 self.command_queue_response,
                                                 self.command_mutex,
                                                 self.command_responded_event)

    def __init_commands(self, commands):
        self.commands = CommandFactory().get_command(commands)
        if not len(self.commands):
            self.commands = None
        if self.commands is not None:
            self.commands.append(CommandFactory().get_command('exit'))
コード例 #13
0
 def __init__(self):
     self.command_factory = CommandFactory()
     self.async_command = None
     self.thread = None
コード例 #14
0
 def test_food(self, mock_food_supervisor, mock_logging):
     self.q1.get = MagicMock(
         return_value=CommandFactory.get_command('food print'))
     self.mt.run()
     self.assertEqual(mock_food_supervisor.call_count, 1)
     self.assertEqual(self.q2.get(), 'not important, just passing by')
コード例 #15
0
 def __init_commands(self, commands):
     self.commands = CommandFactory().get_command(commands)
     if not len(self.commands):
         self.commands = None
     if self.commands is not None:
         self.commands.append(CommandFactory().get_command('exit'))
コード例 #16
0
class TestMumjolandiaCli(TestCase):
    def setUp(self):
        self.dp = MumjolandiaDataPasser(1, 1, 1, 1)
        self.cli = MumjolandiaCli(self.dp)
        self.cp = MumjolandiaCliPrinter()

        # cli.run() exits when flag is raised, but for some commands (mode, cls) the check is skipped.
        # to exit, it is necessary to call extra command that is passed to DataPasser (so the flag check will occur)
        def execute_patched():
            self.cli.exit_flag = MumjolandiaImmutableTypeWrapper(True)
            return None

        self.cp.execute = MagicMock(side_effect=execute_patched())
        self.cli.cli_printer = self.cp

    @patch(
        'src.modules.mumjolandia.mumjolandia_data_passer.MumjolandiaDataPasser.pass_command',
        return_value=None)
    @patch('src.modules.console.console.Console.get_next_command',
           side_effect=[
               CommandFactory.get_command('mode'),
               CommandFactory.get_command('test'),
               CommandFactory.get_command('mode task'),
               CommandFactory.get_command('test'),
               CommandFactory.get_command('mode food'),
               CommandFactory.get_command('test'),
               CommandFactory.get_command('mode invalid'),
               CommandFactory.get_command('test'),
               CommandFactory.get_command('mode none'),
               CommandFactory.get_command('test'),
               CommandFactory.get_command('mode game'),
               CommandFactory.get_command('test'),
               CommandFactory.get_command('mode'),
               CommandFactory.get_command('test')
           ])
    @unittest.skip(
        "test_change_modes"
        "This test uses parowa flow which was fixed during refactor\n"
        "Test shall be refactored")
    def test_change_modes(self, mock_command, mock_passer):
        with HiddenPrints():
            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.none)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('test'))
            self.assertEqual(mock_command.call_count, 2)
            self.assertEqual(mock_passer.call_count, 1)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.task)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('task test'))
            self.assertEqual(mock_command.call_count, 4)
            self.assertEqual(mock_passer.call_count, 2)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.food)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('food test'))
            self.assertEqual(mock_command.call_count, 6)
            self.assertEqual(mock_passer.call_count, 3)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.food)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('food test'))
            self.assertEqual(mock_command.call_count, 8)
            self.assertEqual(mock_passer.call_count, 4)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.none)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('test'))
            self.assertEqual(mock_command.call_count, 10)
            self.assertEqual(mock_passer.call_count, 5)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.game)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('game test'))
            self.assertEqual(mock_command.call_count, 12)
            self.assertEqual(mock_passer.call_count, 6)

            self.cli.run()
            self.assertEqual(self.cli.mode, MumjolandiaCliMode.none)
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('test'))
            self.assertEqual(mock_command.call_count, 14)
            self.assertEqual(mock_passer.call_count, 7)

    @patch(
        'src.modules.mumjolandia.mumjolandia_data_passer.MumjolandiaDataPasser.pass_command',
        return_value=None)
    @patch('src.modules.console.console.Console.get_next_command',
           side_effect=[
               CommandFactory.get_command('cls'),
               CommandFactory.get_command('path')
           ])
    def test_not_passable_commands(self, mock_command, mock_passer):
        with HiddenPrints():
            self.cli.run()
            self.assertEqual(mock_command.call_count, 1)
            self.assertEqual(mock_passer.call_count, 0)

            self.cli.run()
            self.assertEqual(mock_command.call_count, 2)
            self.assertEqual(mock_passer.call_count, 0)

    @patch(
        'src.modules.mumjolandia.mumjolandia_data_passer.MumjolandiaDataPasser.pass_command',
        return_value=MumjolandiaResponseObject(
            status=MumjolandiaReturnValue.task_get, arguments=[]))
    @patch('src.modules.console.console.Console.get_next_command',
           side_effect=[CommandFactory.get_command('task ls')])
    def test_pass_random_command(self, mock_command, mock_passer):
        with HiddenPrints():
            self.cli.run()
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('task task ls'))
            self.assertEqual(mock_command.call_count, 1)
            self.assertEqual(mock_passer.call_count, 1)

    @patch(
        'src.modules.mumjolandia.mumjolandia_data_passer.MumjolandiaDataPasser.pass_command',
        return_value=None)
    @patch('src.modules.console.console.Console.get_next_command',
           side_effect=[
               CommandFactory.get_command('cls'),
               CommandFactory.get_command('path')
           ])
    def test_calling_not_passable_commands_with_mode(self, mock_command,
                                                     mock_passer):
        with HiddenPrints():
            self.cli.mode = MumjolandiaCliMode.task
            self.cli.run()
            self.assertEqual(mock_command.call_count, 1)
            self.assertEqual(mock_passer.call_count, 0)

            self.cli.run()
            self.assertEqual(mock_command.call_count, 2)
            self.assertEqual(mock_passer.call_count, 0)

    @patch(
        'src.modules.mumjolandia.mumjolandia_data_passer.MumjolandiaDataPasser.pass_command',
        return_value=MumjolandiaResponseObject(
            status=MumjolandiaReturnValue.mumjolandia_exit, arguments=[]))
    @patch('src.modules.console.console.Console.get_next_command',
           side_effect=[CommandFactory.get_command('exit')])
    def test_calling_exit_with_mode(self, mock_command, mock_passer):
        with HiddenPrints():
            self.cli.mode = MumjolandiaCliMode.task
            self.cli.run()
            self.assertEqual(mock_passer.call_args[0][0],
                             CommandFactory.get_command('exit'))
            self.assertEqual(mock_command.call_count, 1)
            self.assertEqual(mock_passer.call_count, 1)
コード例 #17
0
 def __execute_mumjolandia_command(self, command):
     return self.data_passer.pass_command(CommandFactory().get_command(command))
コード例 #18
0
 def __call_shutdown(self):
     logging.info("Update succeeded. Restarting...")
     self.data_passer.pass_command(CommandFactory().get_command("exit"))
     self.exit_flag = True
コード例 #19
0
 def set_commands(self, commands):
     self.commands = CommandFactory().get_command(commands)
     self.commands.append(CommandFactory().get_command('exit'))