PoC of SOL005 Robot conformance tests into OSM's CICD
[osm/tests.git] / conformance-tests / run_conformance_tests.py
diff --git a/conformance-tests/run_conformance_tests.py b/conformance-tests/run_conformance_tests.py
new file mode 100644 (file)
index 0000000..02a8221
--- /dev/null
@@ -0,0 +1,89 @@
+# Copyright 2020 ETSI OSM
+#
+# 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
+from shutil import copy
+from subprocess import run
+from osm_client import *
+
+packages_folder = os.environ["PACKAGES_FOLDER"]
+conformance_folder = "{}/{}".format(os.environ["ROBOT_DEVOPS_FOLDER"], "conformance-tests")
+test_lists_folder = "{}/{}".format(conformance_folder, "test-lists")
+sol005_folder = "{}/repo/SOL005".format(conformance_folder)
+osm_hostname = os.environ["OSM_HOSTNAME"]
+
+
+def get_package_path(package_name):
+    return "{}/{}".format(packages_folder, package_name)
+
+
+def get_suite_path(suite_name):
+    return "{}/repo/SOL005/{}".format(conformance_folder, suite_name)
+
+
+def run_test_suite(suite_dir, suite_name, arg_file):
+    print("robot -d {}/repo/{}/reports --argumentfile {} .".format(conformance_folder, suite_name, arg_file))
+    run(["robot --loglevel=TRACE -d {}/reports/{} --argumentfile {} .".format(conformance_folder,
+                                                                              suite_name, arg_file)], cwd=suite_dir, shell=True)
+
+
+def sub_env_vars(file_dir, file_name):
+    run(["envsubst < {0} > {0}".format(file_name)], cwd=file_dir, shell=True)
+
+
+# RESOURCE CREATION HAPPENS BELOW
+nsd_id, vnfd_id = "", ""
+
+osm = OSM(osm_hostname)
+
+os.environ["AUTH_TOKEN"] = osm.get_auth_token()
+
+try:
+    vnfd_id = osm.create_vnfd(get_package_path("hackfest_basic_vnf/hackfest_basic_vnfd.yaml"))
+    nsd_id = osm.create_nsd(get_package_path("hackfest_basic_ns/hackfest_basic_nsd.yaml"))
+except ResourceException as e:
+    print(e.message)
+
+print("VNFD: {}\nNSD: {}".format(vnfd_id, nsd_id))
+# Apply relevant env variables (required for test vars)
+os.environ["NSD_INFO_ID"] = nsd_id
+
+# RESOURCE CREATION HAPPENS ABOVE
+
+# Copy test selection files over to relevant directories
+(_, _, filenames) = next(os.walk(test_lists_folder))
+for f in filenames:
+    if f.endswith(".txt"):
+        # Apply ENV Variables
+        sub_env_vars(test_lists_folder, f)
+
+        # Then copy to appropriate directory
+        print("Copying {} to {}".format(f, get_suite_path(f.split(".")[0])))
+        copy("{}/{}".format(test_lists_folder, f), get_suite_path(f.split(".")[0]))
+
+
+# Run the robot tests
+(_, directories, _) = next(os.walk(sol005_folder))
+for d in directories:
+    run_test_suite("{}/{}".format(sol005_folder, d), d, d + ".txt")
+
+# We then need to clear the created resources
+try:
+    osm.delete_nsd(nsd_id)
+    osm.delete_vnfd(vnfd_id)
+except ResourceException as e:
+    print("Deletion failed: {}".format(e.message))
+
+print("Cleared resources")