@ -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 ( ) )