update link to upper-constraints.txt
[integration.git] / test / vcpe / soutils.py
index 3749689..9565631 100755 (executable)
@@ -1,4 +1,4 @@
-#! /usr/bin/python
+#!/usr/bin/env python
 
 import sys
 import logging
@@ -9,7 +9,7 @@ import progressbar
 import time
 import csar_parser
 import preload
-from vcpecommon import *
+from vcpecommon import * # pylint: disable=W0614
 
 
 class SoUtils:
@@ -23,8 +23,9 @@ class SoUtils:
         self.vcpecommon = vcpecommon
         if api_version not in self.vcpecommon.so_req_api_url:
             self.logger.error('Incorrect SO API version: %s', api_version)
-            sys.exit()
+            sys.exit(1)
         self.service_req_api_url = self.vcpecommon.so_req_api_url[api_version]
+        self.testApi = 'VNF_API'
 
     def submit_create_req(self, req_json, req_type, service_instance_id=None, vnf_instance_id=None):
         """
@@ -119,11 +120,16 @@ class SoUtils:
 
     def generate_vnf_or_network_request(self, req_type, instance_name, vnf_or_network_model, service_instance_id,
                                         service_model):
+        if self.vcpecommon.gra_api_flag:
+            self.testApi = 'GR_API'
         req_details = {
             'modelInfo':  vnf_or_network_model,
             'cloudConfiguration': {"lcpCloudRegionId": self.vcpecommon.os_region_name,
                                    "tenantId": self.vcpecommon.os_tenant_id},
-            'requestParameters':  {"userParams": []},
+            'requestParameters':  {
+                "userParams": [],
+                "testApi": self.testApi
+                },
             'platform': {"platformName": "Platform-Demonstration"}
         }
         self.add_req_info(req_details, instance_name, self.vcpecommon.product_family_id)
@@ -132,11 +138,16 @@ class SoUtils:
 
     def generate_vfmodule_request(self, instance_name, vfmodule_model, service_instance_id,
                                         service_model, vnf_instance_id, vnf_model):
+        if self.vcpecommon.gra_api_flag:
+            self.testApi = 'GR_API'
         req_details = {
             'modelInfo':  vfmodule_model,
             'cloudConfiguration': {"lcpCloudRegionId": self.vcpecommon.os_region_name,
                                    "tenantId": self.vcpecommon.os_tenant_id},
-            'requestParameters': {"usePreload": 'true'}
+            'requestParameters': {
+                "usePreload": 'true',
+                "testApi": self.testApi
+                }
         }
         self.add_req_info(req_details, instance_name, self.vcpecommon.product_family_id)
         self.add_related_instance(req_details, service_instance_id, service_model)
@@ -144,18 +155,25 @@ class SoUtils:
         return {'requestDetails': req_details}
 
     def generate_service_request(self, instance_name, model):
+        if self.vcpecommon.gra_api_flag:
+            self.testApi = 'GR_API'
+
+        self.logger.info('testApi' + self.testApi)
+
         req_details = {
             'modelInfo':  model,
             'subscriberInfo':  {'globalSubscriberId': self.vcpecommon.global_subscriber_id},
             'requestParameters': {
                 "userParams": [],
                 "subscriptionServiceType": "vCPE",
-                "aLaCarte": 'true'
+                "aLaCarte": 'true',
+                "testApi": self.testApi
             }
         }
         self.add_req_info(req_details, instance_name)
         self.add_project_info(req_details)
         self.add_owning_entity(req_details)
+        self.logger.info(json.dumps(req_details, indent=2, sort_keys=True))
         return {'requestDetails': req_details}
 
     def add_project_info(self, req_details):
@@ -165,9 +183,11 @@ class SoUtils:
         req_details['owningEntity'] = {'owningEntityId': self.vcpecommon.owning_entity_id,
                                        'owningEntityName': self.vcpecommon.owning_entity_name}
 
-    def generate_custom_service_request(self, instance_name, model, brg_mac):
+    def generate_custom_service_request(self, instance_name, svc_model,
+                                        vfmodule_models, brg_mac):
+        brg_mac_enc = brg_mac.replace(':', '-')
         req_details = {
-            'modelInfo':  model,
+            'modelInfo':  svc_model,
             'subscriberInfo':  {'subscriberName': 'Kaneohe',
                                 'globalSubscriberId': self.vcpecommon.global_subscriber_id},
             'cloudConfiguration': {"lcpCloudRegionId": 'RegionOne', #self.vcpecommon.os_region_name,
@@ -177,8 +197,16 @@ class SoUtils:
                     {
                         'name': 'BRG_WAN_MAC_Address',
                         'value': brg_mac
-                    }
-                     ,
+                    },
+                    {
+                       'name': 'VfModuleNames',
+                       'value': [
+                            {
+                                'VfModuleModelInvariantUuid': vfmodule_models[0]['modelInvariantId'],
+                                'VfModuleName': 'VGW2BRG-{0}'.format(brg_mac_enc)
+                            }
+                       ]
+                    },
                     {
                          "name": "Customer_Location",
                          "value": self.vcpecommon.customer_location_used_by_oof
@@ -208,12 +236,13 @@ class SoUtils:
 
         # create service
         instance_name = '_'.join([self.vcpecommon.instance_name_prefix['service'],
-                                  parser.svc_model['modelName'], name_suffix])
+                                  parser.svc_model['modelName'][0:10], name_suffix])
         instance_name = instance_name.lower()
-        req = self.generate_custom_service_request(instance_name, parser.svc_model, brg_mac)
+        req = self.generate_custom_service_request(instance_name, parser.svc_model,
+                                                   parser.vfmodule_models, brg_mac)
         self.logger.info(json.dumps(req, indent=2, sort_keys=True))
         self.logger.info('Creating custom service {0}.'.format(instance_name))
-        req_id, svc_instance_id = self.submit_create_req(req, 'service')
+        req_id, svc_instance_id = self.submit_create_req(req, 'service') # pylint: disable=W0612
         if not self.check_progress(req_id, 140):
             return False
         return True
@@ -231,7 +260,7 @@ class SoUtils:
 
         self.logger.error("AAI traversal didn't finish in 30 seconds. Something is wrong. Type {0}, UUID {1}".format(
             node_type, uuid))
-        sys.exit()
+        sys.exit(1)
 
     def create_entire_service(self, csar_file, vnf_template_file, preload_dict, name_suffix, heatbridge=False):
         """
