parallel-netcdf: new test API (#45170)
* parallel-netcdf: new test API * parallel-netcdf: fix test args and tweak docstring and variables --------- Co-authored-by: Tamara Dahlgren <dahlgren1@llnl.gov>
This commit is contained in:
parent
cb8878aaf4
commit
4a4f156d99
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
|
||||||
from spack.package import *
|
from spack.package import *
|
||||||
|
|
||||||
|
|
||||||
@ -27,11 +29,11 @@ class ParallelNetcdf(AutotoolsPackage):
|
|||||||
|
|
||||||
def url_for_version(self, version):
|
def url_for_version(self, version):
|
||||||
if version >= Version("1.11.0"):
|
if version >= Version("1.11.0"):
|
||||||
url = "https://parallel-netcdf.github.io/Release/pnetcdf-{0}.tar.gz"
|
url = f"https://parallel-netcdf.github.io/Release/pnetcdf-{version.dotted}.tar.gz"
|
||||||
else:
|
else:
|
||||||
url = "https://parallel-netcdf.github.io/Release/parallel-netcdf-{0}.tar.gz"
|
url = f"https://parallel-netcdf.github.io/Release/parallel-netcdf-{version.dotted}.tar.gz"
|
||||||
|
|
||||||
return url.format(version.dotted)
|
return url
|
||||||
|
|
||||||
version("master", branch="master")
|
version("master", branch="master")
|
||||||
version("1.12.3", sha256="439e359d09bb93d0e58a6e3f928f39c2eae965b6c97f64e67cd42220d6034f77")
|
version("1.12.3", sha256="439e359d09bb93d0e58a6e3f928f39c2eae965b6c97f64e67cd42220d6034f77")
|
||||||
@ -101,10 +103,9 @@ def libs(self):
|
|||||||
if libs:
|
if libs:
|
||||||
return libs
|
return libs
|
||||||
|
|
||||||
msg = "Unable to recursively locate {0} {1} libraries in {2}"
|
msg = f"Unable to recursively locate {'shared' if shared else 'static'} \
|
||||||
raise spack.error.NoLibrariesError(
|
{self.spec.name} libraries in {self.spec.prefix}"
|
||||||
msg.format("shared" if shared else "static", self.spec.name, self.spec.prefix)
|
raise spack.error.NoLibrariesError(msg)
|
||||||
)
|
|
||||||
|
|
||||||
@when("@master")
|
@when("@master")
|
||||||
def autoreconf(self, spec, prefix):
|
def autoreconf(self, spec, prefix):
|
||||||
@ -134,7 +135,7 @@ def configure_args(self):
|
|||||||
|
|
||||||
for key, value in sorted(flags.items()):
|
for key, value in sorted(flags.items()):
|
||||||
if value:
|
if value:
|
||||||
args.append("{0}={1}".format(key, " ".join(value)))
|
args.append(f"{key}={' '.join(value)}")
|
||||||
|
|
||||||
if self.version >= Version("1.8"):
|
if self.version >= Version("1.8"):
|
||||||
args.append("--enable-relax-coord-bound")
|
args.append("--enable-relax-coord-bound")
|
||||||
@ -157,46 +158,46 @@ def configure_args(self):
|
|||||||
def cache_test_sources(self):
|
def cache_test_sources(self):
|
||||||
"""Copy the example source files after the package is installed to an
|
"""Copy the example source files after the package is installed to an
|
||||||
install test subdirectory for use during `spack test run`."""
|
install test subdirectory for use during `spack test run`."""
|
||||||
self.cache_extra_test_sources([self.examples_src_dir])
|
cache_extra_test_sources(self, [self.examples_src_dir])
|
||||||
|
|
||||||
def test(self):
|
def test_column_wise(self):
|
||||||
|
"""build and run column_wise"""
|
||||||
test_dir = join_path(self.test_suite.current_test_cache_dir, self.examples_src_dir)
|
test_dir = join_path(self.test_suite.current_test_cache_dir, self.examples_src_dir)
|
||||||
# pnetcdf has many examples to serve as a suitable smoke check.
|
# pnetcdf has many examples to serve as a suitable smoke check.
|
||||||
# column_wise was chosen based on the E4S test suite. Other
|
# column_wise was chosen based on the E4S test suite. Other
|
||||||
# examples should work as well.
|
# examples should work as well.
|
||||||
test_exe = "column_wise"
|
test_exe = "column_wise"
|
||||||
options = [
|
options = [
|
||||||
"{0}.cpp".format(test_exe),
|
f"{test_exe}.cpp",
|
||||||
"-o",
|
"-o",
|
||||||
test_exe,
|
test_exe,
|
||||||
"-lpnetcdf",
|
"-lpnetcdf",
|
||||||
"-L{0}".format(self.prefix.lib),
|
f"-L{self.prefix.lib}",
|
||||||
"-I{0}".format(self.prefix.include),
|
f"-I{self.prefix.include}",
|
||||||
]
|
]
|
||||||
reason = "test: compiling and linking pnetcdf example"
|
|
||||||
self.run_test(
|
with working_dir(test_dir):
|
||||||
self.spec["mpi"].mpicxx,
|
mpicxx = which(self.spec["mpi"].prefix.bin.mpicxx)
|
||||||
options,
|
mpicxx(*options)
|
||||||
[],
|
|
||||||
installed=False,
|
|
||||||
purpose=reason,
|
|
||||||
work_dir=test_dir,
|
|
||||||
)
|
|
||||||
mpiexe_list = [
|
mpiexe_list = [
|
||||||
self.spec["mpi"].prefix.bin.srun,
|
"srun",
|
||||||
self.spec["mpi"].prefix.bin.mpirun,
|
self.spec["mpi"].prefix.bin.mpirun,
|
||||||
self.spec["mpi"].prefix.bin.mpiexec,
|
self.spec["mpi"].prefix.bin.mpiexec,
|
||||||
]
|
]
|
||||||
|
|
||||||
for mpiexe in mpiexe_list:
|
for mpiexe in mpiexe_list:
|
||||||
if os.path.isfile(mpiexe):
|
tty.info(f"Attempting to build and launch with {os.path.basename(mpiexe)}")
|
||||||
self.run_test(
|
try:
|
||||||
mpiexe,
|
args = ["--immediate=30"] if mpiexe == "srun" else []
|
||||||
["-n", "1", test_exe],
|
args += ["-n", "1", test_exe]
|
||||||
[],
|
exe = which(mpiexe)
|
||||||
installed=False,
|
exe(*args)
|
||||||
purpose="test: pnetcdf smoke test",
|
rm = which("rm")
|
||||||
skip_missing=True,
|
rm("-f", "column_wise")
|
||||||
work_dir=test_dir,
|
return
|
||||||
)
|
|
||||||
break
|
except (Exception, ProcessError) as err:
|
||||||
self.run_test("rm", ["-f", test_exe], work_dir=test_dir)
|
tty.info(f"Skipping {mpiexe}: {str(err)}")
|
||||||
|
|
||||||
|
assert False, "No MPI executable was found"
|
||||||
|
Loading…
Reference in New Issue
Block a user