@ -34,17 +34,17 @@ TENANT_NET = 'phys_net2'
UNCONFIGURED_NET = ' no_net '
VLAN_MIN = 200
VLAN_MAX = 209
NETWORK_VLAN_RANGES = [ PROVIDER_NET , " %s : %s : %s " %
( TENANT_NET , VLAN_MIN , VLAN_MAX ) ]
TENANT_VLAN_RANGES = [ " %s : %s : %s " % ( TENANT_NET , VLAN_MIN , VLAN_MAX ) ]
NETWORK_VLAN_RANGES = [ PROVIDER_NET ] + TENANT_VLAN_RANGES
UPDATED_VLAN_RANGES = {
PROVIDER_NET : [ ],
PROVIDER_NET : [ (p_const . MIN_VLAN_TAG , p_const . MAX_VLAN_TAG ) ],
TENANT_NET : [ ( VLAN_MIN + 5 , VLAN_MAX + 5 ) ] ,
}
EMPTY_VLAN_RANGES = {
PROVIDER_NET : [ ]
PROVIDER_NET : [ (p_const . MIN_VLAN_TAG , p_const . MAX_VLAN_TAG ) ]
}
NETWORK_VLAN_RANGES_WITH_UNCONFIG = {
PROVIDER_NET : [ ],
PROVIDER_NET : [ (p_const . MIN_VLAN_TAG , p_const . MAX_VLAN_TAG ) ],
TENANT_NET : [ ( VLAN_MIN + 5 , VLAN_MAX + 5 ) ] ,
UNCONFIGURED_NET : [ ( VLAN_MIN , VLAN_MAX ) ]
}
@ -151,13 +151,6 @@ class VlanTypeTest(testlib_api.SqlTestCase):
self . driver . validate_provider_segment ,
segment )
def test_validate_provider_segment_with_physical_network_only ( self ) :
segment = { api . NETWORK_TYPE : p_const . TYPE_VLAN ,
api . PHYSICAL_NETWORK : PROVIDER_NET }
self . assertRaises ( exc . InvalidInput ,
self . driver . validate_provider_segment ,
segment )
def test_sync_vlan_allocations ( self ) :
def check_in_ranges ( network_vlan_ranges ) :
vlan_min , vlan_max = network_vlan_ranges [ TENANT_NET ] [ 0 ]
@ -212,7 +205,9 @@ class VlanTypeTest(testlib_api.SqlTestCase):
api . PHYSICAL_NETWORK : PROVIDER_NET ,
api . SEGMENTATION_ID : 101 }
alloc = self . _get_allocation ( self . context , segment )
self . assertIsNone ( alloc )
expected = vlan_alloc_obj . VlanAllocation (
allocated = False , physical_network = PROVIDER_NET , vlan_id = 101 )
self . assertEqual ( expected . __repr__ ( ) , alloc . __repr__ ( ) )
observed = self . driver . reserve_provider_segment ( self . context , segment )
alloc = self . _get_allocation ( self . context , observed )
self . assertTrue ( alloc . allocated )
@ -252,19 +247,11 @@ class VlanTypeTest(testlib_api.SqlTestCase):
observed = self . driver . reserve_provider_segment ( self . context , segment )
alloc = self . _get_allocation ( self . context , observed )
self . assertTrue ( alloc . allocated )
vlan_id = observed [ api . SEGMENTATION_ID ]
self . assertThat ( vlan_id , matchers . GreaterThan ( VLAN_MIN - 1 ) )
self . assertThat ( vlan_id , matchers . LessThan ( VLAN_MAX + 1 ) )
self . assertEqual ( TENANT_NET , observed [ api . PHYSICAL_NETWORK ] )
def test_reserve_provider_segment_all_allocateds ( self ) :
for __ in range ( VLAN_MIN , VLAN_MAX + 1 ) :
self . driver . allocate_tenant_segment ( self . context )
segment = { api . NETWORK_TYPE : p_const . TYPE_VLAN }
self . assertRaises ( exc . NoNetworkAvailable ,
self . driver . reserve_provider_segment ,
self . context ,
segment )
# NOTE(ralonsoh): first network provided in the configuration is
# PROVIDER_NET.
self . assertEqual ( PROVIDER_NET , observed [ api . PHYSICAL_NETWORK ] )
self . assertIn ( observed [ api . SEGMENTATION_ID ] ,
range ( p_const . MIN_VLAN_TAG , p_const . MAX_VLAN_TAG + 1 ) )
def test_get_mtu ( self ) :
cfg . CONF . set_override ( ' global_physnet_mtu ' , 1475 )
@ -288,20 +275,27 @@ class VlanTypeTest(testlib_api.SqlTestCase):
self . assertEqual ( 0 , self . driver . get_mtu ( ' physnet1 ' ) )
def test_allocate_tenant_segment ( self ) :
cfg . CONF . set_override ( ' network_vlan_ranges ' , TENANT_VLAN_RANGES ,
group = ' ml2_type_vlan ' )
driver = type_vlan . VlanTypeDriver ( )
driver . _sync_vlan_allocations ( )
for __ in range ( VLAN_MIN , VLAN_MAX + 1 ) :
segment = self . driver . allocate_tenant_segment ( self . context )
alloc = self . _get_allocation ( self . context , segment )
self . assertTrue ( alloc . allocated )
vlan_id = segment [ api . SEGMENTATION_ID ]
self . assert That( vlan_id , matchers . GreaterThan ( VLAN_MIN - 1 ) )
self . assert That( vlan_id , matchers . LessThan ( VLAN_MAX + 1 ) )
self . assert Greater( vlan_id , VLAN_MIN - 1 )
self . assert Less( vlan_id , VLAN_MAX + 1 )
self . assertEqual ( TENANT_NET , segment [ api . PHYSICAL_NETWORK ] )
def test_allocate_tenant_segment_no_available ( self ) :
cfg . CONF . set_override ( ' network_vlan_ranges ' , TENANT_VLAN_RANGES ,
group = ' ml2_type_vlan ' )
driver = type_vlan . VlanTypeDriver ( )
driver . _sync_vlan_allocations ( )
for __ in range ( VLAN_MIN , VLAN_MAX + 1 ) :
self . driver . allocate_tenant_segment ( self . context )
segment = self . driver . allocate_tenant_segment ( self . context )
self . assertIsNone ( segment )
driver . allocate_tenant_segment ( self . context )
self . assertIsNone ( driver . allocate_tenant_segment ( self . context ) )
def test_release_segment ( self ) :
segment = self . driver . allocate_tenant_segment ( self . context )
@ -311,14 +305,14 @@ class VlanTypeTest(testlib_api.SqlTestCase):
def test_release_segment_unallocated ( self ) :
segment = { api . NETWORK_TYPE : p_const . TYPE_VLAN ,
api . PHYSICAL_NETWORK : PROVIDER_NET ,
api . PHYSICAL_NETWORK : ' non_existing_physnet ' ,
api . SEGMENTATION_ID : 101 }
with mock . patch . object ( type_vlan . LOG , ' warning ' ) as log_warn :
self . driver . release_segment ( self . context , segment )
log_warn . assert_called_once_with (
" No vlan_id %(vlan_id)s found on physical network "
" %(physical_network)s " ,
{ ' vlan_id ' : 101 , ' physical_network ' : PROVIDER_NET } )
{ ' vlan_id ' : 101 , ' physical_network ' : ' non_existing_physnet ' } )
class VlanTypeAllocationTest ( testlib_api . SqlTestCase ) :
@ -347,11 +341,15 @@ class VlanTypeAllocationTest(testlib_api.SqlTestCase):
for vlan in range ( 10 ) :
# then physnet2
self . assertEqual (
{ ' network_type ' : ' vlan ' , ' physical_network ' : ' phys_net2 ' ,
{ ' network_type ' : ' vlan ' , ' physical_network ' : TENANT_NET ,
' segmentation_id ' : mock . ANY , ' mtu ' : 1500 } ,
driver . allocate_tenant_segment ( ctx ) )
# then nothing
self . assertFalse ( driver . allocate_tenant_segment ( ctx ) )
# NOTE(ralonsoh): to save time, this test won't allocate 4094 segments
# for PROVIDER_NET.
self . assertEqual (
{ ' network_type ' : ' vlan ' , ' physical_network ' : PROVIDER_NET ,
' segmentation_id ' : p_const . MIN_VLAN_TAG , ' mtu ' : 1500 } ,
driver . allocate_tenant_segment ( ctx ) )
class VlanTypeTestWithNetworkSegmentRange ( testlib_api . SqlTestCase ) :
@ -375,12 +373,20 @@ class VlanTypeTestWithNetworkSegmentRange(testlib_api.SqlTestCase):
# one of the `service_plugins`
ret = obj_network_segment_range . NetworkSegmentRange . get_objects (
self . context )
self . assertEqual ( 1 , len ( ret ) )
self . assertEqual ( 2 , len ( ret ) )
network_segment_range = ret [ 0 ]
self . assertTrue ( network_segment_range . default )
self . assertTrue ( network_segment_range . shared )
self . assertIsNone ( network_segment_range . project_id )
self . assertEqual ( p_const . TYPE_VLAN , network_segment_range . network_type )
self . assertEqual ( PROVIDER_NET , network_segment_range . physical_network )
self . assertEqual ( p_const . MIN_VLAN_TAG , network_segment_range . minimum )
self . assertEqual ( p_const . MAX_VLAN_TAG , network_segment_range . maximum )
network_segment_range = ret [ 1 ]
self . assertTrue ( network_segment_range . default )
self . assertTrue ( network_segment_range . shared )
self . assertIsNone ( network_segment_range . project_id )
self . assertEqual ( p_const . TYPE_VLAN , network_segment_range . network_type )
self . assertEqual ( TENANT_NET , network_segment_range . physical_network )
self . assertEqual ( VLAN_MIN , network_segment_range . minimum )
self . assertEqual ( VLAN_MAX , network_segment_range . maximum )