def test_checksums(self): """Test checksum functionality.""" fh, fp = tempfile.mkstemp() os.close(fh) ft.write_file(fp, "easybuild\n") known_checksums = { 'adler32': '0x379257805', 'crc32': '0x1457143216', 'md5': '7167b64b1ca062b9674ffef46f9325db', 'sha1': 'db05b79e09a4cc67e9dd30b313b5488813db3190', } # make sure checksums computation/verification is correct for checksum_type, checksum in known_checksums.items(): self.assertEqual( ft.compute_checksum(fp, checksum_type=checksum_type), checksum) self.assertTrue(ft.verify_checksum(fp, (checksum_type, checksum))) # md5 is default self.assertEqual(ft.compute_checksum(fp), known_checksums['md5']) self.assertTrue(ft.verify_checksum(fp, known_checksums['md5'])) # make sure faulty checksums are reported broken_checksums = dict([(typ, val + 'foo') for (typ, val) in known_checksums.items()]) for checksum_type, checksum in broken_checksums.items(): self.assertFalse( ft.compute_checksum(fp, checksum_type=checksum_type) == checksum) self.assertFalse(ft.verify_checksum(fp, (checksum_type, checksum))) # md5 is default self.assertFalse(ft.compute_checksum(fp) == broken_checksums['md5']) self.assertFalse(ft.verify_checksum(fp, broken_checksums['md5'])) # cleanup os.remove(fp)
def test_checksums(self): """Test checksum functionality.""" fh, fp = tempfile.mkstemp() os.close(fh) ft.write_file(fp, "easybuild\n") known_checksums = { 'adler32': '0x379257805', 'crc32': '0x1457143216', 'md5': '7167b64b1ca062b9674ffef46f9325db', 'sha1': 'db05b79e09a4cc67e9dd30b313b5488813db3190', } # make sure checksums computation/verification is correct for checksum_type, checksum in known_checksums.items(): self.assertEqual(ft.compute_checksum(fp, checksum_type=checksum_type), checksum) self.assertTrue(ft.verify_checksum(fp, (checksum_type, checksum))) # md5 is default self.assertEqual(ft.compute_checksum(fp), known_checksums['md5']) self.assertTrue(ft.verify_checksum(fp, known_checksums['md5'])) # make sure faulty checksums are reported broken_checksums = dict([(typ, val + 'foo') for (typ, val) in known_checksums.items()]) for checksum_type, checksum in broken_checksums.items(): self.assertFalse(ft.compute_checksum(fp, checksum_type=checksum_type) == checksum) self.assertFalse(ft.verify_checksum(fp, (checksum_type, checksum))) # md5 is default self.assertFalse(ft.compute_checksum(fp) == broken_checksums['md5']) self.assertFalse(ft.verify_checksum(fp, broken_checksums['md5'])) # cleanup os.remove(fp)
def obtain_config_guess(self, download_source_path=None, search_source_paths=None): """ Locate or download an up-to-date config.guess for use with ConfigureMake :param download_source_path: Path to download config.guess to :param search_source_paths: Paths to search for config.guess :return: Path to config.guess or None """ eb_source_paths = source_paths() if download_source_path is None: download_source_path = eb_source_paths[0] if search_source_paths is None: search_source_paths = eb_source_paths config_guess = 'config.guess' sourcepath_subdir = os.path.join('generic', 'eb_v%s' % EASYBLOCKS_VERSION, 'ConfigureMake') config_guess_path = None # check if config.guess has already been downloaded to source path for path in eb_source_paths: cand_config_guess_path = os.path.join(path, sourcepath_subdir, config_guess) if os.path.isfile(cand_config_guess_path): config_guess_path = cand_config_guess_path self.log.info("Found recent %s at %s, using it if required", config_guess, config_guess_path) break # if not found, try to download it if config_guess_path is None: cand_config_guess_path = os.path.join(download_source_path, sourcepath_subdir, config_guess) config_guess_url = CONFIG_GUESS_URL_STUB + CONFIG_GUESS_COMMIT_ID downloaded_path = download_file(config_guess, config_guess_url, cand_config_guess_path) if downloaded_path is not None: # verify SHA256 checksum of download to avoid using a corrupted download if verify_checksum(downloaded_path, CONFIG_GUESS_SHA256): config_guess_path = downloaded_path # add execute permissions adjust_permissions(downloaded_path, stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH, add=True) self.log.info("Downloaded recent %s to %s, using it if required", config_guess, config_guess_path) else: self.log.warning("Checksum failed for downloaded file %s, not using it!", downloaded_path) remove_file(downloaded_path) else: self.log.warning("Failed to download recent %s to %s for use with ConfigureMake easyblock (if needed)", config_guess, cand_config_guess_path) return config_guess_path