def test_prepare_rpm(self): """ Test the prepare rpm function especially in effect to generating correct package list wrt excluded_pkgs_rpm we assume the order of the lists doesn't matter (and sort to compare) """ package = { 'name': 'vsc-test', 'excluded_pkgs_rpm': [], 'version': '1.0', } setup = vsc_setup() libdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), './testdata') setup.REPO_LIB_DIR = libdir setup.prepare_rpm(package) self.assertEqual(sorted(setup.SHARED_TARGET['packages']), ['vsc', 'vsc.test']) package = { 'name': 'vsc-test', 'excluded_pkgs_rpm': ['vsc', 'vsc.test'], 'version': '1.0', } setup = vsc_setup() setup.REPO_LIB_DIR = libdir setup.prepare_rpm(package) self.assertEqual(sorted(setup.SHARED_TARGET['packages']), ['vsc', 'vsc.test'])
def test_parse_target_dependencies(self): """Test injecting dependency_links in parse_target""" package = { 'name': 'vsc-test', 'excluded_pkgs_rpm': [], 'version': '1.0', 'install_requires': [ 'vsc-config >= 2.0.0', 'vsc-accountpage-clients', 'vsc-base > 1.0.0' ], } setup = vsc_setup() # this is needed to pass the tests on Travis: travis will clone vsc-install through # https and it will be marked as non private repo, causing the dependency_links to be injected # with git+https, which is not correct in this test case. setup.private_repo = True new_target = setup.parse_target(package) dep_links_urls = [ 'git+ssh://[email protected]/hpcugent/vsc-accountpage-clients.git#egg=vsc-accountpage-clients', 'git+ssh://[email protected]/hpcugent/vsc-accountpage-clients.git#egg=vsc-accountpage-clients', 'git+ssh://[email protected]/hpcugent/vsc-config.git#egg=vsc-config-2.0.0', 'git+ssh://[email protected]/hpcugent/vsc-config.git#egg=vsc-config-2.0.0', 'git+ssh://[email protected]/hpcugent/vsc-base.git#egg=vsc-base-1.0.0', 'git+ssh://[email protected]/hpcugent/vsc-base.git#egg=vsc-base-1.0.0', ] for url in dep_links_urls: self.assertIn(url, new_target['dependency_links']) package['install_requires'].append('vsc-utils<=1.0.0') self.assertRaises(ValueError, setup.parse_target, package)
def setUp(self): """Restore some possibly mocked functions""" vsc.install.headers._this_year = orig_this_year vsc.install.headers._write = orig_write vsc.install.shared_setup.get_license = orig_get_license self.setup = vsc_setup() super(TestHeaders, self).setUp()
def test_parse_target(self): """Test for parse target""" package = { 'name': 'vsc-test', 'excluded_pkgs_rpm': [], } setup = vsc_setup() klass = _fvs('vsc_bdist_rpm egg_info') # test to see if we don't fail on unknown/new cmdclasses orig_target = klass.SHARED_TARGET klass.SHARED_TARGET['cmdclass']['easy_install'] = object new_target = setup.parse_target(package) self.assertEquals(new_target['name'], 'vsc-test') klass.SHARED_TARGET = orig_target
def test_prepare_rpm(self): """ Test the prepare rpm function especially in effect to generating correct package list wrt excluded_pkgs_rpm """ package = { 'name': 'vsc-test', 'excluded_pkgs_rpm': [], } setup = vsc_setup() libdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), './testdata') setup.REPO_LIB_DIR = libdir setup.prepare_rpm(package) self.assertEqual(setup.SHARED_TARGET['packages'], ['vsc', 'vsc.test']) package = { 'name': 'vsc-test', 'excluded_pkgs_rpm': ['vsc', 'vsc.test'], } setup = vsc_setup() setup.REPO_LIB_DIR = libdir setup.prepare_rpm(package) self.assertEqual(setup.SHARED_TARGET['packages'], ['vsc', 'vsc.test'])
def test_parse_target(self): """Test for parse target""" package = { 'name': 'vsc-test', 'excluded_pkgs_rpm': [], 'version': '1.0', } setup = vsc_setup() klass = _fvs('vsc_bdist_rpm egg_info') # test to see if we don't fail on unknown/new cmdclasses orig_target = klass.SHARED_TARGET klass.SHARED_TARGET['cmdclass']['easy_install'] = object new_target = setup.parse_target(package) self.assertEqual(new_target['name'], 'vsc-test') self.assertEqual(new_target['version'], '1.0') self.assertEqual(new_target['long_description_content_type'], 'text/markdown') self.assertTrue(new_target['long_description'].startswith("Description\n===========")) klass.SHARED_TARGET = orig_target
def setUp(self): """Create a vsc_setup instance for each test""" super(LicenseTest, self).setUp() self.setup = vsc_setup()
def setUp(self): """Cleanup after running a test.""" self.orig_sys_argv = sys.argv self.setup = vsc_setup() super(CommonTest, self).setUp()
def setUp(self): """create a self.setup.instance for every test""" super(TestSetup, self).setUp() self.setup = vsc_setup()
import glob import os import sys import re import submitfilter #from vsc.install.shared_setup import REPO_BASE_DIR from vsc.install.shared_setup import vsc_setup from vsc.install.testing import TestCase from vsc.jobs.pbs.submitfilter import SubmitFilter, get_warnings, reset_warnings, MEM_REGEXP from vsc.jobs.pbs.clusterdata import DEFAULT_SERVER_CLUSTER from vsc.utils.run import run_simple REPO_BASE_DIR = vsc_setup().REPO_BASE_DIR SCRIPTS = ["""#!/bin/sh # # #PBS -N testrun #PBS -o output_testrun.txt -l nodes=5:ppn=all,pmem=half #PBS -e error_testrun.txt #PBS -l walltime=11:25:00 #PBS -l pvmem=500mb #PBS -m bea #PBS -q short # cd $VSC_HOME ##logs to stderr by default, redirect this to stdout ./pfgw64s 42424242_1t.txt 2>> $VSC_SCRATCH/testrun.42424242.out
import glob import os import sys import re import submitfilter # from vsc.install.shared_setup import REPO_BASE_DIR from vsc.install.shared_setup import vsc_setup from vsc.install.testing import TestCase from vsc.jobs.pbs.submitfilter import SubmitFilter, get_warnings, reset_warnings, MEM_REGEXP from vsc.jobs.pbs.clusterdata import DEFAULT_SERVER_CLUSTER from vsc.utils.run import run_simple REPO_BASE_DIR = vsc_setup().REPO_BASE_DIR SCRIPTS = [ """#!/bin/sh # # #PBS -N testrun #PBS -o output_testrun.txt -l nodes=5:ppn=all,pmem=half #PBS -e error_testrun.txt #PBS -l walltime=11:25:00 #PBS -l pvmem=500mb #PBS -m bea #PBS -q short # cd $VSC_HOME ##logs to stderr by default, redirect this to stdout
def setUp(self): """Prepare for running test.""" super(GeneralOptionTest, self).setUp() fancylogger.resetroot() self.setup = vsc_setup() self.orig_environ = copy.deepcopy(os.environ)
def setUp(self): """create a self.setup.instance for every test""" super(ProspectorTest, self).setUp() self.setup = vsc_setup()
def setUp(self): super(GeneralOptionTest, self).setUp() self.setup = vsc_setup()
def test_target(vfr, expected): setup = vsc_setup() new_target = setup.parse_target(pkg(vfr)) self.assertEqual(new_target['install_requires'], expected)
def check_header(filename, script=False, write=False): """ Given filename, extract the header, verify it if script: treat first line as shebang if write: adapt file to new header If the header contains line '### External compatible license', one assumes the license is correct and should not be controlled by check_header Return if header is different from expected or not """ header, shebang = get_header(filename, script=script) header_end_pos = len(header) changed = False if shebang is not None: # original position header_end_pos += 1 + len(shebang) # 1 is from splitted newline if 'python' in shebang and shebang != SHEBANG_ENV_PYTHON: log.info('python in shebang, forcing env python (header modified)') changed = True shebang = SHEBANG_ENV_PYTHON if re.search(r'^### External compatible license\s*$', header, re.M): log.info( 'Header is an external compatible license. Leaving the header as-is.' ) return changed # genheader # version is irrelevant setup = vsc_setup() name_url = setup.get_name_url(version='ALL_VERSIONS') license_name, _ = setup.get_license() # begin and endyear from copyright rule beginyear, endyear = begin_end_from_header(header) data = { 'beginyear': beginyear, 'endyear': endyear, 'name': name_url['name'], 'url': name_url['url'], } gen_header = gen_license_header(license_name, **data) # force encoding? reg_enc = ENCODING_REGEXP.search(header) if reg_enc: enc_line = reg_enc.group( 1) + "\n" # matches full line, but not newline gen_header = enc_line + gen_header if header != gen_header: log.info("Diff header vs gen_header\n" + "".join(nicediff(header, gen_header))) changed = True if write and changed: log.info( 'write enabled and different header. Going to modify file %s' % filename) wholetext = open(filename).read() newtext = '' if shebang is not None: newtext += shebang + "\n" newtext += gen_header newtext += wholetext[header_end_pos:] _write(filename, newtext) # return different or not return changed
def check_header(filename, script=False, write=False): """ Given filename, extract the header, verify it if script: treat first line as shebang if write: adapt file to new header If the header contains line '### External compatible license', one assumes the license is correct and should not be controlled by check_header Return if header is different from expected or not """ header, orig_shebang = get_header(filename, script=script) header_end_pos = len(header) changed = False shebang = None if script: # scripts must have an appropriate shebang shebang = orig_shebang file_ext = os.path.splitext(filename)[1] log.info("Shebang found in %s (ext: %s): %s", filename, file_ext, shebang) if file_ext == '.py': if shebang != SHEBANG_ENV_PYTHON: log.info("Wrong shebang for Python script %s: found '%s', should be '%s'", filename, shebang, SHEBANG_ENV_PYTHON) shebang = SHEBANG_ENV_PYTHON elif file_ext in ['.sh', '']: if shebang != SHEBANG_BIN_BASH: log.info("Wrong shebang for shell script %s: found '%s', should be '%s'", filename, shebang, SHEBANG_BIN_BASH) shebang = SHEBANG_BIN_BASH else: log.warn("Don't know expected shebang based on extension '%s' for script '%s', assuming it's OK...", file_ext, filename) changed = shebang != orig_shebang if orig_shebang is not None: # original position header_end_pos += 1 + len(orig_shebang) # 1 is from splitted newline if 'python' in shebang and shebang != SHEBANG_ENV_PYTHON: log.info('python in shebang, forcing env python (header modified)') changed = True shebang = SHEBANG_ENV_PYTHON if re.search(r'^### External compatible license\s*$', header, re.M): log.info('Header is an external compatible license. Leaving the header as-is.') return changed # genheader # version is irrelevant setup = vsc_setup() name_url = setup.get_name_url(version='ALL_VERSIONS') license_name, _ = setup.get_license() # begin and endyear from copyright rule beginyear, endyear = begin_end_from_header(header) data = { 'beginyear': beginyear, 'endyear': endyear, 'name': name_url['name'], 'url': name_url['url'], } # reconstruct original header, incl. shebang (if any) if orig_shebang: orig_header = orig_shebang + '\n' + header else: orig_header = header # generate header like it should be gen_header = gen_license_header(license_name, **data) # force encoding? reg_enc = ENCODING_REGEXP.search(header) if reg_enc: enc_line = reg_enc.group(1) + "\n" # matches full line, but not newline gen_header = enc_line + gen_header # compose header like it should be, incl. shebang if shebang: new_header = shebang + '\n' + gen_header else: new_header = gen_header if orig_header != new_header: log.info("Diff orig_header vs new_header for %s\n" % filename + ''.join(nicediff(orig_header, new_header))) changed = True if write and changed: log.info('write enabled and different header. Going to modify file %s' % filename) with open(filename) as fh: wholetext = fh.read() _write(filename, new_header + wholetext[header_end_pos:]) # return different or not return changed
def check_header(filename, script=False, write=False): """ Given filename, extract the header, verify it if script: treat first line as shebang if write: adapt file to new header If the header contains line '### External compatible license', one assumes the license is correct and should not be controlled by check_header Return if header is different from expected or not """ header, shebang = get_header(filename, script=script) header_end_pos = len(header) changed = False if shebang is not None: # original position header_end_pos += 1 + len(shebang) # 1 is from splitted newline if 'python' in shebang and shebang != SHEBANG_ENV_PYTHON: log.info('python in shebang, forcing env python (header modified)') changed = True shebang = SHEBANG_ENV_PYTHON if re.search(r'^### External compatible license\s*$', header, re.M): log.info('Header is an external compatible license. Leaving the header as-is.') return changed # genheader # version is irrelevant setup = vsc_setup() name_url = setup.get_name_url(version='ALL_VERSIONS') license_name, _ = setup.get_license() # begin and endyear from copyright rule beginyear, endyear = begin_end_from_header(header) data = { 'beginyear': beginyear, 'endyear': endyear, 'name': name_url['name'], 'url': name_url['url'], } gen_header = gen_license_header(license_name, **data) # force encoding? reg_enc = ENCODING_REGEXP.search(header) if reg_enc: enc_line = reg_enc.group(1) + "\n" # matches full line, but not newline gen_header = enc_line + gen_header if header != gen_header: log.info("Diff header vs gen_header\n" + "".join(nicediff(header, gen_header))) changed = True if write and changed: log.info('write enabled and different header. Going to modify file %s' % filename) wholetext = open(filename).read() newtext = '' if shebang is not None: newtext += shebang + "\n" newtext += gen_header newtext += wholetext[header_end_pos:] _write(filename, newtext) # return different or not return changed
def check_header(filename, script=False, write=False): """ Given filename, extract the header, verify it if script: treat first line as shebang if write: adapt file to new header If the header contains line '### External compatible license', one assumes the license is correct and should not be controlled by check_header Return if header is different from expected or not """ header, orig_shebang = get_header(filename, script=script) header_end_pos = len(header) changed = False shebang = None if script: # scripts must have an appropriate shebang shebang = orig_shebang file_ext = os.path.splitext(filename)[1] log.info("Shebang found in %s (ext: %s): %s", filename, file_ext, shebang) if file_ext == '.py': if shebang != SHEBANG_ENV_PYTHON: log.info( "Wrong shebang for Python script %s: found '%s', should be '%s'", filename, shebang, SHEBANG_ENV_PYTHON) shebang = SHEBANG_ENV_PYTHON elif file_ext in ['.sh', '']: if shebang != SHEBANG_BIN_BASH: log.info( "Wrong shebang for shell script %s: found '%s', should be '%s'", filename, shebang, SHEBANG_BIN_BASH) shebang = SHEBANG_BIN_BASH else: log.warn( "Don't know expected shebang based on extension '%s' for script '%s', assuming it's OK...", file_ext, filename) changed = shebang != orig_shebang if orig_shebang is not None: # original position header_end_pos += 1 + len(orig_shebang) # 1 is from splitted newline if 'python' in shebang and shebang != SHEBANG_ENV_PYTHON: log.info('python in shebang, forcing env python (header modified)') changed = True shebang = SHEBANG_ENV_PYTHON if re.search(r'^### External compatible license\s*$', header, re.M): log.info( 'Header is an external compatible license. Leaving the header as-is.' ) return changed # genheader # version is irrelevant setup = vsc_setup() name_url = setup.get_name_url(version='ALL_VERSIONS') license_name, _ = setup.get_license() # begin and endyear from copyright rule beginyear, endyear = begin_end_from_header(header) data = { 'beginyear': beginyear, 'endyear': endyear, 'name': name_url['name'], 'url': name_url['url'], } # reconstruct original header, incl. shebang (if any) if orig_shebang: orig_header = orig_shebang + '\n' + header else: orig_header = header # generate header like it should be gen_header = gen_license_header(license_name, **data) # force encoding? reg_enc = ENCODING_REGEXP.search(header) if reg_enc: enc_line = reg_enc.group( 1) + "\n" # matches full line, but not newline gen_header = enc_line + gen_header # compose header like it should be, incl. shebang if shebang: new_header = shebang + '\n' + gen_header else: new_header = gen_header if orig_header != new_header: log.info("Diff orig_header vs new_header for %s\n" % filename + ''.join(nicediff(orig_header, new_header))) changed = True if write and changed: log.info( 'write enabled and different header. Going to modify file %s' % filename) with open(filename) as fh: wholetext = fh.read() _write(filename, new_header + wholetext[header_end_pos:]) # return different or not return changed