def _build(self): self.experiment = generate_experiment( users=[self.user], title='Meanwhile, down in the archives ...', url='http://example.com/something') self.experiment2 = generate_experiment( users=[self.user], title='Meanwhile, behind the potting shed ...', url='http://example.com/other') self.dataset = generate_dataset(experiments=[self.experiment]) self.dataset2 = generate_dataset(experiments=[self.experiment]) self.datafile, self.replica = generate_datafile( None, self.dataset, "Hi mum") self.datafile2, self.replica2 = generate_datafile( None, self.dataset2, "Hello father")
def testMirrorDatafile(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, _ = generate_datafile(None, dataset, "Hi grandpa") # Dry run ... out = StringIO() try: call_command('migratefiles', 'mirror', 'datafile', datafile.id, verbosity=1, stdout=out, dryRun=True) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Would have mirrored datafile %s\n' % datafile.id) # Do it out = StringIO() try: call_command('migratefiles', 'mirror', 'datafile', datafile.id, verbosity=2, stdout=out) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Mirrored datafile %s\n' 'Transferred 1 datafiles with 0 errors\n' % datafile.id)
def testMigrateReclaim(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, replica = generate_datafile(None, dataset, "Hi mum") datafile2, replica2 = generate_datafile(None, dataset, "Hi mum") datafile3, replica3 = generate_datafile(None, dataset, "Hi mum") url = replica.url url2 = replica2.url out = StringIO() try: call_command("migratefiles", "reclaim", "11", stdout=out, verbosity=2, dryRun=True) except SystemExit: pass out.seek(0) self.assertEquals( out.read(), "Would have migrated %s / %s saving 6 bytes\n" "Would have migrated %s / %s saving 6 bytes\n" "Would have reclaimed 12 bytes\n" % (url, datafile.id, url2, datafile2.id), ) out = StringIO() try: call_command("migratefiles", "reclaim", "11", stdout=out, verbosity=2) except SystemExit: pass out.seek(0) self.assertEquals( out.read(), "Migrating %s / %s saving 6 bytes\n" "Migrating %s / %s saving 6 bytes\n" "Reclaimed 12 bytes\n" "Transferred 2 datafiles with 0 errors\n" % (url, datafile.id, url2, datafile2.id), )
def testErrors(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, _ = generate_datafile(None, dataset, "Hi mum") err = StringIO() try: call_command("migratefiles", "migrate", "datafile", 999, stderr=err) except SystemExit: pass err.seek(0) self.assertEquals(err.read(), "Datafile 999 does not exist\n" "Error: No Datafiles selected\n") err = StringIO() try: call_command("migratefiles", "migrate", "datafile", 999, stderr=err, all=True) except SystemExit: pass err.seek(0) self.assertEquals(err.read(), "Error: No target/ids allowed with --all\n") err = StringIO() try: call_command("migratefiles", "migrate", "datafile", datafile.id, dest="nowhere", stderr=err) except SystemExit: pass err.seek(0) self.assertEquals(err.read(), "Error: Destination nowhere not known\n")
def setUp(self): self.user = generate_user('fred') Location.force_initialize() self.experiment = generate_experiment(users=[self.user]) self.dataset = generate_dataset(experiments=[self.experiment]) self.server = SimpleHttpTestServer() self.server.start()
def setUp(self): self.user = generate_user('fred') Location.force_initialize() self.experiment = generate_experiment( users=[self.user], title='Meanwhile, down in the archives ...', url='http://example.com/something') self.dataset = generate_dataset(experiments=[self.experiment])
def testArchiveExperiment(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, _ = generate_datafile(None, dataset, "Hi grandpa") archtest = Location.get_location('archtest') # Dry run ... out = StringIO() try: call_command('archive', experiment.id, verbosity=1, stdout=out, dryRun=True) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Would have archived experiment %s\n' % experiment.id) # Dry run ... all out = StringIO() try: call_command('archive', all=True, verbosity=1, stdout=out, dryRun=True) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Would have archived experiment %s\n' % experiment.id) # Do one ... to file out = StringIO() try: call_command('archive', experiment.id, directory='/tmp', verbosity=1, stdout=out) except SystemExit: pass out.seek(0) self.assertEquals( out.read(), 'Archived experiment %s to /tmp/%s-archive.tar.gz\n' \ 'Archived 1 experiments with 0 errors\n' % \ (experiment.id, experiment.id)) # Do one ... to archtest out = StringIO() try: call_command('archive', experiment.id, location='archtest', verbosity=1, stdout=out) except SystemExit: pass out.seek(0) self.assertEquals( out.read(), 'Archived experiment %s to %s%s-archive.tar.gz\n' \ 'Archived 1 experiments with 0 errors\n' % \ (experiment.id, archtest.provider.base_url, experiment.id))
def testMigrateAll(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) dataset2 = generate_dataset() experiment2 = generate_experiment([dataset2], [self.dummy_user]) datafile, _ = generate_datafile(None, dataset, "Hi mum") datafile2, _ = generate_datafile(None, dataset, "Hi mum") datafile3, _ = generate_datafile(None, dataset, "Hi mum") datafile4, _ = generate_datafile(None, dataset2, "Hi mum") out = StringIO() try: call_command('migratefiles', 'migrate', all=True, verbosity=2, stdout=out) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Transferred 4 datafiles with 0 errors\n' % (datafile.id, datafile2.id, datafile3.id, datafile4.id)) out = StringIO() try: call_command('migratefiles', 'migrate', all=True, verbosity=2, stdout=out, dest='local', source='test') except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Transferred 4 datafiles with 0 errors\n' % (datafile.id, datafile2.id, datafile3.id, datafile4.id))
def _setup(self): Location.force_initialize() self.user1 = generate_user('joe', 2) self.user2 = generate_user('fred', 1) self.exp1 = generate_experiment(users=[self.user1, self.user2]) self.exp2 = generate_experiment(users=[self.user1]) self.exp3 = generate_experiment(users=[self.user1]) self.exp4 = generate_experiment(users=[self.user1]) self.ds1 = generate_dataset(experiments=[self.exp1]) self.ds2 = generate_dataset(experiments=[self.exp1, self.exp2]) self.ds3 = generate_dataset(experiments=[self.exp3]) self.ds4 = generate_dataset(experiments=[self.exp4]) self.df1, self.rep1 = generate_datafile('1/2/1', self.ds1, size=100) self.df2, self.rep2 = generate_datafile('1/2/2', self.ds1, size=100, verified=False) self.df3, self.rep3 = generate_datafile( 'http://127.0.0.1:4272/data/1/2/3', self.ds1, size=1000) self.df4, self.rep4 = generate_datafile('1/2/4', self.ds2, size=1000) self.df5, self.rep5 = generate_datafile('1/2/5', self.ds2, size=10000) self.df6, self.rep6 = generate_datafile('1/2/6', self.ds3, size=100000) self.df7, self.rep7 = generate_datafile('1/2/7', self.ds4, size=0) self.df8, self.rep8 = generate_datafile('1/2/8', self.ds4, size=-1)
def testErrors(self): dataset = generate_dataset() generate_experiment([dataset], [self.dummy_user]) datafile, _ = generate_datafile(None, dataset, "Hi mum") err = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', 999, stderr=err) except SystemExit: pass except CommandError as e: err.write(str(e)) err.seek(0) self.assertEquals(err.read(), 'Datafile 999 does not exist\n' 'No Datafiles selected') err = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', 999, stderr=err, all=True) except SystemExit: pass except CommandError as e: err.write(str(e)) err.seek(0) self.assertEquals(err.read(), 'No target/ids allowed with --all') err = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile.id, dest='nowhere', stderr=err) except SystemExit: pass except CommandError as e: err.write(str(e)) err.seek(0) self.assertEquals(err.read(), 'Destination nowhere not known')
def testMigrateDataset(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, _ = generate_datafile(None, dataset, "Hi mum") datafile2, _ = generate_datafile(None, dataset, "Hi mum") datafile3, _ = generate_datafile(None, dataset, "Hi mum") # Dry run out = StringIO() try: call_command("migratefiles", "migrate", "dataset", dataset.id, verbosity=2, stdout=out, dryRun=True) except SystemExit: pass out.seek(0) self.assertEquals( out.read(), "Would have migrated datafile %s\n" "Would have migrated datafile %s\n" "Would have migrated datafile %s\n" % (datafile.id, datafile2.id, datafile3.id), ) # Real run, verbose out = StringIO() try: call_command("migratefiles", "migrate", "dataset", dataset.id, verbosity=2, stdout=out) except SystemExit: pass out.seek(0) self.assertEquals( out.read(), "Migrated datafile %s\n" "Migrated datafile %s\n" "Migrated datafile %s\n" "Transferred 3 datafiles with 0 errors\n" % (datafile.id, datafile2.id, datafile3.id), ) out = StringIO() try: call_command( "migratefiles", "migrate", "dataset", dataset.id, verbosity=2, stdout=out, dest="local", source="test" ) except SystemExit: pass out.seek(0) self.assertEquals( out.read(), "Migrated datafile %s\n" "Migrated datafile %s\n" "Migrated datafile %s\n" "Transferred 3 datafiles with 0 errors\n" % (datafile.id, datafile2.id, datafile3.id), )
def testMigrateDataset(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, _ = generate_datafile(None, dataset, "Hi mum") datafile2, _ = generate_datafile(None, dataset, "Hi mum") datafile3, _ = generate_datafile(None, dataset, "Hi mum") # Dry run out = StringIO() try: call_command('migratefiles', 'migrate', 'dataset', dataset.id, verbosity=2, stdout=out, dryRun=True) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Would have migrated datafile %s\n' 'Would have migrated datafile %s\n' 'Would have migrated datafile %s\n' % (datafile.id, datafile2.id, datafile3.id)) # Real run, verbose out = StringIO() try: call_command('migratefiles', 'migrate', 'dataset', dataset.id, verbosity=2, stdout=out) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Transferred 3 datafiles with 0 errors\n' % (datafile.id, datafile2.id, datafile3.id)) out = StringIO() try: call_command('migratefiles', 'migrate', 'dataset', dataset.id, verbosity=2, stdout=out, dest='local', source='test') except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Transferred 3 datafiles with 0 errors\n' % (datafile.id, datafile2.id, datafile3.id))
def testMigrateEnsure(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, _ = generate_datafile(None, dataset, "Hi mum") datafile2, _ = generate_datafile(None, dataset, "Hi mum") datafile3, _ = generate_datafile(None, dataset, "Hi mum") # Ensuring that there are at least zero bytes of free space # is a no-op ... but it tests the logic, and the method that # enquires how much free disc space there is. out = StringIO() try: call_command("migratefiles", "ensure", "0", stdout=out, verbosity=2, dryRun=True) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), "")
def testMigrateEnsure(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, _ = generate_datafile(None, dataset, "Hi mum") datafile2, _ = generate_datafile(None, dataset, "Hi mum") datafile3, _ = generate_datafile(None, dataset, "Hi mum") # Ensuring that there are at least zero bytes of free space # is a no-op ... but it tests the logic, and the method that # enquires how much free disc space there is. out = StringIO() try: call_command('migratefiles', 'ensure', '0', stdout=out, verbosity=2, dryRun=True) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), '')
def testScore(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, replica = generate_datafile(None, dataset, "Hi mum") datafile2, replica2 = generate_datafile(None, dataset, "Hi mum") datafile3, replica3 = generate_datafile(None, dataset, "Hi mum") out = StringIO() try: call_command('migratefiles', 'score', stdout=out) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'datafile %s / %s, size = 6, ' 'score = 0.778151250384, total_size = 6\n' 'datafile %s / %s, size = 6, ' 'score = 0.778151250384, total_size = 12\n' 'datafile %s / %s, size = 6, ' 'score = 0.778151250384, total_size = 18\n' % (replica.url, datafile.id, replica2.url, datafile2.id, replica3.url, datafile3.id))
def testMigrateReclaim(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, replica = generate_datafile(None, dataset, "Hi mum") datafile2, replica2 = generate_datafile(None, dataset, "Hi mum") datafile3, replica3 = generate_datafile(None, dataset, "Hi mum") url = replica.url url2 = replica2.url out = StringIO() try: call_command('migratefiles', 'reclaim', '11', stdout=out, verbosity=2, dryRun=True) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Attempting to reclaim 11 bytes\n' 'Would have migrated %s / %s saving 6 bytes\n' 'Would have migrated %s / %s saving 6 bytes\n' 'Would have reclaimed 12 bytes\n' % (url, datafile.id, url2, datafile2.id)) out = StringIO() try: call_command('migratefiles', 'reclaim', '11', stdout=out, verbosity=2) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Attempting to reclaim 11 bytes\n' 'Migrating %s / %s saving 6 bytes\n' 'Migrating %s / %s saving 6 bytes\n' 'Reclaimed 12 bytes\n' 'Transferred 2 datafiles with 0 errors\n' % (url, datafile.id, url2, datafile2.id))
def testMigrateDatafile(self): dataset = generate_dataset() experiment = generate_experiment([dataset], [self.dummy_user]) datafile, replica = generate_datafile(None, dataset, "Hi mum", verify=False, verified=False) datafile2, _ = generate_datafile(None, dataset, "Hi mum") datafile3, _ = generate_datafile(None, dataset, "Hi mum") err = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile.id, stderr=err) except SystemExit: pass except CommandError as e: err.write(str(e)) err.seek(0) self.assertEquals(err.read(), 'Migration failed for datafile %s : ' 'Only verified datafiles can be migrated ' 'to this destination\n' % datafile.id) self.assertEquals(replica.verify(allowEmptyChecksums=True), True) replica.save() # (Paths should all be kosher now ...) path = datafile.get_absolute_filepath() path2 = datafile2.get_absolute_filepath() path3 = datafile3.get_absolute_filepath() for p in [path, path2, path3]: self.assertTrue(os.path.exists(p)) # Dry run ... out = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile.id, verbosity=1, stdout=out, dryRun=True) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Would have migrated datafile %s\n' % datafile.id) for p in [path, path2, path3]: self.assertTrue(os.path.exists(p)) # Real run, verbose (migrates 1) out = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile.id, verbosity=3, stdout=out, stderr=StringIO()) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Migrated datafile %s\n' 'Transferred 1 datafiles with 0 errors\n' % datafile.id) for p in [path, path2, path3]: self.assertTrue(os.path.exists(p) == (p != path)) # Real run, normal (migrates 2 & 3) out = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile2.id, datafile3.id, verbosity=1, stdout=out) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Transferred 2 datafiles with 0 errors\n') for p in [path, path2, path3]: self.assertFalse(os.path.exists(p)) # Cannot migrate a file that is not local (now) err = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile.id, verbosity=2, stderr=err) except SystemExit: pass err.seek(0) self.assertEquals(err.read(), '') # Should "fail" silently # Again but with more verbosity err = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile.id, verbosity=3, stderr=err) except SystemExit: pass err.seek(0) self.assertEquals(err.read(), 'Source local destination test\n' 'No replica of %s exists at local\n' % datafile.id) # Real restore, verbose (restores 1, 2 & 3) out = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile.id, datafile2.id, datafile3.id, verbosity=2, stdout=out, dest='local', source='test') except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Transferred 3 datafiles with 0 errors\n' % (datafile.id, datafile2.id, datafile3.id)) for p in [path, path2, path3]: self.assertTrue(os.path.exists(p)) # Cannot restore files that are (now) local out = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile.id, verbosity=2, stdout=out, dest='local', source='test') except SystemExit: pass out.seek(0) self.assertEquals(out.read(), # Fail quietly ... not remote 'Transferred 0 datafiles with 0 errors\n') # Now try migrating with 'no remove' out = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile.id, datafile2.id, datafile3.id, noRemove=True, verbosity=2, stdout=out) except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Transferred 3 datafiles with 0 errors\n' % (datafile.id, datafile2.id, datafile3.id)) for p in [path, path2, path3]: self.assertTrue(os.path.exists(p)) # When we bring them back now, the local pathnames should change # because the staging code won't clobber an existing file. out = StringIO() try: call_command('migratefiles', 'migrate', 'datafile', datafile.id, datafile2.id, datafile3.id, verbosity=2, stdout=out, dest='local', source='test') except SystemExit: pass out.seek(0) self.assertEquals(out.read(), 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Migrated datafile %s\n' 'Transferred 3 datafiles with 0 errors\n' % (datafile.id, datafile2.id, datafile3.id)) for p, d in [(path, datafile), (path2, datafile2), (path3, datafile3)]: dd = Dataset_File.objects.get(id=d.id) self.assertTrue(os.path.exists(p)) self.assertTrue(os.path.exists(dd.get_absolute_filepath())) self.assertNotEqual(p, dd.get_absolute_filepath())