cordvtn-test:
    Updated multiple new test scenarios with neutron and nova services
    in context of network creation, using image instance and
    validating creation.

Change-Id: I3d8720eeac7bf3f9e23ff9b46cf778cf938d4449
diff --git a/src/test/cordvtn/cordvtnTest.py b/src/test/cordvtn/cordvtnTest.py
index 1c5cf13..62b3310 100644
--- a/src/test/cordvtn/cordvtnTest.py
+++ b/src/test/cordvtn/cordvtnTest.py
@@ -485,7 +485,7 @@
         net = neutron.delete_network(net_id[2])
         return [self.get_key_value(d=networks, value = net_name)]
 
-    def neutron_subnet_creation_and_validation(self,net_name,sub_cird):
+    def neutron_subnet_creation_and_validation_v1(self,net_name,sub_cird):
         creds = self.get_neutron_credentials()
         neutron = neutronclient.Client(**creds)
         networks = neutron.list_networks(name=net_name)
@@ -494,7 +494,71 @@
         body_subnet_example = {"subnet":{"network_id": net_id[2],"ip_version":4, "cidr":str(cidr),  "allocation_pools": [{"start": "172.27.0.20", "end": "172.27.0.21"}]}}
         neutron_sub = neutron.create_subnet(body_subnet_example)
         networks = neutron.list_networks(name=net_name)
