tests: removed code duplication (#14596)
- [x] Factored to a common place the fixture `testing_gpg_directory`, renamed it as `mock_gnupghome` - [x] Removed altogether the function `has_gnupg2` For `has_gnupg2`, since we were not trying to parse the version from the output of: ```console $ gpg2 --version ``` this is effectively equivalent to check if `spack.util.gpg.GPG.gpg()` was found. If we need to ensure version is `^2.X` it's probably better to do it in `spack.util.gpg.GPG.gpg()` than in a separate function.
This commit is contained in:
parent
7a0990903f
commit
74266ea789
@ -23,7 +23,7 @@
|
|||||||
import spack.cmd
|
import spack.cmd
|
||||||
import spack.config as config
|
import spack.config as config
|
||||||
import spack.fetch_strategy as fs
|
import spack.fetch_strategy as fs
|
||||||
import spack.util.gpg as gpg_util
|
import spack.util.gpg
|
||||||
import spack.relocate as relocate
|
import spack.relocate as relocate
|
||||||
import spack.util.spack_yaml as syaml
|
import spack.util.spack_yaml as syaml
|
||||||
import spack.mirror
|
import spack.mirror
|
||||||
@ -33,7 +33,6 @@
|
|||||||
from spack.spec import Spec
|
from spack.spec import Spec
|
||||||
from spack.stage import Stage
|
from spack.stage import Stage
|
||||||
from spack.util.gpg import Gpg
|
from spack.util.gpg import Gpg
|
||||||
from spack.util.executable import ProcessError
|
|
||||||
|
|
||||||
_build_cache_relative_path = 'build_cache'
|
_build_cache_relative_path = 'build_cache'
|
||||||
|
|
||||||
@ -110,14 +109,6 @@ class NewLayoutException(spack.error.SpackError):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def has_gnupg2():
|
|
||||||
try:
|
|
||||||
gpg_util.Gpg.gpg()('--version', output=os.devnull)
|
|
||||||
return True
|
|
||||||
except ProcessError:
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def build_cache_relative_path():
|
def build_cache_relative_path():
|
||||||
return _build_cache_relative_path
|
return _build_cache_relative_path
|
||||||
|
|
||||||
@ -243,27 +234,31 @@ def checksum_tarball(file):
|
|||||||
|
|
||||||
def sign_tarball(key, force, specfile_path):
|
def sign_tarball(key, force, specfile_path):
|
||||||
# Sign the packages if keys available
|
# Sign the packages if keys available
|
||||||
if not has_gnupg2():
|
if spack.util.gpg.Gpg.gpg() is None:
|
||||||
raise NoGpgException(
|
raise NoGpgException(
|
||||||
"gpg2 is not available in $PATH .\n"
|
"gpg2 is not available in $PATH .\n"
|
||||||
"Use spack install gnupg and spack load gnupg.")
|
"Use spack install gnupg and spack load gnupg.")
|
||||||
else:
|
|
||||||
if key is None:
|
if key is None:
|
||||||
keys = Gpg.signing_keys()
|
keys = Gpg.signing_keys()
|
||||||
if len(keys) == 1:
|
if len(keys) == 1:
|
||||||
key = keys[0]
|
key = keys[0]
|
||||||
|
|
||||||
if len(keys) > 1:
|
if len(keys) > 1:
|
||||||
raise PickKeyException(str(keys))
|
raise PickKeyException(str(keys))
|
||||||
|
|
||||||
if len(keys) == 0:
|
if len(keys) == 0:
|
||||||
msg = "No default key available for signing.\n"
|
msg = "No default key available for signing.\n"
|
||||||
msg += "Use spack gpg init and spack gpg create"
|
msg += "Use spack gpg init and spack gpg create"
|
||||||
msg += " to create a default key."
|
msg += " to create a default key."
|
||||||
raise NoKeyException(msg)
|
raise NoKeyException(msg)
|
||||||
|
|
||||||
if os.path.exists('%s.asc' % specfile_path):
|
if os.path.exists('%s.asc' % specfile_path):
|
||||||
if force:
|
if force:
|
||||||
os.remove('%s.asc' % specfile_path)
|
os.remove('%s.asc' % specfile_path)
|
||||||
else:
|
else:
|
||||||
raise NoOverwriteException('%s.asc' % specfile_path)
|
raise NoOverwriteException('%s.asc' % specfile_path)
|
||||||
|
|
||||||
Gpg.sign(key, specfile_path, '%s.asc' % specfile_path)
|
Gpg.sign(key, specfile_path, '%s.asc' % specfile_path)
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,18 +12,9 @@
|
|||||||
import spack.config as cfg
|
import spack.config as cfg
|
||||||
import spack.paths as spack_paths
|
import spack.paths as spack_paths
|
||||||
import spack.spec as spec
|
import spack.spec as spec
|
||||||
import spack.util.gpg as gpg_util
|
|
||||||
import spack.util.web as web_util
|
import spack.util.web as web_util
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function')
|
|
||||||
def testing_gpg_directory(tmpdir):
|
|
||||||
old_gpg_path = gpg_util.GNUPGHOME
|
|
||||||
gpg_util.GNUPGHOME = str(tmpdir.join('gpg'))
|
|
||||||
yield
|
|
||||||
gpg_util.GNUPGHOME = old_gpg_path
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def tmp_scope():
|
def tmp_scope():
|
||||||
"""Creates a temporary configuration scope"""
|
"""Creates a temporary configuration scope"""
|
||||||
@ -50,7 +41,7 @@ def test_urlencode_string():
|
|||||||
assert(s_enc == 'Spack+Test+Project')
|
assert(s_enc == 'Spack+Test+Project')
|
||||||
|
|
||||||
|
|
||||||
def test_import_signing_key(testing_gpg_directory):
|
def test_import_signing_key(mock_gnupghome):
|
||||||
signing_key_dir = spack_paths.mock_gpg_keys_path
|
signing_key_dir = spack_paths.mock_gpg_keys_path
|
||||||
signing_key_path = os.path.join(signing_key_dir, 'package-signing-key')
|
signing_key_path = os.path.join(signing_key_dir, 'package-signing-key')
|
||||||
with open(signing_key_path) as fd:
|
with open(signing_key_path) as fd:
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
import spack.config
|
import spack.config
|
||||||
import spack.environment as ev
|
import spack.environment as ev
|
||||||
import spack.hash_types as ht
|
import spack.hash_types as ht
|
||||||
import spack.util.gpg as gpg_util
|
|
||||||
from spack.main import SpackCommand
|
from spack.main import SpackCommand
|
||||||
import spack.paths as spack_paths
|
import spack.paths as spack_paths
|
||||||
import spack.repo as repo
|
import spack.repo as repo
|
||||||
@ -33,14 +32,6 @@
|
|||||||
git = exe.which('git', required=True)
|
git = exe.which('git', required=True)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function')
|
|
||||||
def testing_gpg_directory(tmpdir):
|
|
||||||
old_gpg_path = gpg_util.GNUPGHOME
|
|
||||||
gpg_util.GNUPGHOME = str(tmpdir.join('gpg'))
|
|
||||||
yield
|
|
||||||
gpg_util.GNUPGHOME = old_gpg_path
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
def env_deactivate():
|
def env_deactivate():
|
||||||
yield
|
yield
|
||||||
@ -393,7 +384,7 @@ def test_ci_generate_debug_with_custom_spack(tmpdir, mutable_mock_env_path,
|
|||||||
|
|
||||||
def test_ci_rebuild_basic(tmpdir, mutable_mock_env_path, env_deactivate,
|
def test_ci_rebuild_basic(tmpdir, mutable_mock_env_path, env_deactivate,
|
||||||
install_mockery, mock_packages,
|
install_mockery, mock_packages,
|
||||||
testing_gpg_directory):
|
mock_gnupghome):
|
||||||
working_dir = tmpdir.join('working_dir')
|
working_dir = tmpdir.join('working_dir')
|
||||||
|
|
||||||
mirror_dir = working_dir.join('mirror')
|
mirror_dir = working_dir.join('mirror')
|
||||||
@ -505,7 +496,7 @@ def test_ci_pushyaml(tmpdir):
|
|||||||
@pytest.mark.disable_clean_stage_check
|
@pytest.mark.disable_clean_stage_check
|
||||||
def test_push_mirror_contents(tmpdir, mutable_mock_env_path, env_deactivate,
|
def test_push_mirror_contents(tmpdir, mutable_mock_env_path, env_deactivate,
|
||||||
install_mockery, mock_packages, mock_fetch,
|
install_mockery, mock_packages, mock_fetch,
|
||||||
mock_stage, testing_gpg_directory):
|
mock_stage, mock_gnupghome):
|
||||||
working_dir = tmpdir.join('working_dir')
|
working_dir = tmpdir.join('working_dir')
|
||||||
|
|
||||||
mirror_dir = working_dir.join('mirror')
|
mirror_dir = working_dir.join('mirror')
|
||||||
|
@ -7,37 +7,22 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
import spack.util.gpg
|
||||||
|
|
||||||
from spack.paths import mock_gpg_data_path, mock_gpg_keys_path
|
from spack.paths import mock_gpg_data_path, mock_gpg_keys_path
|
||||||
import spack.util.gpg as gpg_util
|
|
||||||
from spack.main import SpackCommand
|
from spack.main import SpackCommand
|
||||||
from spack.util.executable import ProcessError
|
from spack.util.executable import ProcessError
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function')
|
|
||||||
def testing_gpg_directory(tmpdir):
|
|
||||||
old_gpg_path = gpg_util.GNUPGHOME
|
|
||||||
gpg_util.GNUPGHOME = str(tmpdir.join('gpg'))
|
|
||||||
yield
|
|
||||||
gpg_util.GNUPGHOME = old_gpg_path
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function')
|
@pytest.fixture(scope='function')
|
||||||
def gpg():
|
def gpg():
|
||||||
return SpackCommand('gpg')
|
return SpackCommand('gpg')
|
||||||
|
|
||||||
|
|
||||||
def has_gnupg2():
|
|
||||||
try:
|
|
||||||
gpg_util.Gpg.gpg()('--version', output=os.devnull)
|
|
||||||
return True
|
|
||||||
except Exception:
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.maybeslow
|
@pytest.mark.maybeslow
|
||||||
@pytest.mark.skipif(not has_gnupg2(),
|
@pytest.mark.skipif(not spack.util.gpg.Gpg.gpg(),
|
||||||
reason='These tests require gnupg2')
|
reason='These tests require gnupg2')
|
||||||
def test_gpg(gpg, tmpdir, testing_gpg_directory):
|
def test_gpg(gpg, tmpdir, mock_gnupghome):
|
||||||
# Verify a file with an empty keyring.
|
# Verify a file with an empty keyring.
|
||||||
with pytest.raises(ProcessError):
|
with pytest.raises(ProcessError):
|
||||||
gpg('verify', os.path.join(mock_gpg_data_path, 'content.txt'))
|
gpg('verify', os.path.join(mock_gpg_data_path, 'content.txt'))
|
||||||
@ -77,7 +62,7 @@ def test_gpg(gpg, tmpdir, testing_gpg_directory):
|
|||||||
'--export', str(keypath),
|
'--export', str(keypath),
|
||||||
'Spack testing 1',
|
'Spack testing 1',
|
||||||
'spack@googlegroups.com')
|
'spack@googlegroups.com')
|
||||||
keyfp = gpg_util.Gpg.signing_keys()[0]
|
keyfp = spack.util.gpg.Gpg.signing_keys()[0]
|
||||||
|
|
||||||
# List the keys.
|
# List the keys.
|
||||||
# TODO: Test the output here.
|
# TODO: Test the output here.
|
||||||
|
@ -33,6 +33,8 @@
|
|||||||
import spack.repo
|
import spack.repo
|
||||||
import spack.stage
|
import spack.stage
|
||||||
import spack.util.executable
|
import spack.util.executable
|
||||||
|
import spack.util.gpg
|
||||||
|
|
||||||
from spack.util.pattern import Bunch
|
from spack.util.pattern import Bunch
|
||||||
from spack.dependency import Dependency
|
from spack.dependency import Dependency
|
||||||
from spack.package import PackageBase
|
from spack.package import PackageBase
|
||||||
@ -670,6 +672,12 @@ def writer_key_function():
|
|||||||
)
|
)
|
||||||
return _impl
|
return _impl
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture()
|
||||||
|
def mock_gnupghome(tmpdir, monkeypatch):
|
||||||
|
monkeypatch.setattr(spack.util.gpg, 'GNUPGHOME', str(tmpdir.join('gpg')))
|
||||||
|
|
||||||
|
|
||||||
##########
|
##########
|
||||||
# Fake archives and repositories
|
# Fake archives and repositories
|
||||||
##########
|
##########
|
||||||
|
@ -19,10 +19,10 @@
|
|||||||
import spack.store
|
import spack.store
|
||||||
import spack.binary_distribution as bindist
|
import spack.binary_distribution as bindist
|
||||||
import spack.cmd.buildcache as buildcache
|
import spack.cmd.buildcache as buildcache
|
||||||
|
import spack.util.gpg
|
||||||
from spack.spec import Spec
|
from spack.spec import Spec
|
||||||
from spack.paths import mock_gpg_keys_path
|
from spack.paths import mock_gpg_keys_path
|
||||||
from spack.fetch_strategy import URLFetchStrategy, FetchStrategyComposite
|
from spack.fetch_strategy import URLFetchStrategy, FetchStrategyComposite
|
||||||
from spack.util.executable import ProcessError
|
|
||||||
from spack.relocate import needs_binary_relocation, needs_text_relocation
|
from spack.relocate import needs_binary_relocation, needs_text_relocation
|
||||||
from spack.relocate import strings_contains_installroot
|
from spack.relocate import strings_contains_installroot
|
||||||
from spack.relocate import get_patchelf, relocate_text, relocate_links
|
from spack.relocate import get_patchelf, relocate_text, relocate_links
|
||||||
@ -31,22 +31,6 @@
|
|||||||
from spack.relocate import modify_macho_object, macho_get_paths
|
from spack.relocate import modify_macho_object, macho_get_paths
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function')
|
|
||||||
def testing_gpg_directory(tmpdir):
|
|
||||||
old_gpg_path = spack.util.gpg.GNUPGHOME
|
|
||||||
spack.util.gpg.GNUPGHOME = str(tmpdir.join('gpg'))
|
|
||||||
yield
|
|
||||||
spack.util.gpg.GNUPGHOME = old_gpg_path
|
|
||||||
|
|
||||||
|
|
||||||
def has_gnupg2():
|
|
||||||
try:
|
|
||||||
spack.util.gpg.Gpg.gpg()('--version', output=os.devnull)
|
|
||||||
return True
|
|
||||||
except ProcessError:
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def fake_fetchify(url, pkg):
|
def fake_fetchify(url, pkg):
|
||||||
"""Fake the URL for a package so it downloads from a file."""
|
"""Fake the URL for a package so it downloads from a file."""
|
||||||
fetcher = FetchStrategyComposite()
|
fetcher = FetchStrategyComposite()
|
||||||
@ -54,7 +38,7 @@ def fake_fetchify(url, pkg):
|
|||||||
pkg.fetcher = fetcher
|
pkg.fetcher = fetcher
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures('install_mockery', 'testing_gpg_directory')
|
@pytest.mark.usefixtures('install_mockery', 'mock_gnupghome')
|
||||||
def test_buildcache(mock_archive, tmpdir):
|
def test_buildcache(mock_archive, tmpdir):
|
||||||
# tweak patchelf to only do a download
|
# tweak patchelf to only do a download
|
||||||
spec = Spec("patchelf")
|
spec = Spec("patchelf")
|
||||||
@ -107,7 +91,7 @@ def test_buildcache(mock_archive, tmpdir):
|
|||||||
buildcache.setup_parser(parser)
|
buildcache.setup_parser(parser)
|
||||||
|
|
||||||
# Create a private key to sign package with if gpg2 available
|
# Create a private key to sign package with if gpg2 available
|
||||||
if has_gnupg2():
|
if spack.util.gpg.Gpg.gpg():
|
||||||
spack.util.gpg.Gpg.create(name='test key 1', expires='0',
|
spack.util.gpg.Gpg.create(name='test key 1', expires='0',
|
||||||
email='spack@googlegroups.com',
|
email='spack@googlegroups.com',
|
||||||
comment='Spack test key')
|
comment='Spack test key')
|
||||||
|
Loading…
Reference in New Issue
Block a user