Ejemplo n.º 1
0
def test_plm_ack_sent(test_db, test_entry_dev1_ctrl, test_entry_dev1_resp):
    # delete 2nd entry and then re-add the first
    test_db.add_entry(test_entry_dev1_ctrl)
    test_db.add_entry(test_entry_dev1_resp)
    assert len(test_db) == 2
    handler = Handler.ModemDbModify(test_db, test_entry_dev1_ctrl)
    db_flags = Msg.DbFlags(in_use=True,
                           is_controller=test_entry_dev1_ctrl.is_controller,
                           is_last_rec=False)
    msg = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.DELETE,
                               db_flags,
                               test_entry_dev1_ctrl.group,
                               test_entry_dev1_ctrl.addr,
                               data=None)
    # Add update to delete 2nd entry
    handler.add_update(msg, test_entry_dev1_resp)
    # Then restore the first
    db_flags = Msg.DbFlags(in_use=True,
                           is_controller=test_entry_dev1_ctrl.is_controller,
                           is_last_rec=False)
    msg2 = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.ADD_CONTROLLER,
                                db_flags, test_entry_dev1_ctrl.group,
                                test_entry_dev1_ctrl.addr,
                                test_entry_dev1_ctrl.data)
    handler.add_update(msg2, test_entry_dev1_ctrl)

    # try prior to sent
    msg.is_ack = True
    ret = handler.msg_received(test_db.device.protocol, msg)
    assert ret == Msg.UNKNOWN
    assert not handler._PLM_sent

    # Signal Sent
    handler.sending_message(msg)
    assert handler._PLM_sent

    # signal first delete ack
    msg.is_ack = True
    handler.msg_received(test_db.device.protocol, msg)
    assert len(test_db) == 1

    # signal second delete ack prior to sent
    ret = handler.msg_received(test_db.device.protocol, msg)
    assert ret == Msg.UNKNOWN

    # Signal Sent
    handler.sending_message(msg)
    assert handler._PLM_sent

    # signal second delete ack
    handler.msg_received(test_db.device.protocol, msg)
    assert len(test_db) == 0
    # signal final add ack
    # Signal Sent
    handler.sending_message(msg)
    assert handler._PLM_sent
    msg2.is_ack = True
    handler.msg_received(test_db.device.protocol, msg2)
    assert len(test_db) == 1
    assert test_db.entries[0] == test_entry_dev1_ctrl
Ejemplo n.º 2
0
 def test_delete_post_two_second(self, test_device, test_entry_dev1_ctrl,
                                 test_entry_dev1_resp, caplog):
     # add_on_device(self, entry, on_done=None)
     # test deleting the second of two entries
     test_device.add_entry(test_entry_dev1_ctrl)
     test_device.add_entry(test_entry_dev1_resp)
     test_device._delete_on_device_post_search(test_entry_dev1_resp)
     assert (test_device.device.protocol.sent[0].msg.cmd ==
             Msg.OutAllLinkUpdate.Cmd.DELETE)
     db_flags = Msg.DbFlags.from_bytes(bytes(1))
     sent = test_device.device.protocol.sent[0]
     assert (sent.msg.to_bytes() == Msg.OutAllLinkUpdate(
         Msg.OutAllLinkUpdate.Cmd.DELETE,
         db_flags, test_entry_dev1_resp.group, test_entry_dev1_resp.addr,
         bytes(3)).to_bytes())
     assert len(sent.handler.next) == 2
     assert (sent.handler.next[0][0].to_bytes() == Msg.OutAllLinkUpdate(
         Msg.OutAllLinkUpdate.Cmd.DELETE,
         db_flags, test_entry_dev1_resp.group, test_entry_dev1_resp.addr,
         bytes(3)).to_bytes())
     db_flags = Msg.DbFlags(
         in_use=True,
         is_controller=test_entry_dev1_ctrl.is_controller,
         is_last_rec=False)
     assert (sent.handler.next[1][0].to_bytes() == Msg.OutAllLinkUpdate(
         Msg.OutAllLinkUpdate.Cmd.ADD_CONTROLLER, db_flags,
         test_entry_dev1_ctrl.group, test_entry_dev1_ctrl.addr,
         test_entry_dev1_ctrl.data).to_bytes())