@@ -272,14 +301,14 @@ class SoUtils:
             req = self.generate_vnf_or_network_request('network', network_name, model, svc_instance_id,
                                                        parser.svc_model)
             self.logger.debug(json.dumps(req, indent=2, sort_keys=True))
-            req_id, net_instance_id = self.submit_create_req(req, 'network', svc_instance_id)
+            req_id, net_instance_id = self.submit_create_req(req, 'network', svc_instance_id) # pylint: disable=W0612
             if not self.check_progress(req_id, eta=20):
                 return None
 
             self.logger.info('Changing subnet name to ' + self.vcpecommon.network_name_to_subnet_name(network_name))
             self.vcpecommon.set_network_name(network_name)
             subnet_name_changed = False
-            for i in range(20):
+            for i in range(20): # pylint: disable=W0612
                 time.sleep(3)
                 if self.vcpecommon.set_subnet_name(network_name):
                     subnet_name_changed = True
@@ -310,17 +339,21 @@ class SoUtils:
             # wait for AAI to complete traversal
             if not vnf_instance_id:
                 self.logger.error('No VNF instance ID returned!')
-                sys.exit()
+                sys.exit(1)
             self.wait_for_aai('vnf', vnf_instance_id)
 
         preloader = preload.Preload(self.vcpecommon)
-        preloader.preload_vfmodule(vnf_template_file, svc_instance_id, parser.vnf_models[0], parser.vfmodule_models[0],
-                                   preload_dict, name_suffix)
+        if self.vcpecommon.gra_api_flag:
+            preloader.preload_vfmodule(vnf_template_file, svc_instance_id, parser.vnf_models[0], parser.vfmodule_models[0],
+                                       preload_dict, name_suffix, True)
+        else:
+            preloader.preload_vfmodule(vnf_template_file, svc_instance_id, parser.vnf_models[0], parser.vfmodule_models[0],
+                                       preload_dict, name_suffix, False)
         # create VF Module
         if len(parser.vfmodule_models) == 1:
             if not vnf_instance_id or not vnf_model:
                 self.logger.error('Invalid VNF instance ID or VNF model!')
-                sys.exit()
+                sys.exit(1)
 
             model = parser.vfmodule_models[0]
             vfmodule_instance_name = '_'.join([self.vcpecommon.instance_name_prefix['vfmodule'],
@@ -330,14 +363,14 @@ class SoUtils:
             req = self.generate_vfmodule_request(vfmodule_instance_name, model, svc_instance_id, parser.svc_model,
                                                  vnf_instance_id, vnf_model)
             self.logger.debug(json.dumps(req, indent=2, sort_keys=True))
-            req_id, vfmodule_instance_id = self.submit_create_req(req, 'vfmodule', svc_instance_id, vnf_instance_id)
-            if not self.check_progress(req_id, eta=70, interval=5):
+            req_id, vfmodule_instance_id = self.submit_create_req(req, 'vfmodule', svc_instance_id, vnf_instance_id) # pylint: disable=W0612
+            if not self.check_progress(req_id, eta=70, interval=50):
                 self.logger.error('Failed to create VF Module {0}.'.format(vfmodule_instance_name))
                 return None
 
         # run heatbridge
         if heatbridge:
-            self.vcpecommon.headbridge(vfmodule_instance_name, svc_instance_id)
+            self.vcpecommon.heatbridge(vfmodule_instance_name, svc_instance_id)
             self.vcpecommon.save_vgmux_vnf_name(vnf_instance_name)
 
         return svc_instance_id