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)
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)
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)
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)
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'))
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)
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)
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)
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