Ejemplo n.º 3
0
 def test_update_nak(self, test_db, test_entry_dev1_ctrl,
                     test_entry_dev1_ctrl_mod):
     test_db.add_entry(test_entry_dev1_ctrl)
     assert len(test_db) == 1
     handler = Handler.ModemDbModify(test_db,
                                     test_entry_dev1_ctrl_mod,
                                     existing_entry=test_entry_dev1_ctrl)
     handler._PLM_sent = True
     handler._PLM_ACK = True
     db_flags = Msg.DbFlags(
         in_use=True,
         is_controller=test_entry_dev1_ctrl.is_controller,
         is_last_rec=False)
     msg = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.UPDATE,
                                db_flags,
                                test_entry_dev1_ctrl_mod.group,
                                test_entry_dev1_ctrl_mod.addr,
                                data=bytes(3),
                                is_ack=False)
     handler.msg_received(test_db.device.protocol, msg)
     # entry should still be there, it gets updated on next ack
     assert len(test_db) == 1
     assert len(test_db.device.protocol.sent) == 1
     assert (test_db.device.protocol.sent[0].msg.cmd ==
             Msg.OutAllLinkUpdate.Cmd.ADD_CONTROLLER)
     assert handler.is_retry
Ejemplo n.º 4
0
 def test_delete_post_one(self, test_device, test_entry_dev1_ctrl, caplog):
     # add_on_device(self, entry, on_done=None)
     # test delete of a single entry
     test_device.add_entry(test_entry_dev1_ctrl)
     test_device._delete_on_device_post_search(test_entry_dev1_ctrl)
     assert (test_device.device.protocol.sent[0].msg.cmd ==
             Msg.OutAllLinkUpdate.Cmd.DELETE)
     db_flags = Msg.DbFlags.from_bytes(bytes(1))
     assert (test_device.device.protocol.sent[0].msg.to_bytes() ==
             Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.DELETE, db_flags,
                                  test_entry_dev1_ctrl.group,
                                  test_entry_dev1_ctrl.addr,
                                  bytes(3)).to_bytes())
Ejemplo n.º 5
0
 def test_nack(self, test_db, test_entry_dev1_ctrl):
     handler = Handler.ModemDbSearch(test_db)
     db_flags = Msg.DbFlags(
         in_use=True,
         is_controller=test_entry_dev1_ctrl.is_controller,
         is_last_rec=False)
     msg = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.EXISTS,
                                db_flags,
                                test_entry_dev1_ctrl.group,
                                test_entry_dev1_ctrl.addr,
                                data=None,
                                is_ack=False)
     ret = handler.msg_received(test_db.device.protocol, msg)
     assert ret == Msg.FINISHED
Ejemplo n.º 6
0
 def test_delete_post_two_first(self, test_device, test_entry_dev1_ctrl,
                                test_entry_dev1_resp, caplog):
     # add_on_device(self, entry, on_done=None)
     # test deleting the first of two entries
     test_device.add_entry(test_entry_dev1_ctrl)
     test_device.add_entry(test_entry_dev1_resp)
     test_device._delete_on_device_post_search(test_entry_dev1_ctrl)
     assert (test_device.device.protocol.sent[0].msg.cmd ==
             Msg.OutAllLinkUpdate.Cmd.DELETE)
     db_flags = Msg.DbFlags.from_bytes(bytes(1))
     sent = test_device.device.protocol.sent[0]
     assert (sent.msg.to_bytes() == Msg.OutAllLinkUpdate(
         Msg.OutAllLinkUpdate.Cmd.DELETE,
         db_flags, test_entry_dev1_ctrl.group, test_entry_dev1_ctrl.addr,
         bytes(3)).to_bytes())
     assert len(sent.handler.next) == 0
Ejemplo n.º 7
0
 def test_delete(self, test_db, test_entry_dev1_ctrl):
     # delete, no next
     test_db.add_entry(test_entry_dev1_ctrl)
     assert len(test_db) == 1
     handler = Handler.ModemDbModify(test_db, test_entry_dev1_ctrl)
     db_flags = Msg.DbFlags(
         in_use=True,
         is_controller=test_entry_dev1_ctrl.is_controller,
         is_last_rec=False)
     msg = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.DELETE,
                                db_flags,
                                test_entry_dev1_ctrl.group,
                                test_entry_dev1_ctrl.addr,
                                data=None,
                                is_ack=True)
     handler.msg_received(test_db.device.protocol, msg)
     assert len(test_db) == 0
Ejemplo n.º 8
0
 def test_add(self, test_db, test_entry_dev1_ctrl):
     # add clean
     assert len(test_db) == 0
     handler = Handler.ModemDbModify(test_db, test_entry_dev1_ctrl)
     db_flags = Msg.DbFlags(
         in_use=True,
         is_controller=test_entry_dev1_ctrl.is_controller,
         is_last_rec=False)
     msg = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.ADD_CONTROLLER,
                                db_flags,
                                test_entry_dev1_ctrl.group,
                                test_entry_dev1_ctrl.addr,
                                data=bytes(3),
                                is_ack=True)
     handler.msg_received(test_db.device.protocol, msg)
     assert len(test_db) == 1
     assert test_db.entries[0] == test_entry_dev1_ctrl
