-#!/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)