Ejemplo n.º 1
0
    def testUpDownStopArray(self, mock_logging):
        udsr1 = MagicMock()
        udsr1.deviceID = "udsr1"
        udsr2 = MagicMock()
        udsr2.deviceID = "udsr2"

        c = Controller()
        c.addDevice(udsr1)
        c.addDevice(udsr2)

        udsa = UpDownStopArray("Test", c, {1: 'udsr1'})

        udsa.add(udsr2, 2)
        self.assertEqual(2, len(udsa.relays.items()))

        udsa.raiseUp(1)
        udsr1.raiseUp.assert_called_once_with()
        self.assertEqual(0, udsr2.raiseUp.call_count)

        udsa.lower(0)
        udsr1.lower.assert_called_once_with()
        udsr2.lower.assert_called_once_with()

        udsa.stop(2)
        udsr2.stop.assert_called_once_with()

        udsa.raiseUp(3)
        mock_logging.error.assert_called_once_with("Tried to raise relay channel 3 but no such device attached to Test")
        mock_logging.reset_mock()
        udsa.lower(-123)
        mock_logging.error.assert_called_once_with("Tried to lower relay channel -123 but no such device attached to Test")
        mock_logging.reset_mock()
        udsa.stop(42)
        mock_logging.error.assert_called_once_with("Tried to stop relay channel 42 but no such device attached to Test")
Ejemplo n.º 2
0
    def testSimpleEvent(self):
        m = MagicMock()
        m.deviceID = "Mock"

        e1 = Event(m.frobnicate, "badger")

        self.performSequenceTest(e1)

        m.frobnicate.assert_called_once_with("badger")
Ejemplo n.º 3
0
    def testDeviceEvent(self):
        m = MagicMock()
        m.deviceID = "Mock"

        self.controller.addDevice(m)

        e = DeviceEvent("Mock", "frobnicate", "badger")

        self.performSequenceTest(e)

        m.frobnicate.assert_called_once_with("badger")
Ejemplo n.º 4
0
    def testInitAndDeinitDevices(self, atexit):
        c = Controller()
        d = MagicMock()
        d.deviceID = "Test"
        c.addDevice(d)

        c.initialise()
        d.initialise.assert_called_once_with()
        atexit.register.assert_called_once_with(c.deinitialise)

        c.deinitialise()
        d.deinitialise.assert_called_once_with()
Ejemplo n.º 5
0
    def testUpDownStopRelay(self):
        card = MagicMock()

        directionRelay = MagicMock()
        startStopRelay = MagicMock()

        card.createDevice.side_effect = [directionRelay, startStopRelay]

        card.deviceID = "Test"

        c = Controller()
        c.addDevice(card)

        udsr = UpDownStopRelay("TestUDSR", c, ("Test", 1), ("Test", 2))

        card.createDevice.assert_has_calls([
            call("TestUDSR_direction", 1),
            call("TestUDSR_startStop", 2)
        ])

        udsr.raiseUp()
        directionRelay.on.assert_called_once_with()
        startStopRelay.on.assert_called_once_with()

        startStopRelay.reset_mock()
        directionRelay.reset_mock()

        udsr.stop()
        startStopRelay.off.assert_called_once_with()
        self.assertEqual(0, directionRelay.call_count)

        startStopRelay.reset_mock()
        directionRelay.reset_mock()

        udsr.lower()
        directionRelay.off.assert_called_once_with()
        startStopRelay.on.assert_called_once_with()
Ejemplo n.º 6
0
    def testMomentaryUpDownStopRelay(self):
        card = MagicMock()

        upRelay = MagicMock()
        downRelay = MagicMock()
        stopRelay = MagicMock()

        card.createDevice.side_effect = [upRelay, downRelay, stopRelay]

        card.deviceID = "Test"

        c = Controller()
        c.addDevice(card)

        mudsr = MomentaryUpDownStopRelay("TestUDSR", c, ("Test", 1), ("Test", 2), ("Test", 3))

        card.createDevice.assert_has_calls([
            call("TestUDSR_up", 1),
            call("TestUDSR_down", 2),
            call("TestUDSR_stop", 3)
        ])

        mudsr.raiseUp()
        sleep(0.1)
        with mudsr.lock:  # wait for sequence to complete
            upRelay.on.assert_called_once()
            upRelay.off.assert_called_once()

            downRelay.on.assert_not_called()
            downRelay.off.assert_not_called()

            stopRelay.on.assert_not_called()
            stopRelay.off.assert_not_called()

        upRelay.reset_mock()

        mudsr.lower()
        sleep(0.1)
        with mudsr.lock:
            upRelay.on.assert_not_called()
            upRelay.off.assert_not_called()

            downRelay.on.assert_called_once()
            downRelay.off.assert_called_once()

            stopRelay.on.assert_not_called()
            stopRelay.off.assert_not_called()

        downRelay.reset_mock()

        mudsr.stop()
        sleep(0.1)
        with mudsr.lock:
            upRelay.on.assert_not_called()
            upRelay.off.assert_not_called()

            downRelay.on.assert_not_called()
            downRelay.off.assert_not_called()

            stopRelay.on.assert_called_once()
            stopRelay.off.assert_called_once()

        stopRelay.reset_mock()

        synctest = MagicMock()
        relay = MagicMock()
        synctest.createDevice.side_effect = [relay, relay, relay]
        synctest.deviceID = "synctest"

        c2 = Controller()
        c2.addDevice(synctest)

        mudsr2 = MomentaryUpDownStopRelay("testsync", c2, ("synctest", 1), ("synctest", 2), ("synctest", 3))

        mudsr2.raiseUp()
        mudsr2.lower()
        sleep(1)
        with mudsr2.lock:
            relay.assert_has_calls([
                call.on(),
                call.off(),  # Specifically: this off() is called before the second on()
                call.on(),
                call.off()
            ])