diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..551ab7d --- /dev/null +++ b/pytest.ini @@ -0,0 +1,5 @@ +[pytest] +markers = + create: mark a test as create. + remove: mark test as remove. + parallel: mark test as parallel. diff --git a/run_tests.sh b/run_tests.sh index 5497027..53aa06e 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -1,39 +1,40 @@ #!/bin/bash -pytest tests/test_build.py -if [ $? -ne 0 ] ; then - echo "test_build error" ; - exit 1 -fi - -pytest tests/test_pyfms.py -if [ $? -ne 0 ] ; then - echo "test_pyfms error" ; - exit 1 -fi - -mpirun -n 8 python -m pytest tests/py_mpp/test_define_domains.py -if [ $? -ne 0 ] ; then - echo "test_pympp/test_define_domains error" ; - exit 1 -fi - -mpirun -n 4 python -m pytest tests/py_mpp/test_getset_domains.py -if [ $? -ne 0 ] ; then - echo "test_pympp/test_getset_domains error" ; - exit 1 -fi - -pytest tests/horiz_interp -if [ $? -ne 0 ] ; then - echo "test_horiz_interp error" ; - exit 1 -fi - -pytest tests/py_data_override/test_generate_files.py -mpirun -n 6 python -m pytest tests/py_data_override/test_data_override.py -if [ $? -ne 0 ] ; then - echo "test_data_override error" ; - exit 1 -fi -rm -rf INPUT input.nml data_table.yaml *logfile* *warnfile* +function create_input() { + pytest -m "create" $1 + if [ $? -ne 0 ] ; then exit 1 ; fi +} + +function remove_input() { + pytest -m "remove" $1 + if [ $? -ne 0 ] ; then exit 1 ; fi +} + +function run_test() { + eval $1 + if [ $? -ne 0 ] ; then exit 1 ; fi } + +run_test "pytest tests/test_build.py" + +test="tests/test_pyfms.py" +create_input $test +run_test "pytest -m parallel $test" +remove_input $test + +test="tests/py_mpp/test_define_domains.py" +create_input $test +run_test "mpirun -n 8 python -m pytest -m 'parallel' $test" +remove_input $test + +test="tests/py_mpp/test_getset_domains.py" +create_input $test +run_test "mpirun -n 4 python -m pytest -m 'parallel' tests/py_mpp/test_getset_domains.py" +remove_input $test + +run_test "pytest tests/py_horiz_interp" + +run_test "pytest tests/py_data_override/test_generate_files.py" +run_test "mpirun -n 6 python -m pytest -m 'parallel' tests/py_data_override/test_data_override.py" +remove_input "tests/py_data_override/test_data_override.py" + +rm -rf INPUT *logfile* *warnfile* diff --git a/tests/py_data_override/test_data_override.py b/tests/py_data_override/test_data_override.py index 74447c9..6b7c3ef 100644 --- a/tests/py_data_override/test_data_override.py +++ b/tests/py_data_override/test_data_override.py @@ -1,8 +1,13 @@ +import os +import shutil + import numpy as np +import pytest from pyfms import pyDataOverride, pyFMS, pyFMS_mpp, pyFMS_mpp_domains +@pytest.mark.parallel def test_data_override(): pyfms = pyFMS() @@ -45,3 +50,13 @@ def test_data_override(): ) pyfms.pyfms_end() assert data == 1.0 + + +@pytest.mark.remove +def test_remove_files(): + shutil.rmtree("INPUT") + os.remove("input.nml") + os.remove("data_table.yaml") + assert not os.path.exists("INPUT") + assert not os.path.isfile("input.nml") + assert not os.path.isfile("data_table.yaml") diff --git a/tests/horiz_interp/test_horiz_interp.py b/tests/py_horiz_interp/test_horiz_interp.py similarity index 89% rename from tests/horiz_interp/test_horiz_interp.py rename to tests/py_horiz_interp/test_horiz_interp.py index 20703a5..67cbecf 100755 --- a/tests/horiz_interp/test_horiz_interp.py +++ b/tests/py_horiz_interp/test_horiz_interp.py @@ -8,6 +8,12 @@ cfms_path = os.path.dirname(__file__) + "/../../cFMS/cLIBFMS/lib/libcFMS.so" +def test_create_input_nml(): + inputnml = open("input.nml", "w") + inputnml.close() + assert os.path.isfile("input.nml") + + def test_create_xgrid(): cfms = pyfms.pyFMS(cFMS_path=cfms_path).cFMS @@ -72,3 +78,8 @@ def test_create_xgrid(): assert np.array_equal(xgrid["i_src"], xgrid["i_tgt"]) assert np.array_equal(xgrid["j_src"], xgrid["j_tgt"]) assert np.array_equal(xgrid["xarea"], area) + + +def test_remove_input_nml(): + os.remove("input.nml") + assert not os.path.isfile("input.nml") diff --git a/tests/py_mpp/test_define_domains.py b/tests/py_mpp/test_define_domains.py index 010babd..e1f87e7 100644 --- a/tests/py_mpp/test_define_domains.py +++ b/tests/py_mpp/test_define_domains.py @@ -1,8 +1,19 @@ +import os + import numpy as np +import pytest from pyfms import pyDomain, pyFMS, pyFMS_mpp, pyFMS_mpp_domains, pyNestDomain +@pytest.mark.create +def test_create_input_nml(): + inputnml = open("input.nml", "w") + inputnml.close() + os.path.isfile("input.nml") + + +@pytest.mark.parallel def test_define_domains(): NX = 96 @@ -191,5 +202,11 @@ def test_define_domains(): # mpp.pyfms_error(errortype=1) +@pytest.mark.remove +def test_remove_input_nml(): + os.remove("input.nml") + assert not os.path.isfile("input.nml") + + if __name__ == "__main__": test_define_domains() diff --git a/tests/py_mpp/test_getset_domains.py b/tests/py_mpp/test_getset_domains.py index 5d2e057..3954576 100644 --- a/tests/py_mpp/test_getset_domains.py +++ b/tests/py_mpp/test_getset_domains.py @@ -1,8 +1,19 @@ +import os + import numpy as np +import pytest from pyfms import pyDomain, pyFMS, pyFMS_mpp, pyFMS_mpp_domains +@pytest.mark.create +def test_create_input_nml(): + inputnml = open("input.nml", "w") + inputnml.close() + assert os.path.isfile("input.nml") + + +@pytest.mark.parallel def test_getset_domains(): """ global domain @@ -142,5 +153,11 @@ def test_getset_domains(): pyfms.pyfms_end() +@pytest.mark.remove +def test_remove_input_nml(): + os.remove("input.nml") + assert not os.path.isfile("input.nml") + + if __name__ == "__main__": test_getset_domains() diff --git a/tests/test_pyfms.py b/tests/test_pyfms.py index 20ae686..7906c6e 100644 --- a/tests/test_pyfms.py +++ b/tests/test_pyfms.py @@ -1,5 +1,6 @@ import os +import pytest from mpi4py import MPI from pyfms import pyFMS @@ -8,6 +9,15 @@ cfms_path = os.path.dirname(__file__) + "/../cFMS/cLIBFMS/lib/libcFMS.so" +@pytest.mark.create +def test_create_input_nml(): + inputnml = open("input.nml", "w") + inputnml.close() + + assert os.path.isfile("input.nml") + + +@pytest.mark.parallel def test_pyfms_init(): assert os.path.exists(cfms_path) @@ -22,3 +32,9 @@ def test_pyfms_init(): assert isinstance(pyfmsobj, pyFMS) pyfmsobj.pyfms_end() + + +@pytest.mark.remove +def test_remove_input_nml(): + os.remove("input.nml") + assert not os.path.isfile("input.nml")