new command: test/clean.py
This commit is contained in:
parent
0215b9213a
commit
bd63c36bee
7 changed files with 126 additions and 81 deletions
|
|
@ -1 +1 @@
|
|||
14.1.0
|
||||
15.0.dev0
|
||||
|
|
|
|||
53
test/clean.py
Executable file
53
test/clean.py
Executable file
|
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
|
||||
# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
|
||||
# Licensed under the GNU General Public License, Version 3:
|
||||
# https://www.gnu.org/licenses
|
||||
# Public project repositories:
|
||||
# https://github.com/mmgen/mmgen-wallet
|
||||
# https://gitlab.com/mmgen/mmgen-wallet
|
||||
|
||||
"""
|
||||
test/clean.py: Clean the test directory
|
||||
"""
|
||||
|
||||
import sys, os
|
||||
|
||||
from mmgen.cfg import Config
|
||||
|
||||
opts_data = {
|
||||
'text': {
|
||||
'desc': 'Clean the test directory',
|
||||
'usage':'[options]',
|
||||
'options': """
|
||||
-h, --help Print this help message
|
||||
--, --longhelp Print help message for long options (common options)
|
||||
""",
|
||||
},
|
||||
}
|
||||
|
||||
cfg = Config(opts_data=opts_data)
|
||||
|
||||
repo_root = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), os.pardir)))
|
||||
os.chdir(repo_root)
|
||||
sys.path[0] = repo_root
|
||||
|
||||
from test.overlay import get_overlay_tree_dir
|
||||
overlay_tree_dir = get_overlay_tree_dir(repo_root)
|
||||
if os.path.exists(overlay_tree_dir):
|
||||
from shutil import rmtree
|
||||
rmtree(overlay_tree_dir, ignore_errors=True)
|
||||
print(f'Removed {os.path.relpath(overlay_tree_dir)!r}')
|
||||
|
||||
from test.include.common import clean, set_globals
|
||||
|
||||
set_globals(cfg)
|
||||
|
||||
from test.include.cfg import clean_cfgs
|
||||
|
||||
data_dir = Config.test_datadir
|
||||
trash_dir = os.path.join('test', 'trash')
|
||||
trash_dir2 = os.path.join('test', 'trash2')
|
||||
|
||||
clean(clean_cfgs, extra_dirs=[data_dir, trash_dir, trash_dir2])
|
||||
|
|
@ -75,23 +75,11 @@ def create_shm_dir(data_dir,trash_dir):
|
|||
|
||||
import sys, os, time, asyncio
|
||||
|
||||
if sys.argv[-1] == 'clean':
|
||||
os.environ['MMGEN_TEST_SUITE'] = '1'
|
||||
repo_root = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]),os.pardir)))
|
||||
os.chdir(repo_root)
|
||||
sys.path[0] = repo_root
|
||||
|
||||
from shutil import rmtree
|
||||
from test.overlay import get_overlay_tree_dir
|
||||
overlay_tree_dir = get_overlay_tree_dir(repo_root)
|
||||
rmtree(overlay_tree_dir,ignore_errors=True)
|
||||
print(f'Removed {os.path.relpath(overlay_tree_dir)!r}')
|
||||
else:
|
||||
# overlay must be set up before importing mmgen mods!
|
||||
try:
|
||||
from include.test_init import repo_root
|
||||
except ImportError:
|
||||
from test.include.test_init import repo_root
|
||||
# overlay must be set up before importing mmgen mods!
|
||||
try:
|
||||
from include.test_init import repo_root
|
||||
except ImportError:
|
||||
from test.include.test_init import repo_root
|
||||
|
||||
from mmgen.cfg import Config,gc
|
||||
from mmgen.color import red,yellow,green,blue,cyan,gray,nocolor,init_color
|
||||
|
|
@ -102,7 +90,6 @@ from test.include.common import (
|
|||
cmdtest_py_log_fn,
|
||||
cmdtest_py_error_fn,
|
||||
mk_tmpdir,
|
||||
cleandir,
|
||||
iqmsg,
|
||||
omsg,
|
||||
omsg_r,
|
||||
|
|
@ -110,6 +97,7 @@ from test.include.common import (
|
|||
start_test_daemons,
|
||||
stop_test_daemons,
|
||||
init_coverage,
|
||||
clean,
|
||||
)
|
||||
|
||||
try:
|
||||
|
|
@ -267,17 +255,7 @@ else:
|
|||
if cfg.skipping_deps:
|
||||
cfg.no_daemon_autostart = True
|
||||
|
||||
from test.cmdtest_py_d.cfg import cfgs,fixup_cfgs
|
||||
|
||||
for k in cfgs:
|
||||
cfgs[k]['tmpdir'] = os.path.join('test','tmp',str(k))
|
||||
|
||||
fixup_cfgs()
|
||||
|
||||
utils = {
|
||||
# 'check_deps': 'check dependencies for specified command (WIP)', # TODO
|
||||
'clean': 'clean specified tmp dir(s) (specify by integer, no arg = all dirs)',
|
||||
}
|
||||
from test.cmdtest_py_d.cfg import cfgs
|
||||
|
||||
def list_cmds():
|
||||
|
||||
|
|
@ -303,13 +281,6 @@ def list_cmds():
|
|||
(data if isinstance(data,str) else data[1]),
|
||||
w = cw )
|
||||
|
||||
w = max(map(len,utils))
|
||||
|
||||
yield '\n'+green('AVAILABLE UTILITIES:')
|
||||
|
||||
for cmd in sorted(utils):
|
||||
yield f' {cmd:{w}} - {utils[cmd]}'
|
||||
|
||||
from mmgen.ui import do_pager
|
||||
do_pager('\n'.join(gen_output()))
|
||||
|
||||
|
|
@ -321,34 +292,6 @@ def do_between():
|
|||
elif (cfg.verbose or cfg.exact_output) and not cfg.skipping_deps:
|
||||
sys.stderr.write('\n')
|
||||
|
||||
def list_tmpdirs():
|
||||
return {k:cfgs[k]['tmpdir'] for k in cfgs}
|
||||
|
||||
def clean(usr_dirs=None,clean_overlay=True):
|
||||
if cfg.skipping_deps:
|
||||
return
|
||||
all_dirs = list_tmpdirs()
|
||||
dirnums = map(int,(usr_dirs if usr_dirs is not None else all_dirs))
|
||||
dirlist = list(map(str,sorted(dirnums)))
|
||||
for d in dirlist:
|
||||
if d in all_dirs:
|
||||
cleandir(all_dirs[d])
|
||||
else:
|
||||
die(1,f'{d}: invalid directory number')
|
||||
if dirlist:
|
||||
iqmsg(green('Cleaned tmp director{} {}'.format(
|
||||
suf(dirlist,'ies'),
|
||||
' '.join(dirlist))
|
||||
))
|
||||
cleandir(data_dir)
|
||||
cleandir(trash_dir)
|
||||
cleandir(trash_dir2)
|
||||
iqmsg(green(f'Cleaned directories {data_dir!r} {trash_dir!r} {trash_dir2!r}'))
|
||||
|
||||
if clean_overlay:
|
||||
cleandir(overlay_tree_dir)
|
||||
iqmsg(green(f'Cleaned directory {os.path.relpath(overlay_tree_dir)!r}'))
|
||||
|
||||
def create_tmp_dirs(shm_dir):
|
||||
if sys.platform == 'win32':
|
||||
for cfg in sorted(cfgs):
|
||||
|
|
@ -753,8 +696,8 @@ class CmdTestRunner:
|
|||
iqmsg(gray(f'INFO → skipping {m} (network={nw})'))
|
||||
return None
|
||||
|
||||
if do_clean:
|
||||
clean(ct_cls.tmpdir_nums,clean_overlay=False)
|
||||
if do_clean and not cfg.skipping_deps:
|
||||
clean(cfgs, tmpdir_ids=ct_cls.tmpdir_nums, extra_dirs=[data_dir, trash_dir, trash_dir2])
|
||||
|
||||
if not quiet:
|
||||
bmsg('Executing ' + m)
|
||||
|
|
@ -1042,9 +985,6 @@ if __name__ == '__main__':
|
|||
CmdGroupMgr().list_cmd_groups()
|
||||
elif cfg.list_cmds:
|
||||
list_cmds()
|
||||
elif cmd_args and cmd_args[0] in utils:
|
||||
globals()[cmd_args[0]](*cmd_args[1:])
|
||||
sys.exit(0)
|
||||
|
||||
if cfg.pause:
|
||||
set_restore_term_at_exit()
|
||||
|
|
|
|||
|
|
@ -231,6 +231,10 @@ cfgs = { # addr_idx_lists (except 31,32,33,34) must contain exactly 8 addresses
|
|||
|
||||
def fixup_cfgs():
|
||||
import os
|
||||
|
||||
for k in cfgs:
|
||||
cfgs[k]['tmpdir'] = os.path.join('test', 'tmp', str(k))
|
||||
|
||||
for src,target in (
|
||||
('6','11'),
|
||||
('7','12'),
|
||||
|
|
@ -248,3 +252,5 @@ def fixup_cfgs():
|
|||
if cfg.debug_utf8:
|
||||
for k in cfgs:
|
||||
cfgs[k]['tmpdir'] += '-α'
|
||||
|
||||
fixup_cfgs()
|
||||
|
|
|
|||
15
test/include/cfg.py
Executable file
15
test/include/cfg.py
Executable file
|
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
|
||||
# Copyright (C)2013-2024 The MMGen Project <mmgen@tuta.io>
|
||||
# Licensed under the GNU General Public License, Version 3:
|
||||
# https://www.gnu.org/licenses
|
||||
# Public project repositories:
|
||||
# https://github.com/mmgen/mmgen-wallet
|
||||
# https://gitlab.com/mmgen/mmgen-wallet
|
||||
|
||||
"""
|
||||
test.include.cfg: Configuration for test scripts
|
||||
"""
|
||||
|
||||
from ..cmdtest_py_d.cfg import cfgs as clean_cfgs
|
||||
|
|
@ -25,7 +25,7 @@ from subprocess import run,PIPE
|
|||
|
||||
from mmgen.cfg import gv
|
||||
from mmgen.color import yellow,green,orange
|
||||
from mmgen.util import msg,msg_r,Msg,Msg_r,gmsg,die
|
||||
from mmgen.util import msg, msg_r, Msg, Msg_r, gmsg, die, suf, fmt_list
|
||||
from mmgen.fileutil import write_data_to_file,get_data_from_file
|
||||
|
||||
def noop(*args,**kwargs):
|
||||
|
|
@ -127,16 +127,19 @@ def cleandir(d,do_msg=False):
|
|||
try:
|
||||
files = os.listdir(d_enc)
|
||||
except:
|
||||
return
|
||||
return None
|
||||
|
||||
from shutil import rmtree
|
||||
if do_msg:
|
||||
gmsg(f'Cleaning directory {d!r}')
|
||||
for f in files:
|
||||
try:
|
||||
os.unlink(os.path.join(d_enc,f))
|
||||
except:
|
||||
rmtree(os.path.join(d_enc,f),ignore_errors=True)
|
||||
if files:
|
||||
from shutil import rmtree
|
||||
if do_msg:
|
||||
gmsg(f'Cleaning directory {d!r}')
|
||||
for f in files:
|
||||
try:
|
||||
os.unlink(os.path.join(d_enc, f))
|
||||
except:
|
||||
rmtree(os.path.join(d_enc,f), ignore_errors=True)
|
||||
|
||||
return files
|
||||
|
||||
def mk_tmpdir(d):
|
||||
try:
|
||||
|
|
@ -147,6 +150,34 @@ def mk_tmpdir(d):
|
|||
else:
|
||||
vmsg(f'Created directory {d!r}')
|
||||
|
||||
def clean(cfgs, tmpdir_ids=None, extra_dirs=[]):
|
||||
|
||||
def clean_tmpdirs():
|
||||
cfg_tmpdirs = {k:cfgs[k]['tmpdir'] for k in cfgs}
|
||||
for d in map(str, sorted(map(int, (tmpdir_ids or cfg_tmpdirs)))):
|
||||
if d in cfg_tmpdirs:
|
||||
if cleandir(cfg_tmpdirs[d]):
|
||||
yield d
|
||||
else:
|
||||
die(1, f'{d}: invalid directory number')
|
||||
|
||||
def clean_extra_dirs():
|
||||
for d in extra_dirs:
|
||||
if os.path.exists(d):
|
||||
if cleandir(d):
|
||||
yield os.path.relpath(d)
|
||||
|
||||
for clean_func, list_fmt in (
|
||||
(clean_tmpdirs, 'no_quotes'),
|
||||
(clean_extra_dirs, 'dfl')
|
||||
):
|
||||
if cleaned := list(clean_func()):
|
||||
iqmsg(green('Cleaned director{} {}'.format(
|
||||
suf(cleaned, 'ies'),
|
||||
fmt_list(cleaned, fmt=list_fmt)
|
||||
)))
|
||||
|
||||
|
||||
def get_tmpfile(cfg,fn):
|
||||
return os.path.join(cfg['tmpdir'],fn)
|
||||
|
||||
|
|
|
|||
|
|
@ -396,7 +396,7 @@ remove_skipped_tests
|
|||
|
||||
check_tests
|
||||
|
||||
test/cmdtest.py clean
|
||||
test/clean.py
|
||||
|
||||
start_time=$(date +%s)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue