def test_serve_threaded(self):
        mock_context = MagicMock()
        mock_delay = MagicMock()
        trail_server = TrailServer(self.mock_trail_definition,
                                   context=mock_context,
                                   delay=mock_delay)
        trail_server.serve(threaded=True)

        args = self.mock_process.call_args[0]
        kwargs = self.mock_process.call_args[1]

        self.assertEqual(args, tuple())
        self.assertEqual(kwargs['target'], sigint_resistant_function)
        args_for_sigint_resistant_function = kwargs['args']
        kwargs_for_sigint_resistant_function = kwargs['kwargs']
        passed_trail_manager, passed_root_step, passed_socket, passed_backup_function = \
            args_for_sigint_resistant_function
        self.assertEqual(passed_trail_manager, trail_manager)
        self.assertEqual(passed_root_step, self.mock_root_step)
        self.assertEqual(passed_socket, self.mock_api_socket)
        passed_backup_function(self.mock_root_step)
        self.mock_backup_trail.assert_called_once_with(self.mock_root_step,
                                                       trail_server.dag_file)

        self.assertEqual(kwargs_for_sigint_resistant_function,
                         dict(delay=mock_delay))

        self.mock_process_object.start.assert_called_once_with()
    def test_serve_not_threaded(self):
        trail_manager_patcher = patch('autotrail.layer2.trail.trail_manager')
        mock_trail_manager = trail_manager_patcher.start()

        mock_context = MagicMock()
        mock_delay = MagicMock()
        trail_server = TrailServer(self.mock_trail_definition,
                                   context=mock_context,
                                   delay=mock_delay)
        trail_server.serve()

        root_step, api_socket, backup_function = mock_trail_manager.call_args[
            0]
        self.assertEqual(root_step, self.mock_root_step)
        self.assertEqual(api_socket, self.mock_api_socket)
        backup_function(self.mock_root_step)
        self.mock_backup_trail.assert_called_once_with(self.mock_root_step,
                                                       trail_server.dag_file)

        kwargs = mock_trail_manager.call_args[1]
        self.assertEqual(kwargs, dict(delay=mock_delay))

        trail_manager_patcher.stop()