def test_build_status_returns_finished_after_all_subjobs_complete_and_slaves_finished( self): subjobs = self._create_subjobs(count=3) mock_project_type = self._create_mock_project_type() mock_slave = self._create_mock_slave(num_executors=3) build = Build(BuildRequest({})) build.prepare(subjobs, mock_project_type, self._create_job_config()) build.allocate_slave( mock_slave) # all three subjobs are now "in progress" # Mock out call to create build artifacts after subjobs complete build._create_build_artifact = MagicMock() for subjob in subjobs: build.mark_subjob_complete(subjob.subjob_id()) # Note: this was never a unit test! We have to wait for a thread to complete post build # actions here. TODO: Fix this poll.wait_for(lambda: build._postbuild_tasks_are_finished, 5) # Verify build artifacts was called after subjobs completed build._create_build_artifact.assert_called_once_with() build.finish() status = build._status() self.assertTrue(build._subjobs_are_finished) self.assertTrue(build._postbuild_tasks_are_finished) self.assertTrue(build._teardowns_finished) self.assertEqual(status, BuildStatus.FINISHED)
def test_build_status_returns_finished_after_all_subjobs_complete_and_slaves_finished(self): subjobs = self._create_subjobs(count=3) mock_project_type = self._create_mock_project_type() mock_slave = self._create_mock_slave(num_executors=3) build = Build(BuildRequest({})) build.prepare(subjobs, mock_project_type, self._create_job_config(self._FAKE_MAX_EXECUTORS)) build.allocate_slave(mock_slave) # all three subjobs are now "in progress" # Mock out call to create build artifacts after subjobs complete build._create_build_artifact = MagicMock() for subjob in subjobs: build.mark_subjob_complete(subjob.subjob_id()) # Note: this was never a unit test! We have to wait for a thread to complete post build # actions here. TODO: Fix this poll.wait_for(lambda: build._postbuild_tasks_are_finished, 5) # Verify build artifacts was called after subjobs completed build._create_build_artifact.assert_called_once_with() build.finish() status = build._status() self.assertTrue(build._subjobs_are_finished) self.assertTrue(build._postbuild_tasks_are_finished) self.assertTrue(build._teardowns_finished) self.assertEqual(status, BuildStatus.FINISHED)
def test_add_idle_slave_does_not_mark_build_finished_when_slaves_not_done(self): master = ClusterMaster() slave1 = Slave('', 1) slave2 = Slave('', 1) slave3 = Slave('', 1) slave1.current_build_id = 1 slave2.current_build_id = None slave3.current_build_id = 1 build1 = Build(BuildRequest({})) master._all_slaves_by_url = {'1': slave1, '2': slave2, '3': slave3} master._all_builds_by_id = {1: build1} build1._build_id = 1 build1.finish = MagicMock() master.add_idle_slave(slave1) self.assertFalse(build1.finish.called)
def test_updating_slave_to_idle_state_does_not_mark_build_finished_when_slaves_not_done( self): master = ClusterMaster() slave1 = Slave('', 1) slave2 = Slave('', 1) slave3 = Slave('', 1) slave1.current_build_id = 1 slave2.current_build_id = None slave3.current_build_id = 1 build1 = Build(BuildRequest({})) master._all_slaves_by_url = {'1': slave1, '2': slave2, '3': slave3} master._all_builds_by_id = {1: build1} build1._build_id = 1 build1.finish = MagicMock() master.handle_slave_state_update(slave1, SlaveState.IDLE) self.assertFalse(build1.finish.called)