-        return [self.get_key_value(d=networks, key = 'subnets')]
+        return self.get_key_value(d=networks, key = 'subnets')
+
+    def neutron_subnet_creation_and_validation(self,net_name,sub_cird):
+        creds = self.get_neutron_credentials()
+        neutron = neutronclient.Client(**creds)
+        networks = neutron.list_networks(name=net_name)
+        net_id = self.get_key_value(d=networks, key = 'id')
+        if sub_cird[0] == 'management':
+           cidr = sub_cird[1]
+           body_subnet_example = {"subnet":{"network_id": net_id[2],"ip_version":4, "cidr":str(cidr),  "allocation_pools": [{"start": "172.27.0.20", "end": "172.27.0.21"}]}}
+        elif sub_cird[0] == 'public':
+           cidr = sub_cird[1]
+           gate_way = sub_cird[2]
+           body_subnet_example = {"subnet":{"network_id": net_id[2],"ip_version":4, "cidr":str(cidr), "gateway_ip":str(gate_way)}}
+        elif sub_cird[0] == 'private':
+           cidr = sub_cird[1]
+           gate_way = sub_cird[2]
+           body_subnet_example = {"subnet":{"network_id": net_id[2],"ip_version":4, "cidr":str(cidr), "gateway_ip":str(gate_way)}}
+
+        neutron_sub = neutron.create_subnet(body_subnet_example)
+        networks = neutron.list_networks(name=net_name)
+        return self.get_key_value(d=networks, key = 'subnets')
+
+    def sub_network_type_post_to_onos(self,net_name,sub_net_type):
+
+        creds = self.get_neutron_credentials()
+        neutron = neutronclient.Client(**creds)
+        networks = neutron.list_networks(name=net_name)
+        net_id = self.get_key_value(d=networks, key = 'id')
+        vtn_util = vtn_validation_utils('')
+
+        url = "http://{0}:8181/onos/cordvtn/serviceNetworks".format(vtn_util.endpoint)
+        auth = ('karaf','karaf')
+        network_data = {"ServiceNetwork":{"id": net_id[2],"type":sub_net_type, "providerNetworks":[]}}
+        json_network_type_data = json.dumps(network_data)
+        resp = requests.post(url=url, auth=auth, data =json_network_type_data)
+        return resp
+
+    def nova_instance_creation_and_validation(self,net_name,nova_obj,instance_name,image_name, flavor_id):
+        image = nova_obj.images.find(name=image_name)
+        flavor = nova_obj.flavors.find(name=flavor_id)
+        network = nova_obj.networks.find(label=net_name)
+        print network.id
+
+        server = nova_obj.servers.create(name = instance_name,
+                                         image = image.id,
+                                         flavor = flavor.id,
+                                         nics = [{'net-id':network.id}])
+        server_details =  nova_obj.servers.find(id=server.id)
+        print('Server is launched and status is %s' %server_details.status)
+        if server_details.status == 'BUILD':
+           time.sleep(20)
+        server_details =  nova_obj.servers.find(id=server.id)
+        print('After delay server status is %s state'%server_details.status)
+        if server_details.status == 'ERROR':
+           print('Server status is still in %s state'%server_details.status)
+        return server_details
+
+    def nova_instance_deletion(self, nova_obj, server_details):
+        results_nova_instance_deletion=nova_obj.servers.delete(server_details.id)
+        if results_nova_instance_deletion == None:
+           print"Nova intance is deleted"
+        else:
+           print"Nova intance is not deleted"
+        return results_nova_instance_deletion
 
     def test_cordvtn_neutron_network_creation_and_validation_on_head_node_with_neutron_service(self):
         """
@@ -629,6 +693,330 @@
                     assert_equal(sub_net_id[0], True)
                     break
 
+    def test_cordvtn_neutron_management_network_creation_and_post_network_type_management_local_to_onos(self):
+        """
+        Algo:
+        0. Create Test-Net,
+        1. Cretae subnetwork whose ip is under management network
+        2. Run sync command for cordvtn
+        3. Do GET Rest API and validate creation of network
+        4. Pushed the network type as management local to onos
+        5. Verified that onos is having under management network
+        """
+        test_net_name = 'vtn_test_7_net_management'
+        test_sub_net_cidr = ["management","172.27.0.0/24"]
+        test_management_type = "management_local"
+        result = self.neutron_network_creation_and_validation(test_net_name)
+        assert_equal(result, True)
+        sub_result = self.neutron_subnet_creation_and_validation(test_net_name,test_sub_net_cidr)
+
+        vtn_util = vtn_validation_utils('')
+        url = "http://{0}:8181/onos/cordvtn/serviceNetworks".format(vtn_util.endpoint)
+        auth = ('karaf','karaf')
+
+        resp = requests.get(url=url, auth=auth)
+        data = json.loads(resp.text)
+        for i in range(len(data['ServiceNetworks'])):
+              if data['ServiceNetworks'][i]['name'] == test_net_name:
+                 sub_net_id = self.get_key_value(d=data['ServiceNetworks'][i], key = 'subnet')
+                 if sub_net_id[2] == " ":
+                    log.info('Sub network is not successful')
+                    assert_equal(False, True)
+                    break
+                 elif sub_net_id[2] == test_sub_net_cidr[1]:
+                    log.info('Sub network is successful')
+                    assert_equal(sub_net_id[0], True)
+                    break
+
+        net_type_post = self.sub_network_type_post_to_onos(test_net_name, test_management_type)
+        print("Response from onos to change network service type as management local = %s" %net_type_post.text)
+        net_type_json = json.loads(net_type_post.text)
+
+        self.neutron_network_deletion(test_net_name)
+        assert_equal(net_type_json['message'], 'null already exists')
+
+
+    def test_cordvtn_management_network_creation_with_launching_nova_instance_and_validation_on_head_node_with_nova_service(self):
+
+        """
+        Algo:
+        0. Create Test-Net,
+        1. Cretae subnetwork whose ip is under management network
+        3. Do GET Rest API and validate creation of network
+        4. Create new nova instance under management network
+        5. Validate new nova instance is created on nova service
+        """
+        test_net_name = 'vtn_test_8_net_management'
+        test_sub_net_cidr = ["management","172.27.0.0/24"]
+        test_management_type = "management_local"
+        instance_vm_name = 'vtn_test_8_nova_instance_management_net'
+        image_name = "vsg-1.1"
+        flavor_id = 'm1.small'
+        result = self.neutron_network_creation_and_validation(test_net_name)
+        assert_equal(result, True)
+        neutron_creds = self.get_neutron_credentials()
+        neutron = neutronclient.Client(**neutron_creds)
+        networks = neutron.list_networks(name=test_net_name)
+        network_id = self.get_key_value(d=networks, key = 'id')
+        sub_result = self.neutron_subnet_creation_and_validation(test_net_name,test_sub_net_cidr)
+        assert_equal(sub_result[0], True)
+        creds = self.get_nova_credentials()
+        nova = nova_client.Client('2', **creds)
+        new_instance_details = self.nova_instance_creation_and_validation(test_net_name,nova,instance_vm_name,image_name,flavor_id)
+        self.neutron_network_deletion(test_net_name)
+        self.nova_instance_deletion(nova, new_instance_details)
+        assert_equal(new_instance_details.status, 'ACTIVE')
+
+
+
+    def test_cordvtn_neutron_public_network_creation_and_validation_on_head_node_with_neutron_service(self):
+        """
+        Algo:
+        0. Create Test-Net,
+        1. Cretae subnetwork who ip is under management network
+        2. Run sync command for cordvtn
+        3. Do GET Rest API and validate creation of network
+        4. Validate network synch with created network in cord-onos
+        """
+        test_net_name = 'vtn_test_9_net_public'
+        test_sub_net_cidr = ["public","10.6.1.192/26",'10.6.1.193']
+        result = self.neutron_network_creation_and_validation(test_net_name)
+        assert_equal(result, True)
+        sub_result = self.neutron_subnet_creation_and_validation(test_net_name,test_sub_net_cidr)
+        if sub_result[0] is True:
+           self.neutron_network_deletion(test_net_name)
+        assert_equal(sub_result[0], True)
+
+    def test_cordvtn_neutron_public_network_creation_and_validation_on_onos(self):
+        """
+        Algo:
+        0. Create Test-Net,
+        1. Cretae subnetwork whoes ip is under management network
+        2. Run sync command for cordvtn
+        3. Do GET Rest API and validate creation of network
+        """
+        test_net_name = 'vtn_test_10_net_public'
+        test_sub_net_cidr = ["public","10.6.1.192/26", '10.6.1.193']
+        result = self.neutron_network_creation_and_validation(test_net_name)
+        assert_equal(result, True)
+        sub_result = self.neutron_subnet_creation_and_validation(test_net_name,test_sub_net_cidr)
+
+        vtn_util = vtn_validation_utils('')
+        url = "http://{0}:8181/onos/cordvtn/serviceNetworks".format(vtn_util.endpoint)
+        auth = ('karaf','karaf')
+
+        resp = requests.get(url=url, auth=auth)
+        data = json.loads(resp.text)
+        for i in range(len(data['ServiceNetworks'])):
+              if data['ServiceNetworks'][i]['name'] == test_net_name:
+                 sub_net_id = self.get_key_value(d=data['ServiceNetworks'][i], key = 'subnet')
+                 if sub_net_id[2] == " ":
+                    print('Sub network is not successful')
+                    self.neutron_network_deletion(test_net_name)
+                    assert_equal(False, True)
+                    break
+                 elif sub_net_id[2] == test_sub_net_cidr[1]:
+                    print('Sub network is successful')
+                    self.neutron_network_deletion(test_net_name)
+                    assert_equal(sub_net_id[0], True)
+                    break
+
+    def test_cordvtn_neutron_public_network_creation_and_post_network_type_as_public_to_onos(self):
+        """
+        Algo:
+        0. Create Test-Net,
+        1. Cretae subnetwork whose ip is under management network
+        2. Run sync command for cordvtn
+        3. Do GET Rest API and validate creation of network
+        4. Pushed the network type as management local to onos
+        5. Verified that onos is having under management network
+        """
+        test_net_name = 'vtn_test_11_net_public'
+        test_sub_net_cidr = ["public","10.6.1.192/26", '10.6.1.193']
+        test_management_type = "public"
+        result = self.neutron_network_creation_and_validation(test_net_name)
+        assert_equal(result, True)
+        sub_result = self.neutron_subnet_creation_and_validation(test_net_name,test_sub_net_cidr)
+
+        vtn_util = vtn_validation_utils('')
+        url = "http://{0}:8181/onos/cordvtn/serviceNetworks".format(vtn_util.endpoint)
+        auth = ('karaf','karaf')
+
+        resp = requests.get(url=url, auth=auth)
+        data = json.loads(resp.text)
+        for i in range(len(data['ServiceNetworks'])):
+              if data['ServiceNetworks'][i]['name'] == test_net_name:
+                 sub_net_id = self.get_key_value(d=data['ServiceNetworks'][i], key = 'subnet')
+                 if sub_net_id[2] == " ":
+                    log.info('Sub network is not successful')
+                    assert_equal(False, True)
+                    break
+                 elif sub_net_id[2] == test_sub_net_cidr[1]:
+                    log.info('Sub network is successful')
+                    assert_equal(sub_net_id[0], True)
+                    break
+
+        net_type_post = self.sub_network_type_post_to_onos(test_net_name, test_management_type)
+        print("Response from onos to change network service type as management local = %s" %net_type_post.text)
+        net_type_json = json.loads(net_type_post.text)
+
+        self.neutron_network_deletion(test_net_name)
+        assert_equal(net_type_json['message'], 'null already exists')
+
+    def test_cordvtn_public_network_creation_with_launching_nova_instance_and_validation_on_head_node_with_nova_service(self):
+
+        """
+        Algo:
+        0. Create Test-Net,
+        1. Cretae subnetwork whose ip is under public network
+        3. Do GET Rest API and validate creation of network
+        4. Create new nova instance under public network
+        5. Validate new nova instance is created on nova service
+        """
+        test_net_name = 'vtn_test_12_net_public'
+        test_sub_net_cidr = ["public","10.6.1.192/26",'10.6.1.193']
+        instance_vm_name = 'vtn_test_12_nova_instance_public_net'
+        image_name = "vsg-1.1"
+        flavor_id = 'm1.small'
+        result = self.neutron_network_creation_and_validation(test_net_name)
+        assert_equal(result, True)
+        neutron_creds = self.get_neutron_credentials()
+        neutron = neutronclient.Client(**neutron_creds)
+        networks = neutron.list_networks(name=test_net_name)
+        network_id = self.get_key_value(d=networks, key = 'id')
+        sub_result = self.neutron_subnet_creation_and_validation(test_net_name,test_sub_net_cidr)
+        assert_equal(sub_result[0], True)
+        creds = self.get_nova_credentials()
+        nova = nova_client.Client('2', **creds)
+        new_instance_details = self.nova_instance_creation_and_validation(test_net_name,nova,instance_vm_name,image_name,flavor_id)
+        self.neutron_network_deletion(test_net_name)
+        self.nova_instance_deletion(nova, new_instance_details)
+        assert_equal(new_instance_details.status, 'ACTIVE')
+
+    def test_cordvtn_neutron_private_network_creation_and_validation_on_head_node_with_neutron_service(self):
+        """
+        Algo:
+        0. Create Test-Net,
+        1. Cretae subnetwork who ip is under private network
+        2. Run sync command for cordvtn
+        3. Do GET Rest API and validate creation of network
+        4. Validate network synch with created network in cord-onos
+        """
+        test_net_name = 'vtn_test_13_net_private'
+        test_sub_net_cidr = ["private","10.160.160.160/24",'10.160.160.1']
+        result = self.neutron_network_creation_and_validation(test_net_name)
+        assert_equal(result, True)
+        sub_result = self.neutron_subnet_creation_and_validation(test_net_name,test_sub_net_cidr)
+        if sub_result[0] is True:
+           self.neutron_network_deletion(test_net_name)
+        assert_equal(sub_result[0], True)
+
+    def test_cordvtn_neutron_private_network_creation_and_validation_on_onos(self):
+        """
+        Algo:
+        0. Create Test-Net,
+        1. Cretae subnetwork whoes ip is under management network
+        2. Run sync command for cordvtn
+        3. Do GET Rest API and validate creation of network
+        """
+        test_net_name = 'vtn_test_14_net_private'
+        test_sub_net_cidr = ["private","10.160.160.160/24", '10.160.160.1']
+        result = self.neutron_network_creation_and_validation(test_net_name)
+        assert_equal(result, True)
+        sub_result = self.neutron_subnet_creation_and_validation(test_net_name,test_sub_net_cidr)
+
+        vtn_util = vtn_validation_utils('')
+        url = "http://{0}:8181/onos/cordvtn/serviceNetworks".format(vtn_util.endpoint)
+        auth = ('karaf','karaf')
+
+        resp = requests.get(url=url, auth=auth)
+        data = json.loads(resp.text)
+        for i in range(len(data['ServiceNetworks'])):
+              if data['ServiceNetworks'][i]['name'] == test_net_name:
+                 sub_net_id = self.get_key_value(d=data['ServiceNetworks'][i], key = 'subnet')
+                 if sub_net_id[2] == " ":
+                    print('Sub network is not successful')
+                    self.neutron_network_deletion(test_net_name)
+                    assert_equal(False, True)
+                    break
+                 elif sub_net_id[2] == '10.160.160.0/24':
+                 #elif sub_net_id[2] == test_sub_net_cidr[1]:
+                    print('Sub network is successful')
+                    assert_equal(sub_net_id[0], True)
+                    break
+
+    def test_cordvtn_neutron_private_network_creation_and_post_network_type_as_private_to_onos(self):
+        """
+        Algo:
+        0. Create Test-Net,
+        1. Cretae subnetwork whose ip is under management network
+        2. Run sync command for cordvtn
+        3. Do GET Rest API and validate creation of network
+        4. Pushed the network type as management local to onos
+        5. Verified that onos is having under management network
+        """
+        test_net_name = 'vtn_test_15_net_private'
+        test_sub_net_cidr = ["private","192.168.160.160/24", '192.168.160.1']
+        test_management_type = "private"
+        result = self.neutron_network_creation_and_validation(test_net_name)
+        assert_equal(result, True)
+        sub_result = self.neutron_subnet_creation_and_validation(test_net_name,test_sub_net_cidr)
+
+        vtn_util = vtn_validation_utils('')
+        url = "http://{0}:8181/onos/cordvtn/serviceNetworks".format(vtn_util.endpoint)
+        auth = ('karaf','karaf')
+
+        resp = requests.get(url=url, auth=auth)
+        data = json.loads(resp.text)
+        for i in range(len(data['ServiceNetworks'])):
+              if data['ServiceNetworks'][i]['name'] == test_net_name:
+                 sub_net_id = self.get_key_value(d=data['ServiceNetworks'][i], key = 'subnet')
+                 if sub_net_id[2] == " ":
+                    log.info('Sub network is not successful')
+                    assert_equal(False, True)
+                    break
+                 elif sub_net_id[2] == "192.168.160.0/24":
+                    log.info('Sub network is successful')
+                    assert_equal(sub_net_id[0], True)
+                    break
+
+        net_type_post = self.sub_network_type_post_to_onos(test_net_name, test_management_type)
+        print("Response from onos to change network service type as management local = %s" %net_type_post.text)
+        net_type_json = json.loads(net_type_post.text)
+
+        self.neutron_network_deletion(test_net_name)
+        assert_equal(net_type_json['message'], 'null already exists')
+
+    def test_cordvtn_private_network_creation_with_launching_nova_instance_and_validation_on_head_node_with_nova_service(self):
+
+        """
+        Algo:
+        0. Create Test-Net,
+        1. Cretae subnetwork whose ip is under private network
+        3. Do GET Rest API and validate creation of network
+        4. Create new nova instance under private network
+        5. Validate new nova instance is created on nova service
+        """
+        test_net_name = 'vtn_test_16_net_private'
+        test_sub_net_cidr = ["private","192.168.160.160/24", '192.168.160.1']
+        instance_vm_name = 'vtn_test_12_nova_instance_private_net'
+        image_name = "vsg-1.1"
+        flavor_id = 'm1.small'
+        result = self.neutron_network_creation_and_validation(test_net_name)
+        assert_equal(result, True)
+        neutron_creds = self.get_neutron_credentials()
+        neutron = neutronclient.Client(**neutron_creds)
+        networks = neutron.list_networks(name=test_net_name)
+        network_id = self.get_key_value(d=networks, key = 'id')
+        sub_result = self.neutron_subnet_creation_and_validation(test_net_name,test_sub_net_cidr)
+        assert_equal(sub_result[0], True)
+        creds = self.get_nova_credentials()
+        nova = nova_client.Client('2', **creds)
+        new_instance_details = self.nova_instance_creation_and_validation(test_net_name,nova,instance_vm_name,image_name,flavor_id)
+        self.neutron_network_deletion(test_net_name)
+        self.nova_instance_deletion(nova, new_instance_details)
+        assert_equal(new_instance_details.status, 'ACTIVE')
+
     def test_cordvtn_with_neutron_network_creation_and_validation_on_head_node_with_neutron_service(self):
         """
         Algo:
@@ -671,7 +1059,7 @@
         result = self.search_value(data, "Net-1")
         assert_equal(result, True)
 
-    def test_cordvtn_neutron_network_delete_and_validation_on_neutron_openstack(self):
+    def test_cordvtn_neutron_network_deletion_and_validation_on_neutron_openstack(self):
 
         """
         Algo: