def test_commandnode_run__exception_on_error(): cmd_mock = _build_cmd_mock(return_codes=(1, )) node = CommandNode(cmd_mock) with pytest.raises(CmdNodeError): node._run(None, "xTMPx") assert cmd_mock.mock_calls == [call.run("xTMPx"), call.join()]
def test_install(self, remote_cls, installation_cls, transaction_cls): """Test flatpak installation is working.""" progress = Mock() flatpak = FlatpakManager(sysroot="remote/path", callback=progress) self._setup_flatpak_objects(remote_cls, installation_cls, transaction_cls) flatpak.initialize_with_system_path() self._installation.list_remote_refs_sync.return_value = [ RefMock("app/org.space.coolapp/x86_64/stable"), RefMock("app/com.prop.notcoolapp/i386/f36"), RefMock("runtime/org.space.coolruntime/x86_64/stable"), RefMock("runtime/com.prop.notcoolruntime/i386/f36"), ] flatpak.install_all() assert self._transaction.mock_calls == [ call.connect("new_operation", flatpak._operation_started_callback), call.connect("operation_done", flatpak._operation_stopped_callback), call.connect("operation_error", flatpak._operation_error_callback), call.add_install(FlatpakManager.LOCAL_REMOTE_NAME, "app/org.space.coolapp/x86_64/stable", None), call.add_install(FlatpakManager.LOCAL_REMOTE_NAME, "app/com.prop.notcoolapp/i386/f36", None), call.add_install(FlatpakManager.LOCAL_REMOTE_NAME, "runtime/org.space.coolruntime/x86_64/stable", None), call.add_install(FlatpakManager.LOCAL_REMOTE_NAME, "runtime/com.prop.notcoolruntime/i386/f36", None), call.run() ] assert progress.mock_calls == []
def test_upload_called_before_run(self): self.mock_data['uploads'] = MagicMock() self.instantiate() calls = [ call.upload(ANY, ANY, ANY), call.run(self.plugin_id, self.run_id, ANY) ] self.mock_host.assert_has_calls(calls)
def test_run_jobs_timeout(self): def se_run(): self.cls._timeout = datetime(2017, 10, 20, 12, 20, 00) return None j1 = Mock(name='job1') j1.run.return_value = True type(j1).skip = PropertyMock(return_value=None) j2 = Mock(name='job2') j2.run.side_effect = se_run type(j2).skip = PropertyMock(return_value=None) j3 = Mock(name='job3') j3.run.return_value = False type(j3).skip = PropertyMock(return_value=None) j4 = Mock(name='job4') type(j4).error_repr = PropertyMock(return_value='j4erepr') exc = RuntimeError('foo') j4.run.side_effect = exc type(j4).skip = PropertyMock(return_value=None) self.config.get_global.return_value = 3600 self.cls._finished = ['a'] self.cls._running = ['b'] self.cls._run_exceptions['foo'] = 6 with patch('%s._poll_jobs' % pb, autospec=True) as mock_poll: with patch('%s._report' % pb, autospec=True) as mock_report: with patch('%s.logger' % pbm) as mock_logger: with patch('%s.format_exc' % pbm) as m_fmt_exc: m_fmt_exc.return_value = 'm_traceback' self.cls._run_jobs([j1, j2, j3, j4]) assert self.cls._finished == [j1] assert self.cls._running == [j2, j3, j4] assert self.cls._run_exceptions == {} assert mock_poll.mock_calls == [call(self.cls)] assert mock_report.mock_calls == [call(self.cls)] assert self.config.jobs_for_schedules.mock_calls == [] assert j1.mock_calls == [call.run()] assert j2.mock_calls == [call.run()] assert j3.mock_calls == [] assert j4.mock_calls == [] assert call.error('Time limit reached; not running any more jobs!' ) in mock_logger.mock_calls assert m_fmt_exc.mock_calls == []
def test_mux_with_failure(mux_tr, my_tr, my_ftr): mux_tr += my_ftr mux_tr += my_tr # notice that the mux_tr raises a TransportError wrapping the subtransport's # exceptions (in this case, a single MyTransportError). with pytest.raises(TransportError) as excinfo: mux_tr.start() # my_tr starts normally, then is stopped when the other one fails. assert my_tr.mock_calls == [call.open(), call.run(), call.close()] assert my_ftr.mock_calls == [call.open()] assert len(excinfo.value.exceptions) == 1 assert isinstance(excinfo.value.exceptions[0], MyTransportError)
def test_run_jobs(self): j1 = Mock(name='job1') j1.run.return_value = True type(j1).skip = PropertyMock(return_value=None) j2 = Mock(name='job2') j2.run.return_value = None type(j2).skip = PropertyMock(return_value=None) j3 = Mock(name='job3') j3.run.return_value = False type(j3).skip = PropertyMock(return_value=None) j4 = Mock(name='job4') type(j4).error_repr = PropertyMock(return_value='j4erepr') exc = RuntimeError('foo') j4.run.side_effect = exc type(j4).skip = PropertyMock(return_value=None) j5 = Mock(name='job5') type(j5).skip = PropertyMock(return_value='some reason') self.config.get_global.return_value = 3600 self.cls._finished = ['a'] self.cls._running = ['b'] self.cls._run_exceptions['foo'] = 6 with patch('%s._poll_jobs' % pb, autospec=True) as mock_poll: with patch('%s._report' % pb, autospec=True) as mock_report: with patch('%s.format_exc' % pbm) as m_fmt_exc: m_fmt_exc.return_value = 'm_traceback' self.cls._run_jobs([j1, j2, j3, j4, j5]) assert self.cls._finished == [j1, j3, j4, j5] assert self.cls._running == [j2] assert self.cls._run_exceptions == {j4: (exc, 'm_traceback')} assert mock_poll.mock_calls == [call(self.cls)] assert mock_report.mock_calls == [call(self.cls)] assert self.config.jobs_for_schedules.mock_calls == [] assert j1.mock_calls == [call.run()] assert j2.mock_calls == [call.run()] assert j3.mock_calls == [call.run()] assert j4.mock_calls == [call.run()] assert j5.mock_calls == [] assert m_fmt_exc.mock_calls == [call()]
def test_install(self, remote_cls, installation_cls, transaction_cls): """Test flatpak installation is working.""" flatpak = FlatpakManager("remote/path") self._setup_flatpak_objects(remote_cls, installation_cls, transaction_cls) flatpak.initialize_with_system_path() mock_ref_list = [ RefMock(name="org.space.coolapp", kind=RefKind.APP, arch="x86_64", branch="stable"), RefMock(name="com.prop.notcoolapp", kind=RefKind.APP, arch="i386", branch="f36"), RefMock(name="org.space.coolruntime", kind=RefKind.RUNTIME, arch="x86_64", branch="stable"), RefMock(name="com.prop.notcoolruntime", kind=RefKind.RUNTIME, arch="i386", branch="f36") ] self._installation.list_remote_refs_sync.return_value = mock_ref_list flatpak.install_all() expected_calls = [ call.connect("new_operation", flatpak._operation_started_callback), call.connect("operation_done", flatpak._operation_stopped_callback), call.connect("operation_error", flatpak._operation_error_callback), call.add_install(FlatpakManager.LOCAL_REMOTE_NAME, mock_ref_list[0].format_ref(), None), call.add_install(FlatpakManager.LOCAL_REMOTE_NAME, mock_ref_list[1].format_ref(), None), call.add_install(FlatpakManager.LOCAL_REMOTE_NAME, mock_ref_list[2].format_ref(), None), call.add_install(FlatpakManager.LOCAL_REMOTE_NAME, mock_ref_list[3].format_ref(), None), call.run() ] assert self._transaction.mock_calls == expected_calls
def test_start_call_sequence(self, pdaemonize, prun): pidfile_mock = MagicMock() logger = MagicMock() logger.warning = MagicMock() self.simple_instance.pidfile = pidfile_mock self.simple_instance.logger = logger manager = MagicMock() manager.attach_mock(pdaemonize, "daemonize") manager.attach_mock(logger.warning, "warning") manager.attach_mock(prun, "run") self.simple_instance.start() msg = self.simple_instance._starting_message expected_calls = [ call.daemonize(pidfile_mock), call.warning(msg), call.run() ] manager.assert_has_calls(expected_calls)
def test_run_call_sequence(self, _create_server, _run_server, submit_task, run): manager = MagicMock() server = MagicMock() _create_server.return_value = server manager.attach_mock(_create_server, "_create_server") manager.attach_mock(_run_server, "_run_server") manager.attach_mock(submit_task, "submit_task") manager.attach_mock(run, "run") expected_calls = [ call._create_server(), call._run_server(server), call.submit_task(self.simple_instance.heartbeats_sink), #call.submit_task(self.simple_instance._send_to_graphite), call.run(), ] self.simple_instance.run() manager.assert_has_calls(expected_calls)
def test_command_node__run(): cfg_mock = Mock(temp_root=_DUMMY_TEMP_ROOT) mock = _build_cmd_mock() node_mock = CommandNode(mock) node_mock._create_temp_dir = mock._test_node_._create_temp_dir node_mock._create_temp_dir.return_value = _DUMMY_TEMP node_mock._setup = mock._test_node_._setup node_mock._teardown = mock._test_node_._teardown node_mock._remove_temp_dir = mock._test_node_._remove_temp_dir node_mock.run(cfg_mock) assert mock.mock_calls == [ call._test_node_._create_temp_dir(cfg_mock), call._test_node_._setup(cfg_mock, _DUMMY_TEMP), call.run(_DUMMY_TEMP), call.join(), call._test_node_._teardown(cfg_mock, _DUMMY_TEMP), call._test_node_._remove_temp_dir(_DUMMY_TEMP), ]
def test_mux_add_after_start(mux_tr, my_tr): mux_tr.start() mux_tr += my_tr mux_tr -= my_tr mux_tr.stop() assert my_tr.mock_calls == [call.open(), call.run(), call.close()]
def test_succeeding_start(my_tr): my_tr.start() my_tr.stop() assert my_tr.mock_calls == [call.open(), call.run(), call.close()]
def test_commandnode_run__call_order(): cmd_mock = _build_cmd_mock() node = CommandNode(cmd_mock) node._run(None, "xTMPx") assert cmd_mock.mock_calls == [call.run("xTMPx"), call.join()]