示例#1
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
示例#2
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
 def test_wrong_handler(self, test_db, test_entry_dev1_ctrl):
     handler = Handler.ModemDbModify(test_db,
                                     test_entry_dev1_ctrl_mod,
                                     existing_entry=test_entry_dev1_ctrl)
     msg = Msg.OutAllLinkCancel()
     ret = handler.msg_received(test_db.device.protocol, msg)
     # This should fail to prevent infinite loops
     assert ret == Msg.UNKNOWN
 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
 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
 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
示例#7
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
 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
 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