Source code for layerstack.tests.test_stack

'''
:copyright: (c) 2021, Alliance for Sustainable Energy, LLC
:license: BSD-3
'''

import pytest
import shutil
from pathlib import Path
import logging
from layerstack import ArgMode, LayerStackError, Layer, Stack
from layerstack.tests import layer_library_dir, outdir
from layerstack.stack import repoint_stack, parse_args_helper

import subprocess
from subprocess import Popen, PIPE

logger = logging.getLogger(__name__)


[docs]def test_layer_types(): layer = Layer(layer_library_dir / 'test_list_args') with pytest.raises(LayerStackError) as excinfo: Stack(layers = [layer, 1]) assert 'int' in str(excinfo.value), str(excinfo.value) with pytest.raises(LayerStackError): Stack(layers = [layer.layer_dir])
[docs]def test_basic_compose_and_run(): layer = Layer(layer_library_dir / 'test_list_args') stack = Stack(layers = [layer], name='Basic Test', run_dir = outdir / 'test_basic_compose_and_run') stack.set_arg_mode(ArgMode.USE) stack[0].args[0] = [1, 2, 3] stack.run()
[docs]def test_get_layer_dir(): alt_layer_library_dir = outdir / 'test_get_layer_dir' alt_layer_library_dir.mkdir() orig_layer_dir = layer_library_dir / 'test_list_args' new_layer_dir = alt_layer_library_dir / 'test_list_args' shutil.copytree(orig_layer_dir, new_layer_dir) test_layer_dir = Stack.get_layer_dir( orig_layer_dir, layer_library_dirs=[alt_layer_library_dir], original_preferred=True) assert test_layer_dir == orig_layer_dir test_layer_dir = Stack.get_layer_dir( orig_layer_dir, layer_library_dirs=[alt_layer_library_dir], original_preferred=False) assert test_layer_dir == new_layer_dir fake_layer_dir = layer_library_dir / 'my_nonexistent_layer' test_layer_dir = Stack.get_layer_dir( fake_layer_dir, layer_library_dirs=[alt_layer_library_dir], original_preferred=True) assert test_layer_dir is None
# *** create new stack and test repointing ***
[docs]def test_repointing_run_dir(): stack_library_dir = outdir / 'test_stack_repoint' if not stack_library_dir.exists(): stack_library_dir.mkdir() layer = Layer(layer_library_dir / 'test_list_args') stack = Stack(layers = [layer], name='Basic Test', run_dir = outdir / 'test_basic_repoint') p = stack_library_dir / 'test_stack_repoint_layer_1.json' stack.save(p) assert stack.run_dir is not None new_run_dir = outdir / 'new_run_dir' repoint_stack(p, run_dir = new_run_dir) np = stack_library_dir / '_test_stack_repoint_layer_1.json' check_stack = Stack.load(np) assert str(check_stack.run_dir) == str(new_run_dir)
[docs]def test_parser(): cli_arg_list = ['test_hw_amc_5min_simple.json', 'run', '-sp', str(outdir)] args = parse_args_helper(cli_arg_list) assert args.stack_file == 'test_hw_amc_5min_simple.json' assert args.mode == 'run' assert args.save_path == str(outdir) assert args.layer_library_dirs == None assert args.original_locations_preferred == True assert args.debug == False assert args.warning_only == False assert args.archive == True