ocf/tests/unit/framework/run_unit_tests.py
Rafal Stefanowski 38e7e19290 Update copyright statements
Signed-off-by: Rafal Stefanowski <rafal.stefanowski@intel.com>
2020-04-28 13:37:54 +02:00

128 lines
3.9 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Copyright(c) 2012-2020 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause-Clear
#
import tests_config
import os
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.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!")
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!")
os.chdir(build_dir)
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 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"])
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 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)
test_result = run_command(["make", "test"])
print(test_result.stdout)
with open(os.path.join(logs_dir, "tests.output"), "w") as f:
f.write(test_result.stdout)