def test_fetch_easyblocks_from_pr(self): """Test fetch_easyblocks_from_pr function.""" if self.skip_github_tests: print("Skipping test_fetch_easyblocks_from_pr, no GitHub token available?") return init_config(build_options={ 'pr_target_account': gh.GITHUB_EB_MAIN, }) # PR with new easyblock plus non-easyblock file all_ebs_pr1964 = ['lammps.py'] # PR with changed easyblock all_ebs_pr1967 = ['siesta.py'] # PR with more than one easyblock all_ebs_pr1949 = ['configuremake.py', 'rpackage.py'] for pr, all_ebs in [(1964, all_ebs_pr1964), (1967, all_ebs_pr1967), (1949, all_ebs_pr1949)]: try: tmpdir = os.path.join(self.test_prefix, 'pr%s' % pr) eb_files = gh.fetch_easyblocks_from_pr(pr, path=tmpdir, github_user=GITHUB_TEST_ACCOUNT) self.assertEqual(sorted(all_ebs), sorted([os.path.basename(f) for f in eb_files])) except URLError as err: print("Ignoring URLError '%s' in test_fetch_easyblocks_from_pr" % err)
def test_fetch_files_from_pr_cache(self): """Test caching for fetch_files_from_pr.""" if self.skip_github_tests: print("Skipping test_fetch_files_from_pr_cache, no GitHub token available?") return init_config(build_options={ 'pr_target_account': gh.GITHUB_EB_MAIN, }) # clear cache first, to make sure we start with a clean slate gh.fetch_files_from_pr.clear_cache() self.assertFalse(gh.fetch_files_from_pr._cache) pr7159_filenames = [ 'DOLFIN-2018.1.0.post1-foss-2018a-Python-3.6.4.eb', 'OpenFOAM-5.0-20180108-foss-2018a.eb', 'OpenFOAM-5.0-20180108-intel-2018a.eb', 'OpenFOAM-6-foss-2018b.eb', 'OpenFOAM-6-intel-2018a.eb', 'OpenFOAM-v1806-foss-2018b.eb', 'PETSc-3.9.3-foss-2018a.eb', 'SCOTCH-6.0.6-foss-2018a.eb', 'SCOTCH-6.0.6-foss-2018b.eb', 'SCOTCH-6.0.6-intel-2018a.eb', 'Trilinos-12.12.1-foss-2018a-Python-3.6.4.eb' ] pr7159_files = gh.fetch_easyconfigs_from_pr(7159, path=self.test_prefix, github_user=GITHUB_TEST_ACCOUNT) self.assertEqual(sorted(pr7159_filenames), sorted(os.path.basename(f) for f in pr7159_files)) # check that cache has been populated for PR 7159 self.assertEqual(len(gh.fetch_files_from_pr._cache.keys()), 1) # github_account value is None (results in using default 'easybuilders') cache_key = (7159, None, 'easybuild-easyconfigs', self.test_prefix) self.assertTrue(cache_key in gh.fetch_files_from_pr._cache.keys()) cache_entry = gh.fetch_files_from_pr._cache[cache_key] self.assertEqual(sorted([os.path.basename(f) for f in cache_entry]), sorted(pr7159_filenames)) # same query should return result from cache entry res = gh.fetch_easyconfigs_from_pr(7159, path=self.test_prefix, github_user=GITHUB_TEST_ACCOUNT) self.assertEqual(res, pr7159_files) # inject entry in cache and check result of matching query pr_id = 12345 tmpdir = os.path.join(self.test_prefix, 'easyblocks-pr-12345') pr12345_files = [ os.path.join(tmpdir, 'foo.py'), os.path.join(tmpdir, 'bar.py'), ] for fp in pr12345_files: write_file(fp, '') # github_account value is None (results in using default 'easybuilders') cache_key = (pr_id, None, 'easybuild-easyblocks', tmpdir) gh.fetch_files_from_pr.update_cache({cache_key: pr12345_files}) res = gh.fetch_easyblocks_from_pr(12345, tmpdir) self.assertEqual(sorted(pr12345_files), sorted(res))