diff options
-rw-r--r-- | ci/config_functest.yaml | 1 | ||||
-rwxr-xr-x | ci/exec_test.sh | 6 | ||||
-rw-r--r-- | ci/testcases.yaml | 9 | ||||
-rw-r--r-- | docker/Dockerfile | 3 | ||||
-rwxr-xr-x | testcases/OpenStack/rally/run_rally-cert.py | 4 | ||||
-rwxr-xr-x | testcases/features/copper.py | 80 | ||||
-rw-r--r-- | testcases/features/doctor.py | 6 | ||||
-rwxr-xr-x | testcases/features/sfc/tacker_client_install.sh | 43 | ||||
-rw-r--r-- | utils/openstack_utils.py | 27 |
9 files changed, 167 insertions, 12 deletions
diff --git a/ci/config_functest.yaml b/ci/config_functest.yaml index 5623a71c..cc5c82ac 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 c0bdf96b..519ade4b 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 cfd93e4f..491ddad9 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 30d2a7a1..611f75bf 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 78393224..47b826d6 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 00000000..54136a87 --- /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 ca362ba6..ef55506a 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 00000000..a3073177 --- /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 1379d782..b93d3818 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): |