Пример #1
0
    def test_get_cfg(self):
        print "test_get_cfg\n"
        timeOut = time.time() + 10
        while self.hal_ipc is not None and self.hal_ipc.disconnected and time.time(
        ) < timeOut:
            pass

        desc = GCPSlaveDescriptor("127.0.0.1",
                                  port_master=9999,
                                  addr_local="127.0.0.1",
                                  interface_local="lo",
                                  addr_family=socket.AF_INET)
        dummy_session = RCPSlaveSession(desc, self.dispatcher, self.fake_cb,
                                        self.fake_cb, self.fake_cb)

        ipc_msg = {
            'session': dummy_session,
            'req_packet': "dummy-packet",
            'gcp_msg': "dummy-message",
            'req_data': [
                create_cfg_read_sequence(),
            ],
        }
        if None is not self.hal_ipc:
            self.hal_ipc.rcp_cfg_req(ipc_msg)
        else:
            print("test_get_cfg: self.hal_ipc is None!")
        time.sleep(5)
Пример #2
0
    def setUpClass(cls):
        setup_logging("GCP", filename="rcp.log")

        cls.dispatcher = Dispatcher()
        cls.desc = GCPSlaveDescriptor(addr_master='localhost',
                                      interface_local='local')
        cls.session = RCPSlaveSession(cls.desc, cls.dispatcher, fake_cb,
                                      fake_cb, fake_cb)
Пример #3
0
 def setUpClass(cls):
     create_db_conf()
     start_redis()
     RCPDB.DB_CFG_FILE = CONF_FILE
     cls.dispatcher = Dispatcher()
     cls.desc = GCPSlaveDescriptor(addr_master='localhost',
                                   interface_local='local')
     cls.session = RCPSlaveSession(cls.desc, cls.dispatcher, fake_cb,
                                   fake_cb, fake_cb)
Пример #4
0
    def test_send_vsp_tlv_to_drv(self):
        """
        Send 2 RCP Sequences: 1 with READ, 1 with WRITE
        """
        print "test_send_vsp_tlv_to_drv\n"

        timeOut = time.time() + 5
        while self.hal_ipc is not None and self.hal_ipc.disconnected and time.time(
        ) < timeOut:
            pass

        desc = GCPSlaveDescriptor("127.0.0.1",
                                  port_master=9999,
                                  addr_local="127.0.0.1",
                                  interface_local="lo",
                                  addr_family=socket.AF_INET)
        dummy_session = RCPSlaveSession(desc, self.dispatcher, self.fake_cb,
                                        self.fake_cb, self.fake_cb)

        ipc_msg = {
            'session':
            dummy_session,
            'req_packet':
            "dummy-packet",
            'gcp_msg':
            "dummy-message",
            'req_data': [
                self.vsp_tlv_seq.create_vendor_tlvs_sequence(
                    gcp_msg_def.NotifyREQ, rcp_tlv_def.RCP_MSG_TYPE_NTF,
                    rcp_tlv_def.RCP_OPERATION_TYPE_READ),
                self.vsp_tlv_seq.create_vendor_tlvs_sequence(
                    gcp_msg_def.NotifyREQ, rcp_tlv_def.RCP_MSG_TYPE_NTF,
                    rcp_tlv_def.RCP_OPERATION_TYPE_WRITE),
            ],
        }
        if None is not self.hal_ipc:
            self.hal_ipc.rcp_cfg_req(ipc_msg)

        time.sleep(1)
        pkt_db = self.hal_ipc.msg_record.pkt_db
        pkt_db_len = len(pkt_db)

        # since the seq contains matched vendor id, so all RCP sequences should be sent to driver
        self.assertTrue(pkt_db_len == 0)
Пример #5
0
    def test_rcp_msg_cb_basic(self):
        print '############test rcp_msg_cb basic case#############'
        # seq==None
        self.agent.rcp_msg_cb(None)

        seq = t_RcpMessage()
        self.agent.rcp_msg_cb(seq)

        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          1,
                          rcp_tlv_def.RCP_OPERATION_TYPE_READ,
                          unittest=True)
        desc = GCPSlaveDescriptor(
            '1.1.1.1', port_master='8190', addr_local='1.1.1.2',
            interface_local='eth0',
            addr_family=socket.AF_INET)
        orch = self.agent.process.orchestrator
        session = RCPSlaveSession(desc, self.agent.process.dispatcher,
                                  orch.session_initiate_cb,
                                  orch.session_timeout_cb,
                                  orch.session_connecting_timeout_cb)
        self.agent.rcp_msg_cb(seq, (session, 'transaction_identifier', 'trans_id'))
