@@ -115,13 +115,7 @@ def __build_ts_test_package(base_path, script_contents=''):
115115
116116def test_module_dependency_resolver ():
117117 with __test_base_path () as temp_directory :
118- module_script = os .path .join (temp_directory , "modulecmd" )
119- __write_script (module_script , '''#!/bin/sh
120- cat %s/example_output 1>&2;
121- ''' % temp_directory )
122- with open (os .path .join (temp_directory , "example_output" ), "w" ) as f :
123- # Subset of module avail from MSI cluster.
124- f .write ('''
118+ module_script = _setup_module_command (temp_directory , '''
125119-------------------------- /soft/modules/modulefiles ---------------------------
126120JAGS/3.2.0-gcc45
127121JAGS/3.3.0-gcc4.7.2
@@ -141,7 +135,7 @@ def test_module_dependency_resolver():
141135advisor/2013/update2 intel/11.1.080 mkl/10.2.5.035
142136advisor/2013/update3 intel/12.0 mkl/10.2.7.041
143137''' )
144- resolver = ModuleDependencyResolver (None , modulecmd = module_script )
138+ resolver = ModuleDependencyResolver (_SimpleDependencyManager () , modulecmd = module_script )
145139 module = resolver .resolve ( ToolRequirement ( name = "R" , version = None , type = "package" ) )
146140 assert module .module_name == "R"
147141 assert module .module_version is None
@@ -154,6 +148,74 @@ def test_module_dependency_resolver():
154148 assert isinstance (module , NullDependency )
155149
156150
151+ def test_module_resolver_with_mapping ():
152+ with __test_base_path () as temp_directory :
153+ module_script = _setup_module_command (temp_directory , '''
154+ -------------------------- /soft/modules/modulefiles ---------------------------
155+ blast/2.24
156+ ''' )
157+ mapping_file = os .path .join (temp_directory , "mapping" )
158+ with open (mapping_file , "w" ) as f :
159+ f .write ('''
160+ - from: blast+
161+ to: blast
162+ ''' )
163+
164+ resolver = ModuleDependencyResolver (_SimpleDependencyManager (), modulecmd = module_script , mapping_file = mapping_file )
165+ module = resolver .resolve ( ToolRequirement ( name = "blast+" , version = "2.24" , type = "package" ) )
166+ assert module .module_name == "blast"
167+ assert module .module_version == "2.24" , module .module_version
168+
169+
170+ def test_module_resolver_with_mapping_versions ():
171+ with __test_base_path () as temp_directory :
172+ module_script = _setup_module_command (temp_directory , '''
173+ -------------------------- /soft/modules/modulefiles ---------------------------
174+ blast/2.22.0-mpi
175+ blast/2.23
176+ blast/2.24.0-mpi
177+ ''' )
178+ mapping_file = os .path .join (temp_directory , "mapping" )
179+ with open (mapping_file , "w" ) as f :
180+ f .write ('''
181+ - from:
182+ name: blast+
183+ version: 2.24
184+ to:
185+ name: blast
186+ version: 2.24.0-mpi
187+ - from:
188+ name: blast
189+ version: 2.22
190+ to:
191+ version: 2.22.0-mpi
192+ ''' )
193+
194+ resolver = ModuleDependencyResolver (_SimpleDependencyManager (), modulecmd = module_script , mapping_file = mapping_file )
195+ module = resolver .resolve ( ToolRequirement ( name = "blast+" , version = "2.24" , type = "package" ) )
196+ assert module .module_name == "blast"
197+ assert module .module_version == "2.24.0-mpi" , module .module_version
198+
199+ resolver = ModuleDependencyResolver (_SimpleDependencyManager (), modulecmd = module_script , mapping_file = mapping_file )
200+ module = resolver .resolve ( ToolRequirement ( name = "blast+" , version = "2.23" , type = "package" ) )
201+ assert isinstance (module , NullDependency )
202+
203+ module = resolver .resolve ( ToolRequirement ( name = "blast" , version = "2.22" , type = "package" ) )
204+ assert module .module_name == "blast"
205+ assert module .module_version == "2.22.0-mpi" , module .module_version
206+
207+
208+ def _setup_module_command (temp_directory , contents ):
209+ module_script = os .path .join (temp_directory , "modulecmd" )
210+ __write_script (module_script , '''#!/bin/sh
211+ cat %s/example_output 1>&2;
212+ ''' % temp_directory )
213+ with open (os .path .join (temp_directory , "example_output" ), "w" ) as f :
214+ # Subset of module avail from MSI cluster.
215+ f .write (contents )
216+ return module_script
217+
218+
157219def test_module_dependency ():
158220 with __test_base_path () as temp_directory :
159221 # Create mock modulecmd script that just exports a variable
@@ -386,3 +448,9 @@ def __dependency_manager(xml_content):
386448 f .flush ()
387449 dm = DependencyManager ( default_base_path = base_path , conf_file = f .name )
388450 yield dm
451+
452+
453+ class _SimpleDependencyManager (object ):
454+
455+ def get_resolver_option (self , resolver , key , explicit_resolver_options = {}):
456+ return explicit_resolver_options .get (key )
0 commit comments