Unify tests for compiler command in the same file (#16891)
* Unify tests for compiler command in the same file Tests for the "spack compiler" command were previously scattered among different files. * Tests should use mutable_config, since they modify the compiler list
This commit is contained in:
parent
76142124d2
commit
d5ffec1b2f
105
lib/spack/spack/test/cmd/compiler.py
Normal file
105
lib/spack/spack/test/cmd/compiler.py
Normal file
@ -0,0 +1,105 @@
|
||||
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
import os
|
||||
|
||||
import pytest
|
||||
|
||||
import llnl.util.filesystem
|
||||
import spack.main
|
||||
import spack.version
|
||||
|
||||
compiler = spack.main.SpackCommand('compiler')
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def no_compilers_yaml(mutable_config, monkeypatch):
|
||||
"""Creates a temporary configuration without compilers.yaml"""
|
||||
|
||||
for scope, local_config in mutable_config.scopes.items():
|
||||
compilers_yaml = os.path.join(
|
||||
local_config.path, scope, 'compilers.yaml'
|
||||
)
|
||||
if os.path.exists(compilers_yaml):
|
||||
os.remove(compilers_yaml)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_compiler_version():
|
||||
return '4.5.3'
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def mock_compiler_dir(tmpdir, mock_compiler_version):
|
||||
"""Return a directory containing a fake, but detectable compiler."""
|
||||
|
||||
tmpdir.ensure('bin', dir=True)
|
||||
bin_dir = tmpdir.join('bin')
|
||||
|
||||
gcc_path = bin_dir.join('gcc')
|
||||
gxx_path = bin_dir.join('g++')
|
||||
gfortran_path = bin_dir.join('gfortran')
|
||||
|
||||
gcc_path.write("""\
|
||||
#!/bin/sh
|
||||
|
||||
for arg in "$@"; do
|
||||
if [ "$arg" = -dumpversion ]; then
|
||||
echo '%s'
|
||||
fi
|
||||
done
|
||||
""" % mock_compiler_version)
|
||||
|
||||
# Create some mock compilers in the temporary directory
|
||||
llnl.util.filesystem.set_executable(str(gcc_path))
|
||||
gcc_path.copy(gxx_path, mode=True)
|
||||
gcc_path.copy(gfortran_path, mode=True)
|
||||
|
||||
return str(tmpdir)
|
||||
|
||||
|
||||
@pytest.mark.regression('11678,13138')
|
||||
def test_compiler_find_without_paths(no_compilers_yaml, working_env, tmpdir):
|
||||
with tmpdir.as_cwd():
|
||||
with open('gcc', 'w') as f:
|
||||
f.write("""\
|
||||
#!/bin/bash
|
||||
echo "0.0.0"
|
||||
""")
|
||||
os.chmod('gcc', 0o700)
|
||||
|
||||
os.environ['PATH'] = str(tmpdir)
|
||||
output = compiler('find', '--scope=site')
|
||||
|
||||
assert 'gcc' in output
|
||||
|
||||
|
||||
def test_compiler_remove(mutable_config, mock_packages):
|
||||
args = spack.util.pattern.Bunch(
|
||||
all=True, compiler_spec='gcc@4.5.0', add_paths=[], scope=None
|
||||
)
|
||||
spack.cmd.compiler.compiler_remove(args)
|
||||
compilers = spack.compilers.all_compiler_specs()
|
||||
assert spack.spec.CompilerSpec("gcc@4.5.0") not in compilers
|
||||
|
||||
|
||||
def test_compiler_add(
|
||||
mutable_config, mock_packages, mock_compiler_dir, mock_compiler_version
|
||||
):
|
||||
# Compilers available by default.
|
||||
old_compilers = set(spack.compilers.all_compiler_specs())
|
||||
|
||||
args = spack.util.pattern.Bunch(
|
||||
all=None,
|
||||
compiler_spec=None,
|
||||
add_paths=[mock_compiler_dir],
|
||||
scope=None
|
||||
)
|
||||
spack.cmd.compiler.compiler_find(args)
|
||||
|
||||
# Ensure new compiler is in there
|
||||
new_compilers = set(spack.compilers.all_compiler_specs())
|
||||
new_compiler = new_compilers - old_compilers
|
||||
assert any(c.version == spack.version.Version(mock_compiler_version)
|
||||
for c in new_compiler)
|
@ -1,40 +0,0 @@
|
||||
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
import pytest
|
||||
|
||||
import os
|
||||
|
||||
import spack.main
|
||||
|
||||
compiler = spack.main.SpackCommand('compiler')
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def no_compilers_yaml(mutable_config, monkeypatch):
|
||||
"""Creates a temporary configuration without compilers.yaml"""
|
||||
|
||||
for scope, local_config in mutable_config.scopes.items():
|
||||
compilers_yaml = os.path.join(
|
||||
local_config.path, scope, 'compilers.yaml'
|
||||
)
|
||||
if os.path.exists(compilers_yaml):
|
||||
os.remove(compilers_yaml)
|
||||
|
||||
|
||||
@pytest.mark.regression('11678,13138')
|
||||
def test_compiler_find_without_paths(no_compilers_yaml, working_env, tmpdir):
|
||||
with tmpdir.as_cwd():
|
||||
with open('gcc', 'w') as f:
|
||||
f.write("""\
|
||||
#!/bin/bash
|
||||
echo "0.0.0"
|
||||
""")
|
||||
os.chmod('gcc', 0o700)
|
||||
|
||||
os.environ['PATH'] = str(tmpdir)
|
||||
output = compiler('find', '--scope=site')
|
||||
|
||||
assert 'gcc' in output
|
@ -1,73 +0,0 @@
|
||||
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
import pytest
|
||||
import llnl.util.filesystem
|
||||
|
||||
import spack.cmd.compiler
|
||||
import spack.compilers
|
||||
import spack.spec
|
||||
import spack.util.pattern
|
||||
from spack.version import Version
|
||||
|
||||
test_version = '4.5.3'
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def mock_compiler_dir(tmpdir):
|
||||
"""Return a directory containing a fake, but detectable compiler."""
|
||||
|
||||
tmpdir.ensure('bin', dir=True)
|
||||
bin_dir = tmpdir.join('bin')
|
||||
|
||||
gcc_path = bin_dir.join('gcc')
|
||||
gxx_path = bin_dir.join('g++')
|
||||
gfortran_path = bin_dir.join('gfortran')
|
||||
|
||||
gcc_path.write("""\
|
||||
#!/bin/sh
|
||||
|
||||
for arg in "$@"; do
|
||||
if [ "$arg" = -dumpversion ]; then
|
||||
echo '%s'
|
||||
fi
|
||||
done
|
||||
""" % test_version)
|
||||
|
||||
# Create some mock compilers in the temporary directory
|
||||
llnl.util.filesystem.set_executable(str(gcc_path))
|
||||
gcc_path.copy(gxx_path, mode=True)
|
||||
gcc_path.copy(gfortran_path, mode=True)
|
||||
|
||||
return str(tmpdir)
|
||||
|
||||
|
||||
@pytest.mark.usefixtures('config', 'mock_packages')
|
||||
class TestCompilerCommand(object):
|
||||
|
||||
def test_compiler_remove(self):
|
||||
args = spack.util.pattern.Bunch(
|
||||
all=True, compiler_spec='gcc@4.5.0', add_paths=[], scope=None
|
||||
)
|
||||
spack.cmd.compiler.compiler_remove(args)
|
||||
compilers = spack.compilers.all_compiler_specs()
|
||||
assert spack.spec.CompilerSpec("gcc@4.5.0") not in compilers
|
||||
|
||||
def test_compiler_add(self, mock_compiler_dir):
|
||||
# Compilers available by default.
|
||||
old_compilers = set(spack.compilers.all_compiler_specs())
|
||||
|
||||
args = spack.util.pattern.Bunch(
|
||||
all=None,
|
||||
compiler_spec=None,
|
||||
add_paths=[mock_compiler_dir],
|
||||
scope=None
|
||||
)
|
||||
spack.cmd.compiler.compiler_find(args)
|
||||
|
||||
# Ensure new compiler is in there
|
||||
new_compilers = set(spack.compilers.all_compiler_specs())
|
||||
new_compiler = new_compilers - old_compilers
|
||||
assert any(c.version == Version(test_version) for c in new_compiler)
|
Loading…
Reference in New Issue
Block a user