예제 #1
0
 def setUp(self):
     super().setUp()
     self.sd = subprocessDummy()
     watchdog.subprocess = self.sd
     self.watchdog = watchdog.Watchdog(scripts = ['a', 'b', 'c'])
     self.watchdog.loop_time = 0.5
     self.ftr = base.Future(self.watchdog) # hier startet jetzt der Watchdog-Thread
예제 #2
0
파일: thread.py 프로젝트: rep6/sisyphus
    def submit(self, fn, *args, **kwargs):
        with self._shutdown_lock:
            if self._shutdown:
                msg = 'cannot schedule new futures after shutdown'
                base.LOGGER.error(msg)
                raise RuntimeError(msg)

            f = base.Future()
            w = _WorkItem(f, fn, args, kwargs)

            self._work_queue.put(w)
            self._adjust_thread_count()
            return f
예제 #3
0
    def submit(self, fn, *args, **kwargs):
        with self._shutdown_lock:
            if self._shutdown_thread:
                raise RuntimeError(
                    'cannot schedule new futures after shutdown')

            f = base.Future()
            w = _WorkItem(f, fn, args, kwargs)

            self._pending_work_items[self._queue_count] = w
            self._work_ids.put(self._queue_count)
            self._queue_count += 1

            self._start_queue_management_thread()
            self._adjust_process_count()
            return f
예제 #4
0
    def test_DoorClose(self):
        # Tür auf "Offen" setzen:
        self.board.door_state = DOOR_OPEN
        with GPIO.write_context():
            GPIO.output(REED_UPPER, REED_CLOSED)
            GPIO.output(REED_LOWER, REED_OPENED)

        ftr = base.Future(self.board.CloseDoor)
        self.assertTrue(ftr.WaitForExectionStart(1.0), "Future starts within time.")

        self.assertFalse(
            ftr.HasResult(),
            "Calling CloseDoor() when door is open should be possible"
        )

        self.assertFalse(
            self.board.CloseDoor(),
            "Calling CloseDoor() while door is moving should not be possible"
        )

        with GPIO.write_context():
            GPIO.output(REED_UPPER, REED_OPENED) # oben kein Signal mehr

        self.assertFalse(
            self.board.IsDoorOpen(),
            "Door should not be opened when upper reed is HIGH"
        )

        with GPIO.write_context():
            GPIO.output(REED_LOWER, REED_CLOSED) # unten auf LOW

        ftr.WaitForResult(0.5 + LOWER_REED_OFFSET) # anderen Thread ranlassen

        self.assertTrue(ftr.HasResult(), "CloseDoor() is finished.")

        self.assertTrue(_GetSaveState(), "Board state has been saved.")
        self.assertTrue(self.board.IsDoorClosed(), "Door should be closed when lower reed is LOW")
        self.assertFalse(self.board.IsDoorOpen(), "Door should not be open when upper reed is HIGH")
        self.assertTrue(ftr.WaitForResult(), "CloseDoor() succeeded.")

        self.assertFalse(
            self.board.CloseDoor(),
            "Calling CloseDoor() while door is open shouldn't be possible."
        )
        self.assertFalse(_GetSaveState(), "Board state not saved when operation fails.")
예제 #5
0
    def OpenDoorTest(self):
        ctrl = self.controller
        ftr = base.Future(ctrl.OpenDoor)
        self.assertTrue(ftr.WaitForExectionStart(0.5),
                        "Door open command is running.")

        with self.assertRaises(TimeoutError):
            ftr.WaitForResult(0.5)

        with GPIO.write_context():
            motor_on = GPIO.input(MOTOR_ON)
            move_dir = GPIO.input(MOVE_DIR)

        self.assertEqual(ctrl.automatic, DOOR_AUTO_OFF,
                         "Door automatic is temporary disabled.")
        self.assertEqual(motor_on, RELAIS_ON, "Motor is running.")
        self.assertEqual(move_dir, MOVE_UP, "Door is moving up.")
        self.assertTrue(ctrl.board.IsDoorMoving(), "Door state is 'moving'.")
        return ftr
예제 #6
0
    def test_DoorOpen(self):
        ftr = base.Future(self.board.OpenDoor)
        self.assertTrue(ftr.WaitForExectionStart(1.0), "Future starts within time.")
        self.assertFalse(
            self.board.OpenDoor(),
            "Calling OpenDoor() while door is moving should not be possible!"
        )
        self.assertFalse(ftr.HasResult(), "OpenDoor() is running.")

        with GPIO.write_context():
            GPIO.output(REED_LOWER, REED_OPENED) # unten kein Signal mehr

        self.assertFalse(
            self.board.IsDoorClosed(),
            "Door should not be closed when lower reed is HIGH"
        )

        with GPIO.write_context():
            GPIO.output(REED_UPPER, REED_CLOSED) # oben auf LOW

        ftr.WaitForResult(0.5 + UPPER_REED_OFFSET)

        self.assertTrue(ftr.HasResult(), "OpenDoor() is finished.")
        self.assertTrue(_GetSaveState(), "Board state has been saved.")
        self.assertTrue(self.board.IsDoorOpen(), "Door should be opened when upper reed is LOW")
        self.assertFalse(
            self.board.IsDoorClosed(),
            "Door should not be closed when lower reed is HIGH"
        )

        self.assertTrue(ftr.WaitForResult(), "OpenDoor() succeeded.")
        self.assertFalse(
            self.board.OpenDoor(),
            "Calling OpenDoor() while door is opened shouldn't be possible"
        )
        self.assertFalse(_GetSaveState(), "Board state not saved when operation fails.")
예제 #7
0
    def CloseDoorTest(self):
        ctrl = self.controller
        ctrl.board.door_state = DOOR_OPEN
        with GPIO.write_context():
            GPIO.output(REED_UPPER, REED_CLOSED)  # Kontakt oben geschlossen
            GPIO.output(REED_LOWER, REED_OPENED)  # Kontakt unten offen

        ftr = base.Future(ctrl.CloseDoor)
        self.assertTrue(ftr.WaitForExectionStart(0.5),
                        "Door close command is running.")

        with self.assertRaises(TimeoutError):
            ftr.WaitForResult(2)

        with GPIO.write_context():
            motor_on = GPIO.input(MOTOR_ON)
            move_dir = GPIO.input(MOVE_DIR)

        self.assertEqual(ctrl.automatic, DOOR_AUTO_OFF,
                         "Door automatic is temporary disabled.")
        self.assertEqual(motor_on, RELAIS_ON, "Motor is running.")
        self.assertEqual(move_dir, MOVE_DOWN, "Door is moving down.")
        self.assertTrue(ctrl.board.IsDoorMoving(), "Door state is 'moving'.")
        return ftr