Пример #6
0
    def test_send_vsp_tlv_unmatched_vid_to_drv(self):
        print "test_send_vsp_tlv_unmatched_vid_to_drv\n"

        timeOut = time.time() + 5
        while self.hal_ipc is not None and self.hal_ipc.disconnected and time.time(
        ) < timeOut:
            pass

        desc = GCPSlaveDescriptor("127.0.0.1",
                                  port_master=9999,
                                  addr_local="127.0.0.1",
                                  interface_local="lo",
                                  addr_family=socket.AF_INET)
        dummy_session = RCPSlaveSession(desc, self.dispatcher, self.fake_cb,
                                        self.fake_cb, self.fake_cb)
        seq = self.vsp_tlv_seq_unmatched_vid.create_vendor_tlvs_sequence(
            gcp_msg_def.NotifyREQ, rcp_tlv_def.RCP_MSG_TYPE_NTF,
            rcp_tlv_def.RCP_OPERATION_TYPE_WRITE)
        ipc_msg = {
            'session': dummy_session,
            'req_packet': "dummy-packet",
            'gcp_msg': "dummy-message",
            'req_data': [
                seq,
            ],
        }
        if None is not self.hal_ipc:
            self.hal_ipc.rcp_cfg_req(ipc_msg)
        time.sleep(1)

        pkt_db = self.hal_ipc.msg_record.pkt_db
        pkt_db_len = len(pkt_db)

        # since the seq contains unmatched vendor id, but there is no check for vid
        # so this VendorSpecificExtension TLV still sent to driver.
        self.assertTrue(pkt_db_len == 0)
Пример #7
0
 def setUpClass(cls):
     setup_logging('GCP', filename="provision_rcp.log")
     cls.dispatcher = Dispatcher()
     cls.desc = GCPSlaveDescriptor(addr_master='localhost')
     cls.session = RCPSlaveSession(cls.desc, cls.dispatcher,
                                   fake_cb, fake_cb, fake_cb)
