From 6d9d68999c9772e1b82385245d4ae9a25609d602 Mon Sep 17 00:00:00 2001 From: Amandine PERRIN <amandine.perrin@pasteur.fr> Date: Fri, 23 Oct 2020 19:25:11 +0200 Subject: [PATCH] add func tests for tree module --- .gitlab-ci.yml | 2 +- PanACoTA/subcommands/tree.py | 23 ++--------------------- test/test_functional/test_tree-parser.py | 8 +++++--- test/test_functional/test_tree.py | 18 ++++++++++++------ 4 files changed, 20 insertions(+), 31 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 477fcc62..6458ae97 100755 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -113,7 +113,7 @@ func-test-ubuntu: - py.test test/test_functional/test_corepers* -vx - py.test test/test_functional/test_align-parser.py -vx - py.test test/test_functional/test_align.py -vx - # - py.test test/test_functional/test_tree* -vx + - py.test test/test_functional/test_tree* -vx - py.test test/test_functional/test_annote-parser.py -vx - py.test test/test_functional/test_annote.py -xv - py.test test/test_functional/test_prepare* -vx diff --git a/PanACoTA/subcommands/tree.py b/PanACoTA/subcommands/tree.py index 716c2335..b0d24abe 100755 --- a/PanACoTA/subcommands/tree.py +++ b/PanACoTA/subcommands/tree.py @@ -167,26 +167,7 @@ def build_parser(parser): parser to configure in order to extract command-line arguments """ import argparse - import multiprocessing - - def thread_num(param): - try: - param = int(param) - except Exception: - msg = "argument --threads threads: invalid int value: {}".format(param) - raise argparse.ArgumentTypeError(msg) - nb_cpu = multiprocessing.cpu_count() - if param > nb_cpu: - msg = ("You have {} threads on your computer, you cannot ask for more: " - "invalid value: {}").format(nb_cpu, param) - raise argparse.ArgumentTypeError(msg) - elif param < 0: - msg = ("Please provide a positive number of threads (or 0 for all threads): " - "Invalid value: {}").format(param) - raise argparse.ArgumentTypeError(msg) - elif param == 0: - return nb_cpu - return param + from PanACoTA import utils_argparse # Create command-line parser for all options and arguments to give @@ -210,7 +191,7 @@ def build_parser(parser): "default, no bootstrap is calculated. For IQtree, it " "will use ultrafast bootstrap (>=1000).")) - optional.add_argument("--threads", dest="threads", default=1, type=thread_num, + optional.add_argument("--threads", dest="threads", default=1, type=utils_argparse.thread_num, help=("add this option if you want to parallelize on several threads. " "Indicate on how many threads you want to parallelize. " "By default, it uses 1 thread. Put 0 if you want to use " diff --git a/test/test_functional/test_tree-parser.py b/test/test_functional/test_tree-parser.py index f70f2d8b..f598701f 100755 --- a/test/test_functional/test_tree-parser.py +++ b/test/test_functional/test_tree-parser.py @@ -93,7 +93,7 @@ def test_parser_quicktree_parallel(capsys): parser = argparse.ArgumentParser(description="Tree", add_help=False) tree.build_parser(parser) with pytest.raises(SystemExit): - tree.parse(parser, "-a align -s quicktree --threads 5 -o outdir".split()) + tree.parse(parser, "-a align -s quicktree --threads 2 -o outdir".split()) _, err = capsys.readouterr() assert ("You cannot run quicktree with multiple threads. Choose another software, or remove " "the --threads option.") in err @@ -317,14 +317,16 @@ def test_parser_threads_ok(): """ parser = argparse.ArgumentParser(description="Tree", add_help=False) tree.build_parser(parser) - args = tree.parse(parser, "-a align -o outdir --threads 5".split()) + import multiprocessing + nb = multiprocessing.cpu_count() + args = tree.parse(parser, f"-a align -o outdir --threads {nb}".split()) assert args.alignment == "align" assert args.boot is None assert args.outdir == "outdir" assert args.soft == "iqtree" assert args.model == "GTR" assert args.write_boot is False - assert args.threads == 5 + assert args.threads == nb assert args.verbose == 0 assert args.quiet == False diff --git a/test/test_functional/test_tree.py b/test/test_functional/test_tree.py index 6215f493..72758e21 100755 --- a/test/test_functional/test_tree.py +++ b/test/test_functional/test_tree.py @@ -33,7 +33,8 @@ def setup_teardown_module(): - remove all log files - remove directory with generated results """ - os.mkdir(GENEPATH) + if not os.path.isdir(GENEPATH): + os.mkdir(GENEPATH) print("setup") yield @@ -50,9 +51,10 @@ def test_main_default(capsys): soft = "iqtree" model = "GTR" threads = 1 + verbose = 3 cmd = "cmd test_main_default" - tree.main(cmd, ALIGNMENT, outdir, soft, model, threads) + tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, verbose=verbose) # Check output files iq_log_file = os.path.join(outdir, "exp_pers4genomes.grp.aln.iqtree_tree.log") assert os.path.isfile(iq_log_file) @@ -73,6 +75,7 @@ def test_main_default(capsys): assert os.path.isfile(logs_base + ".err") # Check logs out, err = capsys.readouterr() + print(out) assert "Running IQtree..." in out assert ("IQtree command: iqtree -s test/data/align/exp_files/exp_pers4genomes.grp.aln " "-nt 1 -m GTR -st DNA -pre test/data/tree/generated_by_func_tests/" @@ -182,7 +185,7 @@ def test_main_fasttree(capsys): threads = 1 boot = 100 cmd = "cmd: test_main_fasttree" - tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=boot) + tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=boot, verbose=2) # Check output files # fastme logfile log_file = os.path.join(outdir, "exp_pers4genomes.grp.aln.fasttree.log") @@ -201,11 +204,12 @@ def test_main_fasttree(capsys): # log files logs_base = os.path.join(outdir, "PanACoTA-tree-fasttree.log") assert os.path.isfile(logs_base) - assert not os.path.isfile(logs_base + ".details") + assert os.path.isfile(logs_base + ".details") assert not os.path.isfile(logs_base + ".debug") assert os.path.isfile(logs_base + ".err") # Check logs out, err = capsys.readouterr() + print(out) assert "Running FasttreeMP..." in out assert ("Fasttree command: FastTreeMP -nt -gtr -noml -nocat -boot 100 " "-log test/data/tree/generated_by_func_tests/exp_pers4genomes.grp.aln.fasttree.log " @@ -224,7 +228,8 @@ def test_main_iqtree2_newdir(capsys): threads = 1 cmd = "cmd test_main_default" - tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=1000, write_boot=True) + tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=1000, write_boot=True, + verbose=2) # Check output files # Check iqtree logfile iq_log_file = os.path.join(outdir, "exp_pers4genomes.grp.aln.iqtree_tree.log") @@ -254,6 +259,7 @@ def test_main_iqtree2_newdir(capsys): logs_base = os.path.join(outdir, "PanACoTA-tree-iqtree2.log") assert os.path.isfile(logs_base) assert os.path.isfile(logs_base + ".err") + assert os.path.isfile(logs_base + ".details") # Check logs out, err = capsys.readouterr() assert "Running IQtree..." in out @@ -278,7 +284,7 @@ def test_main_from_parse(capsys): args.model = "HKY" args.write_boot = False args.threads = 1 - args.verbose = 1 + args.verbose = 2 args.quiet = False args.memory = False args.fast = False -- GitLab