def test_start_stop(self):
        env = Simulation(device=Mock())

        with patch.object(env, '_process_cycle', side_effect=lambda x: env.stop()) as mock_cycle:
            env.start()

            mock_cycle.assert_has_calls([call(0.0)])
    def test_process_cycle_returns_elapsed_time(self, elapsed_seconds_mock):
        env = Simulation(device=Mock())

        # It doesn't matter what happens in the simulation cycle, here we
        # only care how long it took.
        with patch.object(env, '_process_simulation_cycle'):
            elapsed_seconds_mock.return_value = 0.5
            delta = env._process_cycle(0.0)

            elapsed_seconds_mock.assert_called_once_with(ANY)
            self.assertEqual(delta, 0.5)
    def test_process_cycle_changes_runtime_status(self, elapsed_seconds_mock):
        env = Simulation(device=Mock())

        with patch.object(env, '_process_simulation_cycle'):
            self.assertEqual(env.uptime, 0.0)

            set_simulation_running(env)

            elapsed_seconds_mock.return_value = 0.5
            env._process_cycle(0.0)

            self.assertEqual(env.uptime, 0.5)
    def test_process_cycle_calls_process_simulation(self):
        device_mock = Mock()
        env = Simulation(device=device_mock)
        set_simulation_running(env)

        env._process_cycle(0.5)
        device_mock.assert_has_calls(
            [call.process(0.5)]
        )

        self.assertEqual(env.cycles, 1)
        self.assertEqual(env.runtime, 0.5)
    def test_start_starts_control_server(self):
        env = Simulation(device=Mock())

        control_server_mock = Mock()
        env._control_server = control_server_mock

        def process_cycle_side_effect(delta):
            env.stop()

        env._process_cycle = Mock(side_effect=process_cycle_side_effect)
        env.start()

        control_server_mock.assert_has_calls([call.start_server()])
    def test_process_simulation_cycle_applies_speed(self):
        device_mock = Mock()

        env = Simulation(device=device_mock)
        set_simulation_running(env)

        env.speed = 2.0
        env._process_cycle(0.5)

        device_mock.assert_has_calls(
            [call.process(1.0)])

        self.assertEqual(env.cycles, 1)
        self.assertEqual(env.runtime, 1.0)
    def test_switch_setup(self):
        class MockBuilder(object):
            setups = {'foo': None}

            def create_device(self, setup):
                if setup == 'foo':
                    return setup

                raise RuntimeError('Error')

        adapter_mock = MagicMock()
        sim = Simulation(device=Mock(), adapters=adapter_mock, device_builder=MockBuilder())

        sim.switch_setup('foo')

        self.assertEqual(sim._device, 'foo')
        self.assertRaises(RuntimeError, sim.switch_setup, 'bar')
    def test_process_cycle_calls_sleep_if_paused(self):
        device_mock = Mock()
        env = Simulation(device=device_mock)
        set_simulation_running(env)
        env.pause()

        # simulation paused, device should not be called
        env._process_cycle(0.5)
        device_mock.assert_not_called()

        env.resume()
        # simulation is running now, device should be called
        env._process_cycle(0.5)

        device_mock.assert_has_calls([call.process(0.5)])
Пример #9
0
    def test_None_control_server_is_None(self):
        env = Simulation(device=Mock(), control_server=None)

        self.assertIsNone(env.control_server)
    def test_disconnect_device(self, sleep_mock):
        adapter_mock = Mock()
        env = Simulation(device=Mock(), adapter=adapter_mock)

        # connected device calls adapter_mock
        env._process_cycle(0.5)
        adapter_mock.assert_has_calls([call.handle(env.cycle_delay)])
        sleep_mock.assert_not_called()

        adapter_mock.reset_mock()
        sleep_mock.reset_mock()

        # disconnected device calls sleep_mock
        env.disconnect_device()
        env._process_cycle(0.5)

        sleep_mock.assert_has_calls([call.handle(env.cycle_delay)])
        adapter_mock.assert_not_called()

        adapter_mock.reset_mock()
        sleep_mock.reset_mock()

        # re-connecting returns to previous behavior
        env.connect_device()
        env._process_cycle(0.5)
        adapter_mock.assert_has_calls([call.handle(env.cycle_delay)])
        sleep_mock.assert_not_called()
Пример #11
0
    def test_setups_empty(self):
        sim = Simulation(device=Mock(), device_builder=None)

        self.assertEqual(sim.setups, [])