def test_run_success(self): with test_utils.RecipeDir() as recipe_dir: c, job = self.create_client_and_job(recipe_dir, "RunSuccess", sleep=2) self.set_counts() c.run(single=True) self.compare_counts(num_clients=1, num_events_completed=1, num_jobs_completed=1, active_branches=1) utils.check_complete_job(self, job)
def test_deprecated_environment(self): with test_utils.RecipeDir() as recipe_dir: env_before = settings.ENVIRONMENT settings.ENVIRONMENT = {'FOO': 'bar'} c = self.create_client("/foo/bar") self.assertNotIn('FOO', c.get_environment()) extra_script = 'if [ "$FOO" == "bar" ]; then\n' extra_script += ' echo "FOO=bar"\n' extra_script += 'fi\n' job = self.create_job(c, recipe_dir, "DeprecatedEnvironment", n_steps=1, sleep=2, extra_script=extra_script) self.set_counts() c.run(exit_if=lambda client: True) self.assertEqual('bar', c.get_environment('FOO')) self.compare_counts(num_clients=1, num_events_completed=1, num_jobs_completed=1, active_branches=1) utils.check_complete_job(self, job, c, n_steps=1, extra_step_msg='FOO=bar\n') settings.ENVIRONMENT = env_before
def test_bad_thread_join(self): with test_utils.RecipeDir() as recipe_dir: c, job = self.create_client_and_job(recipe_dir, "BadThreadJoin", sleep=2) c.thread_join_wait = 0 self.set_counts() c.run() self.compare_counts(num_clients=1, num_events_completed=1, num_jobs_completed=1, active_branches=1) utils.check_complete_job(self, job)
def test_manage_build_root(self): with test_utils.RecipeDir() as recipe_dir: temp_dir = tempfile.TemporaryDirectory() build_root = temp_dir.name + "/build_root" self.assertEqual(os.path.isdir(build_root), False) os.mkdir(build_root) self.assertEqual(os.path.isdir(build_root), True) manage_build_root_before = settings.MANAGE_BUILD_ROOT settings.MANAGE_BUILD_ROOT = True c = self.create_client(build_root) settings.MANAGE_BUILD_ROOT = manage_build_root_before self.assertEqual(c.get_build_root(), build_root) self.assertEqual(c.get_client_info('manage_build_root'), True) self.assertEqual(c.build_root_exists(), True) c.check_build_root() self.assertEqual(c.build_root_exists(), False) c.create_build_root() self.assertEqual(c.build_root_exists(), True) extra_script = 'if [ -d "$BUILD_ROOT" ]; then\n' extra_script += ' if [ ! -n "$(ls -A "$BUILD_ROOT")" ]; then\n' extra_script += ' echo BUILD_ROOT_EXISTS_EMPTY\n' extra_script += ' touch $BUILD_ROOT/build_root_test || exit 1\n' extra_script += ' fi\n' extra_script += 'fi\n' jobs = [] jobs.append(self.create_job(c, recipe_dir, "ManageBuildRoot1", n_steps=1, sleep=2, extra_script=extra_script)) jobs.append(self.create_job(c, recipe_dir, "ManageBuildRoot2", n_steps=1, sleep=2, extra_script=extra_script)) jobs.append(self.create_job(c, recipe_dir, "ManageBuildRoot3", n_steps=1, sleep=2, extra_script=extra_script)) self.set_counts() c.client_info["poll"] = 1 def exit_create_build_root(client): self.assertEqual(client.build_root_exists(), False) client.create_build_root() self.assertEqual(client.build_root_exists(), True) return client.get_client_info('jobs_ran') == 3 c.run(exit_if=exit_create_build_root) self.assertEqual(c.build_root_exists(), False) self.compare_counts(num_clients=1, num_events_completed=1, num_jobs_completed=3, active_branches=1) for job in jobs: utils.check_complete_job(self, job, c, n_steps=1, extra_step_msg='BUILD_ROOT_EXISTS_EMPTY\n') temp_dir.cleanup()
def test_run_graceful(self): with test_utils.RecipeDir() as recipe_dir: c, job = self.create_client_and_job(recipe_dir, "Graceful", sleep=2) self.set_counts() c.client_info["poll"] = 1 # graceful signal, should complete script = "sleep 3 && kill -USR2 %s" % os.getpid() proc = subprocess.Popen(script, shell=True, executable="/bin/bash", stdout=subprocess.PIPE) c.run() proc.wait() self.compare_counts(num_clients=1, num_events_completed=1, num_jobs_completed=1, active_branches=1) utils.check_complete_job(self, job) self.assertEqual(c.graceful_signal.triggered, True) self.assertEqual(c.cancel_signal.triggered, False)