def test_callback(self): self.notify_event = threading.Event() virtualtime.notify_on_change(self.notify_event) self.callback_stop = False self.callback_event = threading.Event() self.callback_logs = [] self.callback_missed = [] ct = threading.Thread(target=self.callback_thread) ct.start() virtualtime.wait_for_callback_on_change(self.callback_event) try: start_time = virtualtime._original_time() virtualtime.set_offset(1) assert len(self.callback_logs) == 1 and not self.callback_missed assert self.callback_logs[0][1:] == (1, False) offset_time = virtualtime._original_time() assert offset_time - start_time < 0.1 virtualtime.set_time(0) assert len(self.callback_logs) == 2 and not self.callback_missed assert self.callback_logs[1][1] < -start_time + 1 and self.callback_logs[1][2] is False set_time = virtualtime._original_time() assert set_time - offset_time < 0.1 virtualtime.restore_time() assert len(self.callback_logs) == 3 and not self.callback_missed assert self.callback_logs[1][1] < -start_time + 1 and self.callback_logs[1][2] is False restore_time = virtualtime._original_time() assert restore_time - set_time < 0.1 finally: # deleting this should ensure it drops out of the weak set and doesn't hang things up later... del self.callback_event self.callback_stop = True self.notify_event.set() ct.join()
def test_callback(self): self.notify_event = threading.Event() virtualtime.notify_on_change(self.notify_event) self.callback_stop = False self.callback_event = threading.Event() self.callback_logs = [] self.callback_missed = [] ct = threading.Thread(target=self.callback_thread) ct.start() virtualtime.wait_for_callback_on_change(self.callback_event) try: start_time = virtualtime._original_time() virtualtime.set_offset(1) assert len(self.callback_logs) == 1 and not self.callback_missed assert self.callback_logs[0][1:] == (1, False) offset_time = virtualtime._original_time() assert offset_time - start_time < 0.1 virtualtime.set_time(0) assert len(self.callback_logs) == 2 and not self.callback_missed assert self.callback_logs[1][ 1] < -start_time + 1 and self.callback_logs[1][2] is False set_time = virtualtime._original_time() assert set_time - offset_time < 0.1 virtualtime.restore_time() assert len(self.callback_logs) == 3 and not self.callback_missed assert self.callback_logs[1][ 1] < -start_time + 1 and self.callback_logs[1][2] is False restore_time = virtualtime._original_time() assert restore_time - set_time < 0.1 finally: # deleting this should ensure it drops out of the weak set and doesn't hang things up later... del self.callback_event self.callback_stop = True self.notify_event.set() ct.join()
def test_correspondence(self): """Checks that patching time and datetime modules independently works""" start_time, start_date = time.time(), datetime.datetime.now() virtualtime.patch_time_module() second_time, second_date = time.time(), datetime.datetime.now() assert 0 <= second_time - start_time <= 0.05 assert datetime.timedelta( 0) <= second_date - start_date <= datetime.timedelta(seconds=0.05) virtualtime.set_offset(3600) half_time, half_date = time.time(), datetime.datetime.now() assert 3600 <= half_time - start_time <= 3600.1 # datetime is not patched yet assert datetime.timedelta( seconds=0) <= half_date - start_date <= datetime.timedelta( seconds=0.1) virtualtime.patch_datetime_module() whole_time, whole_date = time.time(), datetime.datetime.now() assert 3600 <= whole_time - start_time <= 3600.1 assert datetime.timedelta( seconds=3600) <= whole_date - start_date <= datetime.timedelta( seconds=3600.1) virtualtime.unpatch_time_module() other_half_time, other_half_date = time.time(), datetime.datetime.now() assert 0 <= other_half_time - start_time <= 0.1 assert datetime.timedelta( seconds=3600 ) <= other_half_date - start_date <= datetime.timedelta(seconds=3600.1)
def test_notify_on_change(self): self.notify_event = threading.Event() virtualtime.notify_on_change(self.notify_event) start_time = virtualtime._original_time() virtualtime.set_offset(1) assert self.notify_event.wait(0.1) self.notify_event.clear() offset_time = virtualtime._original_time() assert offset_time - start_time < 0.1 virtualtime.set_time(0) assert self.notify_event.wait(0.1) self.notify_event.clear() set_time = virtualtime._original_time() assert set_time - offset_time < 0.1 virtualtime.restore_time() assert self.notify_event.wait(0.1) self.notify_event.clear() restore_time = virtualtime._original_time() assert restore_time - set_time < 0.1
def test_correspondence(self): """Checks that patching time and datetime modules independently works""" start_time, start_date = time.time(), datetime.datetime.now() virtualtime.patch_time_module() second_time, second_date = time.time(), datetime.datetime.now() assert 0 <= second_time - start_time <= 0.05 assert datetime.timedelta(0) <= second_date - start_date <= datetime.timedelta(seconds=0.05) virtualtime.set_offset(3600) half_time, half_date = time.time(), datetime.datetime.now() assert 3600 <= half_time - start_time <= 3600.1 # datetime is not patched yet assert datetime.timedelta(seconds=0) <= half_date - start_date <= datetime.timedelta(seconds=0.1) virtualtime.patch_datetime_module() whole_time, whole_date = time.time(), datetime.datetime.now() assert 3600 <= whole_time - start_time <= 3600.1 assert datetime.timedelta(seconds=3600) <= whole_date - start_date <= datetime.timedelta(seconds=3600.1) virtualtime.unpatch_time_module() other_half_time, other_half_date = time.time(), datetime.datetime.now() assert 0 <= other_half_time - start_time <= 0.1 assert datetime.timedelta(seconds=3600) <= other_half_date - start_date <= datetime.timedelta(seconds=3600.1)