def test_handle_result_reported_from_slave_when_build_is_canceled(self): build_id = 1 slave_url = "url" build = Build(BuildRequest({})) self.patch('app.master.build.util') build.generate_project_type() build.cancel() self.patch_object(build, '_handle_subjob_payload') self.patch_object(build, '_mark_subjob_complete') master = ClusterMaster() slave_registry = SlaveRegistry.singleton() BuildStore._all_builds_by_id[build_id] = build slave_registry._all_slaves_by_url[slave_url] = Mock() mock_scheduler = self.mock_scheduler_pool.get(build) master.handle_result_reported_from_slave(slave_url, build_id, 1) self.assertEqual(build._handle_subjob_payload.call_count, 1, "Canceled builds should " "handle payload") self.assertEqual( build._mark_subjob_complete.call_count, 1, "Canceled builds should mark " "their subjobs complete") self.assertTrue( mock_scheduler.execute_next_subjob_or_free_executor.called)
def test_exception_raised_during_complete_subjob_does_not_prevent_slave_teardown(self): slave_url = 'raphael.turtles.gov' mock_build = Mock(spec_set=Build, build_id=lambda: 777, is_finished=False) mock_build.complete_subjob.side_effect = [RuntimeError('Write failed')] master = ClusterMaster() master._all_builds_by_id[mock_build.build_id()] = mock_build master._all_slaves_by_url[slave_url] = Mock() with self.assertRaisesRegex(RuntimeError, 'Write failed'): master.handle_result_reported_from_slave(slave_url, mock_build.build_id(), subjob_id=888) self.assertEqual(mock_build.execute_next_subjob_or_teardown_slave.call_count, 1)
def test_exception_raised_during_complete_subjob_does_not_prevent_slave_teardown(self): slave_url = 'raphael.turtles.gov' mock_build = Mock(spec_set=Build, build_id=lambda: 777, is_finished=False) mock_build.complete_subjob.side_effect = [RuntimeError('Write failed')] master = ClusterMaster() master._all_builds_by_id[mock_build.build_id()] = mock_build master._all_slaves_by_url[slave_url] = Mock() mock_scheduler = self.mock_scheduler_pool.get(mock_build) with self.assertRaisesRegex(RuntimeError, 'Write failed'): master.handle_result_reported_from_slave(slave_url, mock_build.build_id(), subjob_id=888) self.assertEqual(mock_scheduler.execute_next_subjob_or_free_executor.call_count, 1)
def test_handle_result_reported_from_slave_does_nothing_when_build_is_canceled(self): build_id = 1 slave_url = "url" build = Build(BuildRequest({})) build._is_canceled = True self.patch_object(build, '_handle_subjob_payload') self.patch_object(build, '_mark_subjob_complete') master = ClusterMaster() master._all_builds_by_id[build_id] = build master._all_slaves_by_url[slave_url] = Mock() mock_scheduler = self.mock_scheduler_pool.get(build) master.handle_result_reported_from_slave(slave_url, build_id, 1) self.assertEqual(build._handle_subjob_payload.call_count, 0, "Build is canceled, should not handle payload") self.assertEqual(build._mark_subjob_complete.call_count, 0, "Build is canceled, should not complete subjobs") self.assertEqual(mock_scheduler.execute_next_subjob_or_free_executor.call_count, 0, "Build is canceled, should not do next subjob")
def test_handle_result_reported_from_slave_does_nothing_when_build_is_canceled(self): build_id = 1 slave_url = "url" build = Build(BuildRequest({})) build._is_canceled = True self.patch_object(build, '_handle_subjob_payload') self.patch_object(build, '_mark_subjob_complete') self.patch_object(build, 'execute_next_subjob_or_teardown_slave') master = ClusterMaster() master._all_builds_by_id[build_id] = build master._all_slaves_by_url[slave_url] = Mock() master.handle_result_reported_from_slave(slave_url, build_id, 1) self.assertEqual(build._handle_subjob_payload.call_count, 0, "Build is canceled, should not handle payload") self.assertEqual(build._mark_subjob_complete.call_count, 0, "Build is canceled, should not complete subjobs") self.assertEqual(build.execute_next_subjob_or_teardown_slave.call_count, 0, "Build is canceled, should not do next subjob")
def test_handle_result_reported_from_slave_does_nothing_when_build_is_canceled( self): build_id = 1 slave_url = "url" build = Build(BuildRequest({})) build.handle_subjob_payload = Mock() build.mark_subjob_complete = Mock() build.execute_next_subjob_on_slave = Mock() master = ClusterMaster() master._all_builds_by_id[build_id] = build master._all_slaves_by_url[slave_url] = Mock() build._is_canceled = True master.handle_result_reported_from_slave(slave_url, build_id, 1) self.assertEqual(build.handle_subjob_payload.call_count, 0, "Build is canceled, should not handle payload") self.assertEqual(build.mark_subjob_complete.call_count, 0, "Build is canceled, should not complete subjobs") self.assertEqual(build.execute_next_subjob_on_slave.call_count, 0, "Build is canceled, should not do next subjob")
def test_handle_result_reported_from_slave_when_build_is_canceled(self): build_id = 1 slave_url = "url" build = Build(BuildRequest({})) self.patch('app.master.build.util') build.generate_project_type() build.cancel() self.patch_object(build, '_handle_subjob_payload') self.patch_object(build, '_mark_subjob_complete') master = ClusterMaster() slave_registry = SlaveRegistry.singleton() BuildStore._all_builds_by_id[build_id] = build slave_registry._all_slaves_by_url[slave_url] = Mock() mock_scheduler = self.mock_scheduler_pool.get(build) master.handle_result_reported_from_slave(slave_url, build_id, 1) self.assertEqual(build._handle_subjob_payload.call_count, 1, "Canceled builds should " "handle payload") self.assertEqual(build._mark_subjob_complete.call_count, 1, "Canceled builds should mark " "their subjobs complete") self.assertTrue(mock_scheduler.execute_next_subjob_or_free_executor.called)