|
|
|
@ -132,15 +132,6 @@ class DbLibTest(testlib_api.SqlTestCase):
|
|
|
|
|
self.assertEqual(tenants, set([tenant_1_id, tenant_2_id, |
|
|
|
|
tenant_3_id, tenant_4_id])) |
|
|
|
|
|
|
|
|
|
def test_get_all_anet_nets(self): |
|
|
|
|
net_1_id = 'n1' |
|
|
|
|
net_2_id = 'n2' |
|
|
|
|
db_lib.remember_vm('vm1', 'h1', 'p1', net_1_id, 't1') |
|
|
|
|
db_lib.remember_vm('vm2', 'h2', 'p2', net_2_id, 't2') |
|
|
|
|
db_lib.remember_vm('vm3', 'h3', 'p3', net_2_id, 't3') |
|
|
|
|
self.assertEqual(db_lib.get_all_anet_nets(), |
|
|
|
|
set([net_1_id, net_2_id])) |
|
|
|
|
|
|
|
|
|
def test_tenant_provisioned(self): |
|
|
|
|
tenant_1_id = 't1' |
|
|
|
|
port_1_id = 'p1' |
|
|
|
@ -165,3 +156,310 @@ class DbLibTest(testlib_api.SqlTestCase):
|
|
|
|
|
utils.delete_network(n_ctx, network_id) |
|
|
|
|
self.assertFalse(db_lib.tenant_provisioned(tenant_1_id)) |
|
|
|
|
self.assertFalse(db_lib.tenant_provisioned(tenant_2_id)) |
|
|
|
|
|
|
|
|
|
def test_get_instances(self): |
|
|
|
|
# First check that get_instances initially returns an empty set |
|
|
|
|
tenant_1_id = 't1' |
|
|
|
|
self.assertEqual(db_lib.get_instances(tenant_1_id), set()) |
|
|
|
|
|
|
|
|
|
# Create two ports for two instances and check that both are returned |
|
|
|
|
port_1_id = 'p1' |
|
|
|
|
network_1_id = 'n1' |
|
|
|
|
device_1_id = 'vm1' |
|
|
|
|
port_2_id = 'p2' |
|
|
|
|
network_2_id = 'n2' |
|
|
|
|
device_2_id = 'vm2' |
|
|
|
|
n1_ctx = utils.create_network(tenant_1_id, network_1_id, 11, |
|
|
|
|
shared=True) |
|
|
|
|
p1_ctx = utils.create_port(tenant_1_id, network_1_id, device_1_id, |
|
|
|
|
port_1_id, n1_ctx) |
|
|
|
|
n2_ctx = utils.create_network(tenant_1_id, network_2_id, 21) |
|
|
|
|
p2_ctx = utils.create_port(tenant_1_id, network_2_id, device_2_id, |
|
|
|
|
port_2_id, n2_ctx) |
|
|
|
|
self.assertEqual(db_lib.get_instances(tenant_1_id), |
|
|
|
|
set([device_1_id, device_2_id])) |
|
|
|
|
|
|
|
|
|
# Add another port on an existing instance, instance set should not |
|
|
|
|
# change |
|
|
|
|
port_3_id = 'p3' |
|
|
|
|
p3_ctx = utils.create_port(tenant_1_id, network_1_id, device_2_id, |
|
|
|
|
port_3_id, n1_ctx) |
|
|
|
|
self.assertEqual(db_lib.get_instances(tenant_1_id), |
|
|
|
|
set([device_1_id, device_2_id])) |
|
|
|
|
|
|
|
|
|
# Add ports under another tenant, the first tenants instances should |
|
|
|
|
# remain the same |
|
|
|
|
tenant_2_id = 't2' |
|
|
|
|
port_4_id = 'p4' |
|
|
|
|
device_3_id = 'vm3' |
|
|
|
|
p4_ctx = utils.create_port(tenant_2_id, network_1_id, device_3_id, |
|
|
|
|
port_4_id, n1_ctx) |
|
|
|
|
self.assertEqual(db_lib.get_instances(tenant_1_id), |
|
|
|
|
set([device_1_id, device_2_id])) |
|
|
|
|
self.assertEqual(db_lib.get_instances(tenant_2_id), |
|
|
|
|
set([device_3_id])) |
|
|
|
|
|
|
|
|
|
# Delete all ports and check that an empty set is once again returned |
|
|
|
|
utils.delete_port(p1_ctx, port_1_id) |
|
|
|
|
utils.delete_port(p2_ctx, port_2_id) |
|
|
|
|
utils.delete_port(p3_ctx, port_3_id) |
|
|
|
|
utils.delete_port(p4_ctx, port_4_id) |
|
|
|
|
self.assertEqual(db_lib.get_instances(tenant_1_id), set()) |
|
|
|
|
self.assertEqual(db_lib.get_instances(tenant_2_id), set()) |
|
|
|
|
|
|
|
|
|
def test_get_instance_ports(self): |
|
|
|
|
# Create 3 ports on two VMs, validate the dict returned |
|
|
|
|
host = 'ubuntu1' |
|
|
|
|
tenant_1_id = 't1' |
|
|
|
|
port_1_id = 'p1' |
|
|
|
|
network_1_id = 'n1' |
|
|
|
|
device_1_id = 'vm1' |
|
|
|
|
port_2_id = 'p2' |
|
|
|
|
network_2_id = 'n2' |
|
|
|
|
device_2_id = 'vm2' |
|
|
|
|
port_3_id = 'p3' |
|
|
|
|
n1_ctx = utils.create_network(tenant_1_id, network_1_id, 11, |
|
|
|
|
shared=True) |
|
|
|
|
n2_ctx = utils.create_network(tenant_1_id, network_2_id, 21) |
|
|
|
|
p1_ctx = utils.create_port(tenant_1_id, network_1_id, device_1_id, |
|
|
|
|
port_1_id, n1_ctx) |
|
|
|
|
p2_ctx = utils.create_port(tenant_1_id, network_2_id, device_2_id, |
|
|
|
|
port_2_id, n2_ctx) |
|
|
|
|
p3_ctx = utils.create_port(tenant_1_id, network_1_id, device_2_id, |
|
|
|
|
port_3_id, n1_ctx) |
|
|
|
|
instance_ports = db_lib.get_instance_ports(tenant_1_id) |
|
|
|
|
expected_instance_ports = { |
|
|
|
|
device_1_id: {'vmId': device_1_id, |
|
|
|
|
'baremetal_instance': False, |
|
|
|
|
'ports': {port_1_id: {'portId': port_1_id, |
|
|
|
|
'deviceId': device_1_id, |
|
|
|
|
'hosts': set([host]), |
|
|
|
|
'networkId': network_1_id}}}, |
|
|
|
|
device_2_id: {'vmId': device_2_id, |
|
|
|
|
'baremetal_instance': False, |
|
|
|
|
'ports': {port_2_id: {'portId': port_2_id, |
|
|
|
|
'deviceId': device_2_id, |
|
|
|
|
'hosts': set([host]), |
|
|
|
|
'networkId': network_2_id}, |
|
|
|
|
port_3_id: {'portId': port_3_id, |
|
|
|
|
'deviceId': device_2_id, |
|
|
|
|
'hosts': set([host]), |
|
|
|
|
'networkId': network_1_id}}}} |
|
|
|
|
self.assertEqual(instance_ports, expected_instance_ports) |
|
|
|
|
|
|
|
|
|
# Add ports under another tenant, the first tenant's instances should |
|
|
|
|
# remain the same |
|
|
|
|
tenant_2_id = 't2' |
|
|
|
|
port_4_id = 'p4' |
|
|
|
|
device_3_id = 'vm3' |
|
|
|
|
p4_ctx = utils.create_port(tenant_2_id, network_1_id, device_3_id, |
|
|
|
|
port_4_id, n1_ctx) |
|
|
|
|
instance_ports = db_lib.get_instance_ports(tenant_1_id) |
|
|
|
|
expected_instance_ports = { |
|
|
|
|
device_1_id: {'vmId': device_1_id, |
|
|
|
|
'baremetal_instance': False, |
|
|
|
|
'ports': {port_1_id: {'portId': port_1_id, |
|
|
|
|
'deviceId': device_1_id, |
|
|
|
|
'hosts': set([host]), |
|
|
|
|
'networkId': network_1_id}}}, |
|
|
|
|
device_2_id: {'vmId': device_2_id, |
|
|
|
|
'baremetal_instance': False, |
|
|
|
|
'ports': {port_2_id: {'portId': port_2_id, |
|
|
|
|
'deviceId': device_2_id, |
|
|
|
|
'hosts': set([host]), |
|
|
|
|
'networkId': network_2_id}, |
|
|
|
|
port_3_id: {'portId': port_3_id, |
|
|
|
|
'deviceId': device_2_id, |
|
|
|
|
'hosts': set([host]), |
|
|
|
|
'networkId': network_1_id}}}} |
|
|
|
|
self.assertEqual(instance_ports, expected_instance_ports) |
|
|
|
|
instance_ports = db_lib.get_instance_ports(tenant_2_id) |
|
|
|
|
expected_instance_ports = { |
|
|
|
|
device_3_id: {'vmId': device_3_id, |
|
|
|
|
'baremetal_instance': False, |
|
|
|
|
'ports': {port_4_id: {'portId': port_4_id, |
|
|
|
|
'deviceId': device_3_id, |
|
|
|
|
'hosts': set([host]), |
|
|
|
|
'networkId': network_1_id}}}} |
|
|
|
|
self.assertEqual(instance_ports, expected_instance_ports) |
|
|
|
|
|
|
|
|
|
# Delete all ports and check that an empty set is once again returned |
|
|
|
|
utils.delete_port(p1_ctx, port_1_id) |
|
|
|
|
utils.delete_port(p2_ctx, port_2_id) |
|
|
|
|
utils.delete_port(p3_ctx, port_3_id) |
|
|
|
|
utils.delete_port(p4_ctx, port_4_id) |
|
|
|
|
self.assertEqual(db_lib.get_instance_ports(tenant_1_id), dict()) |
|
|
|
|
self.assertEqual(db_lib.get_instance_ports(tenant_2_id), dict()) |
|
|
|
|
|
|
|
|
|
def test_get_instance_ports_device_owner(self): |
|
|
|
|
# Create a port with an unsupported device owner, check that no ports |
|
|
|
|
# are returned |
|
|
|
|
tenant_id = 'tid' |
|
|
|
|
network_id = 'nid' |
|
|
|
|
device_id = 'vm' |
|
|
|
|
port_id = 'pid' |
|
|
|
|
n_ctx = utils.create_network(tenant_id, network_id, 11) |
|
|
|
|
utils.create_port(tenant_id, network_id, device_id, |
|
|
|
|
port_id, n_ctx, device_owner='compute:probe') |
|
|
|
|
self.assertEqual(db_lib.get_instance_ports(tenant_id), dict()) |
|
|
|
|
|
|
|
|
|
def test_get_instance_ports_dvr(self): |
|
|
|
|
# Create a port bound to 3 hosts, ensure that all 3 hosts are in |
|
|
|
|
# the dict returned |
|
|
|
|
tenant_id = 'tid' |
|
|
|
|
network_id = 'nid' |
|
|
|
|
device_id = 'rtr' |
|
|
|
|
port_id = 'pid' |
|
|
|
|
host_1 = 'h1' |
|
|
|
|
host_2 = 'h2' |
|
|
|
|
host_3 = 'h3' |
|
|
|
|
n_ctx = utils.create_network(tenant_id, network_id, 11) |
|
|
|
|
p_ctx = utils.create_port(tenant_id, network_id, device_id, |
|
|
|
|
port_id, n_ctx, host=host_1) |
|
|
|
|
utils.bind_port_to_host(port_id, host_2, n_ctx) |
|
|
|
|
utils.bind_port_to_host(port_id, host_3, n_ctx) |
|
|
|
|
instance_ports = db_lib.get_instance_ports(tenant_id) |
|
|
|
|
expected_instance_ports = { |
|
|
|
|
device_id: {'vmId': device_id, |
|
|
|
|
'baremetal_instance': False, |
|
|
|
|
'ports': {port_id: {'portId': port_id, |
|
|
|
|
'deviceId': device_id, |
|
|
|
|
'hosts': set([host_1, host_2, |
|
|
|
|
host_3]), |
|
|
|
|
'networkId': network_id}}}} |
|
|
|
|
self.assertEqual(instance_ports, expected_instance_ports) |
|
|
|
|
|
|
|
|
|
# Unbind a host from the port, check that the host is not returned |
|
|
|
|
utils.unbind_port_from_host(port_id, host_1) |
|
|
|
|
instance_ports = db_lib.get_instance_ports(tenant_id) |
|
|
|
|
expected_instance_ports = { |
|
|
|
|
device_id: {'vmId': device_id, |
|
|
|
|
'baremetal_instance': False, |
|
|
|
|
'ports': {port_id: {'portId': port_id, |
|
|
|
|
'deviceId': device_id, |
|
|
|
|
'hosts': set([host_2, host_3]), |
|
|
|
|
'networkId': network_id}}}} |
|
|
|
|
self.assertEqual(instance_ports, expected_instance_ports) |
|
|
|
|
|
|
|
|
|
# Delete the port, check that an empty dict is returned |
|
|
|
|
utils.delete_port(p_ctx, port_id) |
|
|
|
|
self.assertEqual(db_lib.get_instance_ports(tenant_id), dict()) |
|
|
|
|
|
|
|
|
|
def test_get_instance_ports_hpb(self): |
|
|
|
|
# Create network with multiple segments, bind a port to the network |
|
|
|
|
# and validate the dictionary |
|
|
|
|
host = 'ubuntu1' |
|
|
|
|
tenant_id = 'tid' |
|
|
|
|
network_id = 'nid' |
|
|
|
|
device_id = 'vm' |
|
|
|
|
port_id = 'pid' |
|
|
|
|
n_ctx = utils.create_network(tenant_id, network_id, 10001, |
|
|
|
|
network_type='vxlan', |
|
|
|
|
physical_network=None) |
|
|
|
|
dyn_seg = utils.create_dynamic_segment(network_id, 11, 'vlan', |
|
|
|
|
'default') |
|
|
|
|
p_ctx = utils.create_port(tenant_id, network_id, device_id, |
|
|
|
|
port_id, n_ctx, dynamic_segment=dyn_seg) |
|
|
|
|
instance_ports = db_lib.get_instance_ports(tenant_id) |
|
|
|
|
expected_instance_ports = { |
|
|
|
|
device_id: {'vmId': device_id, |
|
|
|
|
'baremetal_instance': False, |
|
|
|
|
'ports': {port_id: {'portId': port_id, |
|
|
|
|
'deviceId': device_id, |
|
|
|
|
'hosts': set([host]), |
|
|
|
|
'networkId': network_id}}}} |
|
|
|
|
self.assertEqual(instance_ports, expected_instance_ports) |
|
|
|
|
|
|
|
|
|
# Delete the port, check that an empty dict is returned |
|
|
|
|
utils.delete_port(p_ctx, port_id) |
|
|
|
|
self.assertEqual(db_lib.get_instance_ports(tenant_id), dict()) |
|
|
|
|
|
|
|
|
|
def test_get_instance_ports_manage_fabric(self): |
|
|
|
|
# Create a network with only a fabric segment, check that no ports |
|
|
|
|
# are returned |
|
|
|
|
host = 'ubuntu1' |
|
|
|
|
tenant_id = 'tid' |
|
|
|
|
network_id = 'nid' |
|
|
|
|
device_id = 'vm' |
|
|
|
|
port_id = 'pid' |
|
|
|
|
n_ctx = utils.create_network(tenant_id, network_id, 10001, |
|
|
|
|
network_type='vxlan', |
|
|
|
|
physical_network=None) |
|
|
|
|
p_ctx = utils.create_port(tenant_id, network_id, device_id, |
|
|
|
|
port_id, n_ctx) |
|
|
|
|
instance_ports = db_lib.get_instance_ports(tenant_id, |
|
|
|
|
manage_fabric=False) |
|
|
|
|
self.assertEqual(instance_ports, dict()) |
|
|
|
|
|
|
|
|
|
# Add a VLAN segment, check that the port is now returned |
|
|
|
|
utils.delete_port(p_ctx, port_id) |
|
|
|
|
dyn_seg = utils.create_dynamic_segment(network_id, 11, 'vlan', |
|
|
|
|
'default') |
|
|
|
|
p_ctx = utils.create_port(tenant_id, network_id, device_id, |
|
|
|
|
port_id, n_ctx, dynamic_segment=dyn_seg) |
|
|
|
|
instance_ports = db_lib.get_instance_ports(tenant_id, |
|
|
|
|
manage_fabric=False) |
|
|
|
|
expected_instance_ports = { |
|
|
|
|
device_id: {'vmId': device_id, |
|
|
|
|
'baremetal_instance': False, |
|
|
|
|
'ports': {port_id: {'portId': port_id, |
|
|
|
|
'deviceId': device_id, |
|
|
|
|
'hosts': set([host]), |
|
|
|
|
'networkId': network_id}}}} |
|
|
|
|
self.assertEqual(instance_ports, expected_instance_ports) |
|
|
|
|
|
|
|
|
|
# Delete the port, check that an empty dict is returned |
|
|
|
|
utils.delete_port(p_ctx, port_id) |
|
|
|
|
self.assertEqual(db_lib.get_instance_ports(tenant_id, |
|
|
|
|
manage_fabric=False), |
|
|
|
|
dict()) |
|
|
|
|
|
|
|
|
|
def test_get_instance_ports_managed_physnets(self): |
|
|
|
|
# Bind a port to an unmananaged physnet, check that no ports are |
|
|
|
|
# returned |
|
|
|
|
physnet_1 = 'physnet1' |
|
|
|
|
physnet_2 = 'physnet2' |
|
|
|
|
managed_physnets = [physnet_2] |
|
|
|
|
tenant_id = 'tid' |
|
|
|
|
network_id = 'nid' |
|
|
|
|
host_1 = 'host1' |
|
|
|
|
device_1_id = 'vm1' |
|
|
|
|
port_1_id = 'p1' |
|
|
|
|
n_ctx = utils.create_network(tenant_id, network_id, 10001, |
|
|
|
|
network_type='vxlan', |
|
|
|
|
physical_network=None) |
|
|
|
|
dyn_seg_1 = utils.create_dynamic_segment(network_id, 11, 'vlan', |
|
|
|
|
physnet_1) |
|
|
|
|
utils.create_port(tenant_id, network_id, device_1_id, |
|
|
|
|
port_1_id, n_ctx, host=host_1, |
|
|
|
|
dynamic_segment=dyn_seg_1) |
|
|
|
|
instance_ports = db_lib.get_instance_ports( |
|
|
|
|
tenant_id, manage_fabric=False, managed_physnets=managed_physnets) |
|
|
|
|
self.assertEqual(instance_ports, dict()) |
|
|
|
|
|
|
|
|
|
# Bind a port to a managed physnet on the same network, check that |
|
|
|
|
# only the managed host is returned |
|
|
|
|
host_2 = 'host2' |
|
|
|
|
device_2_id = 'vm2' |
|
|
|
|
port_2_id = 'p2' |
|
|
|
|
dyn_seg_2 = utils.create_dynamic_segment(network_id, 21, 'vlan', |
|
|
|
|
physnet_2) |
|
|
|
|
p2_ctx = utils.create_port(tenant_id, network_id, device_2_id, |
|
|
|
|
port_2_id, n_ctx, host=host_2, |
|
|
|
|
dynamic_segment=dyn_seg_2) |
|
|
|
|
instance_ports = db_lib.get_instance_ports( |
|
|
|
|
tenant_id, manage_fabric=True, managed_physnets=managed_physnets) |
|
|
|
|
expected_instance_ports = { |
|
|
|
|
device_2_id: {'vmId': device_2_id, |
|
|
|
|
'baremetal_instance': False, |
|
|
|
|
'ports': {port_2_id: {'portId': port_2_id, |
|
|
|
|
'deviceId': device_2_id, |
|
|
|
|
'hosts': set([host_2]), |
|
|
|
|
'networkId': network_id}}}} |
|
|
|
|
self.assertEqual(instance_ports, expected_instance_ports) |
|
|
|
|
|
|
|
|
|
# Delete the port, check that an empty dict is returned |
|
|
|
|
utils.delete_port(p2_ctx, port_2_id) |
|
|
|
|
self.assertEqual(db_lib.get_instance_ports( |
|
|
|
|
tenant_id, manage_fabric=False, |
|
|
|
|
managed_physnets=managed_physnets), dict()) |
|
|
|
|