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