def test_tweak_one_version(self): """Test tweak_one function""" test_easyconfigs_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'easyconfigs', 'test_ecs') toy_ec = os.path.join(test_easyconfigs_path, 't', 'toy', 'toy-0.0.eb') # test tweaking of software version (--try-software-version) tweaked_toy_ec = os.path.join(self.test_prefix, 'toy-tweaked.eb') tweak_one(toy_ec, tweaked_toy_ec, {'version': '1.2.3'}) toy_ec_parsed = EasyConfigParser(toy_ec).get_config_dict() tweaked_toy_ec_parsed = EasyConfigParser(tweaked_toy_ec).get_config_dict() # checksums should be reset to empty list, only version should be changed, nothing else self.assertEqual(tweaked_toy_ec_parsed['checksums'], []) self.assertEqual(tweaked_toy_ec_parsed['version'], '1.2.3') for key in [k for k in toy_ec_parsed.keys() if k not in ['checksums', 'version']]: val = toy_ec_parsed[key] self.assertTrue(key in tweaked_toy_ec_parsed, "Parameter '%s' not defined in tweaked easyconfig file" % key) tweaked_val = tweaked_toy_ec_parsed.get(key) self.assertEqual(val, tweaked_val, "Different value for %s parameter: %s vs %s" % (key, val, tweaked_val)) # check behaviour if target file already exists error_pattern = "File exists, not overwriting it without --force" self.assertErrorRegex(EasyBuildError, error_pattern, tweak_one, toy_ec, tweaked_toy_ec, {'version': '1.2.3'}) # existing file does get overwritten when --force is used init_config(build_options={'force': True, 'silent': True}) write_file(tweaked_toy_ec, '') tweak_one(toy_ec, tweaked_toy_ec, {'version': '1.2.3'}) tweaked_toy_ec_parsed = EasyConfigParser(tweaked_toy_ec).get_config_dict() self.assertEqual(tweaked_toy_ec_parsed['version'], '1.2.3')
def test_tweak_one_version(self): """Test tweak_one function""" test_easyconfigs_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'easyconfigs', 'test_ecs') toy_ec = os.path.join(test_easyconfigs_path, 't', 'toy', 'toy-0.0.eb') # test tweaking of software version (--try-software-version) tweaked_toy_ec = os.path.join(self.test_prefix, 'toy-tweaked.eb') tweak_one(toy_ec, tweaked_toy_ec, {'version': '1.2.3'}) toy_ec_parsed = EasyConfigParser(toy_ec).get_config_dict() tweaked_toy_ec_parsed = EasyConfigParser( tweaked_toy_ec).get_config_dict() # checksums should be reset to empty list, only version should be changed, nothing else self.assertEqual(tweaked_toy_ec_parsed['checksums'], []) self.assertEqual(tweaked_toy_ec_parsed['version'], '1.2.3') for key in [ k for k in toy_ec_parsed.keys() if k not in ['checksums', 'version'] ]: val = toy_ec_parsed[key] self.assertTrue( key in tweaked_toy_ec_parsed, "Parameter '%s' not defined in tweaked easyconfig file" % key) tweaked_val = tweaked_toy_ec_parsed.get(key) self.assertEqual( val, tweaked_val, "Different value for %s parameter: %s vs %s" % (key, val, tweaked_val))
def test_tweaking(self): """test tweaking ability of easyconfigs""" fd, tweaked_fn = tempfile.mkstemp(prefix='easybuild-tweaked-', suffix='.eb') os.close(fd) patches = ["t1.patch", ("t2.patch", 1), ("t3.patch", "test"), ("t4.h", "include")] self.contents = '\n'.join([ 'name = "pi"', 'homepage = "http://www.example.com"', 'description = "dummy description"', 'version = "3.14"', 'toolchain = {"name":"GCC", "version": "4.6.3"}', 'patches = %s', ]) % str(patches) self.prep() ver = "1.2.3" verpref = "myprefix" versuff = "mysuffix" tcname = "mytc" tcver = "4.1.2" new_patches = ['t5.patch', 't6.patch'] homepage = "http://www.justatest.com" tweaks = { 'version': ver, 'versionprefix': verpref, 'versionsuffix': versuff, 'toolchain_version': tcver, 'patches': new_patches } tweak_one(self.eb_file, tweaked_fn, tweaks) eb = EasyConfig(tweaked_fn) self.assertEqual(eb['version'], ver) self.assertEqual(eb['versionprefix'], verpref) self.assertEqual(eb['versionsuffix'], versuff) self.assertEqual(eb['toolchain']['version'], tcver) self.assertEqual(eb['patches'], new_patches) eb = EasyConfig(self.eb_file) # eb['toolchain']['version'] = tcver does not work as expected with templating enabled eb.enable_templating = False eb['version'] = ver eb['toolchain']['version'] = tcver eb.enable_templating = True eb.dump(self.eb_file) tweaks = { 'toolchain_name': tcname, 'patches': new_patches[:1], 'homepage': homepage, 'foo': "bar" } tweak_one(self.eb_file, tweaked_fn, tweaks) eb = EasyConfig(tweaked_fn) self.assertEqual(eb['toolchain']['name'], tcname) self.assertEqual(eb['toolchain']['version'], tcver) self.assertEqual(eb['patches'], new_patches[:1]) self.assertEqual(eb['version'], ver) self.assertEqual(eb['homepage'], homepage) # specify patches as string, eb should promote it to a list because original value was a list tweaks['patches'] = new_patches[0] eb = EasyConfig(tweaked_fn) self.assertEqual(eb['patches'], [new_patches[0]]) # cleanup os.remove(tweaked_fn)