aboutsummaryrefslogtreecommitdiffstats
path: root/functest/opnfv_tests/vnf
diff options
context:
space:
mode:
Diffstat (limited to 'functest/opnfv_tests/vnf')
-rwxr-xr-xfunctest/opnfv_tests/vnf/aaa/aaa.py18
-rw-r--r--functest/opnfv_tests/vnf/ims/clearwater_ims_base.py18
-rw-r--r--functest/opnfv_tests/vnf/ims/cloudify_ims.py13
-rw-r--r--functest/opnfv_tests/vnf/ims/opera_ims.py26
-rwxr-xr-xfunctest/opnfv_tests/vnf/ims/orchestra_ims.py79
-rw-r--r--functest/opnfv_tests/vnf/ims/orchestra_ims.yaml2
-rw-r--r--functest/opnfv_tests/vnf/ims/orchestrator_cloudify.py5
-rw-r--r--functest/opnfv_tests/vnf/rnc/__init__.py0
-rw-r--r--functest/opnfv_tests/vnf/rnc/parser.py26
-rw-r--r--functest/opnfv_tests/vnf/router/vyos_vrouter.py11
10 files changed, 108 insertions, 90 deletions
diff --git a/functest/opnfv_tests/vnf/aaa/aaa.py b/functest/opnfv_tests/vnf/aaa/aaa.py
index bdedcf7c..0030256c 100755
--- a/functest/opnfv_tests/vnf/aaa/aaa.py
+++ b/functest/opnfv_tests/vnf/aaa/aaa.py
@@ -7,21 +7,23 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
+import logging
import sys
import argparse
import functest.core.testcase as testcase
-import functest.core.vnf_base as vnf_base
-import functest.utils.functest_logger as ft_logger
+import functest.core.vnf as vnf
-class AaaVnf(vnf_base.VnfOnBoardingBase):
+class AaaVnf(vnf.VnfOnBoarding):
- logger = ft_logger.Logger("VNF AAA").getLogger()
+ logger = logging.getLogger(__name__)
- def __init__(self):
- super(AaaVnf, self).__init__(case="aaa")
+ def __init__(self, **kwargs):
+ if "case_name" not in kwargs:
+ kwargs["case_name"] = "aaa"
+ super(AaaVnf, self).__init__(**kwargs)
def deploy_orchestrator(self):
self.logger.info("No VNFM needed to deploy a free radius here")
@@ -47,7 +49,7 @@ class AaaVnf(vnf_base.VnfOnBoardingBase):
def main(self, **kwargs):
self.logger.info("AAA VNF onboarding")
self.execute()
- if self.criteria is "PASS":
+ if self.result is "PASS":
return self.EX_OK
else:
return self.EX_RUN_ERROR
@@ -56,7 +58,9 @@ class AaaVnf(vnf_base.VnfOnBoardingBase):
kwargs = {}
return self.main(**kwargs)
+
if __name__ == '__main__':
+ logging.basicConfig()
parser = argparse.ArgumentParser()
args = vars(parser.parse_args())
aaa_vnf = AaaVnf()
diff --git a/functest/opnfv_tests/vnf/ims/clearwater_ims_base.py b/functest/opnfv_tests/vnf/ims/clearwater_ims_base.py
index f21ce3f9..42d31e3b 100644
--- a/functest/opnfv_tests/vnf/ims/clearwater_ims_base.py
+++ b/functest/opnfv_tests/vnf/ims/clearwater_ims_base.py
@@ -7,26 +7,25 @@
#
# http://www.apache.org/licenses/LICENSE-2.0
import json
+import logging
import os
import shutil
import requests
-import functest.core.vnf_base as vnf_base
+import functest.core.vnf as vnf
from functest.utils.constants import CONST
-import functest.utils.functest_logger as ft_logger
import functest.utils.functest_utils as ft_utils
-class ClearwaterOnBoardingBase(vnf_base.VnfOnBoardingBase):
+class ClearwaterOnBoardingBase(vnf.VnfOnBoarding):
- def __init__(self, project='functest', case='', repo='', cmd=''):
- self.logger = ft_logger.Logger(__name__).getLogger()
- super(ClearwaterOnBoardingBase, self).__init__(
- project, case, repo, cmd)
+ def __init__(self, **kwargs):
+ self.logger = logging.getLogger(__name__)
+ super(ClearwaterOnBoardingBase, self).__init__(**kwargs)
self.case_dir = os.path.join(CONST.dir_functest_test, 'vnf', 'ims')
self.data_dir = CONST.dir_ims_data
- self.result_dir = os.path.join(CONST.dir_results, case)
+ self.result_dir = os.path.join(CONST.dir_results, self.case_name)
self.test_dir = CONST.dir_repo_vims_test
if not os.path.exists(self.data_dir):
@@ -46,8 +45,7 @@ class ClearwaterOnBoardingBase(vnf_base.VnfOnBoardingBase):
rq = requests.post(account_url, data=params)
output_dict['login'] = params
if rq.status_code != 201 and rq.status_code != 409:
- raise Exception("Unable to create an account for number"
- " provision: %s" % rq.json()['reason'])
+ raise Exception("Unable to create an account for number provision")
self.logger.info('Account is created on Ellis: %s', params)
session_url = 'http://{0}/session'.format(ellis_ip)
diff --git a/functest/opnfv_tests/vnf/ims/cloudify_ims.py b/functest/opnfv_tests/vnf/ims/cloudify_ims.py
index 404f208e..ba4c5790 100644
--- a/functest/opnfv_tests/vnf/ims/cloudify_ims.py
+++ b/functest/opnfv_tests/vnf/ims/cloudify_ims.py
@@ -7,6 +7,7 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
+import logging
import os
import sys
import time
@@ -18,17 +19,17 @@ from functest.opnfv_tests.vnf.ims.clearwater import Clearwater
import functest.opnfv_tests.vnf.ims.clearwater_ims_base as clearwater_ims_base
from functest.opnfv_tests.vnf.ims.orchestrator_cloudify import Orchestrator
from functest.utils.constants import CONST
-import functest.utils.functest_logger as ft_logger
import functest.utils.functest_utils as ft_utils
import functest.utils.openstack_utils as os_utils
class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase):
- def __init__(self, project='functest', case='cloudify_ims',
- repo='', cmd=''):
- super(CloudifyIms, self).__init__(project, case, repo, cmd)
- self.logger = ft_logger.Logger(__name__).getLogger()
+ def __init__(self, **kwargs):
+ if "case_name" not in kwargs:
+ kwargs["case_name"] = "cloudify_ims"
+ super(CloudifyIms, self).__init__(**kwargs)
+ self.logger = logging.getLogger(__name__)
# Retrieve the configuration
try:
@@ -276,7 +277,7 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase):
self.logger.info("Cloudify IMS VNF onboarding test starting")
self.execute()
self.logger.info("Cloudify IMS VNF onboarding test executed")
- if self.criteria is "PASS":
+ if self.result is "PASS":
return self.EX_OK
else:
return self.EX_RUN_ERROR
diff --git a/functest/opnfv_tests/vnf/ims/opera_ims.py b/functest/opnfv_tests/vnf/ims/opera_ims.py
index d022b3c7..8c33d16e 100644
--- a/functest/opnfv_tests/vnf/ims/opera_ims.py
+++ b/functest/opnfv_tests/vnf/ims/opera_ims.py
@@ -8,6 +8,7 @@
# http://www.apache.org/licenses/LICENSE-2.0
import json
+import logging
import os
import time
@@ -15,16 +16,15 @@ from opera import openo_connect
import requests
import functest.opnfv_tests.vnf.ims.clearwater_ims_base as clearwater_ims_base
-from functest.utils.constants import CONST
-import functest.utils.functest_logger as ft_logger
class OperaIms(clearwater_ims_base.ClearwaterOnBoardingBase):
- def __init__(self, project='functest', case='opera_ims',
- repo=CONST.dir_repo_opera, cmd=''):
- super(OperaIms, self).__init__(project, case, repo, cmd)
- self.logger = ft_logger.Logger(__name__).getLogger()
+ def __init__(self, **kwargs):
+ if "case_name" not in kwargs:
+ kwargs["case_name"] = "opera_ims"
+ super(OperaIms, self).__init__(**kwargs)
+ self.logger = logging.getLogger(__name__)
self.ellis_file = os.path.join(self.result_dir, 'ellis.info')
self.live_test_file = os.path.join(self.result_dir,
'live_test_report.json')
@@ -64,27 +64,27 @@ class OperaIms(clearwater_ims_base.ClearwaterOnBoardingBase):
self.logger.info('VNFM IP: %s', vnfm_ip)
vnf_status_url = 'http://{0}:5000/api/v1/model/status'.format(vnfm_ip)
vnf_alive = False
- retry = 15
+ retry = 40
self.logger.info('Check the VNF status')
while retry > 0:
- rq = requests.get(vnf_status_url)
+ rq = requests.get(vnf_status_url, timeout=90)
response = rq.json()
vnf_alive = response['vnf_alive']
msg = response['msg']
self.logger.info(msg)
if vnf_alive:
break
- self.logger.info('check again in one minute...')
+ self.logger.info('check again in one and half a minute...')
retry = retry - 1
- time.sleep(60)
+ time.sleep(90)
if not vnf_alive:
raise Exception('VNF failed to start: {0}'.format(msg))
ellis_config_url = ('http://{0}:5000/api/v1/model/ellis/configure'
.format(vnfm_ip))
- rq = requests.get(ellis_config_url, timeout=60)
+ rq = requests.get(ellis_config_url, timeout=90)
if rq.json() and not rq.json()['ellis_ok']:
self.logger.error(rq.json()['data'])
raise Exception('Failed to configure Ellis')
@@ -92,7 +92,7 @@ class OperaIms(clearwater_ims_base.ClearwaterOnBoardingBase):
self.logger.info('Get Clearwater deployment detail')
vnf_info_url = ('http://{0}:5000/api/v1/model/output'
.format(vnfm_ip))
- rq = requests.get(vnf_info_url, timeout=60)
+ rq = requests.get(vnf_info_url, timeout=90)
data = rq.json()['data']
self.logger.info(data)
bono_ip = data['bono_ip']
@@ -119,7 +119,7 @@ class OperaIms(clearwater_ims_base.ClearwaterOnBoardingBase):
self.logger.info("Start to run Opera vIMS VNF onboarding test")
self.execute()
self.logger.info("Opera vIMS VNF onboarding test finished")
- if self.criteria is "PASS":
+ if self.result is "PASS":
return self.EX_OK
else:
return self.EX_RUN_ERROR
diff --git a/functest/opnfv_tests/vnf/ims/orchestra_ims.py b/functest/opnfv_tests/vnf/ims/orchestra_ims.py
index 5c19be09..6f341970 100755
--- a/functest/opnfv_tests/vnf/ims/orchestra_ims.py
+++ b/functest/opnfv_tests/vnf/ims/orchestra_ims.py
@@ -8,16 +8,16 @@
# http://www.apache.org/licenses/LICENSE-2.0
import json
+import logging
+import os
import socket
import sys
import time
import yaml
-import functest.core.vnf_base as vnf_base
-import functest.utils.functest_logger as ft_logger
+import functest.core.vnf as vnf
import functest.utils.functest_utils as ft_utils
import functest.utils.openstack_utils as os_utils
-import os
from functest.utils.constants import CONST
from org.openbaton.cli.agents.agents import MainAgent
@@ -76,18 +76,18 @@ def servertest(host, port):
return True
-class ImsVnf(vnf_base.VnfOnBoardingBase):
+class ImsVnf(vnf.VnfOnBoarding):
- def __init__(self, project='functest', case='orchestra_ims',
+ def __init__(self, project='functest', case_name='orchestra_ims',
repo='', cmd=''):
- super(ImsVnf, self).__init__(project, case, repo, cmd)
+ super(ImsVnf, self).__init__(project, case_name, repo, cmd)
self.ob_password = "openbaton"
self.ob_username = "admin"
self.ob_https = False
self.ob_port = "8080"
self.ob_ip = "localhost"
self.ob_instance_id = ""
- self.logger = ft_logger.Logger("orchestra_ims").getLogger()
+ self.logger = logging.getLogger(__name__)
self.case_dir = os.path.join(CONST.dir_functest_test, 'vnf/ims/')
self.data_dir = CONST.dir_ims_data
self.test_dir = CONST.dir_repo_vims_test
@@ -103,7 +103,7 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
try:
self.config = CONST.__getattribute__(
'vnf_{}_config'.format(self.case_name))
- except:
+ except BaseException:
raise Exception("Orchestra VNF config file not found")
config_file = self.case_dir + self.config
self.imagename = get_config("openbaton.imagename", config_file)
@@ -115,6 +115,8 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
config_file)
self.images = get_config("tenant_images", config_file)
self.ims_conf = get_config("vIMS", config_file)
+ self.userdata_file = get_config("openbaton.userdata.file",
+ config_file)
def deploy_orchestrator(self, **kwargs):
self.logger.info("Additional pre-configuration steps")
@@ -132,7 +134,7 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
image_id = os_utils.get_image_id(glance_client,
image_name)
self.logger.info("image_id: %s" % image_id)
- except:
+ except BaseException:
self.logger.error("Unexpected error: %s" % sys.exc_info()[0])
if image_id == '':
@@ -153,7 +155,8 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
"192.168.100.0/24")
# orchestrator VM flavor
- self.logger.info("Check if Flavor is available, if not create one")
+ self.logger.info(
+ "Check if orchestra Flavor is available, if not create one")
flavor_exist, flavor_id = os_utils.get_or_create_flavor(
"orchestra",
"4096",
@@ -210,8 +213,13 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
bootstrap = "sh ./bootstrap release -configFile=./config_file"
userdata += bootstrap + "\n"
userdata += "echo \"Setting 'nfvo.plugin.timeout' to '300000'\"\n"
- userdata += ("echo \"nfvo.plugin.timeout=300000\" >> "
+ userdata += ("echo \"nfvo.plugin.timeout=600000\" >> "
"/etc/openbaton/openbaton-nfvo.properties\n")
+ userdata += (
+ "wget %s -O /etc/openbaton/openbaton-vnfm-generic-user-data.sh\n" %
+ self.userdata_file)
+ userdata += "sed -i '113i\ \ \ \ sleep 60' " \
+ "/etc/openbaton/openbaton-vnfm-generic-user-data.sh\n"
userdata += "echo \"Starting NFVO\"\n"
userdata += "service openbaton-nfvo restart\n"
userdata += "echo \"Starting Generic VNFM\"\n"
@@ -283,7 +291,10 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
self.ob_username = "admin"
self.ob_https = False
self.ob_port = "8080"
-
+ self.logger.info("Waiting for all components up and running...")
+ time.sleep(60)
+ self.details["orchestrator"] = {
+ 'status': "PASS", 'result': "Deploy Open Baton NFVO: OK"}
self.logger.info("Deploy Open Baton NFVO: OK")
def deploy_vnf(self):
@@ -296,6 +307,16 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
username=self.ob_username,
password=self.ob_password)
+ self.logger.info(
+ "Check if openims Flavor is available, if not create one")
+ flavor_exist, flavor_id = os_utils.get_or_create_flavor(
+ "m1.small",
+ "2048",
+ '20',
+ '1',
+ public=True)
+ self.logger.debug("Flavor id: %s" % flavor_id)
+
self.logger.info("Getting project 'default'...")
project_agent = self.main_agent.get_agent("project", self.ob_projectid)
for p in json.loads(project_agent.find()):
@@ -311,9 +332,16 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
creds = os_utils.get_credentials()
self.logger.info("PoP creds: %s" % creds)
- project_id = os_utils.get_tenant_id(
- os_utils.get_keystone_client(),
- creds.get("project_name"))
+ if os_utils.is_keystone_v3():
+ self.logger.info(
+ "Using v3 API of OpenStack... -> Using OS_PROJECT_ID")
+ project_id = os_utils.get_tenant_id(
+ os_utils.get_keystone_client(),
+ creds.get("project_name"))
+ else:
+ self.logger.info(
+ "Using v2 API of OpenStack... -> Using OS_TENANT_NAME")
+ project_id = creds.get("tenant_name")
self.logger.debug("project id: %s" % project_id)
@@ -381,16 +409,17 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
self.nsr = json.loads(nsr_agent.find(self.nsr.get('id')))
if self.nsr.get("status") == 'ACTIVE':
- deploy_vnf = {'status': "PASS", 'result': self.nsr}
+ self.details["vnf"] = {'status': "PASS", 'result': self.nsr}
self.logger.info("Deploy VNF: OK")
else:
- deploy_vnf = {'status': "FAIL", 'result': self.nsr}
+ self.details["vnf"] = {'status': "FAIL", 'result': self.nsr}
+ self.logger.error(self.nsr)
self.step_failure("Deploy VNF: ERROR")
self.ob_nsr_id = self.nsr.get("id")
self.logger.info(
"Sleep for 60s to ensure that all services are up and running...")
time.sleep(60)
- return deploy_vnf
+ return self.details.get("vnf")
def test_vnf(self):
# Adaptations probably needed
@@ -427,9 +456,18 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
"VNFC instance %s is not reachable "
"at %s:%s" % (vnfci.get('hostname'),
floatingIp.get('ip'), port))
+ self.details["test_vnf"] = {
+ 'status': "FAIL", 'result': (
+ "Port %s of server %s -> %s is "
+ "not reachable" %
+ (port, vnfci.get('hostname'),
+ floatingIp.get('ip')))}
self.step_failure("Test VNF: ERROR")
+ self.details["test_vnf"] = {
+ 'status': "PASS",
+ 'result': "All tests have been executed successfully"}
self.logger.info("Test VNF: OK")
- return
+ return self.details.get('test_vnf')
def clean(self):
self.main_agent.get_agent(
@@ -446,7 +484,7 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
self.logger.info("Orchestra IMS VNF onboarding test starting")
self.execute()
self.logger.info("Orchestra IMS VNF onboarding test executed")
- if self.criteria is "PASS":
+ if self.result is "PASS":
return self.EX_OK
else:
return self.EX_RUN_ERROR
@@ -457,6 +495,7 @@ class ImsVnf(vnf_base.VnfOnBoardingBase):
if __name__ == '__main__':
+ logging.basicConfig()
test = ImsVnf()
test.deploy_orchestrator()
test.deploy_vnf()
diff --git a/functest/opnfv_tests/vnf/ims/orchestra_ims.yaml b/functest/opnfv_tests/vnf/ims/orchestra_ims.yaml
index 5923a775..5b25d3c9 100644
--- a/functest/opnfv_tests/vnf/ims/orchestra_ims.yaml
+++ b/functest/opnfv_tests/vnf/ims/orchestra_ims.yaml
@@ -4,6 +4,8 @@ tenant_images:
openbaton:
bootstrap_link: http://get.openbaton.org/bootstraps/bootstrap_3.2.0_opnfv/bootstrap
bootstrap_config_link: http://get.openbaton.org/bootstraps/bootstrap_3.2.0_opnfv/bootstrap-config-file
+ userdata:
+ file: https://raw.githubusercontent.com/openbaton/generic-vnfm/3.2.0/src/main/resources/user-data.sh
marketplace_link: http://marketplace.openbaton.org:8082/api/v1/nsds/fokus/OpenImsCore/3.2.0/json
imagename: ubuntu_14.04
vIMS:
diff --git a/functest/opnfv_tests/vnf/ims/orchestrator_cloudify.py b/functest/opnfv_tests/vnf/ims/orchestrator_cloudify.py
index 82a9dca0..4ceeb25f 100644
--- a/functest/opnfv_tests/vnf/ims/orchestrator_cloudify.py
+++ b/functest/opnfv_tests/vnf/ims/orchestrator_cloudify.py
@@ -11,6 +11,7 @@
# http://www.apache.org/licenses/LICENSE-2.0
########################################################################
+import logging
import os
import shutil
import subprocess32 as subprocess
@@ -18,8 +19,6 @@ import yaml
from git import Repo
-import functest.utils.functest_logger as ft_logger
-
class Orchestrator(object):
@@ -29,7 +28,7 @@ class Orchestrator(object):
self.input_file = 'inputs.yaml'
self.manager_blueprint = False
self.config = inputs
- self.logger = ft_logger.Logger("Orchestrator").getLogger()
+ self.logger = logging.getLogger(__name__)
self.manager_up = False
def set_credentials(self, username, password, tenant_name, auth_url):
diff --git a/functest/opnfv_tests/vnf/rnc/__init__.py b/functest/opnfv_tests/vnf/rnc/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/functest/opnfv_tests/vnf/rnc/__init__.py
+++ /dev/null
diff --git a/functest/opnfv_tests/vnf/rnc/parser.py b/functest/opnfv_tests/vnf/rnc/parser.py
deleted file mode 100644
index 133145d7..00000000
--- a/functest/opnfv_tests/vnf/rnc/parser.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright 2016 ZTE Corporation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import functest.core.feature as base
-
-
-class Parser(base.Feature):
- def __init__(self):
- super(Parser, self).__init__(project='parser',
- case='parser-basics',
- repo='dir_repo_parser')
- self.cmd = 'cd %s/tests && ./functest_run.sh' % self.repo
diff --git a/functest/opnfv_tests/vnf/router/vyos_vrouter.py b/functest/opnfv_tests/vnf/router/vyos_vrouter.py
index e188c3fb..5654278d 100644
--- a/functest/opnfv_tests/vnf/router/vyos_vrouter.py
+++ b/functest/opnfv_tests/vnf/router/vyos_vrouter.py
@@ -14,10 +14,11 @@ RESULT_DETAILS_FILE = "test_result.json"
class VrouterVnf(base.Feature):
- def __init__(self):
- super(VrouterVnf, self).__init__(project='functest',
- case='vyos_vrouter',
- repo='dir_repo_vrouter')
+ def __init__(self, **kwargs):
+ kwargs["repo"] = 'dir_repo_vrouter'
+ if "case_name" not in kwargs:
+ kwargs["case_name"] = "vyos_vrouter"
+ super(VrouterVnf, self).__init__(**kwargs)
self.cmd = 'cd %s && ./run.sh' % self.repo
def set_result_details(self):
@@ -28,6 +29,6 @@ class VrouterVnf(base.Feature):
f.close()
def log_results(self):
- if self.criteria == 'PASS':
+ if self.result == 'PASS':
self.set_result_details()
super(VrouterVnf, self).log_results()