Exemplo n.º 1
0
    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))
Exemplo n.º 2
0
    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))
Exemplo n.º 3
0
    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)