Пример #8
0
    def test_rcp_msg_cb_event(self):
        print '############test rcp_msg_cb event case#############'
        RCPDB.DB_CFG_FILE = CONF_FILE
        seq = RCPSequence(gcp_msg_def.DataStructREQ,
                          rcp_tlv_def.RCP_MSG_TYPE_REX,
                          1,
                          rcp_tlv_def.RCP_OPERATION_TYPE_READ,
                          unittest=True)
        desc = GCPSlaveDescriptor(
            '1.1.1.1', port_master='8190', addr_local='1.1.1.2',
            interface_local='eth0',
            addr_family=socket.AF_INET)
        orch = self.agent.process.orchestrator
        session = RCPSlaveSession(desc, self.agent.process.dispatcher,
                                  orch.session_initiate_cb,
                                  orch.session_timeout_cb,
                                  orch.session_connecting_timeout_cb)
        # reboot
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_REBOOT

        ccap_core_para = {'addr_remote': '1.1.1.1', 'interface_local': 'eth1', 'info': "test"}
        rcp_msg.parameter = json.dumps(ccap_core_para)
        self.agent.rcp_msg_cb(rcp_msg)

        # redirect
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.REDIRECT_NOTIFICATION
        ccap_core_para = {'addr_remote': '1.1.1.1', 'interface_local': 'eth0', 'info': "test"}
        rcp_msg.parameter = json.dumps(ccap_core_para)
        rcp_msg.RedirectCCAPAddresses.append('3.3.3.3')
        self.agent.rcp[('eth0', '1.1.1.1')]['status'] = self.agent.UP
        self.agent.rcp_msg_cb(rcp_msg)

        # configuration
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION
        cfg = rcp_msg.RpdDataMessage.RpdData
        rcp_msg.parameter = 'eth0'
        capability = cfg.CcapCoreIdentification.add()
        capability.Index = 1
        capability.CoreId = 'CoreId'
        capability.CoreIpAddress = '1.1.1.1'
        capability.IsPrincipal = True
        capability.CoreMode = 1
        capability.CoreName = "CiscoRPD"
        capability.VendorId = 1
        capability.InitialConfigurationComplete = True
        capability.MoveToOperational = True
        capability.CoreFunction = 1
        capability.ResourceSetIndex = 2
        self.agent.rcp[('eth0', '1.1.1.1')]['status'] = self.agent.DOWN
        self.agent.rcp_msg_cb(rcp_msg)

        # RedundantCoreIpAddress
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION
        cfg = rcp_msg.RpdDataMessage.RpdData
        rcp_msg.parameter = 'eth0'
        red = cfg.RedundantCoreIpAddress.add()
        red.ActiveCoreIpAddress = '1.1.1.1'
        red.StandbyCoreIpAddress = '1.1.1.3'
        self.agent.rcp_msg_cb(rcp_msg)  # no must field

        desc1 = GCPSlaveDescriptor(
            '1.1.1.1', port_master='8190', addr_local='1.1.1.2',
            interface_local='eth0',
            addr_family=socket.AF_INET)
        orch = self.agent.process.orchestrator
        session_1 = RCPSlaveSession(desc1, self.agent.process.dispatcher,
                                    orch.session_initiate_cb,
                                    orch.session_timeout_cb,
                                    orch.session_connecting_timeout_cb)
        self.agent.process.orchestrator.sessions_active[desc1.get_uniq_id()] = session_1
        caps1 = CcapCoreIdentification(index=1,
                                       core_id="CoreId-1",
                                       core_ip_addr='1.1.1.1',
                                       is_principal=True,
                                       core_name="SIM_GCPP",
                                       vendor_id=0,
                                       core_mode=True,
                                       initial_configuration_complete=True,
                                       move_to_operational=True,
                                       core_function=1,
                                       resource_set_index=2)
        session_1.ccap_identification = caps1

        desc2 = GCPSlaveDescriptor(
            '1.1.1.3', port_master='8190', addr_local='1.1.1.2',
            interface_local='eth0',
            addr_family=socket.AF_INET)
        orch = self.agent.process.orchestrator
        session_2 = RCPSlaveSession(desc2, self.agent.process.dispatcher,
                                    orch.session_initiate_cb,
                                    orch.session_timeout_cb,
                                    orch.session_connecting_timeout_cb)
        # self.agent.process.orchestrator.add_sessions([desc2])
        self.agent.process.orchestrator.sessions_active[desc2.get_uniq_id()] = session_2
        caps2 = CcapCoreIdentification(index=1,
                                       core_id="CoreId-2",
                                       core_ip_addr='1.1.1.1',
                                       is_principal=True,
                                       core_name="SIM_GCPP",
                                       vendor_id=0,
                                       core_mode=True,
                                       initial_configuration_complete=True,
                                       move_to_operational=True,
                                       core_function=1,
                                       resource_set_index=2)
        session_2.ccap_identification = caps2

        caps1.is_active = False
        caps2.is_active = True
        red.Operation = ManagerProcess.OPERATION_ADD
        self.agent.rcp_msg_cb(rcp_msg)

        caps1.is_active = True
        caps2.is_active = False
        red.Operation = ManagerProcess.OPERATION_CHANGE
        self.agent.rcp_msg_cb(rcp_msg)

        # ConfiguredCoreTable
        # miss operation field
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION
        cfg = rcp_msg.RpdDataMessage.RpdData
        cfg_core = cfg.ConfiguredCoreTable.add()
        cfg_core.ConfiguredCoreIp = '1.1.1.1'
        self.agent.rcp_msg_cb(rcp_msg)

        cfg_core.Operation = 0
        self.agent.rcp_msg_cb(rcp_msg)

        # ActivePrincipalCore
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION
        cfg = rcp_msg.RpdDataMessage.RpdData
        cfg.ActivePrincipalCore = '1.1.1.1'
        seq.ipc_msg = rcp_msg
        self.agent.rcp_msg_cb(seq, (session, 'transaction_identifier', 'trans_id'))

        # RPD_CONFIGURATION else
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION
        cfg = rcp_msg.RpdDataMessage.RpdData
        cfg_core = cfg.Ssd
        cfg_core.SsdServerAddress = '1.1.1.1'
        self.agent.rcp_msg_cb(rcp_msg)

        # configuration done
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.RPD_CONFIGURATION_DONE
        rcp_msg.parameter = ';'.join(['eth0', '1.1.1.1'])
        self.agent.principal_core_interface = 'eth0'
        self.agent.principal_core = '1.1.1.1'
        self.agent.rcp_msg_cb(rcp_msg, (session, 'transaction_identifier', 'trans_id'))

        # CONNECT_CLOSE_NOTIFICATION
        rcp_msg = t_RcpMessage()
        rcp_msg.RcpMessageType = rcp_msg.CONNECT_CLOSE_NOTIFICATION
        ccap_core_para = {'addr_remote': '1.1.1.1', 'interface_local': 'eth0', "reconnect": True}
        rcp_msg.parameter = json.dumps(ccap_core_para)
        self.agent.ccap_cores.pop('CORE-1234567890')
        self.agent.rcp_msg_cb(rcp_msg)

        ccap_core_para = {'addr_remote': '1.1.1.1', 'interface_local': 'eth0', "reconnect": False}
        rcp_msg.parameter = json.dumps(ccap_core_para)
        self.agent.rcp_msg_cb(rcp_msg)
