initial delivery of system test framework
[osm/devops.git] / systest / Makefile
diff --git a/systest/Makefile b/systest/Makefile
new file mode 100644 (file)
index 0000000..fb296cc
--- /dev/null
@@ -0,0 +1,134 @@
+# Copyright 2017 Sandvine
+# All Rights Reserved.
+# 
+#    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.
+
+#
+# These variables need to be defined in environment or passed in
+# the make invocation.
+# eg. 
+#    export OSM_HOSTNAME=1.2.3.4:8008
+#    export OS_URL=https://<keystoneserver>:5000/v2.0
+#    export OS_USERNAME=admin
+#    export OS_PASSWORD=admin
+#    export OS_PROJECT_NAME=admin
+OSM_HOSTNAME ?=
+OS_URL ?=
+OS_USERNAME ?=
+OS_PASSWORD_NAME ?=
+OS_PROJECT_NAME ?=
+
+ifdef OS_URL
+    OPTION_OS_URL=--os-url $(OS_URL)
+endif
+ifdef OS_USERNAME
+    OPTION_OS_USERNAME=--os-username $(OS_USERNAME)
+endif
+ifdef OS_PASSWORD
+    OPTION_OS_PASSWORD=--os-password $(OS_PASSWORD)
+endif
+ifdef OS_PROJECT_NAME
+    OPTION_OS_PROJECT_NAME=--os-project-name $(OS_PROJECT_NAME)
+endif
+
+ifdef TEST_VNFD_DESCRIPTORS
+    OPTION_TEST_VNFD_DESCRIPTORS=--osm-vnfd-descriptor-packages $(TEST_VNFD_DESCRIPTORS)
+endif
+ifdef TEST_NSD_DESCRIPTORS
+    OPTION_TEST_NSD_DESCRIPTORS=--osm-nsd-descriptor-packages $(TEST_NSD_DESCRIPTORS)
+endif
+
+DESCRIPTOR_REPO_NAME=descriptor-packages
+DESCRIPTOR_BUILD_DIR := $(shell pwd)/$(DESCRIPTOR_REPO_NAME)/build
+OPTION_DESCRIPTOR_BUILD_DIR=--osm-descriptor-packages $(DESCRIPTOR_BUILD_DIR)
+
+TEST_OSM_NS_NAME_PREFIX=pytest-$(shell date +%D-%T)-
+OPTION_TEST_OSM_NS_NAME_PREFIX=--osm-ns-name-prefix $(TEST_OSM_NS_NAME_PREFIX)
+
+JUNITXML_DIR = reports
+
+JUNITXML ?= pytest-output.xml
+
+PYTEST_OPTIONS=
+Q=@
+
+DESCRIPTOR_REPO ?= https://osm.etsi.org/gerrit/osm/$(DESCRIPTOR_REPO_NAME)
+
+
+TEST_VNFD_DESCRIPTORS ?= None
+TEST_NSD_DESCRIPTORS  ?= None
+
+.NOTPARALLEL:
+all: smoke cirros ping_pong
+
+define check_env_var
+       $(Q)if [ -z "$($(1))" ]; then echo "error: $(1) not set"; exit 1; fi
+endef
+
+check_OSM_HOSTNAME:
+       $(call check_env_var,OSM_HOSTNAME)
+
+check_openstack_env:
+       $(call check_env_var,OS_URL)
+       $(call check_env_var,OS_USERNAME)
+       $(call check_env_var,OS_PASSWORD)
+       $(call check_env_var,OS_PROJECT_NAME)
+
+.PHONY: check_openstack_env check_OSM_HOSTNAME
+
+$(DESCRIPTOR_REPO_NAME):
+       @test -e $(DESCRIPTOR_REPO_NAME) || git clone $(DESCRIPTOR_REPO)
+       make -C $(DESCRIPTOR_REPO_NAME)
+
+report_dir:
+       @mkdir -p reports
+
+_run_test: $(DESCRIPTOR_REPO_NAME) report_dir
+       $(Q)py.test \
+        --osmhost $(OSM_HOSTNAME) \
+        $(OPTION_OS_URL) \
+        $(OPTION_OS_USERNAME) \
+        $(OPTION_OS_PASSWORD) \
+        $(OPTION_OS_PROJECT_NAME) \
+        $(OPTION_TEST_VNFD_DESCRIPTORS) \
+        $(OPTION_TEST_NSD_DESCRIPTORS) \
+        $(OPTION_DESCRIPTOR_BUILD_DIR) \
+        $(OPTION_TEST_OSM_NS_NAME_PREFIX) \
+        --junitxml $(JUNITXML_DIR)/$(JUNITXML) \
+        $(PYTEST_OPTIONS)
+
+cirros: check_OSM_HOSTNAME check_openstack_env
+       $(Q)$(MAKE) \
+        TEST_VNFD_DESCRIPTORS=$(DESCRIPTOR_BUILD_DIR)/vnfd_pkgs/cirros_vnf.tar.gz \
+        TEST_NSD_DESCRIPTORS=$(DESCRIPTOR_BUILD_DIR)/nsd_pkgs/cirros_ns.tar.gz \
+        JUNITXML=pytest-$@.xml \
+        PYTEST_OPTIONS="$(PYTEST_OPTIONS) -m vnf" _run_test
+
+smoke: check_OSM_HOSTNAME
+       $(Q)$(MAKE) \
+        JUNITXML=pytest-$@.xml \
+        PYTEST_OPTIONS="$(PYTEST_OPTIONS) -m smoke" _run_test
+
+vim: check_OSM_HOSTNAME check_openstack_env
+       $(Q)$(MAKE) \
+        JUNITXML=pytest-$@.xml \
+        PYTEST_OPTIONS="$(PYTEST_OPTIONS) -m vim" _run_test
+
+ping_pong: check_OSM_HOSTNAME check_openstack_env
+       $(Q)$(MAKE) \
+        TEST_VNFD_DESCRIPTORS="$(DESCRIPTOR_BUILD_DIR)/vnfd_pkgs/ping_vnf.tar.gz,$(DESCRIPTOR_BUILD_DIR)/vnfd_pkgs/pong_vnf.tar.gz" \
+        TEST_NSD_DESCRIPTORS="$(DESCRIPTOR_BUILD_DIR)/nsd_pkgs/ping_pong_ns.tar.gz" \
+        JUNITXML=pytest-$@.xml \
+        PYTEST_OPTIONS="$(PYTEST_OPTIONS) -m vnf" _run_test
+
+.PHONY: report_dir cirros vim smoke ping_pong