def test_get_module_upstream(): s1 = MockSpec('spec-1') tcl_module_index = """\ module_index: {0}: path: /path/to/a use_name: a """.format(s1.dag_hash()) module_indices = [{}, { 'tcl': spack.modules.common._read_module_index(tcl_module_index) }] dbs = ['d0', 'd1'] mock_db = MockDb(dbs, {s1.dag_hash(): 'd1'}) upstream_index = UpstreamModuleIndex(mock_db, module_indices) MockPackage = collections.namedtuple('MockPackage', ['installed_upstream']) setattr(s1, "package", MockPackage(True)) try: old_index = spack.modules.common.upstream_module_index spack.modules.common.upstream_module_index = upstream_index m1_path = spack.modules.common.get_module('tcl', s1, True) assert m1_path == '/path/to/a' finally: spack.modules.common.upstream_module_index = old_index
def test_upstream_module_index(): s1 = MockSpec('spec-1') s2 = MockSpec('spec-2') s3 = MockSpec('spec-3') s4 = MockSpec('spec-4') tcl_module_index = """\ module_index: {0}: path: /path/to/a use_name: a """.format(s1.dag_hash()) module_indices = [ { 'tcl': spack.modules.common._read_module_index(tcl_module_index) }, {} ] dbs = [ 'd0', 'd1' ] mock_db = MockDb( dbs, { s1.dag_hash(): 'd0', s2.dag_hash(): 'd1', s3.dag_hash(): 'd0' } ) upstream_index = UpstreamModuleIndex(mock_db, module_indices) m1 = upstream_index.upstream_module(s1, 'tcl') assert m1.path == '/path/to/a' # No modules are defined for the DB associated with s2 assert not upstream_index.upstream_module(s2, 'tcl') # Modules are defined for the index associated with s1, but none are # defined for the requested type assert not upstream_index.upstream_module(s1, 'lmod') # A module is registered with a DB and the associated module index has # modules of the specified type defined, but not for the requested spec assert not upstream_index.upstream_module(s3, 'tcl') # The spec isn't recorded as installed in any of the DBs with pytest.raises(spack.error.SpackError): upstream_index.upstream_module(s4, 'tcl')