diff options
Diffstat (limited to 'lib/spack/spack/test/cmd/buildcache.py')
-rw-r--r-- | lib/spack/spack/test/cmd/buildcache.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/spack/spack/test/cmd/buildcache.py b/lib/spack/spack/test/cmd/buildcache.py index d67f709a6b..bf615634e7 100644 --- a/lib/spack/spack/test/cmd/buildcache.py +++ b/lib/spack/spack/test/cmd/buildcache.py @@ -6,6 +6,7 @@ import errno import os import platform +import shutil import pytest @@ -172,3 +173,79 @@ def test_update_key_index(tmpdir, mutable_mock_env_path, mirror('rm', 'test-mirror') assert 'index.json' in key_dir_list + + +def test_buildcache_sync(mutable_mock_env_path, install_mockery_mutable_config, + mock_packages, mock_fetch, mock_stage, tmpdir): + """ + Make sure buildcache sync works in an environment-aware manner, ignoring + any specs that may be in the mirror but not in the environment. + """ + working_dir = tmpdir.join('working_dir') + + src_mirror_dir = working_dir.join('src_mirror').strpath + src_mirror_url = 'file://{0}'.format(src_mirror_dir) + + dest_mirror_dir = working_dir.join('dest_mirror').strpath + dest_mirror_url = 'file://{0}'.format(dest_mirror_dir) + + in_env_pkg = 'trivial-install-test-package' + out_env_pkg = 'libdwarf' + + def verify_mirror_contents(): + dest_list = os.listdir( + os.path.join(dest_mirror_dir, 'build_cache')) + + found_pkg = False + + for p in dest_list: + assert(out_env_pkg not in p) + if in_env_pkg in p: + found_pkg = True + + if not found_pkg: + print('Expected to find {0} in {1}'.format( + in_env_pkg, dest_mirror_dir)) + assert(False) + + # Install a package and put it in the buildcache + s = Spec(out_env_pkg).concretized() + install(s.name) + buildcache( + 'create', '-u', '-f', '-a', '--mirror-url', src_mirror_url, s.name) + + env('create', 'test') + with ev.read('test'): + add(in_env_pkg) + install() + buildcache( + 'create', '-u', '-f', '-a', '--mirror-url', src_mirror_url, in_env_pkg) + + # Now run the spack buildcache sync command with all the various options + # for specifying mirrors + + # Use urls to specify mirrors + buildcache('sync', + '--src-mirror-url', src_mirror_url, + '--dest-mirror-url', dest_mirror_url) + + verify_mirror_contents() + shutil.rmtree(dest_mirror_dir) + + # Use local directory paths to specify fs locations + buildcache('sync', + '--src-directory', src_mirror_dir, + '--dest-directory', dest_mirror_dir) + + verify_mirror_contents() + shutil.rmtree(dest_mirror_dir) + + # Use mirror names to specify mirrors + mirror('add', 'src', src_mirror_url) + mirror('add', 'dest', dest_mirror_url) + + buildcache('sync', + '--src-mirror-name', 'src', + '--dest-mirror-name', 'dest') + + verify_mirror_contents() |