Ejemplo n.º 9
0
 def test_prevent_loop(self, test_db, test_entry_dev1_ctrl, caplog):
     handler = Handler.ModemDbModify(test_db,
                                     test_entry_dev1_ctrl_mod,
                                     existing_entry=test_entry_dev1_ctrl)
     handler.is_retry = True
     db_flags = Msg.DbFlags(
         in_use=True,
         is_controller=test_entry_dev1_ctrl.is_controller,
         is_last_rec=False)
     msg = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.UPDATE,
                                db_flags,
                                test_entry_dev1_ctrl.group,
                                test_entry_dev1_ctrl.addr,
                                data=bytes(3),
                                is_ack=False)
     handler.msg_received(test_db.device.protocol, msg)
     # This should fail to prevent infinite loops
     assert "db update failed" in caplog.text
Ejemplo n.º 10
0
 def test_delete_nak(self, test_db, test_entry_dev1_ctrl, caplog):
     # delete, no next
     test_db.add_entry(test_entry_dev1_ctrl)
     assert len(test_db) == 1
     handler = Handler.ModemDbModify(test_db, test_entry_dev1_ctrl)
     handler._PLM_sent = True
     handler._PLM_ACK = True
     db_flags = Msg.DbFlags(
         in_use=True,
         is_controller=test_entry_dev1_ctrl.is_controller,
         is_last_rec=False)
     msg = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.DELETE,
                                db_flags,
                                test_entry_dev1_ctrl.group,
                                test_entry_dev1_ctrl.addr,
                                data=None,
                                is_ack=False)
     handler.msg_received(test_db.device.protocol, msg)
     assert len(test_db) == 1
     assert "db update failed" in caplog.text
Ejemplo n.º 11
0
 def test_add_nak(self, test_db, test_entry_dev1_ctrl):
     assert len(test_db) == 0
     handler = Handler.ModemDbModify(test_db, test_entry_dev1_ctrl)
     db_flags = Msg.DbFlags(
         in_use=True,
         is_controller=test_entry_dev1_ctrl.is_controller,
         is_last_rec=False)
     msg = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.ADD_CONTROLLER,
                                db_flags,
                                test_entry_dev1_ctrl.group,
                                test_entry_dev1_ctrl.addr,
                                data=bytes(3),
                                is_ack=False)
     handler.msg_received(test_db.device.protocol, msg)
     # entry should be added
     assert len(test_db) == 1
     assert len(test_db.device.protocol.sent) == 1
     assert (test_db.device.protocol.sent[0].msg.cmd ==
             Msg.OutAllLinkUpdate.Cmd.UPDATE)
     assert handler.is_retry
Ejemplo n.º 12
0
 def test_update(self, test_db, test_entry_dev1_ctrl,
                 test_entry_dev1_ctrl_mod):
     # update clean
     test_db.add_entry(test_entry_dev1_ctrl)
     assert len(test_db) == 1
     handler = Handler.ModemDbModify(test_db,
                                     test_entry_dev1_ctrl_mod,
                                     existing_entry=test_entry_dev1_ctrl)
     db_flags = Msg.DbFlags(
         in_use=True,
         is_controller=test_entry_dev1_ctrl.is_controller,
         is_last_rec=False)
     msg = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.UPDATE,
                                db_flags,
                                test_entry_dev1_ctrl.group,
                                test_entry_dev1_ctrl.addr,
                                data=bytes(3),
                                is_ack=True)
     handler.msg_received(test_db.device.protocol, msg)
     assert len(test_db) == 1
     assert test_db.entries[0].data == test_entry_dev1_ctrl_mod.data
Ejemplo n.º 13
0
    def test_plm_sent(self, test_db, tmpdir):
        db_flags = Msg.DbFlags(in_use=True,
                               is_controller=False,
                               is_last_rec=False)
        handler = Handler.ModemDbSearch(test_db)
        assert not handler._PLM_sent

        #Try a message prior to sent
        msg = Msg.OutAllLinkUpdate(Msg.OutAllLinkUpdate.Cmd.EXISTS,
                                   db_flags,
                                   0x01,
                                   0x01,
                                   data=None,
                                   is_ack=True)
        ret = handler.msg_received(test_db.device.protocol, msg)
        assert ret == Msg.UNKNOWN

        # Signal Sent
        handler.sending_message(msg)
        assert handler._PLM_sent

        #Try a message after sent
        ret = handler.msg_received(test_db.device.protocol, msg)
        assert ret == Msg.CONTINUE