コード例 #1
0
    def test_find(self, tmpdir):
        proto = H.main.MockProtocol()
        modem = H.main.MockModem(tmpdir)
        addr = IM.Address(1, 2, 3)

        types = [
            "BatterySensor", "Dimmer", "FanLinc", "IOLinc", "KeypadLinc",
            "Leak", "Motion", "Outlet", "SmokeBridge", "Switch", "Thermostat"
        ]
        instances = []
        for t in types:
            dev = getattr(IM.device, t)
            assert dev
            inst = dev(proto, modem, addr, "dummy")
            instances.append(inst)

        types.append("Remote")
        inst = IM.device.Remote(proto, modem, addr, "dummy", 3)
        instances.append(inst)

        types.append("Modem")
        inst = IM.Modem(proto)
        instances.append(inst)

        for i in range(len(types)):
            mdev = getattr(IM.mqtt, types[i])
            assert mdev

            cdev = IM.mqtt.config.find(instances[i])
            assert cdev is mdev, "Finding device for type %s" % types[i]
コード例 #2
0
def test_device():
    '''
    Returns a generically configured modem for testing
    '''
    protocol = mock.MagicMock()
    stack = H.main.MockStack()
    timed_call = H.main.MockTimedCall()
    device = IM.Modem(protocol, stack, timed_call)
    return device
コード例 #3
0
def setup(mock_paho_mqtt, tmpdir):
    proto = H.main.MockProtocol()
    modem = IM.Modem(proto, IM.network.Stack(), IM.network.TimedCall())
    modem.name = "modem"
    modem.addr = IM.Address(0x20, 0x30, 0x40)

    link = IM.network.Mqtt()
    mqtt = IM.mqtt.Mqtt(link, modem)
    mdev = IM.mqtt.Modem(mqtt, modem)

    return H.Data(addr=modem.addr, name=modem.name, link=link,
                        mdev=mdev, proto=proto)
コード例 #4
0
    def test_acks(self, tmpdir):
        proto = MockProto()
        calls = []
        modem = IM.Modem(proto)
        modem.save_path = str(tmpdir)

        addr = IM.Address('0a.12.34')
        handler = IM.handler.Broadcast(modem)

        r = handler.msg_received(proto, "dummy")
        assert r == Msg.UNKNOWN

        flags = Msg.Flags(Msg.Flags.Type.ALL_LINK_BROADCAST, False)
        msg = Msg.InpStandard(addr, addr, flags, 0x11, 0x01)

        # no device
        r = handler.msg_received(proto, msg)
        assert r == Msg.UNKNOWN

        device = IM.device.Base(proto, modem, addr, "foo")
        device.handle_broadcast = calls.append
        modem.add(device)
        r = handler.msg_received(proto, msg)

        assert r == Msg.CONTINUE
        assert len(calls) == 1

        # cleanup should be ignored since prev was processed.
        flags = Msg.Flags(Msg.Flags.Type.ALL_LINK_CLEANUP, False)
        msg = Msg.InpStandard(addr, addr, flags, 0x11, 0x01)
        r = handler.msg_received(proto, msg)

        assert r == Msg.CONTINUE
        assert len(calls) == 1

        # If broadcast wasn't found, cleanup should be handled.
        handler._handled = False
        r = handler.msg_received(proto, msg)

        assert r == Msg.CONTINUE
        assert len(calls) == 2

        flags = Msg.Flags(Msg.Flags.Type.DIRECT_ACK, False)
        msg = Msg.InpStandard(addr, addr, flags, 0x11, 0x01)
        r = handler.msg_received(proto, msg)
        assert r == Msg.UNKNOWN
コード例 #5
0
    def test_acks(self, tmpdir):
        proto = MockProto()
        calls = []
        modem = IM.Modem(proto, IM.network.Stack(), IM.network.TimedCall())
        modem.save_path = str(tmpdir)

        addr = IM.Address('0a.12.34')
        broadcast_to_addr = IM.Address('00.00.01')
        handler = IM.handler.Broadcast(modem)

        r = handler.msg_received(proto, "dummy")
        assert r == Msg.UNKNOWN
        assert len(calls) == 0

        flags = Msg.Flags(Msg.Flags.Type.ALL_LINK_BROADCAST, False)
        msg = Msg.InpStandard(addr, broadcast_to_addr, flags, 0x11, 0x01)

        # no device
        r = handler.msg_received(proto, msg)
        assert r == Msg.UNKNOWN
        assert len(calls) == 0

        # test good broadcat
        assert proto.wait_time == 0
        device = IM.device.Base(proto, modem, addr, "foo")

        # add 10 device db entries for this group
        for count in range(10):
            e_addr = IM.Address(0x10, 0xab, count)
            db_flags = Msg.DbFlags(in_use=True,
                                   is_controller=True,
                                   is_last_rec=False)
            entry = IM.db.DeviceEntry(e_addr, 0x01, count, db_flags,
                                      bytes([0x01, 0x02, 0x03]))
            device.db.add_entry(entry)

        device.handle_broadcast = calls.append
        modem.add(device)
        r = handler.msg_received(proto, msg)

        assert r == Msg.CONTINUE
        assert len(calls) == 1
        # should be at least 5.5 seconds ahead
        assert proto.wait_time - time.time() > 5

        # cleanup should be ignored since prev was processed.
        flags = Msg.Flags(Msg.Flags.Type.ALL_LINK_CLEANUP, False)
        msg = Msg.InpStandard(addr, addr, flags, 0x11, 0x01)
        r = handler.msg_received(proto, msg)

        assert r == Msg.CONTINUE
        assert len(calls) == 1

        # If broadcast wasn't found, cleanup should be handled.
        handler._last_broadcast = None
        r = handler.msg_received(proto, msg)

        assert r == Msg.CONTINUE
        assert len(calls) == 2

        flags = Msg.Flags(Msg.Flags.Type.DIRECT_ACK, False)
        msg = Msg.InpStandard(addr, addr, flags, 0x11, 0x01)
        r = handler.msg_received(proto, msg)
        assert r == Msg.UNKNOWN

        # Success Report Broadcast
        pre_success_time = proto.wait_time
        flags = Msg.Flags(Msg.Flags.Type.ALL_LINK_BROADCAST, False)
        success_report_to_addr = IM.Address(0x11, 1, 0x1)
        msg = Msg.InpStandard(addr, addr, flags, 0x06, 0x00)
        r = handler.msg_received(proto, msg)

        assert r == Msg.CONTINUE
        assert len(calls) == 3
        # wait time should be cleared
        assert proto.wait_time < pre_success_time

        # Pretend that a new broadcast message dropped / not received by PLM

        # Cleanup should be handled since corresponding broadcast was missed
        flags = Msg.Flags(Msg.Flags.Type.ALL_LINK_CLEANUP, False)
        msg = Msg.InpStandard(addr, addr, flags, 0x13, 0x01)
        r = handler.msg_received(proto, msg)

        assert r == Msg.CONTINUE
        assert len(calls) == 4