def test_get_jobs_stats(self, zclient): ifaces.init(zclient) control_iface = ifaces.JobsControl(zclient) assert control_iface.get_jobs_stats()["awaiting"] == 0 for count in range(5): control_iface.add_job(self._make_job_state()) assert control_iface.get_jobs_stats()["awaiting"] == count + 1
def test_delete_wait(self, zclient): ifaces.init(zclient) control_iface = ifaces.JobsControl(zclient) process_iface = ifaces.JobsProcess(zclient) gc_iface = ifaces.JobsGc(zclient) job = self._make_job_state() control_iface.add_job(job) assert len(control_iface.get_job_info(job.job_id)) > 0 assert not process_iface.is_deleted_job(job.job_id) assert process_iface.has_awaiting_jobs() ready_job = process_iface.get_job() assert job.job_id == ready_job.job_id def remove_job(): time.sleep(3) gc_iface.remove_job_data(job.job_id) remover = threading.Thread(target=remove_job) remover.daemon = True remover.start() before = time.time() with pytest.raises(backends.DeleteTimeoutError): control_iface.delete_job(job.job_id, timeout=1) control_iface.delete_job(job.job_id, timeout=30) assert time.time() - before >= 3 assert control_iface.get_job_info(job.job_id) is None
def test_replace_versioned(self, zclient): ifaces.init(zclient) cas_storage = ifaces.CasStorage(zclient) (old, write_ok) = cas_storage.replace_value("/foo/bar", value=1, version=0, default=0) assert old.value == 0 assert old.version is None assert write_ok is True (old, write_ok) = cas_storage.replace_value("/foo/bar", value=2, version=1, default=0) assert old.value == 1 assert old.version == 0 assert write_ok is True with pytest.raises(backends.CasVersionError): cas_storage.replace_value("/foo/bar", value=3, version=0, default=0) (old, write_ok) = cas_storage.replace_value("/foo/bar", value=3, version=0, default=0, fatal_write=False) assert old.value == 2 assert old.version == 1 assert write_ok is False (old, write_ok) = cas_storage.replace_value("/foo/bar", value=3, version=2, default=0) assert old.value == 2 assert old.version == 1 assert write_ok is True
def test_head_cycle(self, zclient): ifaces.init(zclient) rules_iface = ifaces.Rules(zclient) assert rules_iface.get_head() is None for count in range(5): rules_iface.set_head("foobar{}".format(count)) assert rules_iface.get_head() == "foobar{}".format(count)
def test_get_input_size(self, zclient): ifaces.init(zclient) control_iface = ifaces.JobsControl(zclient) assert control_iface.get_input_size() == 0 for count in range(5): control_iface.add_jobs(self.func_head, [self.fresh_job]) assert control_iface.get_input_size() == count + 1
def test_delete_wait(self, zclient): ifaces.init(zclient) control_iface = ifaces.JobsControl(zclient) process_iface = ifaces.JobsProcess(zclient) gc_iface = ifaces.JobsGc(zclient) job_id = control_iface.add_jobs(self.func_head, [self.fresh_job])[0] assert len(control_iface.get_job_info(job_id)) > 0 assert not process_iface.is_deleted_job(job_id) ready_job = next(process_iface.get_ready_jobs()) assert job_id == ready_job.job_id process_iface.associate_job(job_id) def remove_job(): time.sleep(3) gc_iface.remove_job_data(job_id) remover = threading.Thread(target=remove_job) remover.daemon = True remover.start() before = time.time() with pytest.raises(backends.DeleteTimeoutError): control_iface.delete_job(job_id, timeout=1) control_iface.delete_job(job_id) assert time.time() - before >= 3 assert control_iface.get_job_info(job_id) is None
def test_head_cycle(self, zclient): ifaces.init(zclient) scripts_iface = ifaces.Scripts(zclient) assert scripts_iface.get_head() is None for count in range(5): scripts_iface.set_head("foobar{}".format(count)) assert scripts_iface.get_head() == "foobar{}".format(count)
def _test_process(self, client, ok, with_save): ifaces.init(client) control_iface = ifaces.JobsControl(client) process_iface = ifaces.JobsProcess(client) gc_iface = ifaces.JobsGc(client) job = self._make_job_state() control_iface.add_job(job) assert isinstance(job.job_id, str) assert len(job.job_id) > 0 assert control_iface.get_jobs_list() == [job.job_id] job_info = control_iface.get_job_info(job.job_id) self._assert_job_info_new(job_info) count = 0 while process_iface.has_awaiting_jobs(): ready_job = process_iface.get_job() assert ready_job.job_id == job.job_id assert ready_job.head == self.func_head assert ready_job.state == self.func_state job_info = control_iface.get_job_info(job.job_id) self._assert_job_info_taken(job_info) if with_save: process_iface.save_job_state(job.job_id, b"fictive state", ["fictive", "stack"]) job_info = control_iface.get_job_info(job.job_id) self._assert_job_info_in_progress(job_info) if ok: process_iface.done_job(ready_job.job_id, retval=True, exc=None) else: process_iface.done_job( ready_job.job_id, retval=None, exc="Traceback (most recent call last):\n") job_info = control_iface.get_job_info(job.job_id) self._assert_job_info_finished(job_info, ok) control_iface.delete_job(job.job_id) count += 1 assert count == 1 count = 0 for (job_id, done) in gc_iface.get_jobs(): assert done gc_iface.remove_job_data(job_id) count += 1 assert count == 1 assert control_iface.get_jobs_list() == []
def test_state_cycle(self, zclient): ifaces.init(zclient) apps_state_iface = ifaces.AppsState(zclient) assert apps_state_iface.get_full_state() == {} apps_state_iface.set_state("foo", 1) apps_state_iface.set_state("bar", 2) apps_state_iface.set_state("baz", 3) apps_state = apps_state_iface.get_full_state() node_name = tools.get_node_name() assert isinstance(apps_state["foo"][node_name], dict) assert isinstance(apps_state["bar"][node_name], dict) assert isinstance(apps_state["baz"][node_name], dict)
def _test_process(self, client, ok, with_save): ifaces.init(client) control_iface = ifaces.JobsControl(client) process_iface = ifaces.JobsProcess(client) gc_iface = ifaces.JobsGc(client) job_id = control_iface.add_jobs(self.func_head, [self.fresh_job])[0] assert isinstance(job_id, str) assert len(job_id) > 0 assert control_iface.get_jobs_list() == [job_id] job_info = control_iface.get_job_info(job_id) self._assert_job_info_new(job_info) count = 0 for ready_job in process_iface.get_ready_jobs(): assert ready_job.job_id == job_id assert ready_job.head == self.func_head assert ready_job.state == self.func_state job_info = control_iface.get_job_info(job_id) self._assert_job_info_taken(job_info) process_iface.associate_job(job_id) if with_save: process_iface.save_job_state(job_id, b"fictive state", ["fictive", "stack"]) job_info = control_iface.get_job_info(job_id) self._assert_job_info_in_progress(job_info) if ok: process_iface.done_job(ready_job.job_id, retval=True, exc=None) else: process_iface.done_job(ready_job.job_id, retval=None, exc="Traceback (most recent call last):\n") job_info = control_iface.get_job_info(job_id) self._assert_job_info_finished(job_info, ok) count += 1 assert count == 1 count = 0 for (job_id, done) in gc_iface.get_jobs(0): assert done gc_iface.remove_job_data(job_id) control_iface.delete_job(job_id) count += 1 assert count == 1 assert control_iface.get_jobs_list() == []
def test_remove_fresh_job(self, zclient): ifaces.init(zclient) control_iface = ifaces.JobsControl(zclient) process_iface = ifaces.JobsProcess(zclient) gc_iface = ifaces.JobsGc(zclient) job_id = control_iface.add_jobs(self.func_head, [self.fresh_job])[0] assert len(control_iface.get_job_info(job_id)) > 0 assert not process_iface.is_deleted_job(job_id) ready_job = next(process_iface.get_ready_jobs()) assert job_id == ready_job.job_id process_iface.associate_job(job_id) gc_iface.remove_job_data(job_id) assert control_iface.get_job_info(job_id) is None
def test_remove_fresh_job(self, zclient): ifaces.init(zclient) control_iface = ifaces.JobsControl(zclient) process_iface = ifaces.JobsProcess(zclient) gc_iface = ifaces.JobsGc(zclient) job = self._make_job_state() control_iface.add_job(job) assert len(control_iface.get_job_info(job.job_id)) > 0 assert not process_iface.is_deleted_job(job.job_id) assert process_iface.has_awaiting_jobs() ready_job = process_iface.get_job() assert job.job_id == ready_job.job_id gc_iface.remove_job_data(job.job_id) assert control_iface.get_job_info(job.job_id) is None
def test_replace(self, zclient): ifaces.init(zclient) cas_storage = ifaces.CasStorage(zclient) with pytest.raises(backends.CasNoValueError): cas_storage.replace_value("/foo/bar") (old, write_ok) = cas_storage.replace_value("/foo/bar", default="test") assert old.value == "test" assert old.version is None assert write_ok is None (old, write_ok) = cas_storage.replace_value("/foo/bar", value=1, default=0) assert old.value == 0 assert old.version is None assert write_ok is True (old, write_ok) = cas_storage.replace_value("/foo/bar", value=2, default=0) assert old.value == 1 assert old.version is None assert write_ok is True
def test_get_set(self, zclient): ifaces.init(zclient) cas_storage = ifaces.CasStorage(zclient) with pytest.raises(backends.CasNoValueError): cas_storage.get_value("/foo/bar") result = cas_storage.get_value("/foo/bar", default="test") assert result.value == "test" assert result.version is None assert cas_storage.set_value("/foo/bar", value=1, version=0) is True result = cas_storage.get_value("/foo/bar") assert result.value == 1 assert result.version == 0 assert cas_storage.set_value("/foo/bar", value=2, version=0) is False assert cas_storage.set_value("/foo/bar", value=2, version=1) is True result = cas_storage.get_value("/foo/bar") assert result.value == 2 assert result.version == 1
def test_init(self, zclient): ifaces.init(zclient) ifaces.init(zclient)