def test_happy_path(self): days_40 = timedelta(days=40) minutes_2 = timedelta(minutes=2) now = datetime.now() self.system.rtc.set_response_time(now) self.system.obc.jump_to_time(days_40) overheat_disabled_a = TestEvent() overheat_disabled_b = TestEvent() tk_main_lcl_enabled = TestEvent() tk_main_lcl_disabled = TestEvent() tk_red_lcl_enabled = TestEvent() tk_red_lcl_disabled = TestEvent() main_burn_switch = TestEvent() red_burn_switch = TestEvent() self.system.eps.controller_a.on_disable_overheat_submode = overheat_disabled_a.set self.system.eps.controller_b.on_disable_overheat_submode = overheat_disabled_b.set self.system.eps.TKmain.on_enable = tk_main_lcl_enabled.set self.system.eps.TKmain.on_disable = tk_main_lcl_disabled.set self.system.eps.TKred.on_enable = tk_red_lcl_enabled.set self.system.eps.TKred.on_disable = tk_red_lcl_disabled.set self.system.eps.SAILmain.on_enable = main_burn_switch.set self.system.eps.SAILred.on_enable = red_burn_switch.set self.assertTrue(overheat_disabled_a.wait_for_change(16)) self.assertTrue(overheat_disabled_b.wait_for_change(16)) self.assertTrue(tk_main_lcl_enabled.wait_for_change(16)) self.assertTrue(main_burn_switch.wait_for_change(10)) self.system.rtc.set_response_time(now + minutes_2) self.system.obc.advance_time(timedelta(minutes=2)) self.assertTrue(tk_main_lcl_disabled.wait_for_change(16)) self.assertTrue(tk_red_lcl_enabled.wait_for_change(16)) self.assertTrue(red_burn_switch.wait_for_change(10)) self.system.rtc.set_response_time(now + 2 * minutes_2) self.system.obc.advance_time(timedelta(minutes=2)) self.assertTrue(tk_main_lcl_disabled.wait_for_change(16)) self.assertTrue(tk_red_lcl_disabled.wait_for_change(16)) tk_main_lcl_enabled.reset() self.system.obc.sync_fs() self.system.restart(boot_chain=[]) self.assertTrue(tk_main_lcl_enabled.wait_for_change(120))
def test_reset_transmitter(self): event = TestEvent() def on_reset(): event.set() self.system.transmitter.on_reset = on_reset self._start() event.reset() self.system.comm.put_frame(telecommand.ResetTransmitterTelecommand()) self.assertTrue(event.wait_for_change(30))
def test_beacon_on_backward_time_correction(self): event = TestEvent() def catch_beacon(_, frame): if frame[0] == BeaconMarker(): event.set() self.system.comm.transmitter.on_send_frame = catch_beacon log = logging.getLogger("test_beacon") # Set initial state: deployed antennas, T=+60m, and run mission for save everyting into persistent state self.system.obc.state_set_antenna(1) start_time = datetime.now() self.system.rtc.set_response_time(start_time) self.system.obc.jump_to_time(timedelta(minutes=60)) obc_start = self.system.obc.current_time() self.system.obc.run_mission() # Advance time just before time correction and expect beacon here self.system.obc.advance_time(timedelta(minutes=14, seconds=45)) event.reset() self.system.comm.transmitter.reset() self.system.obc.run_mission() self.assertTrue(event.wait_for_change(1), "Beacon should be sent") # Perform negative time correction and ensure no beacon is set during that mission loop time_before_correction = self.system.obc.current_time() self.system.obc.advance_time(timedelta(seconds=16)) self.system.rtc.set_response_time(start_time + timedelta(minutes=1)) event.reset() self.system.comm.transmitter.reset() self.system.obc.run_mission() self.assertFalse(event.wait_for_change(0), "Beacon should not be sent") time_after_correction = self.system.obc.current_time() self.assertGreater(time_before_correction, time_after_correction, "Time should been corrected") # 3 subsequent beacons should be set for i in range(0, 3): self.system.obc.advance_time(timedelta(seconds=32)) event.reset() self.system.comm.transmitter.reset() self.system.obc.run_mission() self.assertTrue(event.wait_for_change(1), "Beacon should be sent %d" % i)