def test_update_state_to_canceled_sets_state_correctly(self): build = Build(BuildRequest({})) build._unstarted_subjobs = Queue() success = build.update_state({'status': 'canceled'}) self.assertEqual(build._status(), BuildStatus.CANCELED, "Status not set to canceled") self.assertTrue(success, "Update did not report success")
def test_teardown_called_on_slave_when_no_subjobs_remain(self): build = Build(BuildRequest({})) slave = Slave('', 1) slave.teardown = MagicMock() slave.free_executor = MagicMock(return_value=0) build._unstarted_subjobs = Queue() build.execute_next_subjob_on_slave(slave) slave.teardown.assert_called_with()
def test_teardown_called_on_slave_when_no_subjobs_remain(self): build = Build(BuildRequest({})) slave = Slave('', 1) slave.teardown = MagicMock() slave.free_executor = MagicMock(return_value=0) build._unstarted_subjobs = Queue() build._slaves_allocated = [slave] build.execute_next_subjob_on_slave(slave) slave.teardown.assert_called_with()
def test_execute_next_subjob_with_empty_queue_cant_teardown_same_slave_twice(self): build = Build(BuildRequest({})) build._unstarted_subjobs = Queue() slave = Mock() slave.free_executor = Mock(return_value=0) build._slaves_allocated.append(slave) build.execute_next_subjob_or_teardown_slave(slave) build.execute_next_subjob_or_teardown_slave(slave) self.assertEqual(slave.teardown.call_count, 1, "Teardown should only be called once")
def test_cancel_exits_early_if_build_not_running(self): build = Build(BuildRequest({})) build._unstarted_subjobs = Queue() slave_mock = Mock() build._slaves_allocated = [slave_mock] build._status = Mock(return_value=BuildStatus.FINISHED) build.cancel() self.assertFalse(build._is_canceled, "Build should not be canceled") self.assertEqual(slave_mock.teardown.call_count, 0, "Teardown should not have been called")
def test_cancel_depletes_queue_and_sets_canceled(self): build = Build(BuildRequest({})) build._unstarted_subjobs = Queue() build._unstarted_subjobs.put(1) slave_mock = Mock() build._slaves_allocated = [slave_mock] build.cancel() self.assertTrue(build._is_canceled, "Build should've been canceled") self.assertTrue(build._unstarted_subjobs.empty(), "Build's unstarted subjobs should've been depleted")
def test_execute_next_subjob_with_empty_queue_cant_teardown_same_slave_twice( self): build = Build(BuildRequest({})) build._unstarted_subjobs = Queue() slave = Mock() slave.free_executor = Mock(return_value=0) build._slaves_allocated.append(slave) build.execute_next_subjob_on_slave(slave) build.execute_next_subjob_on_slave(slave) self.assertEqual(slave.teardown.call_count, 1, "Teardown should only be called once")
def test_teardown_called_on_slave_when_slave_in_shutdown_mode(self): build = Build(BuildRequest({})) slave = Slave('', 1) slave.teardown = MagicMock() slave._is_in_shutdown_mode = True slave.free_executor = MagicMock(return_value=0) build._unstarted_subjobs = Queue() build._unstarted_subjobs.put(Mock(spec=Subjob)) build._slaves_allocated = [slave] build.execute_next_subjob_or_teardown_slave(slave) slave.teardown.assert_called_with()