def test_relative_rpaths_install_default_layout(tmpdir, install_mockery): """ Test the creation and installation of buildcaches with relative rpaths into the default directory layout scheme. """ gspec = Spec('garply') gspec.concretize() cspec = Spec('corge') cspec.concretize() global mirror_path_rel mparser = argparse.ArgumentParser() mirror.setup_parser(mparser) margs = mparser.parse_args( ['add', '--scope', 'site', 'test-mirror-rel', 'file://%s' % mirror_path_rel]) mirror.mirror(mparser, margs) iparser = argparse.ArgumentParser() install.setup_parser(iparser) # setup argument parser parser = argparse.ArgumentParser() buildcache.setup_parser(parser) # set default buildcache args install_args = ['install', '-a', '-u', '-f', cspec.name] # install buildcache created with relativized rpaths args = parser.parse_args(install_args) buildcache.buildcache(parser, args) # This gives warning that spec is already installed buildcache.buildcache(parser, args) # Uninstall the package and deps uparser = argparse.ArgumentParser() uninstall.setup_parser(uparser) uargs = uparser.parse_args(['-y', '--dependents', gspec.name]) uninstall.uninstall(uparser, uargs) # install build cache buildcache.buildcache(parser, args) # test overwrite install install_args.insert(install_args.index('-a'), '-f') args = parser.parse_args(install_args) buildcache.buildcache(parser, args) bindist.clear_spec_cache() spack.stage.purge() margs = mparser.parse_args( ['rm', '--scope', 'site', 'test-mirror-rel']) mirror.mirror(mparser, margs)
def test_built_spec_cache(tmpdir, install_mockery): """ Because the buildcache list command fetches the buildcache index and uses it to populate the binary_distribution built spec cache, when this test calls get_mirrors_for_spec, it is testing the popluation of that cache from a buildcache index. """ global mirror_path_rel mparser = argparse.ArgumentParser() mirror.setup_parser(mparser) margs = mparser.parse_args( ['add', '--scope', 'site', 'test-mirror-rel', 'file://%s' % mirror_path_rel]) mirror.mirror(mparser, margs) # setup argument parser parser = argparse.ArgumentParser() buildcache.setup_parser(parser) list_args = ['list', '-a', '-l'] args = parser.parse_args(list_args) buildcache.buildcache(parser, args) gspec = Spec('garply') gspec.concretize() cspec = Spec('corge') cspec.concretize() full_hash_map = { 'garply': gspec.full_hash(), 'corge': cspec.full_hash(), } gspec_results = bindist.get_mirrors_for_spec(gspec) gspec_mirrors = {} for result in gspec_results: s = result['spec'] assert(s._full_hash == full_hash_map[s.name]) assert(result['mirror_url'] not in gspec_mirrors) gspec_mirrors[result['mirror_url']] = True cspec_results = bindist.get_mirrors_for_spec(cspec, full_hash_match=True) cspec_mirrors = {} for result in cspec_results: s = result['spec'] assert(s._full_hash == full_hash_map[s.name]) assert(result['mirror_url'] not in cspec_mirrors) cspec_mirrors[result['mirror_url']] = True bindist.clear_spec_cache() margs = mparser.parse_args( ['rm', '--scope', 'site', 'test-mirror-rel']) mirror.mirror(mparser, margs)
def test_built_spec_cache(tmpdir, install_mockery): """ Test what's the situation now """ global mirror_path_rel mparser = argparse.ArgumentParser() mirror.setup_parser(mparser) margs = mparser.parse_args([ 'add', '--scope', 'site', 'test-mirror-rel', 'file://%s' % mirror_path_rel ]) mirror.mirror(mparser, margs) # setup argument parser parser = argparse.ArgumentParser() buildcache.setup_parser(parser) list_args = ['list', '-a', '-l'] args = parser.parse_args(list_args) buildcache.buildcache(parser, args) gspec = Spec('garply') gspec.concretize() cspec = Spec('corge') cspec.concretize() full_hash_map = { 'garply': gspec.full_hash(), 'corge': cspec.full_hash(), } gspec_results = bindist.get_spec(gspec) gspec_mirrors = {} for result in gspec_results: s = result['spec'] assert (s._full_hash == full_hash_map[s.name]) assert (result['mirror_url'] not in gspec_mirrors) gspec_mirrors[result['mirror_url']] = True cspec_results = bindist.get_spec(cspec, full_hash_match=True) cspec_mirrors = {} for result in cspec_results: s = result['spec'] assert (s._full_hash == full_hash_map[s.name]) assert (result['mirror_url'] not in cspec_mirrors) cspec_mirrors[result['mirror_url']] = True bindist.clear_spec_cache() margs = mparser.parse_args(['rm', '--scope', 'site', 'test-mirror-rel']) mirror.mirror(mparser, margs)
def test_relative_rpaths_create_default_layout(tmpdir, mirror_directory_rel, install_mockery): """ Test the creation and installation of buildcaches with relative rpaths into the default directory layout scheme. """ gspec = Spec('garply') gspec.concretize() cspec = Spec('corge') cspec.concretize() global mirror_path_rel mirror_path_rel = mirror_directory_rel # Install patchelf needed for relocate in linux test environment iparser = argparse.ArgumentParser() install.setup_parser(iparser) # Install some packages with dependent packages iargs = iparser.parse_args(['--no-cache', cspec.name]) install.install(iparser, iargs) # setup argument parser parser = argparse.ArgumentParser() buildcache.setup_parser(parser) # set default buildcache args create_args = [ 'create', '-a', '-u', '-r', '-d', str(mirror_path_rel), cspec.name ] # create build cache with relatived rpaths args = parser.parse_args(create_args) buildcache.buildcache(parser, args) # create mirror index args = parser.parse_args( ['update-index', '-d', 'file://%s' % str(mirror_path_rel)]) buildcache.buildcache(parser, args) # Uninstall the package and deps uparser = argparse.ArgumentParser() uninstall.setup_parser(uparser) uargs = uparser.parse_args(['-y', '--dependents', gspec.name]) uninstall.uninstall(uparser, uargs) bindist.clear_spec_cache() spack.stage.purge()
def test_default_rpaths_install_nondefault_layout(tmpdir, install_mockery): """ Test the creation and installation of buildcaches with default rpaths into the non-default directory layout scheme. """ gspec = Spec('garply') gspec.concretize() cspec = Spec('corge') cspec.concretize() global mirror_path_def mparser = argparse.ArgumentParser() mirror.setup_parser(mparser) margs = mparser.parse_args( ['add', '--scope', 'site', 'test-mirror-def', 'file://%s' % mirror_path_def]) mirror.mirror(mparser, margs) # setup argument parser parser = argparse.ArgumentParser() buildcache.setup_parser(parser) # Set default buildcache args install_args = ['install', '-a', '-u', '%s' % cspec.name] # Install some packages with dependent packages # test install in non-default install path scheme args = parser.parse_args(install_args) buildcache.buildcache(parser, args) # test force install in non-default install path scheme install_args.insert(install_args.index('-a'), '-f') args = parser.parse_args(install_args) buildcache.buildcache(parser, args) bindist.clear_spec_cache() spack.stage.purge() margs = mparser.parse_args( ['rm', '--scope', 'site', 'test-mirror-def']) mirror.mirror(mparser, margs)
def test_relative_rpaths_install_nondefault(tmpdir, install_mockery): """ Test the installation of buildcaches with relativized rpaths into the non-default directory layout scheme. """ gspec = Spec('garply') gspec.concretize() cspec = Spec('corge') cspec.concretize() global mirror_path_rel mparser = argparse.ArgumentParser() mirror.setup_parser(mparser) margs = mparser.parse_args( ['add', '--scope', 'site', 'test-mirror-rel', 'file://%s' % mirror_path_rel]) mirror.mirror(mparser, margs) iparser = argparse.ArgumentParser() install.setup_parser(iparser) # setup argument parser parser = argparse.ArgumentParser() buildcache.setup_parser(parser) # Set default buildcache args install_args = ['install', '-a', '-u', '-f', '%s' % cspec.name] # test install in non-default install path scheme and relative path args = parser.parse_args(install_args) buildcache.buildcache(parser, args) bindist.clear_spec_cache() spack.stage.purge() margs = mparser.parse_args( ['rm', '--scope', 'site', 'test-mirror-rel']) mirror.mirror(mparser, margs)
def test_default_rpaths_create_install_default_layout(tmpdir, mirror_directory_def, install_mockery): """ Test the creation and installation of buildcaches with default rpaths into the default directory layout scheme. """ gspec = Spec('garply') gspec.concretize() cspec = Spec('corge') cspec.concretize() iparser = argparse.ArgumentParser() install.setup_parser(iparser) # Install some packages with dependent packages iargs = iparser.parse_args(['--no-cache', cspec.name]) install.install(iparser, iargs) global mirror_path_def mirror_path_def = mirror_directory_def mparser = argparse.ArgumentParser() mirror.setup_parser(mparser) margs = mparser.parse_args( ['add', '--scope', 'site', 'test-mirror-def', 'file://%s' % mirror_path_def]) mirror.mirror(mparser, margs) margs = mparser.parse_args(['list']) mirror.mirror(mparser, margs) # setup argument parser parser = argparse.ArgumentParser() buildcache.setup_parser(parser) # Set default buildcache args create_args = ['create', '-a', '-u', '-d', str(mirror_path_def), cspec.name] install_args = ['install', '-a', '-u', cspec.name] # Create a buildache args = parser.parse_args(create_args) buildcache.buildcache(parser, args) # Test force overwrite create buildcache create_args.insert(create_args.index('-a'), '-f') args = parser.parse_args(create_args) buildcache.buildcache(parser, args) # create mirror index args = parser.parse_args(['update-index', '-d', 'file://%s' % str(mirror_path_def)]) buildcache.buildcache(parser, args) # list the buildcaches in the mirror args = parser.parse_args(['list', '-a', '-l', '-v']) buildcache.buildcache(parser, args) # Uninstall the package and deps uparser = argparse.ArgumentParser() uninstall.setup_parser(uparser) uargs = uparser.parse_args(['-y', '--dependents', gspec.name]) uninstall.uninstall(uparser, uargs) # test install args = parser.parse_args(install_args) buildcache.buildcache(parser, args) # This gives warning that spec is already installed buildcache.buildcache(parser, args) # test overwrite install install_args.insert(install_args.index('-a'), '-f') args = parser.parse_args(install_args) buildcache.buildcache(parser, args) args = parser.parse_args(['keys', '-f']) buildcache.buildcache(parser, args) args = parser.parse_args(['list']) buildcache.buildcache(parser, args) args = parser.parse_args(['list', '-a']) buildcache.buildcache(parser, args) args = parser.parse_args(['list', '-l', '-v']) buildcache.buildcache(parser, args) bindist.clear_spec_cache() spack.stage.purge() margs = mparser.parse_args( ['rm', '--scope', 'site', 'test-mirror-def']) mirror.mirror(mparser, margs)
def test_update_sbang(tmpdir, test_mirror): """Test the creation and installation of buildcaches with default rpaths into the non-default directory layout scheme, triggering an update of the sbang. """ scheme = os.path.join( '${name}', '${version}', '${architecture}-${compiler.name}-${compiler.version}-${hash}') spec_str = 'old-sbang' # Concretize a package with some old-fashioned sbang lines. old_spec = Spec(spec_str).concretized() old_spec_hash_str = '/{0}'.format(old_spec.dag_hash()) # Need a fake mirror with *function* scope. mirror_dir = test_mirror mirror_url = 'file://{0}'.format(mirror_dir) # Assume all commands will concretize old_spec the same way. install_cmd('--no-cache', old_spec.name) # Create a buildcache with the installed spec. buildcache_cmd('create', '-u', '-a', '-d', mirror_dir, old_spec_hash_str) # Need to force an update of the buildcache index buildcache_cmd('update-index', '-d', mirror_url) # Uninstall the original package. uninstall_cmd('-y', old_spec_hash_str) # Switch the store to the new install tree locations newtree_dir = tmpdir.join('newtree') s = spack.store.Store(str(newtree_dir)) s.layout = DirectoryLayout(str(newtree_dir), path_scheme=scheme) with spack.store.use_store(s): new_spec = Spec('old-sbang') new_spec.concretize() assert new_spec.dag_hash() == old_spec.dag_hash() # Install package from buildcache buildcache_cmd('install', '-a', '-u', '-f', new_spec.name) # Continue blowing away caches bindist.clear_spec_cache() spack.stage.purge() # test that the sbang was updated by the move sbang_style_1_expected = '''{0} #!/usr/bin/env python {1} '''.format(sbang.sbang_shebang_line(), new_spec.prefix.bin) sbang_style_2_expected = '''{0} #!/usr/bin/env python {1} '''.format(sbang.sbang_shebang_line(), new_spec.prefix.bin) installed_script_style_1_path = new_spec.prefix.bin.join( 'sbang-style-1.sh') assert sbang_style_1_expected == \ open(str(installed_script_style_1_path)).read() installed_script_style_2_path = new_spec.prefix.bin.join( 'sbang-style-2.sh') assert sbang_style_2_expected == \ open(str(installed_script_style_2_path)).read() uninstall_cmd('-y', '/%s' % new_spec.dag_hash())
def test_update_sbang(tmpdir, install_mockery, function_mirror): """ Test the creation and installation of buildcaches with default rpaths into the non-default directory layout scheme, triggering an update of the sbang. """ # Save the original store and layout before we touch ANYTHING. real_store = spack.store.store real_layout = spack.store.layout # Concretize a package with some old-fashioned sbang lines. sspec = Spec('old-sbang') sspec.concretize() # Need a fake mirror with *function* scope. mirror_dir = function_mirror # Assumes all commands will concretize sspec the same way. install_cmd('--no-cache', sspec.name) # Create a buildcache with the installed spec. buildcache_cmd('create', '-u', '-a', '-d', mirror_dir, '/%s' % sspec.dag_hash()) # Need to force an update of the buildcache index buildcache_cmd('update-index', '-d', 'file://%s' % mirror_dir) # Uninstall the original package. uninstall_cmd('-y', '/%s' % sspec.dag_hash()) try: # New install tree locations... # Too fine-grained to do be done in a fixture spack.store.store = spack.store.Store(str(tmpdir.join('newtree'))) spack.store.layout = YamlDirectoryLayout( str(tmpdir.join('newtree')), path_scheme=ndef_install_path_scheme) # noqa: E501 # Install package from buildcache buildcache_cmd('install', '-a', '-u', '-f', sspec.name) # Continue blowing away caches bindist.clear_spec_cache() spack.stage.purge() # test that the sbang was updated by the move sbang_style_1_expected = '''{0} #!/usr/bin/env python {1} '''.format(sbang.sbang_shebang_line(), sspec.prefix.bin) sbang_style_2_expected = '''{0} #!/usr/bin/env python {1} '''.format(sbang.sbang_shebang_line(), sspec.prefix.bin) installed_script_style_1_path = \ sspec.prefix.bin.join('sbang-style-1.sh') assert sbang_style_1_expected == \ open(str(installed_script_style_1_path)).read() installed_script_style_2_path = \ sspec.prefix.bin.join('sbang-style-2.sh') assert sbang_style_2_expected == \ open(str(installed_script_style_2_path)).read() uninstall_cmd('-y', '/%s' % sspec.dag_hash()) finally: spack.store.store = real_store spack.store.layout = real_layout