def test_apply_iter_nopass(self): manifest1 = { 'contents': set("about.txt metadata/pod.json metadata/trial3".split()), 'name': "goob_1.bag" } self.plan._manifests.append(manifest1) manifest2 = { 'contents': set("data/trial1.json data/trial2.json data/trial3/trial3a.json". split()), 'name': "goob_2.bag" } self.plan._manifests.append(manifest2) iter = self.plan.apply_iter(self.tempdir, info_nopass=['Bagging-Date', 'Bag-Size']) mbag = next(iter) mbagdir = os.path.join(self.tempdir, "goob_1.bag") self.assertEqual(mbag, mbagdir) for member in manifest1['contents']: self.assertTrue(os.path.exists(os.path.join(mbagdir, member))) self.assertTrue(os.path.exists(os.path.join(mbagdir, "bagit.txt"))) self.assertTrue(os.path.exists(os.path.join(mbagdir, "bag-info.txt"))) self.assertTrue( os.path.exists(os.path.join(mbagdir, "manifest-sha256.txt"))) bag = Bag(mbagdir) self.assertTrue(bag.validate()) self.assertTrue(bag.is_valid()) self.assertNotIn('Bag-Size', bag.info) self.assertNotIn('Multibag-Source-Bag-Size', bag.info) self.assertNotIn('Bagging-Date', bag.info)
def test_nonstandard(self): tempdir = tempfile.mkdtemp() try: self.bagdir = os.path.join(tempdir, "samplebag") shutil.copytree(os.path.join(datadir, "samplembag"), self.bagdir) os.mkdir(os.path.join(self.bagdir, "metadata", "trial3")) self.bag = xtend.as_extended(Bag(self.bagdir)) contents = list(self.bag.nonstandard()) self.assertIn("about.txt", contents) self.assertIn(os.path.join("metadata", "pod.json"), contents) self.assertIn(os.path.join("metadata", "trial3"), contents) self.assertIn(os.path.join("data", "trial1.json"), contents) self.assertIn(os.path.join("data", "trial2.json"), contents) self.assertIn(os.path.join("data", "trial3/trial3a.json"), contents) self.assertIn(os.path.join("multibag", "member-bags.tsv"), contents) self.assertIn(os.path.join("multibag", "file-lookup.tsv"), contents) self.assertEqual(len(contents), 8) finally: shutil.rmtree(tempdir)
def setUp(self): self.tempdir = tempfile.mkdtemp() self.bagdir = os.path.join(self.tempdir, "samplebag") shutil.copytree(os.path.join(datadir, "samplembag"), self.bagdir) shutil.rmtree(os.path.join(self.bagdir, "multibag")) os.mkdir(os.path.join(self.bagdir, "metadata", "trial3")) # add a line to the bag-info.txt that will require encoding with io.open(os.path.join(self.bagdir, "bag-info.txt"), 'a', encoding='utf-8') as fd: fd.write(u"Funny-Characters: ") fd.write('ß') fd.write(u"\n") self.bag = split.asProgenitor(Bag(self.bagdir)) self.plan = split.SplitPlan(self.bag)
def test_replicate_withlink(self): tempdir = tempfile.mkdtemp() try: self.bagdir = os.path.join(tempdir, "samplebag") shutil.copytree(os.path.join(datadir, "samplembag"), self.bagdir) os.mkdir(os.path.join(self.bagdir, "metadata", "trial3")) self.bag = xtend.as_extended(Bag(self.bagdir)) self.bag.replicate_with_hardlink = True self.assertTrue( os.path.exists(os.path.join(self.bag._bagdir, "bagit.txt"))) outdir = os.path.join(tempdir, "otherbag") self.assertFalse(os.path.exists(os.path.join(outdir, "bagit.txt"))) self.bag.replicate("bagit.txt", outdir) self.assertTrue(os.path.exists(os.path.join(outdir, "bagit.txt"))) self.assertTrue(ishardlink(os.path.join(outdir, "bagit.txt"))) finally: shutil.rmtree(tempdir)
def test_update_info(self): bag = Bag(self.bagdir) rmtag = [] for tag in bag.info: if tag.startswith('Multibag-'): rmtag.append(tag) for tag in rmtag: del bag.info[tag] bag.save() self.clear_multibag() # test assumptions for tag in bag.info: self.assertFalse(tag.startswith('Multibag-')) self.bag.update_info() bag = Bag(self.bagdir) self.assertEqual(bag.info.get('Multibag-Version'), CURRENT_VERSION) self.assertEqual(bag.info.get('Multibag-Head-Version'), "1") self.assertEqual(bag.info.get('Multibag-Reference'), CURRENT_REFERENCE) self.assertEqual(bag.info.get('Multibag-Tag-Directory'), "multibag") self.assertTrue(isinstance(bag.info.get('Internal-Sender-Description'), list)) self.assertEqual(len(bag.info.get('Internal-Sender-Description')),2) self.assertIn("Multibag-Reference", bag.info.get('Internal-Sender-Description')[1]) self.assertEqual(bag.info['Bag-Size'], "4.875 kB") self.bag.update_info("1.0", "1.1") bag = Bag(self.bagdir) self.assertEqual(bag.info.get('Multibag-Version'), "1.1") self.assertEqual(bag.info.get('Multibag-Head-Version'), "1.0") self.assertEqual(bag.info.get('Multibag-Tag-Directory'), "multibag") self.assertEqual(bag.info.get('Multibag-Reference'), CURRENT_REFERENCE) del bag.info['Internal-Sender-Description'] bag.save() self.clear_multibag() self.bag.update_info() bag = Bag(self.bagdir) self.assertEqual(bag.info.get('Multibag-Head-Version'), "1.0") self.assertEqual(bag.info.get('Multibag-Tag-Directory'), "multibag") self.assertFalse(isinstance(bag.info.get('Internal-Sender-Description'), list)) self.assertIn("Multibag-Reference", bag.info.get('Internal-Sender-Description'))