def _create_setup(self): self.admin_client = self.os_admin.network_client net_kwargs = {'tenant_id': self.client.tenant_id} for sub, net_type in (('10.100.0.0/16', 'vxlan'), ('10.200.0.0/16', 'gre')): net_kwargs['name'] = '-'.join([net_type, 'net']) net_kwargs['provider:network_type'] = net_type network = self.admin_client.create_network(**net_kwargs)['network'] self.networks.append(network) self.addCleanup(self.admin_client.delete_network, network['id']) cidr = netaddr.IPNetwork(sub) subnet = self.create_subnet(network, cidr=cidr) self.create_router_interface(self.router['id'], subnet['id']) self.addCleanup(self.client.remove_router_interface_with_subnet_id, self.router['id'], subnet['id']) # check that MTUs are different for 2 networks self.assertNotEqual(self.networks[0]['mtu'], self.networks[1]['mtu']) self.networks.sort(key=lambda net: net['mtu']) server1, fip1 = self.create_pingable_vm(self.networks[0]) server_ssh_client1 = ssh.Client( self.floating_ips[0]['floating_ip_address'], CONF.validation.image_ssh_user, pkey=self.keypair['private_key']) server2, fip2 = self.create_pingable_vm(self.networks[1]) server_ssh_client2 = ssh.Client( self.floating_ips[0]['floating_ip_address'], CONF.validation.image_ssh_user, pkey=self.keypair['private_key']) for fip in (fip1, fip2): self.check_connectivity(fip['floating_ip_address'], CONF.validation.image_ssh_user, self.keypair['private_key']) return server_ssh_client1, fip1, server_ssh_client2, fip2
def _create_server_with_port_and_subport(self, vlan_network, vlan_tag): parent_port = self.create_port(self.network, security_groups=[ self.secgroup['security_group']['id']]) port_for_subport = self.create_port( vlan_network, security_groups=[self.secgroup['security_group']['id']], mac_address=parent_port['mac_address']) subport = { 'port_id': port_for_subport['id'], 'segmentation_type': 'vlan', 'segmentation_id': vlan_tag} trunk = self.client.create_trunk( parent_port['id'], subports=[subport])['trunk'] server, fip = self._create_server_with_fip(parent_port['id']) self.addCleanup(self._detach_and_delete_trunk, server, trunk) server_ssh_client = ssh.Client( fip['floating_ip_address'], CONF.validation.image_ssh_user, pkey=self.keypair['private_key']) return { 'server': server, 'fip': fip, 'ssh_client': server_ssh_client, 'subport': port_for_subport, }
def _create_vms(self, hyper, avail_zone, num_servers=2): servers, fips, server_ssh_clients = ([], [], []) # Create the availability zone with default zone and # a specific mentioned hypervisor. az = avail_zone + ':' + hyper for i in range(num_servers): servers.append( self.create_server(flavor_ref=CONF.compute.flavor_ref, image_ref=CONF.compute.image_ref, key_name=self.keypair['name'], networks=[{ 'uuid': self.network['id'] }], security_groups=[{ 'name': self.secgroup['name'] }], availability_zone=az)) for i, server in enumerate(servers): waiters.wait_for_server_status(self.os_admin.servers_client, server['server']['id'], const.SERVER_STATUS_ACTIVE) port = self.client.list_ports( network_id=self.network['id'], device_id=server['server']['id'])['ports'][0] fips.append( self.create_and_associate_floatingip( port['id'], client=self.os_admin.network_client)) server_ssh_clients.append( ssh.Client(fips[i]['floating_ip_address'], CONF.validation.image_ssh_user, pkey=self.keypair['private_key'])) self.addCleanup(self.os_admin.network_client.delete_floatingip, fips[i]['id']) return server_ssh_clients, fips
def check_connectivity(self, host, ssh_user, ssh_key, servers=None): ssh_client = ssh.Client(host, ssh_user, pkey=ssh_key) try: ssh_client.test_connection_auth() except lib_exc.SSHTimeout as ssh_e: LOG.debug(ssh_e) self._log_console_output(servers) raise
def _test_east_west(self): # The proxy VM is used to control the source VM when it doesn't # have a floating-ip. if self.src_has_fip: proxy = None proxy_client = None else: proxy = self._create_server() proxy_client = ssh.Client(proxy['fip']['floating_ip_address'], CONF.validation.image_ssh_user, pkey=self.keypair['private_key']) # Source VM if self.src_has_fip: src_server = self._create_server() src_server_ip = src_server['fip']['floating_ip_address'] else: src_server = self._create_server(create_floating_ip=False) src_server_ip = src_server['port']['fixed_ips'][0]['ip_address'] ssh_client = ssh.Client(src_server_ip, CONF.validation.image_ssh_user, pkey=self.keypair['private_key'], proxy_client=proxy_client) # Destination VM if self.dest_has_fip: dest_server = self._create_server(network=self._dest_network) else: dest_server = self._create_server(create_floating_ip=False, network=self._dest_network) # Check connectivity self.check_remote_connectivity( ssh_client, dest_server['port']['fixed_ips'][0]['ip_address']) if self.dest_has_fip: self.check_remote_connectivity( ssh_client, dest_server['fip']['floating_ip_address'])
def test_qos(self): """This is a basic test that check that a QoS policy with a bandwidth limit rule is applied correctly by sending a file from the instance to the test node. Then calculating the bandwidth every ~1 sec by the number of bits received / elapsed time. """ NC_PORT = 1234 self.setup_network_and_server() self.check_connectivity(self.fip['floating_ip_address'], CONF.validation.image_ssh_user, self.keypair['private_key']) rulesets = [{'protocol': 'tcp', 'direction': 'ingress', 'port_range_min': NC_PORT, 'port_range_max': NC_PORT, 'remote_ip_prefix': '0.0.0.0/0'}] self.create_secgroup_rules(rulesets, self.security_groups[-1]['id']) ssh_client = ssh.Client(self.fip['floating_ip_address'], CONF.validation.image_ssh_user, pkey=self.keypair['private_key']) policy = self.os_admin.network_client.create_qos_policy( name='test-policy', description='test-qos-policy', shared=True) policy_id = policy['policy']['id'] self.os_admin.network_client.create_bandwidth_limit_rule( policy_id, max_kbps=constants.LIMIT_KILO_BITS_PER_SECOND, max_burst_kbps=constants.LIMIT_KILO_BITS_PER_SECOND) port = self.client.list_ports(network_id=self.network['id'], device_id=self.server[ 'server']['id'])['ports'][0] self.os_admin.network_client.update_port(port['id'], qos_policy_id=policy_id) self._create_file_for_bw_tests(ssh_client) utils.wait_until_true(lambda: self._check_bw( ssh_client, self.fip['floating_ip_address'], port=NC_PORT), timeout=120, sleep=1)
def _test_east_west(self): # Source VM server1 = self._src_server server1_ip = server1['fip']['floating_ip_address'] ssh_client = ssh.Client(server1_ip, CONF.validation.image_ssh_user, pkey=self.keypair['private_key']) # Destination VM if self.dest_has_fip: dest_server = self._dest_server_with_fip else: dest_server = self._dest_server_without_fip # Check connectivity self.check_remote_connectivity( ssh_client, dest_server['port']['fixed_ips'][0]['ip_address']) if self.dest_has_fip: self.check_remote_connectivity( ssh_client, dest_server['fip']['floating_ip_address'])
def create_vm_default_sec_grp(self, num_servers=2): servers, fips, server_ssh_clients = ([], [], []) for i in range(num_servers): servers.append( self.create_server(flavor_ref=CONF.compute.flavor_ref, image_ref=CONF.compute.image_ref, key_name=self.keypair['name'], networks=[{ 'uuid': self.network['id'] }])) for i, server in enumerate(servers): waiters.wait_for_server_status(self.os_primary.servers_client, server['server']['id'], const.SERVER_STATUS_ACTIVE) port = self.client.list_ports( network_id=self.network['id'], device_id=server['server']['id'])['ports'][0] fips.append(self.create_and_associate_floatingip(port['id'])) server_ssh_clients.append( ssh.Client(fips[i]['floating_ip_address'], CONF.validation.image_ssh_user, pkey=self.keypair['private_key'])) return server_ssh_clients, fips