Пример #9
0
    def test_RCPSlaveSession(self):

        try:
            RCPSlaveSession(self.desc, None, fake_cb, fake_cb, fake_cb)
        except Exception as e:
            self.assertIsInstance(e, AttributeError)

        try:
            RCPSlaveSession(None, self.dispatcher, fake_cb, fake_cb, fake_cb)
        except Exception as e:
            self.assertIsInstance(e, AttributeError)

        try:
            RCPSlaveSession(self.desc, self.dispatcher, None, fake_cb, fake_cb)
        except Exception as e:
            self.assertIsInstance(e, AttributeError)

        self.assertIsNotNone(self.session)

        self.session.reconnect_cnt = 0
        ret = self.session.is_reconnect_timeout()
        self.assertTrue(ret)

        self.session.reconnect_cnt = -1
        ret = self.session.is_reconnect_timeout()
        self.assertFalse(ret)

        self.session.reconnect_cnt = 0
        self.session.update_reconnect_cnt()
        self.assertEqual(self.session.reconnect_cnt, 1)

        self.session.reconnect_cnt = 1
        self.session.clear_reconnect_cnt()
        self.assertEqual(self.session.reconnect_cnt, 0)

        self.session._sequence_id = 1
        ret = self.session.get_next_seq_id()
        self.assertEqual(ret, 2)

        self.session._sequence_id = self.session.RCP_SEQUENCE_ID_END - 1
        ret = self.session.get_next_seq_id()
        self.assertEqual(ret, 0)

        self.session._transaction_id = 1
        ret = self.session.get_next_trans_id()
        self.assertEqual(ret, 2)

        self.session._transaction_id = self.session.RCP_TRANSACTION_ID_END - 1
        ret = self.session.get_next_trans_id()
        self.assertEqual(ret, 0)

        self.session.session_state = 0
        self.assertFalse(self.session.is_initiated())
        self.session.session_state = RCPSlaveSession.SESSION_STATE_RCP_SLAVE_INITIATED
        self.assertTrue(self.session.is_initiated())

        self.session.session_state = GCPSession.SESSION_STATE_FAILED
        self.session.initiate()
        self.assertFalse(self.session.is_initiated())

        self.session.session_state = RCPSlaveSession.SESSION_STATE_RCP_SLAVE_INITIATION_FAILED
        self.session.initiate()
        self.assertFalse(self.session.is_initiated())

        self.session.session_state = GCPSession.SESSION_STATE_OPEN
        self.session.initiate()
        self.assertFalse(self.session.is_initiated())

        self.session.session_state = GCPSession.SESSION_STATE_INPROCESS
        self.session.initiate()
        self.assertFalse(self.session.is_initiated())

        self.session.session_state = RCPSlaveSession.SESSION_STATE_RCP_SLAVE_INITIATED
        self.session.io_ctx.close()
        self.session.io_ctx = None
        self.session.close()

        self.session.initiate_timer = self.dispatcher.timer_register(
            self.session.CORE_CONNECT_TIMEOUT,
            self.session.connecting_timeout_cb,
            arg=self)
        self.session.timeout_timer = self.dispatcher.timer_register(
            self.session.CORE_CONNECT_TIMEOUT,
            self.session.connecting_timeout_cb,
            arg=self)
        self.session.close()

        self.session.dispatcher = None
        self.session.timeout_timer = "test"
        self.session.close()
        self.session.dispatcher = self.dispatcher