From 6f26ca0b60d9cda974abc791834bfc259214d7c0 Mon Sep 17 00:00:00 2001 From: Ruslan Mstoi Date: Wed, 1 Jul 2020 17:38:46 +0300 Subject: [PATCH] scripts: tests: Add tests for subfolder_list.py This commit implements tests of subfolder_list.py Signed-off-by: Ruslan Mstoi --- CODEOWNERS | 1 + scripts/tests/build/test_subfolder_list.py | 125 +++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 scripts/tests/build/test_subfolder_list.py diff --git a/CODEOWNERS b/CODEOWNERS index d6d72a67aad..bf5330493e3 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -424,6 +424,7 @@ /scripts/gen_relocate_app.py @wentongwu /scripts/requirements*.txt @mbolivar @galak @nashif /scripts/tests/sanitycheck/ @aasthagr +/scripts/tests/build/test_subfolder_list.py @rmstoi /scripts/tracing/ @wentongwu /scripts/sanity_chk/ @nashif /scripts/sanitycheck @nashif diff --git a/scripts/tests/build/test_subfolder_list.py b/scripts/tests/build/test_subfolder_list.py new file mode 100644 index 00000000000..596dcda793a --- /dev/null +++ b/scripts/tests/build/test_subfolder_list.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +# Copyright (c) 2020 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 + +"""tests for subfolder_list.py""" + +import os +import sys +import time + +sys.path.insert(0, os.path.join(os.environ["ZEPHYR_BASE"], "scripts")) +import subfolder_list as iut # Implementation Under Test + +OUT_FILE = "out_file.txt" +DIR_NAME_PREFIX = "dir-" + + +def mkdirs(name_sfxs_range): + """Create directories""" + dir_names = [os.getcwd()] + + for sfx in name_sfxs_range: + name = f"{DIR_NAME_PREFIX}{sfx}" + os.mkdir(name) + dir_names.append(os.path.join(os.getcwd(), name)) + + return dir_names + + +def assert_out_file_has(dir_names): + """Assert that out file has names of directories""" + for dir_name in open(OUT_FILE).readlines(): + dir_name = dir_name.strip() + assert dir_name in dir_names + + +def test_subfolder_list(tmpdir): + """Test subfolder list is correct""" + tmpdir.chdir() + dir_names = mkdirs(range(5)) + iut_dir_names = iut.get_subfolder_list((str(tmpdir))) + assert dir_names == iut_dir_names + + +def test_links(tmpdir): + """Test directory links creation""" + tmpdir.chdir() + links_dir = str(tmpdir) + dirs_dir = "dirs" + subdirs_parent_sfx = 1 + + dirs_range = range(5) + subdirs_range = range(5, 9) + + expect_links = [] + for i in dirs_range: + expect_links.append("%s_%s%d" % (dirs_dir, DIR_NAME_PREFIX, i)) + for i in subdirs_range: + expect_links.append("%s_%s%d_%s%d" % ( + dirs_dir, DIR_NAME_PREFIX, subdirs_parent_sfx, DIR_NAME_PREFIX, i)) + + tmpdir.mkdir(dirs_dir) + os.chdir(dirs_dir) + mkdirs(dirs_range) + + os.chdir(f"{DIR_NAME_PREFIX}{subdirs_parent_sfx}") + mkdirs(subdirs_range) + tmpdir.chdir() + + iut.get_subfolder_list(dirs_dir, links_dir) + + links = [f for f in os.listdir(links_dir) if os.path.islink(f)] + assert sorted(expect_links) == sorted(links) + + +def test_gen_out_file(tmpdir): + """Test generating the list output file""" + tmpdir.chdir() + dirs = [] + for sfx in range(10): + dirs.append(f"{DIR_NAME_PREFIX}{sfx}") + + iut.gen_out_file(OUT_FILE, dirs) + assert_out_file_has(dirs) + st_info = os.stat(OUT_FILE) + + # should not be updated if it already exists and has the same content + iut.gen_out_file(OUT_FILE, dirs) + st_info2 = os.stat(OUT_FILE) + assert st_info == st_info2 + + # should be updated if exists with different content + with open(OUT_FILE, "a") as out_fo: + out_fo.write("A" * 79) + st_info = os.stat(OUT_FILE) + iut.gen_out_file(OUT_FILE, dirs) + st_info2 = os.stat(OUT_FILE) + assert st_info != st_info2 + assert_out_file_has(dirs) + + +def test_trigger_file(tmpdir): + """Test trigger file feature""" + trigger_file = "trigger_file" + tmpdir.chdir() + mkdirs(range(5)) + + # should be created if it does not exist + iut.touch(trigger_file) + assert os.path.exists(trigger_file) + + # should be touched if it exists + with open(trigger_file, 'w'): + fake_time = 12345 + os.utime(trigger_file, (fake_time, fake_time)) + + iut.touch(trigger_file) + st_info = os.stat(trigger_file) + + time_now = time.time() + time_since_touch = 5.0 # seconds, rough estimate + + assert (time_now - st_info.st_atime) <= time_since_touch + assert (time_now - st_info.st_mtime) <= time_since_touch