def setUp(self): super(SolnSetup, self).setUp() if 'PARAMS_FILE' in os.environ: self.ini_file = os.environ.get('PARAMS_FILE') else: self.ini_file = 'params.ini' self.inputs = self.useFixture(ContrailTestInit(self.ini_file)) self.connections = ContrailConnections(self.inputs) self.quantum_fixture = self.connections.quantum_fixture self.nova_fixture = self.connections.nova_fixture self.vnc_lib = self.connections.vnc_lib self.logger = self.inputs.logger self.setup_common_objects() return self
def setUp(self): super(TestEncapsulation, self).setUp() if 'PARAMS_FILE' in os.environ: self.ini_file = os.environ.get('PARAMS_FILE') else: self.ini_file = 'params.ini' self.inputs = self.useFixture(ContrailTestInit(self.ini_file)) self.connections = ContrailConnections(self.inputs) self.quantum_fixture = self.connections.quantum_fixture self.nova_fixture = self.connections.nova_fixture self.agent_inspect = self.connections.agent_inspect self.vnc_lib = self.connections.vnc_lib self.logger = self.inputs.logger self.analytics_obj = self.connections.analytics_obj
class SolnSetup(fixtures.Fixture): def __init__(self, test_resource): super(SolnSetup, self).__init__() self.test_resource = test_resource def setUp(self): super(SolnSetup, self).setUp() if 'PARAMS_FILE' in os.environ: self.ini_file = os.environ.get('PARAMS_FILE') else: self.ini_file = 'params.ini' self.inputs = self.useFixture(ContrailTestInit(self.ini_file)) self.connections = ContrailConnections(self.inputs) self.quantum_fixture = self.connections.quantum_fixture self.nova_fixture = self.connections.nova_fixture self.vnc_lib = self.connections.vnc_lib self.logger = self.inputs.logger self.setup_common_objects() return self # end setUp def setup_common_objects(self): # Setting up default encapsulation # self.logger.info('Deleting any Encap before continuing') # out=self.connections.delete_vrouter_encap() self.logger.info('Setting new Encap before continuing') config_id = self.connections.update_vrouter_config_encap( 'MPLSoGRE', 'MPLSoUDP', 'VXLAN') self.logger.info('updated.UUID is %s' % (config_id)) (self.vn1_name, self.vn1_subnets) = ("EVPN-VN1", ["11.1.1.0/24"]) (self.vn2_name, self.vn2_subnets) = ("EVPN-VN2", ["22.1.1.0/24"]) (self.vn3_name, self.vn3_subnets) = ("EVPN-MGMT-VN", ["33.1.1.0/24"]) (self.vn4_name, self.vn4_subnets) = ("EVPN-L2-VN", ["44.1.1.0/24"]) (self.vn1_vm1_name) = 'EVPN_VN1_VM1' (self.vn1_vm2_name) = 'EVPN_VN1_VM2' (self.vn2_vm1_name) = 'EVPN_VN2_VM1' (self.vn2_vm2_name) = 'EVPN_VN2_VM2' (self.vn_l2_vm1_name) = 'EVPN_VN_L2_VM1' (self.vn_l2_vm2_name) = 'EVPN_VN_L2_VM2' # Get all compute host host_list = [] for host in self.inputs.compute_ips: host_list.append(self.inputs.host_data[host]['name']) compute_1 = host_list[0] compute_2 = host_list[0] if len(host_list) > 1: compute_1 = host_list[0] compute_2 = host_list[1] self.vn1_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, inputs=self.inputs, vn_name=self.vn1_name, subnets=self.vn1_subnets)) self.vn2_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, inputs=self.inputs, vn_name=self.vn2_name, subnets=self.vn2_subnets)) self.vn3_fixture = self.useFixture( VNFixture( project_name=self.inputs.project_name, connections=self.connections, inputs=self.inputs, vn_name=self.vn3_name, subnets=self.vn3_subnets, forwarding_mode='l2_l3')) self.vn4_fixture = self.useFixture( VNFixture( project_name=self.inputs.project_name, connections=self.connections, inputs=self.inputs, vn_name=self.vn4_name, subnets=self.vn4_subnets, forwarding_mode='l2')) #self.vn1_vm1_fixture=self.useFixture(VMFixture(project_name= self.inputs.project_name,connections= self.connections, vn_obj= self.vn1_fixture.obj, flavor='contrail_flavor_small', image_name= 'ubuntu-traffic', vm_name= self.vn1_vm1_name,node_name= compute_1)) #self.vn1_vm2_fixture=self.useFixture(VMFixture(project_name= self.inputs.project_name,connections= self.connections, vn_obj= self.vn1_fixture.obj, flavor='contrail_flavor_small', image_name= 'ubuntu-traffic', vm_name= self.vn1_vm2_name,node_name= compute_2)) #self.vn2_vm1_fixture=self.useFixture(VMFixture(project_name= self.inputs.project_name,connections= self.connections, vn_obj= self.vn2_fixture.obj, flavor='contrail_flavor_small', image_name= 'ubuntu-traffic', vm_name= self.vn2_vm1_name,node_name= compute_1)) #self.vn2_vm2_fixture=self.useFixture(VMFixture(project_name= self.inputs.project_name,connections= self.connections, vn_obj= self.vn2_fixture.obj, flavor='contrail_flavor_small', image_name= 'ubuntu-traffic', vm_name= self.vn2_vm2_name,node_name= compute_2)) #self.vn_l2_vm1_fixture=self.useFixture(VMFixture(project_name= self.inputs.project_name,connections= self.connections, vn_objs= [self.vn3_fixture.obj , self.vn4_fixture.obj], flavor='contrail_flavor_small', image_name= 'ubuntu-traffic', vm_name= self.vn_l2_vm1_name,node_name= compute_1)) #self.vn_l2_vm2_fixture=self.useFixture(VMFixture(project_name= self.inputs.project_name,connections= self.connections, vn_objs= [self.vn3_fixture.obj , self.vn4_fixture.obj], flavor='contrail_flavor_small', image_name= 'ubuntu-traffic', vm_name= self.vn_l2_vm2_name,node_name= compute_2)) # end setup_common_objects def tearDown(self): print "Tearing down resources" super(SolnSetup, self).cleanUp() def dirtied(self): self.test_resource.dirtied(self)
class TestEncapsulation(testtools.TestCase, fixtures.TestWithFixtures): # @classmethod def setUp(self): super(TestEncapsulation, self).setUp() if 'PARAMS_FILE' in os.environ: self.ini_file = os.environ.get('PARAMS_FILE') else: self.ini_file = 'params.ini' self.inputs = self.useFixture(ContrailTestInit(self.ini_file)) self.connections = ContrailConnections(self.inputs) self.quantum_fixture = self.connections.quantum_fixture self.nova_fixture = self.connections.nova_fixture self.agent_inspect = self.connections.agent_inspect self.vnc_lib = self.connections.vnc_lib self.logger = self.inputs.logger self.analytics_obj = self.connections.analytics_obj # end setUpClass def cleanUp(self): super(TestEncapsulation, self).cleanUp() # end cleanUp def runTest(self): pass # end runTest @preposttest_wrapper def test_encaps_mx_gateway(self): '''Test to validate floating-ip froma a public pool assignment to a VM. It creates a VM, assigns a FIP to it and pings to outside the cluster.''' if (('MX_GW_TEST' in os.environ) and (os.environ.get('MX_GW_TEST') == '1')): if len(set(self.inputs.compute_ips)) < 2: raise self.skipTest( 'Skiping Test. At least 2 compute node required to run the test') self.logger.info('Deleting any Encap before continuing') out = self.connections.delete_vrouter_encap() if (out != 'No config id found'): self.addCleanup( self.connections.set_vrouter_config_encap, out[0], out[1], out[2]) self.logger.info('Setting new Encap before continuing') config_id = self.connections.set_vrouter_config_encap( 'MPLSoUDP', 'MPLSoGRE', 'VXLAN') self.logger.info('Created.UUID is %s' % (config_id)) self.addCleanup(self.connections.delete_vrouter_encap) configured_encap_list = [ unicode('MPLSoUDP'), unicode('MPLSoGRE'), unicode('VXLAN')] encap_list = self.connections.read_vrouter_config_encap() if configured_encap_list != encap_list: self.logger.error( "Configured Encap Priority order is NOT matching with expected order. Configured: %s ,Expected: %s" % (configured_encap_list, encap_list)) assert False else: self.logger.error( "Configured Encap Priority order is matching with expected order. Configured: %s ,Expected: %s" % (configured_encap_list, encap_list)) result = True fip_pool_name = self.inputs.fip_pool_name fvn_name = 'public100' fip_subnets = [self.inputs.fip_pool] vm1_name = 'vm200' vn1_name = 'vn200' vn1_subnets = ['11.1.1.0/24'] api_server_port = self.inputs.api_server_port api_server_ip = self.inputs.cfgm_ip mx_rt = self.inputs.mx_rt router_name = self.inputs.ext_routers[0][0] router_ip = self.inputs.ext_routers[0][1] self.project_fixture = self.useFixture(ProjectFixture( vnc_lib_h=self.vnc_lib, project_name=self.inputs.project_name, connections=self.connections)) self.logger.info( 'Default SG to be edited for allow all on project: %s' % self.inputs.project_name) self.project_fixture.set_sec_group_for_allow_all( self.inputs.project_name, 'default') fvn_fixture = self.useFixture( VNFixture( project_name=self.inputs.project_name, connections=self.connections, vn_name=fvn_name, inputs=self.inputs, subnets=fip_subnets, router_asn=self.inputs.router_asn, rt_number=mx_rt)) assert fvn_fixture.verify_on_setup() vn1_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn1_name, inputs=self.inputs, subnets=vn1_subnets)) assert vn1_fixture.verify_on_setup() vm1_fixture = self.useFixture( VMFixture(project_name=self.inputs.project_name, connections=self.connections, vn_obj=vn1_fixture.obj, vm_name=vm1_name)) assert vm1_fixture.wait_till_vm_is_up() assert vm1_fixture.verify_on_setup() fip_fixture = self.useFixture( FloatingIPFixture( project_name=self.inputs.project_name, inputs=self.inputs, connections=self.connections, pool_name=fip_pool_name, vn_id=fvn_fixture.vn_id)) assert fip_fixture.verify_on_setup() fip_id = fip_fixture.create_and_assoc_fip( fvn_fixture.vn_id, vm1_fixture.vm_id) assert fip_fixture.verify_fip(fip_id, vm1_fixture, fvn_fixture) routing_instance = fvn_fixture.ri_name # Configuring all control nodes here for entry in self.inputs.bgp_ips: hostname = self.inputs.host_data[entry]['name'] entry_control_ip = self.inputs.host_data[ entry]['host_control_ip'] cn_fixture1 = self.useFixture( CNFixture(connections=self.connections, router_name=hostname, router_ip=entry_control_ip, router_type='contrail', inputs=self.inputs)) cn_fixturemx = self.useFixture( CNFixture(connections=self.connections, router_name=router_name, router_ip=router_ip, router_type='mx', inputs=self.inputs)) sleep(10) assert cn_fixturemx.verify_on_setup() # TODO Configure MX. Doing Manually For Now self.logger.info( "BGP Peer configuraion done and trying to outside the VN cluster") self.logger.info( "Checking the basic routing. Pinging known local IP bng2-core-gw1.jnpr.net") assert vm1_fixture.ping_with_certainty('10.206.255.2') self.logger.info("Now trying to ping www-int.juniper.net") self.tcpdump_start_on_all_compute() if not vm1_fixture.ping_with_certainty('www-int.juniper.net', count='15'): result = result and False comp_vm1_ip = vm1_fixture.vm_node_ip self.tcpdump_analyze_on_compute(comp_vm1_ip, 'GRE') fip_fixture.disassoc_and_delete_fip(fip_id) if not result: self.logger.error( 'Test ping outside VN cluster from VM %s failed' % (vm1_name)) assert result else: self.logger.info( "Skiping Test. Env variable MX_TEST is not set. Skiping the test") raise self.skipTest( "Skiping Test. Env variable MX_TEST is not set. Skiping the test") return True # end test_encaps_mx_gateway @preposttest_wrapper def test_apply_policy_fip_on_same_vn_gw_mx(self): '''A particular VN is configure with policy to talk accross VN's and FIP to access outside''' if (('MX_GW_TEST' in os.environ) and (os.environ.get('MX_GW_TEST') == '1')): if len(set(self.inputs.compute_ips)) < 2: self.logger.info( "Skiping Test. At least 2 compute node required to run the test") raise self.skipTest( 'Skiping Test. At least 2 compute node required to run the test') self.logger.info('Deleting any Encap before continuing') out = self.connections.delete_vrouter_encap() if (out != 'No config id found'): self.addCleanup( self.connections.set_vrouter_config_encap, out[0], out[1], out[2]) self.logger.info('Setting new Encap before continuing') config_id = self.connections.set_vrouter_config_encap( 'MPLSoUDP', 'MPLSoGRE', 'VXLAN') self.logger.info('Created.UUID is %s' % (config_id)) self.addCleanup(self.connections.delete_vrouter_encap) configured_encap_list = [ unicode('MPLSoUDP'), unicode('MPLSoGRE'), unicode('VXLAN')] encap_list = self.connections.read_vrouter_config_encap() if configured_encap_list != encap_list: self.logger.error( "Configured Encap Priority order is NOT matching with expected order. Configured: %s ,Expected: %s" % (configured_encap_list, encap_list)) assert False else: self.logger.error( "Configured Encap Priority order is matching with expected order. Configured: %s ,Expected: %s" % (configured_encap_list, encap_list)) result = True fip_pool_name = self.inputs.fip_pool_name fvn_name = 'public100' fip_subnets = [self.inputs.fip_pool] vm1_name = 'vm200' vn1_name = 'vn200' vn1_subnets = ['11.1.1.0/24'] vm2_name = 'vm300' vn2_name = 'vn300' vn2_subnets = ['22.1.1.0/24'] api_server_port = self.inputs.api_server_port api_server_ip = self.inputs.cfgm_ip mx_rt = self.inputs.mx_rt router_name = self.inputs.ext_routers[0][0] router_ip = self.inputs.ext_routers[0][1] self.project_fixture = self.useFixture(ProjectFixture( vnc_lib_h=self.vnc_lib, project_name=self.inputs.project_name, connections=self.connections)) self.logger.info( 'Default SG to be edited for allow all on project: %s' % self.inputs.project_name) self.project_fixture.set_sec_group_for_allow_all( self.inputs.project_name, 'default') # Get all compute host host_list = [] for host in self.inputs.compute_ips: host_list.append(self.inputs.host_data[host]['name']) fvn_fixture = self.useFixture( VNFixture( project_name=self.inputs.project_name, connections=self.connections, vn_name=fvn_name, inputs=self.inputs, subnets=fip_subnets, router_asn=self.inputs.router_asn, rt_number=mx_rt)) assert fvn_fixture.verify_on_setup() vn1_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn1_name, inputs=self.inputs, subnets=vn1_subnets)) assert vn1_fixture.verify_on_setup() vm1_fixture = self.useFixture( VMFixture(project_name=self.inputs.project_name, connections=self.connections, vn_obj=vn1_fixture.obj, vm_name=vm1_name, node_name=host_list[0])) assert vm1_fixture.wait_till_vm_is_up() assert vm1_fixture.verify_on_setup() vn2_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn2_name, inputs=self.inputs, subnets=vn2_subnets)) assert vn2_fixture.verify_on_setup() vm2_fixture = self.useFixture( VMFixture(project_name=self.inputs.project_name, connections=self.connections, vn_obj=vn2_fixture.obj, vm_name=vm2_name, node_name=host_list[1])) assert vm2_fixture.wait_till_vm_is_up() assert vm2_fixture.verify_on_setup() # Fip fip_fixture = self.useFixture( FloatingIPFixture( project_name=self.inputs.project_name, inputs=self.inputs, connections=self.connections, pool_name=fip_pool_name, vn_id=fvn_fixture.vn_id)) assert fip_fixture.verify_on_setup() fip_id = fip_fixture.create_and_assoc_fip( fvn_fixture.vn_id, vm1_fixture.vm_id) self.addCleanup(fip_fixture.disassoc_and_delete_fip, fip_id) assert fip_fixture.verify_fip(fip_id, vm1_fixture, fvn_fixture) routing_instance = fvn_fixture.ri_name # Configuring all control nodes here for entry in self.inputs.bgp_ips: hostname = self.inputs.host_data[entry]['name'] entry_control_ip = self.inputs.host_data[ entry]['host_control_ip'] cn_fixture1 = self.useFixture( CNFixture(connections=self.connections, router_name=hostname, router_ip=entry_control_ip, router_type='contrail', inputs=self.inputs)) cn_fixturemx = self.useFixture( CNFixture(connections=self.connections, router_name=router_name, router_ip=router_ip, router_type='mx', inputs=self.inputs)) sleep(10) assert cn_fixturemx.verify_on_setup() # Policy # Apply policy in between VN policy1_name = 'policy1' policy2_name = 'policy2' rules = [ { 'direction': '<>', 'simple_action': 'pass', 'protocol': 'icmp', 'source_network': vn1_name, 'dest_network': vn2_name, }, ] rev_rules = [ { 'direction': '<>', 'simple_action': 'pass', 'protocol': 'icmp', 'source_network': vn2_name, 'dest_network': vn1_name, }, ] policy1_fixture = self.useFixture(PolicyFixture( policy_name=policy1_name, rules_list=rules, inputs=self.inputs, connections=self.connections)) policy2_fixture = self.useFixture(PolicyFixture( policy_name=policy2_name, rules_list=rev_rules, inputs=self.inputs, connections=self.connections)) self.logger.info('Apply policy between VN %s and %s' % (vn1_name, vn2_name)) vn1_fixture.bind_policies( [policy1_fixture.policy_fq_name], vn1_fixture.vn_id) self.addCleanup(vn1_fixture.unbind_policies, vn1_fixture.vn_id, [policy1_fixture.policy_fq_name]) vn2_fixture.bind_policies( [policy2_fixture.policy_fq_name], vn2_fixture.vn_id) self.addCleanup(vn2_fixture.unbind_policies, vn2_fixture.vn_id, [policy2_fixture.policy_fq_name]) self.logger.info( 'Checking connectivity within VNS cluster through Policy') self.logger.info('Ping from %s to %s' % (vm1_name, vm2_name)) self.tcpdump_start_on_all_compute() if not vm1_fixture.ping_with_certainty(vm2_fixture.vm_ip, count='15'): result = result and False comp_vm1_ip = vm1_fixture.vm_node_ip comp_vm2_ip = vm2_fixture.vm_node_ip self.tcpdump_analyze_on_compute(comp_vm1_ip, 'UDP') self.tcpdump_analyze_on_compute(comp_vm2_ip, 'UDP') self.logger.info( 'Checking connectivity outside VNS cluster through FIP') self.logger.info( "Checking the basic routing. Pinging known local IP bng2-core-gw1.jnpr.net") assert vm1_fixture.ping_with_certainty('10.206.255.2') self.logger.info("Now trying to ping www-int.juniper.net") self.tcpdump_start_on_all_compute() if not vm1_fixture.ping_with_certainty('www-int.juniper.net', count='15'): result = result and False comp_vm1_ip = vm1_fixture.vm_node_ip self.tcpdump_analyze_on_compute(comp_vm1_ip, 'GRE') if not result: self.logger.error( 'Test to verify the Traffic to Inside and Outside Virtual network cluster simaltaneiously failed') assert result else: self.logger.info( "Skiping Test. Env variable MX_TEST is not set. Skiping the test") raise self.skipTest( "Skiping Test. Env variable MX_TEST is not set. Skiping the test") return True # end test_apply_policy_fip_on_same_vn_gw_mx @preposttest_wrapper def test_apply_policy_fip_vn_with_encaps_change_gw_mx(self): '''A particular VN is configured with policy to talk across VN's and FIP to access outside.The encapsulation prioritis set at the start of testcase are changed and verified ''' if (('MX_GW_TEST' in os.environ) and (os.environ.get('MX_GW_TEST') == '1')): if len(set(self.inputs.compute_ips)) < 2: self.logger.info( "Skiping Test. At least 2 compute node required to run the test") raise self.skipTest( 'Skiping Test. At least 2 compute node required to run the test') self.logger.info('Deleting any Encap before continuing') out = self.connections.delete_vrouter_encap() if (out != 'No config id found'): self.addCleanup( self.connections.set_vrouter_config_encap, out[0], out[1], out[2]) self.logger.info('Setting new Encap before continuing') config_id = self.connections.set_vrouter_config_encap( 'MPLSoUDP', 'MPLSoGRE', 'VXLAN') self.logger.info('Created.UUID is %s' % (config_id)) self.addCleanup(self.connections.delete_vrouter_encap) configured_encap_list = [ unicode('MPLSoUDP'), unicode('MPLSoGRE'), unicode('VXLAN')] encap_list = self.connections.read_vrouter_config_encap() if configured_encap_list != encap_list: self.logger.error( "Configured Encap Priority order is NOT matching with expected order. Configured: %s ,Expected: %s" % (configured_encap_list, encap_list)) assert False else: self.logger.error( "Configured Encap Priority order is matching with expected order. Configured: %s ,Expected: %s" % (configured_encap_list, encap_list)) result = True fip_pool_name = self.inputs.fip_pool_name fvn_name = 'public100' fip_subnets = [self.inputs.fip_pool] vm1_name = 'vm200' vn1_name = 'vn200' vn1_subnets = ['11.1.1.0/24'] vm2_name = 'vm300' vn2_name = 'vn300' vn2_subnets = ['22.1.1.0/24'] api_server_port = self.inputs.api_server_port api_server_ip = self.inputs.cfgm_ip mx_rt = self.inputs.mx_rt router_name = self.inputs.ext_routers[0][0] router_ip = self.inputs.ext_routers[0][1] self.project_fixture = self.useFixture(ProjectFixture( vnc_lib_h=self.vnc_lib, project_name=self.inputs.project_name, connections=self.connections)) self.logger.info( 'Default SG to be edited for allow all on project: %s' % self.inputs.project_name) self.project_fixture.set_sec_group_for_allow_all( self.inputs.project_name, 'default') # Get all compute host host_list = [] for host in self.inputs.compute_ips: host_list.append(self.inputs.host_data[host]['name']) fvn_fixture = self.useFixture( VNFixture( project_name=self.inputs.project_name, connections=self.connections, vn_name=fvn_name, inputs=self.inputs, subnets=fip_subnets, router_asn=self.inputs.router_asn, rt_number=mx_rt)) assert fvn_fixture.verify_on_setup() vn1_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn1_name, inputs=self.inputs, subnets=vn1_subnets)) assert vn1_fixture.verify_on_setup() vm1_fixture = self.useFixture( VMFixture(project_name=self.inputs.project_name, connections=self.connections, vn_obj=vn1_fixture.obj, vm_name=vm1_name, node_name=host_list[0])) assert vm1_fixture.wait_till_vm_is_up() assert vm1_fixture.verify_on_setup() vn2_fixture = self.useFixture( VNFixture(project_name=self.inputs.project_name, connections=self.connections, vn_name=vn2_name, inputs=self.inputs, subnets=vn2_subnets)) assert vn2_fixture.verify_on_setup() vm2_fixture = self.useFixture( VMFixture(project_name=self.inputs.project_name, connections=self.connections, vn_obj=vn2_fixture.obj, vm_name=vm2_name, node_name=host_list[1])) assert vm2_fixture.wait_till_vm_is_up() assert vm2_fixture.verify_on_setup() # Fip fip_fixture = self.useFixture( FloatingIPFixture( project_name=self.inputs.project_name, inputs=self.inputs, connections=self.connections, pool_name=fip_pool_name, vn_id=fvn_fixture.vn_id)) assert fip_fixture.verify_on_setup() fip_id = fip_fixture.create_and_assoc_fip( fvn_fixture.vn_id, vm1_fixture.vm_id) self.addCleanup(fip_fixture.disassoc_and_delete_fip, fip_id) assert fip_fixture.verify_fip(fip_id, vm1_fixture, fvn_fixture) routing_instance = fvn_fixture.ri_name # Configuring all control nodes here for entry in self.inputs.bgp_ips: hostname = self.inputs.host_data[entry]['name'] entry_control_ip = self.inputs.host_data[ entry]['host_control_ip'] cn_fixture1 = self.useFixture( CNFixture(connections=self.connections, router_name=hostname, router_ip=entry_control_ip, router_type='contrail', inputs=self.inputs)) cn_fixturemx = self.useFixture( CNFixture(connections=self.connections, router_name=router_name, router_ip=router_ip, router_type='mx', inputs=self.inputs)) sleep(10) assert cn_fixturemx.verify_on_setup() # Policy # Apply policy in between VN policy1_name = 'policy1' policy2_name = 'policy2' rules = [ { 'direction': '<>', 'simple_action': 'pass', 'protocol': 'icmp', 'source_network': vn1_name, 'dest_network': vn2_name, }, ] rev_rules = [ { 'direction': '<>', 'simple_action': 'pass', 'protocol': 'icmp', 'source_network': vn2_name, 'dest_network': vn1_name, }, ] policy1_fixture = self.useFixture(PolicyFixture( policy_name=policy1_name, rules_list=rules, inputs=self.inputs, connections=self.connections)) policy2_fixture = self.useFixture(PolicyFixture( policy_name=policy2_name, rules_list=rev_rules, inputs=self.inputs, connections=self.connections)) self.logger.info('Apply policy between VN %s and %s' % (vn1_name, vn2_name)) vn1_fixture.bind_policies( [policy1_fixture.policy_fq_name], vn1_fixture.vn_id) self.addCleanup(vn1_fixture.unbind_policies, vn1_fixture.vn_id, [policy1_fixture.policy_fq_name]) vn2_fixture.bind_policies( [policy2_fixture.policy_fq_name], vn2_fixture.vn_id) self.addCleanup(vn2_fixture.unbind_policies, vn2_fixture.vn_id, [policy2_fixture.policy_fq_name]) self.logger.info( 'Checking connectivity within VNS cluster through Policy') self.logger.info('Ping from %s to %s' % (vm1_name, vm2_name)) self.tcpdump_start_on_all_compute() if not vm1_fixture.ping_with_certainty(vm2_fixture.vm_ip, count='15'): result = result and False comp_vm1_ip = vm1_fixture.vm_node_ip comp_vm2_ip = vm2_fixture.vm_node_ip self.tcpdump_analyze_on_compute(comp_vm1_ip, 'UDP') self.tcpdump_analyze_on_compute(comp_vm2_ip, 'UDP') self.logger.info( 'Checking connectivity outside VNS cluster through FIP') self.logger.info( "Checking the basic routing. Pinging known local IP bng2-core-gw1.jnpr.net") assert vm1_fixture.ping_with_certainty('10.206.255.2') self.logger.info("Now trying to ping www-int.juniper.net") self.tcpdump_start_on_all_compute() if not vm1_fixture.ping_with_certainty('www-int.juniper.net', count='15'): result = result and False comp_vm1_ip = vm1_fixture.vm_node_ip self.tcpdump_analyze_on_compute(comp_vm1_ip, 'GRE') if not result: self.logger.error( 'Test to verify the Traffic to Inside and Outside Virtual network cluster simaltaneiously failed') assert result self.logger.info('Now changing the encapsulation priorities') self.logger.info( 'The new encapsulation will take effect once bug 1422 is fixed') res = self.connections.update_vrouter_config_encap( 'MPLSoGRE', 'MPLSoUDP', 'VXLAN') self.logger.info('Updated.%s' % (res)) self.logger.info( 'Checking connectivity within VNS cluster through Policy') self.logger.info('Ping from %s to %s' % (vm1_name, vm2_name)) self.tcpdump_start_on_all_compute() if not vm1_fixture.ping_with_certainty(vm2_fixture.vm_ip, count='15'): result = result and False comp_vm1_ip = vm1_fixture.vm_node_ip comp_vm2_ip = vm2_fixture.vm_node_ip self.tcpdump_analyze_on_compute(comp_vm1_ip, 'GRE') self.tcpdump_analyze_on_compute(comp_vm2_ip, 'GRE') self.logger.info( 'Checking connectivity outside VNS cluster through FIP') self.logger.info( "Checking the basic routing. Pinging known local IP bng2-core-gw1.jnpr.net") assert vm1_fixture.ping_with_certainty('10.206.255.2') self.logger.info("Now trying to ping www-int.juniper.net") self.tcpdump_start_on_all_compute() if not vm1_fixture.ping_with_certainty('www-int.juniper.net', count='15'): result = result and False comp_vm1_ip = vm1_fixture.vm_node_ip self.tcpdump_analyze_on_compute(comp_vm1_ip, 'GRE') if not result: self.logger.error( 'Test to verify the Traffic to Inside and Outside Virtual network cluster simaltaneiously failed after changing the encapsulation') assert result else: self.logger.info( "Skiping Test. Env variable MX_TEST is not set. Skiping the test") raise self.skipTest( "Skiping Test. Env variable MX_TEST is not set. Skiping the test") return True # end test_apply_policy_fip_vn_with_encaps_change_gw_mx # end TestEncapsulation # def start_tcpdump(self, session, cmd): self.logger.info("Starting tcpdump to capture the packets.") result = execute_cmd(session, cmd, self.logger) # end start_tcpdump def stop_tcpdump(self, session): self.logger.info("Stopping any tcpdump process running") cmd = 'kill $(pidof tcpdump)' execute_cmd(session, cmd, self.logger) self.logger.info("Removing any encap-pcap files in /tmp") cmd = 'rm -f /tmp/encap*pcap' execute_cmd(session, cmd, self.logger) # end stop_tcpdump def tcpdump_start_on_all_compute(self): for compute_ip in self.inputs.compute_ips: compute_user = self.inputs.host_data[compute_ip]['username'] compute_password = self.inputs.host_data[compute_ip]['password'] session = ssh(compute_ip, compute_user, compute_password) self.stop_tcpdump(session) inspect_h = self.agent_inspect[compute_ip] comp_intf = inspect_h.get_vna_interface_by_type('eth') if len(comp_intf) == 1: comp_intf = comp_intf[0] self.logger.info('Agent interface name: %s' % comp_intf) pcap1 = '/tmp/encap-udp.pcap' pcap2 = '/tmp/encap-gre.pcap' pcap3 = '/tmp/encap-vxlan.pcap' cmd1 = 'tcpdump -ni %s udp port 51234 -w %s -s 0' % (comp_intf, pcap1) cmd_udp = "nohup " + cmd1 + " >& /dev/null < /dev/null &" cmd2 = 'tcpdump -ni %s proto 47 -w %s -s 0' % (comp_intf, pcap2) cmd_gre = "nohup " + cmd2 + " >& /dev/null < /dev/null &" cmd3 = 'tcpdump -ni %s dst port 4789 -w %s -s 0' % (comp_intf, pcap3) cmd_vxlan = "nohup " + cmd3 + " >& /dev/null < /dev/null &" self.start_tcpdump(session, cmd_udp) self.start_tcpdump(session, cmd_gre) self.start_tcpdump(session, cmd_vxlan) # end tcpdump_on_all_compute def tcpdump_stop_on_all_compute(self): sessions = {} for compute_ip in self.inputs.compute_ips: compute_user = self.inputs.host_data[compute_ip]['username'] compute_password = self.inputs.host_data[compute_ip]['password'] session = ssh(compute_ip, compute_user, compute_password) self.stop_tcpdump(session) # end tcpdump_on_all_compute def tcpdump_stop_on_compute(self, compute_ip): sessions = {} compute_user = self.inputs.host_data[compute_ip]['username'] compute_password = self.inputs.host_data[compute_ip]['password'] session = ssh(compute_ip, compute_user, compute_password) self.stop_tcpdump(session) def tcpdump_analyze_on_compute(self, comp_ip, pcaptype, vxlan_id=None, vlan_id=None): sessions = {} compute_user = self.inputs.host_data[comp_ip]['username'] compute_password = self.inputs.host_data[comp_ip]['password'] session = ssh(comp_ip, compute_user, compute_password) self.logger.info("Analyzing on compute node %s" % comp_ip) if pcaptype == 'UDP': pcaps1 = '/tmp/encap-udp.pcap' pcaps2 = '/tmp/encap-gre.pcap' cmd2 = 'tcpdump -r %s | grep UDP |wc -l' % pcaps1 out2, err = execute_cmd_out(session, cmd2, self.logger) cmd3 = 'tcpdump -r %s | grep GRE | wc -l' % pcaps2 out3, err = execute_cmd_out(session, cmd3, self.logger) count2 = int(out2.strip('\n')) count3 = int(out3.strip('\n')) if count2 != 0 and count3 == 0: self.logger.info( "%s UDP encapsulated packets are seen and %s GRE encapsulated packets are seen as expected" % (count2, count3)) return True else: errmsg = "%s UDP encapsulated packets are seen and %s GRE encapsulated packets are seen.Not expected" % ( count2, count3) self.logger.error(errmsg) assert False, errmsg elif pcaptype == 'GRE': pcaps1 = '/tmp/encap-udp.pcap' pcaps2 = '/tmp/encap-gre.pcap' cmd2 = 'tcpdump -r %s | grep UDP |wc -l' % pcaps1 out2, err = execute_cmd_out(session, cmd2, self.logger) cmd3 = 'tcpdump -r %s | grep GRE | wc -l' % pcaps2 out3, err = execute_cmd_out(session, cmd3, self.logger) count2 = int(out2.strip('\n')) count3 = int(out3.strip('\n')) if count2 == 0 and count3 != 0: self.logger.info( "%s GRE encapsulated packets are seen and %s UDP encapsulated packets are seen as expected" % (count3, count2)) # self.tcpdump_stop_on_all_compute() self.tcpdump_stop_on_compute(comp_ip) return True else: errmsg = "%s UDP encapsulated packets are seen and %s GRE encapsulated packets are seen.Not expected" % ( count2, count3) self.logger.error(errmsg) # self.tcpdump_stop_on_all_compute() self.tcpdump_stop_on_compute(comp_ip) assert False, errmsg elif pcaptype == 'VXLAN': pcaps1 = '/tmp/encap-udp.pcap' pcaps2 = '/tmp/encap-gre.pcap' pcaps3 = '/tmp/encap-vxlan.pcap' cmd2 = 'tcpdump -r %s | grep UDP |wc -l' % pcaps1 out2, err = execute_cmd_out(session, cmd2, self.logger) cmd3 = 'tcpdump -r %s | grep GRE | wc -l' % pcaps2 out3, err = execute_cmd_out(session, cmd3, self.logger) count2 = int(out2.strip('\n')) count3 = int(out3.strip('\n')) cmd3 = 'tcpdump -r %s | grep UDP |wc -l' % pcaps3 out3, err = execute_cmd_out(session, cmd3, self.logger) count = int(out3.strip('\n')) if count2 == 0 and count3 == 0 and count != 0: self.logger.info( "%s GRE encapsulated packets are seen and %s UDP encapsulated packets are seen and %s vxlan packets are seen as expected" % (count3, count2, count)) # self.tcpdump_stop_on_all_compute() if vxlan_id is not None: cmd4 = 'tcpdump -AX -r %s | grep ' % pcaps3 + \ vxlan_id + ' |wc -l' out4, err = execute_cmd_out(session, cmd4, self.logger) count_vxlan_id = int(out4.strip('\n')) if count_vxlan_id < count: errmsg = "%s vxlan packet are seen with %s vxlan_id . Not Expected . " % ( count, count_vxlan_id) self.tcpdump_stop_on_compute(comp_ip) self.logger.error(errmsg) assert False, errmsg else: self.logger.info( "%s vxlan packets are seen with %s vxlan_id as expexted . " % (count, count_vxlan_id)) self.tcpdump_stop_on_compute(comp_ip) else: errmsg = "%s UDP encapsulated packets are seen and %s GRE encapsulated packets are seen.Not expected, %s vxlan packet seen" % ( count2, count3, count) self.logger.error(errmsg) # self.tcpdump_stop_on_all_compute() self.tcpdump_stop_on_compute(comp_ip) assert False, errmsg if vlan_id is not None: cmd5 = 'tcpdump -AX -r %s | grep %s |wc -l' % (pcaps3, vlan_id) out5, err = execute_cmd_out(session, cmd5, self.logger) count_vlan_id = int(out5.strip('\n')) if count_vlan_id < count: errmsg = "%s vxlan packet are seen with %s vlan_id . Not Expected . " % ( count, count_vlan_id) self.logger.error(errmsg) assert False, errmsg else: self.logger.info( "%s vxlan packets are seen with %s vlan_id as expexted . " % (count, count_vlan_id)) return True