blob: 378d226e039313c666232c0ab5a551c76f448b44 [file] [log] [blame]
ChetanGaonker901727c2016-11-29 14:05:03 -08001#
2# Copyright 2016-present Ciena Corporation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16import unittest
17import os,sys
ChetanGaonker901727c2016-11-29 14:05:03 -080018import keystoneclient.v2_0.client as ksclient
19import keystoneclient.apiclient.exceptions
20import neutronclient.v2_0.client as nclient
21import neutronclient.common.exceptions
22import novaclient.v1_1.client as novaclient
23from multiprocessing import Pool
ChetanGaonkeraaea6b62016-12-16 17:06:39 -080024from neutronclient.v2_0 import client as neutron_client
ChetanGaonker901727c2016-11-29 14:05:03 -080025from nose.tools import assert_equal
ChetanGaonkeraaea6b62016-12-16 17:06:39 -080026from OnosCtrl import OnosCtrl, get_mac
ChetanGaonker901727c2016-11-29 14:05:03 -080027from CordLogger import CordLogger
ChetanGaonkeraaea6b62016-12-16 17:06:39 -080028import time
Chetan Gaonker3c8ae682017-02-18 00:50:45 +000029import py_compile
ChetanGaonker901727c2016-11-29 14:05:03 -080030
ChetanGaonker71fe0302016-12-19 17:45:44 -080031PROTO_NAME_TCP = 'tcp'
32PROTO_NAME_ICMP = 'icmp'
33IPv4 = 'IPv4'
34
35OS_USERNAME = 'admin'
Chetan Gaonker0fb91c92017-02-07 01:52:18 +000036OS_PASSWORD = 'VeryLongKeystoneAdminPassword'
ChetanGaonker71fe0302016-12-19 17:45:44 -080037OS_TENANT = 'admin'
Chetan Gaonker0fb91c92017-02-07 01:52:18 +000038OS_AUTH_URL = 'https://keystone.cord.lab:5000/v2.0'
39OS_SERVICE_ENDPOINT = 'https://keystone.cord.lab:5000/v2.0/'
Chetan Gaonker1f422af2017-01-13 21:59:16 +000040VM_BOOT_TIMEOUT = 100
41VM_DELETE_TIMEOUT = 100
42
ChetanGaonker71fe0302016-12-19 17:45:44 -080043
44#VM SSH CREDENTIALS
45VM_USERNAME = 'ubuntu'
46VM_PASSWORD = 'ubuntu'
47
48TENANT_PREFIX = 'test-'
49VM_PREFIX = 'test-'
50NETWORK_PREFIX = 'test-'
51CIDR_PREFIX = '192.168'
52
Chetan Gaonker1c387cf2017-02-22 02:21:43 +000053class vtn_validation_utils:
54
55 endpoint = "http://172.17.0.2:8101"
56 version=""
57 def __init__(self, version):
58 self.version = version
59 self.devices = '/onos/v1/devices'
60 self.links = '/onos/v1/links'
61 self.flows = '/onos/v1/flows'
62 self.apps = '/onos/v1/applications'
63
64 def getDevices(self, endpoint, user, passwd):
65 headers = {'Accept': 'application/json'}
66 url = endpoint+self.devices
67 response = requests.get(url, headers=headers, auth=(user, passwd))
68 response.raise_for_status()
69 return response.json()
70
71 def getLinks(self, endpoint, user, passwd):
72 headers = {'Accept': 'application/json'}
73 url = endpoint+self.links
74 response = requests.get(url, headers=headers, auth=(user, passwd))
75 response.raise_for_status()
76 return response.json()
77
78 def getDevicePorts(self, endpoint, user, passwd, switch_id):
79 headers = {'Accept': 'application/json'}
80 url = endpoint+self.devices+"/"+str(switch_id)+"/ports"
81 response = requests.get(url, headers=headers, auth=(user, passwd))
82 response.raise_for_status()
83 return response.json()
84
85 def activateVTNApp(self, endpoint, user, passwd, app_name):
86 headers = {'Accept': 'application/json'}
87 url = endpoint+self.apps+"/"+str(app_name)+"/active"
88 response = requests.post(url, headers=headers, auth=(user, passwd))
89 response.raise_for_status()
90 return response.json()
91
92 def deactivateVTNApp(self, endpoint, user, passwd, app_name):
93 headers = {'Accept': 'application/json'}
94 url = endpoint+self.apps+"/"+str(app_name)+"/active"
95 response = requests.delete(url, headers=headers, auth=(user, passwd))
96 response.raise_for_status()
97 return response.json()
98
ChetanGaonker901727c2016-11-29 14:05:03 -080099class cordvtn_exchange(CordLogger):
100
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800101 app_cordvtn = 'org.opencord.vtn'
102 test_path = os.path.dirname(os.path.realpath(__file__))
103 cordvtn_dir = os.path.join(test_path, '..', 'setup')
104 cordvtn_conf_file = os.path.join(test_path, '..', '../cordvtn/network_cfg.json')
ChetanGaonker901727c2016-11-29 14:05:03 -0800105
106 @classmethod
107 def setUpClass(cls):
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800108 ''' Activate the cordvtn app'''
ChetanGaonker901727c2016-11-29 14:05:03 -0800109 time.sleep(3)
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800110 cls.onos_ctrl = OnosCtrl(cls.app_cordvtn)
111 status, _ = cls.onos_ctrl.activate()
112 assert_equal(status, False)
113 time.sleep(3)
114 cls.cordvtn_setup()
ChetanGaonker901727c2016-11-29 14:05:03 -0800115
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800116 @classmethod
117 def tearDownClass(cls):
ChetanGaonker901727c2016-11-29 14:05:03 -0800118 '''Deactivate the cord vtn app'''
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800119 cls.onos_ctrl.deactivate()
120 cls.cord_vtn_cleanup()
ChetanGaonker901727c2016-11-29 14:05:03 -0800121
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800122 @classmethod
123 def cordvtn_setup(cls):
124 pass
125
126 @classmethod
127 def cord_vtn_cleanup(cls):
128 ##reset the ONOS port configuration back to default
129 for config in cls.configs.items():
130 OnosCtrl.delete(config)
131
132 @classmethod
133 def onos_load_config(cls, cordvtn_conf_file):
134 status, code = OnosCtrl.config(cordvtn_conf_file)
ChetanGaonker901727c2016-11-29 14:05:03 -0800135 if status is False:
136 log.info('JSON request returned status %d' %code)
137 assert_equal(status, True)
138 time.sleep(3)
139
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800140 def get_neutron_credentials():
141 n = {}
142 n['username'] = os.environ['OS_USERNAME']
143 n['password'] = os.environ['OS_PASSWORD']
144 n['auth_url'] = os.environ['OS_AUTH_URL']
145 n['tenant_name'] = os.environ['OS_TENANT_NAME']
146 return n
147
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800148 def create_network(i):
149 neutron_credentials = get_neutron_credentials()
150 neutron = neutron_client.Client(**neutron_credentials)
151 json = {'network': {'name': 'network-' + str(i),
152 'admin_state_up': True}}
153 while True:
154 try:
Chetan Gaonker3c8ae682017-02-18 00:50:45 +0000155 net = neutron.create_network(body=json)
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800156 print '\nnetwork-' + str(i) + ' created'
Chetan Gaonker3c8ae682017-02-18 00:50:45 +0000157 return net
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800158 except Exception as e:
159 print e
160 continue
161
ChetanGaonker901727c2016-11-29 14:05:03 -0800162 def create_tenant(tenant_name):
163 new_tenant = keystone.tenants.create(tenant_name=tenant_name,
164 description="CORD Tenant \
165 created",
166 enabled=True)
167 tenant_id = new_tenant.id
168 tenant_status = True
169 user_data = []
170 for j in range(2):
171 j += 1
172 user_name = tenant_name + '-user-' + str(j)
173 user_data.append(create_user(user_name, tenant_id))
174
175 print " Tenant and User Created"
176
177 tenant_data = {'tenant_name': tenant_name,
178 'tenant_id': tenant_id,
179 'status': tenant_status}
180 return tenant_data
181
182 def create_user(user_name, tenant_id):
183 new_user = keystone.users.create(name=user_name,
184 password="ubuntu",
185 tenant_id=tenant_id)
186 print(' - Created User %s' % user_name)
187 keystone.roles.add_user_role(new_user, member_role, tenant_id)
188 if assign_admin:
189 admin_user = keystone.users.find(name='admin')
190 admin_role = keystone.roles.find(name='admin')
191 keystone.roles.add_user_role(admin_user, admin_role, tenant_id)
192 user_data = {'name': new_user.name,
193 'id': new_user.id}
194 return user_data
195
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800196 def create_port( router_id, network_id):
197 credentials = get_credentials()
198 neutron = client.Client(**credentials)
199 router = neutron.show_router(router_id)
200
201 value = {'port':{
202 'admin_state_up':True,
203 'device_id': router_id,
204 'name': 'port1',
205 'network_id':network_id,
206 }}
207 response = neutron.create_port(body=value)
208
ChetanGaonker71fe0302016-12-19 17:45:44 -0800209 def router_create(self, name):
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800210 external_network = None
211 for network in self.neutron.list_networks()["networks"]:
212 if network.get("router:external"):
213 external_network = network
214 break
215
216 if not external_network:
217 raise Exception("Alarm! Can not to find external network")
218
219 gw_info = {
220 "network_id": external_network["id"],
221 "enable_snat": True
222 }
223 router_info = {
224 "router": {
225 "name": name,
226 "external_gateway_info": gw_info,
227 "tenant_id": self.tenant_id
228 }
229 }
ChetanGaonker71fe0302016-12-19 17:45:44 -0800230 router = self.neutron.router_create(router_info)['router']
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800231 return router
232
ChetanGaonker901727c2016-11-29 14:05:03 -0800233 def delete_tenant(tenant_name):
234 tenant = keystone.tenants.find(name=tenant_name)
235 for j in range(2):
236 j += 1
237 user_name = tenant_name + '-user-' + str(j)
238 delete_user(user_name, tenant.id)
239 tenant.delete()
240 print(' - Deleted Tenant %s ' % tenant_name)
241 return True
242
243 def delete_user(user_name, tenant_id):
244 user = keystone.users.find(name=user_name)
245 user.delete()
246
247 print(' - Deleted User %s' % user_name)
248 return True
249
ChetanGaonker71fe0302016-12-19 17:45:44 -0800250 def set_environment(tenants_num=0, networks_per_tenant=1, vms_per_network=2):
251 octet = 115
252 vm_inc = 11
253 image = nova_connection.images.get(IMAGE_ID)
254 flavor = nova_connection.flavors.get(FLAVOR_ID)
255
256 admin_user_id = keystone_connection.users.find(name=OS_USERNAME).id
257 member_role_id = keystone_connection.roles.find(name='Member').id
258 for num_tenant in range(1, tenants_num+1):
259 tenant = keystone_connection.tenants.create('%stenant%s' % (TENANT_PREFIX, num_tenant))
260 keystone_connection.roles.add_user_role(admin_user_id, member_role_id, tenant=tenant.id)
261 for num_network in range(networks_per_tenant):
262 network_json = {'name': '%snet%s' % (NETWORK_PREFIX, num_tenant*10+num_network),
263 'admin_state_up': True,
264 'tenant_id': tenant.id}
265 network = neutron_connection.create_network({'network': network_json})
266 subnet_json = {'name': '%ssubnet%s' % (NETWORK_PREFIX, num_tenant*10+num_network),
267 'network_id': network['network']['id'],
268 'tenant_id': tenant.id,
269 'enable_dhcp': True,
270 'cidr': '%s.%s.0/24' % (CIDR_PREFIX, octet), 'ip_version': 4}
271 octet += 1
272 subnet = neutron_connection.create_subnet({'subnet': subnet_json})
273 router_json = {'name': '%srouter%s' % (NETWORK_PREFIX, num_tenant*10+num_network),
274 'tenant_id': tenant.id}
275 router = neutron_connection.router_create({'router': router_json})
276 port = neutron_connection.add_interface_router(router['router']['id'], {'subnet_id': subnet['subnet']['id']})
277 for num_vm in range(vms_per_network):
278 tenant_nova_connection = novacli.Client(OS_USERNAME, OS_PASSWORD, tenant.name, OS_AUTH_URL)
279 m = tenant_nova_connection.servers.create('%svm%s' % (VM_PREFIX, vm_inc), image, flavor, nics=[{'net-id': network['network']['id']}, {'net-id': MGMT_NET}])
280 vm_inc += 1
281
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800282 def verify_neutron_crud():
283 x = os.system("neutron_test.sh")
284 return x
ChetanGaonker901727c2016-11-29 14:05:03 -0800285
Author Name91eaeba2017-01-05 13:41:45 -0800286 def list_floatingips( **kwargs):
287 creds = get_neutron_credentials()
288 neutron = client.Client(**creds)
289 return neutron.list_floatingips(**kwargs)['floatingips']
290
291 def list_security_groups( **kwargs):
292 creds = get_neutron_credentials()
293 neutron = client.Client(**creds)
294 return neutron.list_security_groups(**kwargs)['security_groups']
295
296 def list_subnets( **kwargs):
297 creds = get_neutron_credentials()
298 neutron = client.Client(**creds)
299 return neutron.list_subnets(**kwargs)['subnets']
300
301 def list_networks( **kwargs):
302 creds = get_neutron_credentials()
303 neutron = client.Client(**creds)
304 return neutron.list_networks(**kwargs)['networks']
305
306 def list_ports( **kwargs):
307 creds = get_neutron_credentials()
308 neutron = client.Client(**creds)
309 return neutron.list_ports(**kwargs)['ports']
310
311 def list_routers( **kwargs):
312 creds = get_neutron_credentials()
313 neutron = client.Client(**creds)
314 return neutron.list_routers(**kwargs)['routers']
315
316 def update_floatingip( fip, port_id=None):
317 creds = get_neutron_credentials()
318 neutron = client.Client(**creds)
319 neutron.update_floatingip(fip, {"floatingip":
320 {"port_id": port_id}})
321
322 def update_subnet( subnet_id, **subnet_params):
323 creds = get_neutron_credentials()
324 neutron = client.Client(**creds)
325 neutron.update_subnet(subnet_id, {'subnet': subnet_params})
326
327 def update_router( router_id, **router_params):
328 creds = get_neutron_credentials()
329 neutron = client.Client(**creds)
330 neutron.update_router(router_id, {'router': router_params})
331
332 def router_gateway_set( router_id, external_gateway):
333 creds = get_neutron_credentials()
334 neutron = client.Client(**creds)
335 neutron.update_router(
336 router_id, {'router': {'external_gateway_info':
337 {'network_id': external_gateway}}})
338
339 def router_gateway_clear( router_id):
340 creds = get_neutron_credentials()
341 neutron = client.Client(**creds)
342 neutron.update_router(
343 router_id, {'router': {'external_gateway_info': None}})
344
345 def router_add_interface( router_id, subnet_id):
346 creds = get_neutron_credentials()
347 neutron = client.Client(**creds)
348 neutron.add_interface_router(router_id, {'subnet_id': subnet_id})
349
350 def router_rem_interface( router_id, subnet_id):
351 creds = get_neutron_credentials()
352 neutron = client.Client(**creds)
353 neutron.remove_interface_router(
354 router_id, {'subnet_id': subnet_id})
355
356 def create_floatingip( **floatingip_params):
357 creds = get_neutron_credentials()
358 neutron = client.Client(**creds)
359 response = neutron.create_floatingip(
360 {'floatingip': floatingip_params})
361 if 'floatingip' in response and 'id' in response['floatingip']:
362 return response['floatingip']['id']
363
Chetan Gaonker1f422af2017-01-13 21:59:16 +0000364 def make_iperf_pair(server, client, **kwargs):
365 ssh = SSHClient()
366 ssh.set_missing_host_key_policy(MissingHostKeyPolicy())
367
368 ssh.connect(server, username=VM_USERNAME, password=VM_PASSWORD)
369 ssh.exec_command('/usr/local/bin/iperf3 -s -D')
370
371 ssh.connect(client, username=VM_USERNAME, password=VM_PASSWORD)
372 stdin, stdout, stderr = ssh.exec_command('/usr/local/bin/iperf3 -c %s -J' % server)
373
374 rawdata = stdout.read()
375 data = json.loads(rawdata.translate(None,'\t').translate(None,'\n'))
376
377 return data
378
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000379 def connect_ssh(os_ip, private_key_file=None, user='ubuntu'):
380 key = ssh.RSAKey.from_private_key_file(private_key_file)
381 client = ssh.SSHClient()
382 client.set_missing_host_key_policy(ssh.WarningPolicy())
383 client.connect(ip, username=user, pkey=key, timeout=5)
384 return client
Chetan Gaonker1f422af2017-01-13 21:59:16 +0000385
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000386 def validate_vtn_flows(switch):
387 egress = 1
388 ingress = 2
389 egress_map = { 'ether': '00:00:00:00:00:03', 'ip': '192.168.30.1' }
390 ingress_map = { 'ether': '00:00:00:00:00:04', 'ip': '192.168.40.1' }
391 device_id = 'of:{}'.format(get_mac(switch))
392 flow_id = flow.findFlow(device_id, IN_PORT = ('port', ingress),
393 ETH_TYPE = ('ethType','0x800'), IPV4_SRC = ('ip', ingress_map['ip']+'/32'),
394 IPV4_DST = ('ip', egress_map['ip']+'/32'))
395 if flow_id:
396 return True
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800397
Chetan Gaonker3c8ae682017-02-18 00:50:45 +0000398 def cordvtn_config_load(self, config = None):
399 if config:
400 for k in config.keys():
401 if cordvtn_config.has_key(k):
402 cordvtn_config[k] = config[k]
403 self.onos_load_config(self.cordvtn_dict)
404
405 def search_value(d, pat):
406 for k, v in d.items():
407 if isinstance(v, dict):
408 search_value(v, pat)
409 else:
410 if v == pat:
411 print "Network created successfully"
412 return True
413 else:
414 return False
415
416 def test_cordvtn_neutron_network_sync(self):
417 """
418 Algo:
419 0. Create Test-Net,
420 1. Load cordvtn config, vtn-cfg-1.json to cord-onos
421 2. Run sync command for cordvtn
422 3. Do GET Rest API and validate creation of network
423 4. Validate network synch with created network in cord-onos
424 """
425
426 vtnconfig = {
427 "apps" : {
428 "org.opencord.vtn" : {
429 "cordvtn" : {
430 "controllers" : [ "10.1.0.1:6654" ],
431 "localManagementIp" : "172.27.0.1/24",
432 "nodes" : [ {
433 "bridgeId" : "of:0000525400201852",
434 "dataPlaneIntf" : "fabric",
435 "dataPlaneIp" : "10.6.1.2/24",
436 "hostManagementIp" : "10.1.0.14/24",
437 "hostname" : "cold-flag"
438 } ],
439 "openstack" : {
440 "endpoint" : "https://keystone.cord.lab:5000/v2.0",
441 "password" : "VeryLongKeystoneAdminPassword",
442 "tenant" : "admin",
443 "user" : "admin"
444 },
445 "ovsdbPort" : "6641",
446 "privateGatewayMac" : "00:00:00:00:00:01",
447 "publicGateways" : [ {
448 "gatewayIp" : "10.6.1.193",
449 "gatewayMac" : "02:42:0a:06:01:01"
450 }, {
451 "gatewayIp" : "10.6.1.129",
452 "gatewayMac" : "02:42:0a:06:01:01"
453 } ],
454 "ssh" : {
455 "sshKeyFile" : "/root/node_key",
456 "sshPort" : "22",
457 "sshUser" : "root"
458 },
459 "xos" : {
460 "endpoint" : "http://xos:8888/",
461 "password" : "letmein",
462 "user" : "padmin@vicci.org"
463 }
464 }
465 }
466 }
467 }
468
469 self.onos_load_config(vtnconfig)
470 creds = get_neutron_credentials()
471 neutron = neutronclient.Client(**creds)
472 body_example = {"network":{"name": "Test-Net","admin_state_up":True}}
473 net = neutron.create_network(body=body_example)
474
475 url = "http://172.17.0.2/onos/cordvtn/serviceNetworks"
476 auth = ('karaf','karaf')
477
478 resp = requests.get(url=url, auth=auth)
479 data = json.loads(resp.text)
480
481 result = search_response(data, "Test-Net")
482 assert_equal(result, True)
483
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800484 def test_cordvtn_basic_tenant(self):
485 onos_load_config()
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800486
ChetanGaonker71fe0302016-12-19 17:45:44 -0800487 tenant_1= create_tenant("CORD_Subscriber_Test_Tenant_1")
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000488 if tenant1 != 0:
ChetanGaonker71fe0302016-12-19 17:45:44 -0800489 print "Creation of CORD Subscriber Test Tenant 1"
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800490
ChetanGaonker71fe0302016-12-19 17:45:44 -0800491 tenant_2 = create_tenant("CORD_Subscriber_Test_Tenant_2")
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000492 if tenant2 != 0:
ChetanGaonker71fe0302016-12-19 17:45:44 -0800493 print "Creation of CORD Subscriber Test Tenant 2"
494
495 create_net(tenant_1,"a1")
496 create_subnet(tenant_1,"a1","as1","10.0.1.0/24")
497
498 create_net(tenant_2,"a2")
499 create_subnet(tenant_2,"a2","as1","10.0.2.0/24")
500
501 netid_1 = get_id(tenant_1,"net","a1")
502 netid_2 = get_id(tenant_2,"net","a2")
503
504 nova_boot(tenant_1,"vm1",netid=netid)
505 nova_boot(tenant_2,"vm1",netid=netid)
506
507 nova_wait_boot(tenant_1,"vm1", "ACTIVE")
508 nova_wait_boot(tenant_2,"vm1", "ACTIVE")
509
510 router_create(tenant_1,"r1")
511 router_interface_add(tenant_1,"r1","as1")
512 router_create(tenant_2,"r1")
513 router_interface_add(tenant_2,"r1","as1")
514
515 create_net(tenant_1,"x1","","--router:external=True")
516 create_net(tenant_2,"x1","","--router:external=True")
517
518 router_gateway_set(tenant_1,"r1","x1")
519 router_gateway_set(tenant_2,"r1","x1")
520
521 subnetid_1 = get_id(tenant_1,"subnet","as1")
522 subnetid_2 = get_id(tenant_2,"subnet","as1")
523 port_create(tenant_1,"p1","a1","10.0.1.100",subnetid_1)
524 port_create(tenant_2,"p1","a1","10.0.1.100",subnetid_2)
525
526 port_id_1 = get_id(tenant_1,"port","p1")
527 port_id_2 = get_id(tenant_2,"port","p1")
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000528 status = validate_vtn_flows()
529 assert_equal(status, True)
ChetanGaonker71fe0302016-12-19 17:45:44 -0800530
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000531 def test_cordvtn_for_creation_of_network(self):
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800532 onos_load_config()
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800533
534 ret1 = create_tenant(netA)
535 if ret1 != 0:
536 print "Creation of Tenant netA Failed"
537
538 ret2 = create_tenant(netB)
539 if ret2 != 0:
540 print "Creation of Tenant netB Failed"
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800541 network = {'name': self.network_name, 'admin_state_up': True}
542 self.neutron.create_network({'network':network})
543 log.info("Created network:{0}".format(self.network_name))
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000544 status = validate_vtn_flows()
545 assert_equal(status, True)
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800546
547 def test_cordvtn_to_create_net_work_with_subnet(self):
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800548 onos_load_config()
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800549
550 ret1 = create_tenant(netA)
551 if ret1 != 0:
552 print "Creation of Tenant netA Failed"
553
554 ret2 = create_tenant(netB)
555 if ret2 != 0:
556 print "Creation of Tenant netB Failed"
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800557 network_name = self.network_name
558 network = {'name': network_name, 'admin_state_up': True}
559 network_info = self.neutron.create_network({'network':network})
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800560 network_id = network_info['network']['id']
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800561
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800562 log.info("Created network:{0}".format(network_id))
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800563 self.network_ids.append(network_id)
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800564 subnet_count = 1
565 for cidr in self.subnet_cidrs:
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800566 gateway_ip = str(list(cidr)[1])
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800567 subnet = {"network_id": network_id, "ip_version":4,
568 "cidr":str(cidr), "enable_dhcp":True,
569 "host_routes":[{"destination":"0.0.0.0/0", "nexthop":gateway_ip}]
570 }
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800571 subnet = {"name":"subnet-"+str(subnet_count), "network_id": network_id, "ip_version":4, "cidr":str(cidr), "enable_dhcp":True}
572 print subnet
573 self.neutron.create_subnet({'subnet':subnet})
574 log.info("Created subnet:{0}".format(str(cidr)))
575 if not self.number_of_subnet - 1:
576 break
577 self.number_of_subnet -= 1
578 subnet_count += 1
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000579 status = validate_vtn_flows()
580 assert_equal(status, True)
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800581
582 def test_cordvtn_subnet_limit(self):
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800583 onos_load_config()
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800584
585 ret1 = create_tenant(netA)
586 if ret1 != 0:
587 print "Creation of Tenant netA Failed"
588
589 ret2 = create_tenant(netB)
590 if ret2 != 0:
591 print "Creation of Tenant netB Failed"
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800592 network_name = uuid.uuid4().get_hex()
593 network = {'name': network_name, 'admin_state_up': True}
594 network_info = self.neutron.create_network({'network':network})
595 log.info("Created network:{0}".format(network_name))
596 network_id = network_info['network']['id']
597 self.network_ids.append(network_id)
598 subnet_cidrs = ['11.2.2.0/29', '11.2.2.8/29']
599 for cidr in subnet_cidrs:
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800600 subnet = {"network_id": network_id, "ip_version":4, "cidr": cidr}
601 subnet_info = self.neutron.create_subnet({'subnet':subnet})
602 subnet_id = subnet_info['subnet']['id']
603 log.info("Created subnet:{0}".format(cidr))
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800604 while True:
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800605 port = {"network_id": network_id, "admin_state_up": True}
606 port_info = self.neutron.create_port({'port':port})
607 port_id = port_info['port']['id']
608 self.port_ids.append(port_id)
609 log.info("Created Port:{0}".format(port_info['port']['id']))
610 if not self.quota_limit:
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800611 break
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800612 self.quota_limit -= 1
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000613 status = validate_vtn_flows()
614 assert_equal(status, True)
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800615
616 def test_cordvtn_floatingip_limit(self):
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800617 onos_load_config()
ChetanGaonkerd65b7612016-12-07 01:01:20 -0800618
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800619 ret1 = create_tenant(netA)
620 if ret1 != 0:
621 print "Creation of Tenant netA Failed"
622
623 ret2 = create_tenant(netB)
624 if ret2 != 0:
625 print "Creation of Tenant netB Failed"
626 while True:
627 floatingip = {"floating_network_id": self.floating_nw_id}
628 fip_info = self.neutron.create_floatingip({'floatingip':floatingip})
629 fip_id = fip_info['floatingip']['id']
630 log.info("Created Floating IP:{0}".format(fip_id))
631 self.fip_ids.append(fip_id)
632 if not self.quota_limit:
633 break
634 self.quota_limit -= 1
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000635 status = validate_vtn_flows()
636 assert_equal(status, True)
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800637
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000638 def test_cordvtn_for_10_neutron_networks(self):
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800639 onos_load_config()
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800640
641 ret1 = create_tenant(netA)
642 if ret1 != 0:
643 print "Creation of Tenant netA Failed"
644
645 ret2 = create_tenant(netB)
646 if ret2 != 0:
647 print "Creation of Tenant netB Failed"
648 pool = Pool(processes=10)
649 ret = os.system("neutron quote-update --network 15")
650 if ret1 != 0:
651 print "Neutron network install failed"
652 for i in range(1, 11):
653 pool.apply_asynch(create_network, (i, ))
654
655 pool.close()
656 pool.join()
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000657 status = validate_vtn_flows()
658 assert_equal(status, True)
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800659
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000660 def test_cordvtn_for_100_neutron_networks(self):
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800661 onos_load_config()
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800662
663 ret1 = create_tenant(netA)
664 if ret1 != 0:
665 print "Creation of Tenant netA Failed"
666
667 ret2 = create_tenant(netB)
668 if ret2 != 0:
669 print "Creation of Tenant netB Failed"
670 pool = Pool(processes=10)
671
672 ret = os.system("neutron quote-update --network 105")
673 if ret1 != 0:
674 print "Neutron network install failed"
675 for i in range(1, 101):
676 pool.apply_asynch(create_network, (i, ))
677
678 pool.close()
679 pool.join()
Chetan Gaonker0fb91c92017-02-07 01:52:18 +0000680 status = validate_vtn_flows()
681 assert_equal(status, True)
682
683 def test_cordvtn_nodes(self):
684 pass
685
686 def test_cordvtn_networks(self):
687 pass
688
689 def test_cordvtn_for_range_of_networks(self):
690 pass
691
692 def test_cordvtn_node_check(self):
693 pass
694
695 def test_cordvtn_init(self):
696 pass
697
698 def test_cordvtn_ports(self):
699 pass
700
701 def test_cordvtn_synching_neutron_states(self):
702 pass
703
704 def test_cordvtn_synching_xos_states(self):
705 pass
706
707 def test_cordvtn_config_on_restart(self):
708 pass
709
710 def test_cordvtn_arp_proxy(self):
711 pass
712
713 def test_cordvtn_gateway(self):
714 pass
715
716 def test_cordvtn_openstack_access(self):
717 pass
718
719 def test_cordvtn_xos_access(self):
720 pass
721
722 def test_cordvtn_ssh_access(self):
723 pass
724
725 def test_cordvtn_ovsdbport(self):
726 pass
727
728 def test_cordvtn_local_management_ip(self):
729 pass
730
731 def test_cordvtn_compute_nodes(self):
732 pass
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800733
734 def test_cordvtn_service_dependency_for_two_subnets(self):
735 pass
736
737 def test_cordvtn_service_dependency_for_three_subnets(self):
738 pass
739
740 def test_cordvtn_service_dependency_for_four_subnets(self):
741 pass
742
743 def test_cordvtn_service_dependency_for_five_subnets(self):
744 pass
745
746 def test_cordvtn_for_biderectional_connections(self):
747 pass
748
749 def test_cordvtn_authentication_from_openstack(self):
750 pass
751
752 def test_cordvtn_with_gateway(self):
753 pass
754
755 def test_cordvtn_without_gateway(self):
756 pass
757
758 def test_cordvtn_for_service_instance(self):
759 pass
760
761 def test_cordvtn_for_instance_to_network(self):
762 pass
763
764 def test_cordvtn_for_network_to_instance(self):
765 pass
766
767 def test_cordvtn_for_instance_to_instance(self):
768 pass
769
770 def test_cordvtn_for_network_to_network(self):
771 pass
772
773 def test_cordvtn_without_neutron_ml2_plugin(self):
774 pass
775
776 def test_cordvtn_with_neutron_ml2_plugin(self):
777 pass
778
779 def test_cordvtn_service_network_type_private(self):
780 pass
781
782 def test_cordvtn_service_network_type_management_local(self):
783 pass
784
785 def test_cordvtn_service_network_type_management_host(self):
786 pass
787
788 def test_cordvtn_service_network_type_vsg(self):
789 pass
790
791 def test_cordvtn_service_network_type_access_agent(self):
ChetanGaonker901727c2016-11-29 14:05:03 -0800792 pass
793
794 def test_cordvtn_mgmt_network(self):
795 pass
796
797 def test_cordvtn_data_network(self):
798 pass
799
800 def test_cordvtn_public_network(self):
801 pass
802
803 def test_cordvtn_in_same_network(self):
804 pass
805
806 def test_cordvtn_local_mgmt_network(self):
807 pass
808
809 def test_cordvtn_service_dependency(self):
810 pass
811
812 def test_cordvtn_service_dependency_with_xos(self):
813 pass
814
815 def test_cordvtn_vsg_xos_service_profile(self):
816 pass
817
818 def test_cordvtn_access_agent(self):
819 pass
820
821 def test_cordvtn_network_creation(self):
822 pass
823
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800824 def test_cordvtn_network_deletion(self):
825 pass
826
ChetanGaonker901727c2016-11-29 14:05:03 -0800827 def test_cordvtn_removing_service_network(self):
828 pass
829
830 def test_cordvtn_web_application(self):
831 pass
832
833 def test_cordvtn_service_port(self):
834 pass
ChetanGaonkeraaea6b62016-12-16 17:06:39 -0800835
836 def test_cordvtn_inetgration_bridge(self):
837 pass
838