Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
self.mock_stdout(True)
ft.copy_file(to_copy, target_path)
txt = self.get_stdout()
self.mock_stdout(False)
self.assertFalse(os.path.exists(target_path))
self.assertTrue(re.search("^copied file .*/toy-0.0.eb to .*/toy.eb", txt))
# forced copy, even in dry run mode
self.mock_stdout(True)
ft.copy_file(to_copy, target_path, force_in_dry_run=True)
txt = self.get_stdout()
self.mock_stdout(False)
self.assertTrue(os.path.exists(target_path))
self.assertTrue(ft.read_file(to_copy) == ft.read_file(target_path))
self.assertEqual(txt, '')
"versionsuffix = '-two'",
"dependencies = [('toy', '0.0', '-one')]",
])
write_file(ec2, ec2_txt)
self.test_toy_build(ec_file=self.test_prefix, verify=False)
mod1 = os.path.join(self.test_installpath, 'modules', 'all', 'toy', '0.0-one')
mod2 = os.path.join(self.test_installpath, 'modules', 'all', 'toy', '0.0-two')
self.assertTrue(os.path.exists(mod1) or os.path.exists('%s.lua' % mod1))
self.assertTrue(os.path.exists(mod2) or os.path.exists('%s.lua' % mod2))
if os.path.exists(mod2):
mod2_txt = read_file(mod2)
else:
mod2_txt = read_file('%s.lua' % mod2)
load1_regex = re.compile('load.*toy/0.0-one', re.M)
self.assertTrue(load1_regex.search(mod2_txt), "Pattern '%s' found in: %s" % (load1_regex.pattern, mod2_txt))
sys.stdout = fh
args = [
'--software-name=somethingrandom',
'--robot', '.',
'--debug',
stdout_arg,
]
self.eb_main(args, logfile=dummylogfn)
# make sure we restore
sys.stdout.flush()
sys.stdout = _stdout
fancylogger.logToScreen(enable=False, stdout=True)
outtxt = read_file(fn)
self.assertTrue(len(outtxt) > 100, "Log messages are printed to stdout when %s is used (outtxt: %s)" % (stdout_arg, outtxt))
# cleanup
os.remove(fn)
stdoutorig = sys.stdout
sys.stdout = open("/dev/null", 'w')
toy_ecfile = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'easyconfigs', 'toy-0.0.eb')
self.logfile = None
out = self.eb_main([toy_ecfile, '--debug', '-l', '--force'], raise_error=True)
if os.path.exists(dummylogfn):
os.remove(dummylogfn)
write_file(test_ec, read_file(toy_ec) + "\ngroup = %s\n" % str(group))
self.mock_stdout(True)
outtxt = self.eb_main(args, logfile=dummylogfn, do_build=True, raise_error=True, raise_systemexit=True)
self.mock_stdout(False)
if get_module_syntax() == 'Tcl':
pattern = "Can't generate robust check in TCL modules for users belonging to group %s." % group_name
regex = re.compile(pattern, re.M)
self.assertTrue(regex.search(outtxt), "Pattern '%s' found in: %s" % (regex.pattern, outtxt))
elif get_module_syntax() == 'Lua':
lmod_version = os.getenv('LMOD_VERSION', 'NOT_FOUND')
if LooseVersion(lmod_version) >= LooseVersion('6.0.8'):
toy_mod = os.path.join(self.test_installpath, 'modules', 'all', 'toy', '0.0.lua')
toy_mod_txt = read_file(toy_mod)
if isinstance(group, tuple):
group_name = group[0]
error_msg_pattern = "Hey, you're not in the '%s' group!" % group_name
else:
group_name = group
error_msg_pattern = "You are not part of '%s' group of users" % group_name
pattern = '\n'.join([
r'^if not \( userInGroup\("%s"\) \) then' % group_name,
r' LmodError\("%s[^"]*"\)' % error_msg_pattern,
r'end$',
])
regex = re.compile(pattern, re.M)
self.assertTrue(regex.search(outtxt), "Pattern '%s' found in: %s" % (regex.pattern, toy_mod_txt))
else:
def test_dry_run(self):
"""Test dry run (long format)."""
fd, dummylogfn = tempfile.mkstemp(prefix='easybuild-dummy', suffix='.log')
os.close(fd)
args = [
os.path.join(os.path.dirname(__file__), 'easyconfigs', 'gzip-1.4-GCC-4.6.3.eb'),
'--dry-run', # implies enabling dependency resolution
'--unittest-file=%s' % self.logfile,
'--robot-paths=%s' % os.path.join(os.path.dirname(__file__), 'easyconfigs'),
]
self.eb_main(args, logfile=dummylogfn)
logtxt = read_file(self.logfile)
info_msg = r"Dry run: printing build status of easyconfigs and dependencies"
self.assertTrue(re.search(info_msg, logtxt, re.M), "Info message dry running in '%s'" % logtxt)
ecs_mods = [
("gzip-1.4-GCC-4.6.3.eb", "gzip/1.4-GCC-4.6.3", ' '),
("GCC-4.6.3.eb", "GCC/4.6.3", 'x'),
]
for ec, mod, mark in ecs_mods:
regex = re.compile(r" \* \[%s\] \S+%s \(module: %s\)" % (mark, ec, mod), re.M)
self.assertTrue(regex.search(logtxt), "Found match for pattern %s in '%s'" % (regex.pattern, logtxt))
'sources = [SOURCE_TAR_GZ]',
'moduleclass = "tools"',
])
param_regex = re.compile('^(?P[a-z0-9_]+) = |^$', re.M)
# make sure regex finds all easyconfig parameters in the order they appear in the easyconfig
expected = ['homepage', '', 'name', 'versionsuffix', '', 'patches', 'easyblock', '', 'toolchain', '',
'checksums', 'dependencies', 'version', 'description', '', 'source_urls', 'foo_extra1',
'', 'sources', 'moduleclass']
self.assertEqual(param_regex.findall(rawtxt), expected)
test_ec = os.path.join(self.test_prefix, 'test.eb')
ec = EasyConfig(None, rawtxt=rawtxt)
ec.dump(test_ec)
ectxt = read_file(test_ec)
# easyconfig parameters should be properly ordered/grouped in dumped easyconfig
expected = ['easyblock', '', 'name', 'version', 'versionsuffix', '', 'homepage', 'description', '',
'toolchain', '', 'source_urls', 'sources', 'patches', 'checksums', '', 'dependencies', '',
'foo_extra1', '', 'moduleclass', '']
self.assertEqual(param_regex.findall(ectxt), expected)
self.assertTrue(new_file.startswith('test.txt.bck_'))
known_files = os.listdir(os.path.dirname(fp))
self.assertTrue(ft.read_file(first_bck_backup), txt)
self.assertEqual(ft.read_file(os.path.join(os.path.dirname(fp), new_file)), new_txt)
self.assertEqual(ft.read_file(fp), new_txt)
# Test hidden file backup with extension and existing backup
ft.back_up_file(fp, backup_extension='foobar', hidden=True)
test_files = os.listdir(os.path.dirname(fp))
self.assertEqual(len(test_files), 11)
new_file = [x for x in test_files if x not in known_files][0]
self.assertTrue(new_file.startswith('.test.txt.foobar_'))
known_files = os.listdir(os.path.dirname(fp))
self.assertTrue(ft.read_file(first_hidden_bck_backup), txt)
self.assertEqual(ft.read_file(os.path.join(os.path.dirname(fp), new_file)), new_txt)
self.assertEqual(ft.read_file(fp), new_txt)
# check whether strip_fn works as expected
fp2 = fp + '.lua'
ft.copy_file(fp, fp2)
res = ft.back_up_file(fp2)
self.assertTrue(fp2.endswith('.lua'))
self.assertTrue('.lua' in os.path.basename(res))
res = ft.back_up_file(fp2, strip_fn='.lua')
self.assertFalse('.lua' in os.path.basename(res))
" ('GCC', '4.6.4', '-test'),",
" ('MPICH', '1.8', '', ('GCC', '4.6.4')),",
" ('bar', '1.0'),",
" ('foobar/1.2.3', EXTERNAL_MODULE),",
"]",
'',
"foo_extra1 = 'foobar'",
'',
])
handle, testec = tempfile.mkstemp(prefix=self.test_prefix, suffix='.eb')
os.close(handle)
ec = EasyConfig(None, rawtxt=rawtxt)
ec.dump(testec)
ectxt = read_file(testec)
self.assertEqual(rawtxt, ectxt)
# check parsing of dumped easyconfig
EasyConfig(testec)
check_easyconfigs_style([testec])
self.assertEqual(len(test_files), 9)
new_file = [x for x in test_files if x not in known_files][0]
self.assertTrue(new_file.startswith('.test.txt_'))
known_files = os.listdir(os.path.dirname(fp))
self.assertTrue(ft.read_file(first_hidden_backup), txt)
self.assertEqual(ft.read_file(os.path.join(os.path.dirname(fp), new_file)), new_txt)
self.assertEqual(ft.read_file(fp), new_txt)
# Test file backup with extension and existing backup
ft.back_up_file(fp, backup_extension='bck')
test_files = os.listdir(os.path.dirname(fp))
self.assertEqual(len(test_files), 10)
new_file = [x for x in test_files if x not in known_files][0]
self.assertTrue(new_file.startswith('test.txt.bck_'))
known_files = os.listdir(os.path.dirname(fp))
self.assertTrue(ft.read_file(first_bck_backup), txt)
self.assertEqual(ft.read_file(os.path.join(os.path.dirname(fp), new_file)), new_txt)
self.assertEqual(ft.read_file(fp), new_txt)
# Test hidden file backup with extension and existing backup
ft.back_up_file(fp, backup_extension='foobar', hidden=True)
test_files = os.listdir(os.path.dirname(fp))
self.assertEqual(len(test_files), 11)
new_file = [x for x in test_files if x not in known_files][0]
self.assertTrue(new_file.startswith('.test.txt.foobar_'))
known_files = os.listdir(os.path.dirname(fp))
self.assertTrue(ft.read_file(first_hidden_bck_backup), txt)
self.assertEqual(ft.read_file(os.path.join(os.path.dirname(fp), new_file)), new_txt)
self.assertEqual(ft.read_file(fp), new_txt)
# check whether strip_fn works as expected
fp2 = fp + '.lua'
def test_modaltsoftname(self):
"""Test specifying an alternative name for the software name, to use when determining module name."""
topdir = os.path.dirname(os.path.abspath(__file__))
ec_file = os.path.join(topdir, 'easyconfigs', 'test_ecs', 't', 'toy', 'toy-0.0-deps.eb')
ectxt = read_file(ec_file)
modified_ec_file = os.path.join(self.test_prefix, os.path.basename(ec_file))
write_file(modified_ec_file, ectxt + "\nmodaltsoftname = 'notreallyatoy'")
ec = EasyConfig(modified_ec_file)
self.assertEqual(ec.full_mod_name, 'notreallyatoy/0.0-deps')
self.assertEqual(ec.short_mod_name, 'notreallyatoy/0.0-deps')
self.assertEqual(ec['name'], 'toy')