aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ci/config_functest.yaml1
-rwxr-xr-xci/exec_test.sh6
-rw-r--r--ci/testcases.yaml9
-rw-r--r--docker/Dockerfile3
-rwxr-xr-xtestcases/OpenStack/rally/run_rally-cert.py4
-rwxr-xr-xtestcases/features/copper.py80
-rw-r--r--testcases/features/doctor.py6
-rwxr-xr-xtestcases/features/sfc/tacker_client_install.sh43
-rw-r--r--utils/openstack_utils.py27
9 files changed, 167 insertions, 12 deletions
diff --git a/ci/config_functest.yaml b/ci/config_functest.yaml
index 5623a71c1..cc5c82aca 100644
--- a/ci/config_functest.yaml
+++ b/ci/config_functest.yaml
@@ -20,6 +20,7 @@ general:
dir_repo_onos: /home/opnfv/repos/onos
dir_repo_promise: /home/opnfv/repos/promise
dir_repo_doctor: /home/opnfv/repos/doctor
+ dir_repo_copper: /home/opnfv/repos/copper
dir_repo_ovno: /home/opnfv/repos/ovno
dir_functest: /home/opnfv/functest
dir_results: /home/opnfv/functest/results
diff --git a/ci/exec_test.sh b/ci/exec_test.sh
index c0bdf96bf..519ade4b6 100755
--- a/ci/exec_test.sh
+++ b/ci/exec_test.sh
@@ -122,8 +122,7 @@ function run_test(){
sleep 10 # to let the instances terminate
;;
"doctor")
- # Comment Doctor until Green light from Doctor team
- # python ${FUNCTEST_REPO_DIR}/testcases/features/doctor.py
+ python ${FUNCTEST_REPO_DIR}/testcases/features/doctor.py
;;
"ovno")
# suite under rewritting for colorado
@@ -135,6 +134,9 @@ function run_test(){
source ${FUNCTEST_CONF_DIR}/stackrc
python ${FUNCTEST_REPO_DIR}/testcases/security_scan/security_scan.py --config ${FUNCTEST_REPO_DIR}/testcases/security_scan/config.ini
;;
+ "copper")
+ python ${FUNCTEST_REPO_DIR}/testcases/features/copper.py
+ ;;
*)
echo "The test case '${test_name}' does not exist."
exit 1
diff --git a/ci/testcases.yaml b/ci/testcases.yaml
index cfd93e4fd..491ddad90 100644
--- a/ci/testcases.yaml
+++ b/ci/testcases.yaml
@@ -142,6 +142,15 @@ tiers:
installer: 'apex'
scenario: ''
+ -
+ name: copper
+ criteria: 'status == "PASS"'
+ description: >-
+ Test suite for policy management based on OpenStack Congress
+ dependencies:
+ installer: 'apex'
+ scenario: ''
+
-
name: openstack
order: 4
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 30d2a7a15..611f75bfe 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -92,6 +92,9 @@ ADD http://205.177.226.237:9999/onosfw/firewall_block_image.img /home/opnfv/func
RUN gpg --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
RUN curl -L https://get.rvm.io | bash -s stable
+RUN /bin/bash -c ". /home/opnfv/repos/functest/testcases/features/sfc/tacker_client_install.sh"
+RUN cd ${repos_dir}/bgpvpn && pip install .
+
RUN /bin/bash -c ". /etc/profile.d/rvm.sh \
&& cd /home/opnfv/repos/vims-test \
&& rvm autolibs enable"
diff --git a/testcases/OpenStack/rally/run_rally-cert.py b/testcases/OpenStack/rally/run_rally-cert.py
index 783932249..47b826d6c 100755
--- a/testcases/OpenStack/rally/run_rally-cert.py
+++ b/testcases/OpenStack/rally/run_rally-cert.py
@@ -530,10 +530,10 @@ def main():
# logger.info("Results: "+str(json_results))
# Evaluation of the success criteria
- status = "failed"
+ status = "FAIL"
# for Rally we decided that the overall success rate must be above 90%
if total_success >= 90:
- status = "passed"
+ status = "PASS"
if args.sanity:
case_name = "rally_sanity"
diff --git a/testcases/features/copper.py b/testcases/features/copper.py
new file mode 100755
index 000000000..54136a877
--- /dev/null
+++ b/testcases/features/copper.py
@@ -0,0 +1,80 @@
+#!/usr/bin/python
+#
+# Copyright 2016 AT&T Intellectual Property, Inc
+#
+# 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 os
+import time
+import yaml
+
+import functest.utils.functest_logger as ft_logger
+import functest.utils.functest_utils as functest_utils
+
+with open(os.environ["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')
+COPPER_REPO = dirs.get('dir_repo_copper')
+TEST_DB_URL = functest_yaml.get('results').get('test_db_url')
+
+logger = ft_logger.Logger("copper").getLogger()
+
+
+def main():
+ cmd = ('%s/tests/run.sh' % COPPER_REPO)
+ start_time = time.time()
+
+ ret = functest_utils.execute_command(cmd, logger, exit_on_error=False)
+
+ stop_time = time.time()
+ duration = round(stop_time - start_time, 1)
+ if ret == 0:
+ logger.info("COPPER PASSED")
+ test_status = 'PASS'
+ else:
+ logger.info("COPPER FAILED")
+ test_status = 'FAIL'
+
+ details = {
+ 'timestart': start_time,
+ 'duration': duration,
+ 'status': test_status,
+ }
+ pod_name = functest_utils.get_pod_name(logger)
+ scenario = functest_utils.get_scenario(logger)
+ version = functest_utils.get_version(logger)
+ build_tag = functest_utils.get_build_tag(logger)
+
+ logger.info("Pushing COPPER results: TEST_DB_URL=%(db)s pod_name=%(pod)s "
+ "version=%(v)s scenario=%(s)s criteria=%(c)s details=%(d)s" % {
+ 'db': TEST_DB_URL,
+ 'pod': pod_name,
+ 'v': version,
+ 's': scenario,
+ 'c': details['status'],
+ 'b': build_tag,
+ 'd': details,
+ })
+ functest_utils.push_results_to_db("COPPER",
+ "COPPER-notification",
+ logger,
+ start_time,
+ stop_time,
+ details['status'],
+ details)
+
+if __name__ == '__main__':
+ main()
diff --git a/testcases/features/doctor.py b/testcases/features/doctor.py
index ca362ba67..ef55506af 100644
--- a/testcases/features/doctor.py
+++ b/testcases/features/doctor.py
@@ -40,7 +40,7 @@ def main():
stop_time = time.time()
duration = round(stop_time - start_time, 1)
- if ret:
+ if ret == 0:
logger.info("doctor OK")
test_status = 'OK'
else:
@@ -57,9 +57,9 @@ def main():
version = functest_utils.get_version(logger)
build_tag = functest_utils.get_build_tag(logger)
- status = "failed"
+ status = "FAIL"
if details['status'] == "OK":
- status = "passed"
+ status = "PASS"
logger.info("Pushing Doctor results: TEST_DB_URL=%(db)s pod_name=%(pod)s "
"version=%(v)s scenario=%(s)s criteria=%(c)s details=%(d)s" % {
diff --git a/testcases/features/sfc/tacker_client_install.sh b/testcases/features/sfc/tacker_client_install.sh
new file mode 100755
index 000000000..a3073177c
--- /dev/null
+++ b/testcases/features/sfc/tacker_client_install.sh
@@ -0,0 +1,43 @@
+MYDIR=$(dirname $(readlink -f "$0"))
+CLIENT=$(echo python-python-tackerclient_*_all.deb)
+CLIREPO="tacker-client"
+
+# Function checks whether a python egg is available, if not, installs
+function chkPPkg() {
+ PKG="$1"
+ IPPACK=$(python - <<'____EOF'
+import pip
+from os.path import join
+for package in pip.get_installed_distributions():
+ print(package.location)
+ print(join(package.location, *package._get_metadata("top_level.txt")))
+____EOF
+)
+ echo "$IPPACK" | grep -q "$PKG"
+ if [ $? -ne 0 ];then
+ pip install "$PKG"
+ fi
+}
+
+function envSetup() {
+ apt-get install -y python-all debhelper fakeroot
+ pip install --upgrade python-keystoneclient==1.7.4
+ chkPPkg stdeb
+}
+
+# Function installs python-tackerclient from github
+function deployTackerClient() {
+ cd $MYDIR
+ git clone -b 'SFC_refactor' https://github.com/trozet/python-tackerclient.git $CLIREPO
+ cd $CLIREPO
+ python setup.py --command-packages=stdeb.command bdist_deb
+ cd "deb_dist"
+ CLIENT=$(echo python-python-tackerclient_*_all.deb)
+ cp $CLIENT $MYDIR
+ dpkg -i "${MYDIR}/${CLIENT}"
+ apt-get -f -y install
+ dpkg -i "${MYDIR}/${CLIENT}"
+}
+
+envSetup
+deployTackerClient
diff --git a/utils/openstack_utils.py b/utils/openstack_utils.py
index 1379d782d..b93d38185 100644
--- a/utils/openstack_utils.py
+++ b/utils/openstack_utils.py
@@ -178,6 +178,18 @@ def get_floating_ips(nova_client):
return None
+def get_hypervisors(nova_client):
+ try:
+ nodes = []
+ hypervisors = nova_client.hypervisors.list()
+ for hypervisor in hypervisors:
+ nodes.append(hypervisor.hypervisor_hostname)
+ return nodes
+ except Exception, e:
+ print "Error [get_hypervisors(nova_client)]:", e
+ return None
+
+
def create_flavor(nova_client, flavor_name, ram, disk, vcpus):
try:
flavor = nova_client.flavors.create(flavor_name, ram, vcpus, disk)
@@ -193,7 +205,8 @@ def create_instance(flavor_name,
network_id,
instance_name="functest-vm",
confdrive=True,
- userdata=None):
+ userdata=None,
+ av_zone=''):
nova_client = get_nova_client()
try:
flavor = nova_client.flavors.find(name=flavor_name)
@@ -207,7 +220,8 @@ def create_instance(flavor_name,
name=instance_name,
flavor=flavor,
image=image_id,
- nics=[{"net-id": network_id}]
+ nics=[{"net-id": network_id}],
+ availability_zone=av_zone
)
else:
instance = nova_client.servers.create(
@@ -216,7 +230,8 @@ def create_instance(flavor_name,
image=image_id,
nics=[{"net-id": network_id}],
config_drive=confdrive,
- userdata=userdata
+ userdata=userdata,
+ availability_zone=av_zone
)
return instance
@@ -226,7 +241,8 @@ def create_instance_and_wait_for_active(flavor_name,
network_id,
instance_name="",
config_drive=False,
- userdata=""):
+ userdata="",
+ av_zone=''):
SLEEP = 3
VM_BOOT_TIMEOUT = 180
nova_client = get_nova_client()
@@ -235,7 +251,8 @@ def create_instance_and_wait_for_active(flavor_name,
network_id,
instance_name,
config_drive,
- userdata)
+ userdata,
+ av_zone)
count = VM_BOOT_TIMEOUT / SLEEP
for n in range(count, -1, -1):