]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/spdk/ocf/tests/unit/framework/run_unit_tests.py
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / spdk / ocf / tests / unit / framework / run_unit_tests.py
index 8de2c26353cb1efb9d212883021e4ae4fc78b6d3..a0a477fc6b0b784b0e905ec27bc991be13c268ee 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python3
 
 #
 # Copyright(c) 2012-2018 Intel Corporation
 
 import tests_config
 import os
-import commands
+import sys
+import subprocess
+
+
+def run_command(args):
+    result = subprocess.run(" ".join(args), shell=True,
+                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    result.stdout = result.stdout.decode("ASCII", errors='ignore')
+    result.stderr = result.stderr.decode("ASCII", errors='ignore')
+    return result
+
+
+def rmv_cmd(trgt):
+    """Remove target with force"""
+    result = run_command(["rm", "-rf", trgt])
+    if result.returncode != 0:
+        raise Exception("Removing {} before testing failed!".
+                        format(os.path.dirname(os.path.realpath(__file__))
+                               + trgt))
+
+
+def cleanup():
+    """Delete files created by unit tests"""
+    script_path = os.path.dirname(os.path.realpath(__file__))
+    test_dir = os.path.join(script_path, tests_config.MAIN_DIRECTORY_OF_UNIT_TESTS)
+    result = run_command(["cd", test_dir])
+    if result.returncode != 0:
+        raise Exception("Cleanup before testing failed!")
+
+    # r=root, d=directories, f = files
+    for r, d, f in os.walk(test_dir):
+        for file in f:
+            if '_generated_wrap' in file:
+                rmv_cmd(file)
+
+    rmv_cmd("preprocessed_sources_repository")
+    rmv_cmd("sources_to_test_repository")
+    rmv_cmd("build")
+
+    result = run_command(["cd", script_path])
+    if result.returncode != 0:
+        raise Exception("Cleanup before testing failed!")
+
+
+cleanup()
 
 script_path = os.path.dirname(os.path.realpath(__file__))
 
-main_UT_dir = os.path.normpath(script_path + os.sep\
-       + tests_config.MAIN_DIRECTORY_OF_UNIT_TESTS) + os.sep
+main_UT_dir = os.path.join(script_path, tests_config.MAIN_DIRECTORY_OF_UNIT_TESTS)
+
+main_env_dir = os.path.join(script_path, tests_config.MAIN_DIRECTORY_OF_ENV_FILES)
+
+main_tested_dir = os.path.join(script_path, tests_config.MAIN_DIRECTORY_OF_TESTED_PROJECT)
+
+if not os.path.isdir(os.path.join(main_UT_dir, "ocf_env", "ocf")):
+    try:
+        os.makedirs(os.path.join(main_UT_dir, "ocf_env", "ocf"))
+    except Exception:
+        raise Exception("Cannot create ocf_env/ocf directory!")
+
+result = run_command(["ln", "-fs",
+                      os.path.join(main_env_dir, "*"),
+                      os.path.join(main_UT_dir, "ocf_env")])
+if result.returncode != 0:
+    raise Exception("Preparing env sources for testing failed!")
+
+result = run_command(["cp", "-r",
+                      os.path.join(main_tested_dir, "inc", "*"),
+                      os.path.join(main_UT_dir, "ocf_env", "ocf")])
+if result.returncode != 0:
+    raise Exception("Preparing sources for testing failed!")
+
+result = run_command([os.path.join(script_path, "prepare_sources_for_testing.py")])
+if result.returncode != 0:
+    raise Exception("Preparing sources for testing failed!")
 
-main_tested_dir = os.path.normpath(script_path + os.sep\
-       + tests_config.MAIN_DIRECTORY_OF_TESTED_PROJECT) + os.sep
+build_dir = os.path.join(main_UT_dir, "build")
+logs_dir = os.path.join(main_UT_dir, "logs")
 
+try:
+    if not os.path.isdir(build_dir):
+        os.makedirs(build_dir)
+    if not os.path.isdir(logs_dir):
+        os.makedirs(logs_dir)
+except Exception:
+    raise Exception("Cannot create logs directory!")
 
-if not os.path.isdir(main_UT_dir + "ocf_env" + os.sep + "ocf"):
-       try:
-               os.makedirs(main_UT_dir + "ocf_env" + os.sep + "ocf")
-       except Exception:
-               print "Cannot crate ocf_env/ocf directory!"
+os.chdir(build_dir)
 
-status, output = commands.getstatusoutput("cp " + main_tested_dir +\
-       "inc" + os.sep + "*" + " " + main_UT_dir + "ocf_env" + os.sep + "ocf")
+cmake_result = run_command(["cmake", ".."])
 
+print(cmake_result.stdout)
+with open(os.path.join(logs_dir, "cmake.output"), "w") as f:
+    f.write(cmake_result.stdout)
+    f.write(cmake_result.stderr)
 
-if os.system(script_path + os.sep + "prepare_sources_for_testing.py") != 0:
-       print "Preparing sources for testing failed!"
-       exit()
+if cmake_result.returncode != 0:
+    with open(os.path.join(logs_dir, "tests.output"), "w") as f:
+        f.write("Cmake step failed! More details in cmake.output.")
+    sys.exit(1)
 
+make_result = run_command(["make", "-j"])
 
-build_dir = main_UT_dir + "build" + os.sep
+print(make_result.stdout)
+with open(os.path.join(logs_dir, "make.output"), "w") as f:
+    f.write(make_result.stdout)
+    f.write(make_result.stderr)
 
-if not os.path.isdir(build_dir):
-       try:
-               os.makedirs(build_dir)
-       except Exception:
-               print "Cannot crate build directory!"
+if make_result.returncode != 0:
+    with open(os.path.join(logs_dir, "tests.output"), "w") as f:
+        f.write("Make step failed! More details in make.output.")
+    sys.exit(1)
 
-status, output = commands.getstatusoutput("cd " + build_dir + " && cmake .. && make && make test")
+test_result = run_command(["make", "test"])
 
-print output
+print(test_result.stdout)
+with open(os.path.join(logs_dir, "tests.output"), "w") as f:
+    f.write(test_result.stdout)