def test_allocate_start_must_dispatch_events(self, mocker): def foo_j(j: Job): self.__j_called, self.__j_id = True, j.id def foo_h(h: Host): self.__h_called, self.__h_id = True, h.id self.__j_called = self.__h_called = False self.__j_id = self.__h_id = -1 s = SimulatorHandler() s.start("p", "w") s.subscribe(JobEvent.STARTED, foo_j) s.subscribe(HostEvent.STATE_CHANGED, foo_h) e = BatsimEventAPI.get_job_submitted(res=1) msg = BatsimMessage(150, [JobSubmittedBatsimEvent(150, e['data'])]) mocker.patch.object(protocol.NetworkHandler, 'recv', return_value=msg) s.proceed_time() assert s.queue job = s.jobs[0] s.allocate(job.id, [0]) assert self.__j_called and self.__j_id == job.id assert self.__h_called and self.__h_id == 0
def test_on_batsim_job_completed_must_dispatch_event(self, mocker): def foo_j(j: Job): self.__j_called, self.__j_id = True, j.id def foo_h(h: Host): self.__h_called, self.__h_id = True, h.id self.__j_called = self.__h_called = False self.__j_id = self.__h_id = -1 s = SimulatorHandler() s.start("p", "w") s.subscribe(HostEvent.STATE_CHANGED, foo_h) s.subscribe(JobEvent.COMPLETED, foo_j) # Setup Allocate e = BatsimEventAPI.get_job_submitted(res=1) job_id, job_alloc = e['data']['job_id'], [0] msg = BatsimMessage(150, [JobSubmittedBatsimEvent(150, e['data'])]) mocker.patch.object(protocol.NetworkHandler, 'recv', return_value=msg) s.proceed_time() s.allocate(job_id, job_alloc) # Setup Completed mocker.patch.object(batsim_py.jobs.Job, '_terminate') e = BatsimEventAPI.get_job_completted(100, job_id, alloc=job_alloc) msg = BatsimMessage(150, [JobCompletedBatsimEvent(150, e['data'])]) mocker.patch.object(protocol.NetworkHandler, 'recv', return_value=msg) s.proceed_time() assert self.__j_called and self.__j_id == job_id assert self.__h_called and self.__h_id == job_alloc[0]
def test_close_dispatch_event(self, mocker): def foo(h: SimulatorHandler): self.__called = True self.__called = False s = SimulatorHandler() s.start("p", "w") s.subscribe(SimulatorEvent.SIMULATION_ENDS, foo) s.close() assert self.__called
def test_start_must_dispatch_event(self): def foo(h: SimulatorHandler): self.__called = True self.__called = False s = SimulatorHandler() s.subscribe(SimulatorEvent.SIMULATION_BEGINS, foo) s.start("p", "w") assert self.__called
def test_switch_off_must_dispatch_host_event(self, mocker): def foo(h: Host): self.__nb_called += 1 self.__nb_called = 0 mocker.patch.object(batsim_py.resources.Host, '_switch_off') s = SimulatorHandler() s.start("p", "w") s.subscribe(HostEvent.STATE_CHANGED, foo) s.switch_off([0, 1]) assert self.__nb_called == 2
def test_switch_ps_must_dispatch_host_event(self, mocker): def foo(h: Host): self.__called, self.__h_id = True, h.id self.__called, self.__h_id = False, -1 s = SimulatorHandler() s.start("p", "w") s.subscribe(HostEvent.COMPUTATION_POWER_STATE_CHANGED, foo) h = s.platform.get_host(0) ps = h.get_pstate_by_type(PowerStateType.COMPUTATION) s.switch_power_state(0, ps[-1].id) assert self.__called and self.__h_id == 0
def test_on_batsim_job_submitted_must_dispatch_event(self, mocker): def foo(j: Job): self.__called, self.__j_id = True, j.id self.__called, self.__j_id = False, -1 s = SimulatorHandler() s.start("p", "w") s.subscribe(JobEvent.SUBMITTED, foo) # Setup Allocate e = BatsimEventAPI.get_job_submitted(res=1) job_id = e['data']['job_id'] msg = BatsimMessage(150, [JobSubmittedBatsimEvent(150, e['data'])]) mocker.patch.object(protocol.NetworkHandler, 'recv', return_value=msg) s.proceed_time() assert self.__called and self.__j_id == job_id
def test_on_batsim_notify_machine_unavailable_must_dispatch_host_event(self, mocker): def foo(h: Host): self.nb_called += 1 assert h.is_unavailable self.nb_called = 0 s = SimulatorHandler() s.start("p", "w") s.subscribe(HostEvent.STATE_CHANGED, foo) # Setup e = BatsimEventAPI.get_notify_machine_unavailable(10, [0, 1, 2]) msg = BatsimMessage(10, [NotifyBatsimEvent(10, e['data'])]) mocker.patch.object(protocol.NetworkHandler, 'recv', return_value=msg) s.proceed_time() assert self.nb_called == 2
def test_allocate_must_dispatch_job_event(self, mocker): def foo(j: Job): self.__called = True self.__job_id = j.id self.__called, self.__job_id = False, -1 s = SimulatorHandler() s.start("p", "w") e = BatsimEventAPI.get_job_submitted(res=1) msg = BatsimMessage(150, [JobSubmittedBatsimEvent(150, e['data'])]) mocker.patch.object(protocol.NetworkHandler, 'recv', return_value=msg) s.proceed_time() s.subscribe(JobEvent.ALLOCATED, foo) job = s.jobs[0] s.allocate(job.id, [0]) assert self.__called and self.__job_id == job.id
def test_on_batsim_host_ps_changed_must_set_comp_ps_and_dispatch_event(self, mocker): def foo_h(h: Host): self.__h_called, self.__h_id = True, h.id self.__j_id = self.__h_id = -1 s = SimulatorHandler() s.start("p", "w") # Setup host = s.platform.get_host(0) new_ps = host.get_pstate_by_type(PowerStateType.COMPUTATION)[-1] assert host.pstate != new_ps e = BatsimEventAPI.get_resource_state_changed( 150, [host.id], new_ps.id) e = ResourcePowerStateChangedBatsimEvent(150, e['data']) msg = BatsimMessage(150, [e]) mocker.patch.object(protocol.NetworkHandler, 'recv', return_value=msg) s.subscribe(HostEvent.COMPUTATION_POWER_STATE_CHANGED, foo_h) s.proceed_time() assert host.pstate == new_ps assert self.__h_called and self.__h_id == 0
def test_on_batsim_host_ps_changed_must_set_off_and_dispatch_event(self, mocker): def foo_h(h: Host): self.__h_called, self.__h_id = True, h.id self.__j_id = self.__h_id = -1 s = SimulatorHandler() s.start("p", "w") s.switch_off([0]) assert s.platform.get_host(0).is_switching_off # Setup p_id = s.platform.get_host(0).get_sleep_pstate().id e = BatsimEventAPI.get_resource_state_changed(150, [0], p_id) e = ResourcePowerStateChangedBatsimEvent(150, e['data']) msg = BatsimMessage(150, [e]) mocker.patch.object(protocol.NetworkHandler, 'recv', return_value=msg) s.subscribe(HostEvent.STATE_CHANGED, foo_h) s.proceed_time() assert s.platform.get_host(0).is_sleeping assert self.__h_called and self.__h_id == 0