aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjose.lausuch <jose.lausuch@ericsson.com>2016-01-21 13:58:48 +0100
committerMorgan Richomme <morgan.richomme@orange.com>2016-01-25 10:01:44 +0000
commit621e47bb25db52e0b8cebb4f2bbee3911c6992d3 (patch)
tree4572c8e471a4175b422723d49fde9e0ea373eaf7
parent3e3d42ea84e057234021d02e0987bc6278a00cc5 (diff)
Add support for Promise test cases
JIRA: FUNCTEST-68 Change-Id: I80f8e587e53c7242f8bfa666f2ac450e73c8294f Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com> (cherry picked from commit 76b49b8c1eefcebe69d798157cb7742152a57155)
-rw-r--r--docker/Dockerfile2
-rwxr-xr-xdocker/run_tests.sh3
-rwxr-xr-xtestcases/config_functest.py18
-rw-r--r--testcases/config_functest.yaml15
-rw-r--r--testcases/features/promise.py212
-rw-r--r--testcases/functest_utils.py6
6 files changed, 250 insertions, 6 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 3c5a2a657..45aa05c7b 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -54,6 +54,8 @@ libxml2-dev \
libffi-dev \
crudini \
ruby1.9.1-dev \
+npm \
+nodejs \
--no-install-recommends
diff --git a/docker/run_tests.sh b/docker/run_tests.sh
index d4aadd464..48e3741f8 100755
--- a/docker/run_tests.sh
+++ b/docker/run_tests.sh
@@ -143,7 +143,8 @@ function run_test(){
;;
"promise")
info "Running PROMISE test case..."
- # TODO
+ python ${FUNCTEST_REPO_DIR}/testcases/features/promise.py --debug all ${report}
+ clean_openstack
;;
"doctor")
info "Running Doctor test..."
diff --git a/testcases/config_functest.py b/testcases/config_functest.py
index 70a7d6cd6..12ae647f9 100755
--- a/testcases/config_functest.py
+++ b/testcases/config_functest.py
@@ -124,11 +124,21 @@ def action_start():
script += 'rvm use 1.9.3;'
script += 'bundle install'
+ logger_debug = None
+ CI_DEBUG = os.environ.get("CI_DEBUG")
+ if CI_DEBUG == "true" or CI_DEBUG == "True":
+ logger_debug = logger
+
cmd = "/bin/bash -c '" + script + "'"
- if os.environ.get("CI_DEBUG") == "false":
- functest_utils.execute_command(cmd)
- else:
- functest_utils.execute_command(cmd,logger)
+ functest_utils.execute_command(cmd, logger = logger_debug, exit_on_error=False)
+
+
+ logger.info("Installing dependencies for Promise testcase...")
+ cmd = 'npm install -g yangforge'
+ functest_utils.execute_command(cmd,logger = logger_debug, exit_on_error=False)
+
+ cmd = 'npm install'
+ functest_utils.execute_command(cmd,logger = logger_debug, exit_on_error=False)
# Create result folder under functest if necessary
if not os.path.exists(RALLY_RESULT_DIR):
diff --git a/testcases/config_functest.yaml b/testcases/config_functest.yaml
index 45f324be2..6f257d296 100644
--- a/testcases/config_functest.yaml
+++ b/testcases/config_functest.yaml
@@ -150,6 +150,19 @@ ONOS:
installer_master: '10.20.0.2'
installer_master_username: 'root'
installer_master_password: 'r00tme'
+
+promise:
+ general:
+ tenant_name: promise
+ tenant_description: promise Functionality Testing
+ user_name: promiser
+ user_pwd: test
+ image_name: promise-img
+ flavor_name: promise-flavor
+ flavor_vcpus: 1
+ flavor_ram: 512
+ flavor_disk: 0
+
results:
test_db_url: http://testresults.opnfv.org/testapi
@@ -170,7 +183,7 @@ test_exec_priority:
#11: openstack-neutron-bgpvpn-api-extension-tests
12: vims
13: rally
-
+
########################################################################
# This part lists the dependencies of the tests
diff --git a/testcases/features/promise.py b/testcases/features/promise.py
new file mode 100644
index 000000000..cc7cf0ab8
--- /dev/null
+++ b/testcases/features/promise.py
@@ -0,0 +1,212 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2015 All rights reserved
+# This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Maintainer : jose.lausuch@ericsson.com
+#
+import argparse
+import logging
+import os
+import time
+import sys
+import yaml
+import keystoneclient.v2_0.client as ksclient
+import glanceclient.client as glclient
+import novaclient.client as nvclient
+
+parser = argparse.ArgumentParser()
+
+parser.add_argument("-d", "--debug", help="Debug mode", action="store_true")
+parser.add_argument("-r", "--report",
+ help="Create json result file",
+ action="store_true")
+args = parser.parse_args()
+
+with open('/home/opnfv/functest/conf/config_functest.yaml') as f:
+ functest_yaml = yaml.safe_load(f)
+
+dirs = functest_yaml.get('general').get('directories')
+FUNCTEST_REPO = dirs.get('dir_repo_functest')
+PROMISE_REPO = dirs.get('dir_repo_promise')
+TEST_DB_URL = functest_yaml.get('results').get('test_db_url')
+
+TENANT_NAME = functest_yaml.get('promise').get('general').get('tenant_name')
+TENANT_DESCRIPTION = functest_yaml.get('promise').get(
+ 'general').get('tenant_description')
+USER_NAME = functest_yaml.get('promise').get('general').get('user_name')
+USER_PWD = functest_yaml.get('promise').get('general').get('user_pwd')
+IMAGE_NAME = functest_yaml.get('promise').get('general').get('image_name')
+FLAVOR_NAME = functest_yaml.get('promise').get('general').get('flavor_name')
+FLAVOR_VCPUS = functest_yaml.get('promise').get('general').get('flavor_vcpus')
+FLAVOR_RAM = functest_yaml.get('promise').get('general').get('flavor_ram')
+FLAVOR_DISK = functest_yaml.get('promise').get('general').get('flavor_disk')
+
+
+GLANCE_IMAGE_FILENAME = functest_yaml.get('general'). \
+ get('openstack').get('image_file_name')
+GLANCE_IMAGE_FORMAT = functest_yaml.get('general'). \
+ get('openstack').get('image_disk_format')
+GLANCE_IMAGE_PATH = functest_yaml.get('general'). \
+ get('directories').get('dir_functest_data') + "/" + GLANCE_IMAGE_FILENAME
+
+sys.path.append('%s/testcases' % FUNCTEST_REPO)
+import functest_utils
+
+""" logging configuration """
+logger = logging.getLogger('Promise')
+logger.setLevel(logging.DEBUG)
+
+ch = logging.StreamHandler()
+
+if args.debug:
+ ch.setLevel(logging.DEBUG)
+else:
+ ch.setLevel(logging.INFO)
+
+formatter = logging.Formatter('%(asctime)s - %(name)s'
+ '- %(levelname)s - %(message)s')
+
+ch.setFormatter(formatter)
+logger.addHandler(ch)
+
+
+
+def create_image(glance_client, name):
+
+ return image_id
+
+
+def main():
+ ks_creds = functest_utils.get_credentials("keystone")
+ nv_creds = functest_utils.get_credentials("nova")
+ nt_creds = functest_utils.get_credentials("neutron")
+
+ keystone = ksclient.Client(**ks_creds)
+
+ user_id = functest_utils.get_user_id(keystone, ks_creds['username'])
+ if user_id == '':
+ logger.error("Error : Failed to get id of %s user" %
+ ks_creds['username'])
+ exit(-1)
+
+ logger.info("Creating tenant '%s'..." % TENANT_NAME)
+ tenant_id = functest_utils.create_tenant(
+ keystone, TENANT_NAME, TENANT_DESCRIPTION)
+ if tenant_id == '':
+ logger.error("Error : Failed to create %s tenant" % TENANT_NAME)
+ exit(-1)
+ logger.debug("Tenant '%s' created successfully." % TENANT_NAME)
+
+ roles_name = ["admin", "Admin"]
+ role_id = ''
+ for role_name in roles_name:
+ if role_id == '':
+ role_id = functest_utils.get_role_id(keystone, role_name)
+
+ if role_id == '':
+ logger.error("Error : Failed to get id for %s role" % role_name)
+ exit(-1)
+
+ logger.info("Adding role '%s' to tenant '%s'..." % (role_id,TENANT_NAME))
+ if not functest_utils.add_role_user(keystone, user_id, role_id, tenant_id):
+ logger.error("Error : Failed to add %s on tenant %s" %
+ (ks_creds['username'],TENANT_NAME))
+ exit(-1)
+ logger.debug("Role added successfully.")
+
+ logger.info("Creating user '%s'..." % USER_NAME)
+ user_id = functest_utils.create_user(
+ keystone, USER_NAME, USER_PWD, None, tenant_id)
+
+ if user_id == '':
+ logger.error("Error : Failed to create %s user" % USER_NAME)
+ exit(-1)
+ logger.debug("User '%s' created successfully." % USER_NAME)
+
+ logger.info("Updating OpenStack credentials...")
+ ks_creds.update({
+ "username": TENANT_NAME,
+ "password": TENANT_NAME,
+ "tenant_name": TENANT_NAME,
+ })
+
+ nt_creds.update({
+ "tenant_name": TENANT_NAME,
+ })
+
+ nv_creds.update({
+ "project_id": TENANT_NAME,
+ })
+
+ glance_endpoint = keystone.service_catalog.url_for(service_type='image',
+ endpoint_type='publicURL')
+ glance = glclient.Client(1, glance_endpoint, token=keystone.auth_token)
+ nova = nvclient.Client("2", **nv_creds)
+
+
+ logger.info("Creating image '%s' from '%s'..." % (IMAGE_NAME,
+ GLANCE_IMAGE_PATH))
+ image_id = functest_utils.create_glance_image(glance,
+ IMAGE_NAME,
+ GLANCE_IMAGE_PATH)
+ if not image_id:
+ logger.error("Failed to create the Glance image...")
+ exit(-1)
+ logger.debug("Image '%s' with ID '%s' created successfully." % (IMAGE_NAME,
+ image_id))
+
+ flavor_id = functest_utils.create_flavor(nova,
+ FLAVOR_NAME,
+ FLAVOR_RAM,
+ FLAVOR_DISK,
+ FLAVOR_VCPUS)
+ if not flavor_id:
+ logger.error("Failed to create the Flavor...")
+ exit(-1)
+ logger.debug("Flavor '%s' with ID '%s' created successfully." % (FLAVOR_NAME,
+ flavor_id))
+
+ logger.info("Exporting environment variables...")
+ os.environ["NODE_ENV"] = "functest"
+ os.environ["OS_TENANT_NAME"] = TENANT_NAME
+ os.environ["OS_USERNAME"] = USER_NAME
+ os.environ["OS_PASSWORD"] = USER_PWD
+ os.environ["OS_TEST_IMAGE"] = image_id
+ os.environ["OS_TEST_FLAVOR"] = flavor_id
+
+ cmd = 'DEBUG=1 npm run -s test'
+ start_time_ts = time.time()
+
+ logger.info("Running command: %s" % cmd)
+ os.chdir(PROMISE_REPO)
+ ret = functest_utils.execute_command(cmd, exit_on_error=False)
+
+ end_time_ts = time.time()
+ duration = round(end_time_ts - start_time_ts, 1)
+ test_status = 'Failed'
+ if ret:
+ test_status = 'OK'
+
+ logger.info("Test status: %s" % test_status)
+ details = {
+ 'timestart': start_time_ts,
+ 'duration': duration,
+ 'status': test_status,
+ }
+ pod_name = functest_utils.get_pod_name()
+ git_version = functest_utils.get_git_branch(PROMISE_REPO)
+ #functest_utils.push_results_to_db(TEST_DB_URL,
+ # 'promise',
+ # None,
+ # pod_name,
+ # git_version,
+ # details)
+ #
+
+if __name__ == '__main__':
+ main()
diff --git a/testcases/functest_utils.py b/testcases/functest_utils.py
index 86b474070..ed9e36c89 100644
--- a/testcases/functest_utils.py
+++ b/testcases/functest_utils.py
@@ -88,6 +88,12 @@ def get_instance_by_name(nova_client, instance_name):
except:
return None
+def create_flavor(nova_client, flavor_name, ram, disk, vcpus):
+ try:
+ flavor = nova_client.flavors.create(flavor_name,ram,vcpus,disk)
+ except:
+ return None
+ return flavor.id
def get_flavor_id(nova_client, flavor_name):
flavors = nova_client.flavors.list(detailed=True)