def test_simple(self, compress=None): self.fakemaster.keep_data = True self.make_command(transfer.SlaveDirectoryUploadCommand, dict( workdir='workdir', slavesrc='data', writer=FakeRemote(self.fakemaster), maxsize=None, blocksize=512, compress=compress, )) d = self.run_command() def check(_): self.assertUpdates([ {'header': 'sending %s' % self.datadir}, 'write(s)', 'unpack', # note no 'close" {'rc': 0} ]) d.addCallback(check) def check_tarfile(_): f = io.BytesIO(self.fakemaster.data) a = tarfile.open(fileobj=f, name='check.tar') exp_names = ['.', 'aa', 'bb'] got_names = [n.rstrip('/') for n in a.getnames()] # py27 uses '' instead of '.' got_names = sorted([n or '.' for n in got_names]) self.assertEqual(got_names, exp_names, "expected archive contents") a.close() f.close() d.addCallback(check_tarfile) return d
def test_interrupted(self): self.fakemaster.delay_write = True # write veery slowly self.make_command(transfer.SlaveFileUploadCommand, dict( workdir='workdir', slavesrc='data', writer=FakeRemote(self.fakemaster), maxsize=100, blocksize=2, keepstamp=False, )) d = self.run_command() # wait a jiffy.. interrupt_d = defer.Deferred() reactor.callLater(0.01, interrupt_d.callback, None) # and then interrupt the step def do_interrupt(_): return self.cmd.interrupt() interrupt_d.addCallback(do_interrupt) dl = defer.DeferredList([d, interrupt_d]) def check(_): self.assertUpdates([ {'header': 'sending %s' % self.datafile}, 'write(s)', 'close', {'rc': 1} ]) dl.addCallback(check) return dl
def test_interrupted(self): self.fakemaster.data = 'tenchars--' * 100 # 1k self.fakemaster.delay_read = True # read veery slowly self.make_command( transfer.SlaveFileDownloadCommand, dict( workdir='.', slavedest='data', reader=FakeRemote(self.fakemaster), maxsize=100, blocksize=2, mode=0777, )) d = self.run_command() # wait a jiffy.. interrupt_d = defer.Deferred() reactor.callLater(0.01, interrupt_d.callback, None) # and then interrupt the step def do_interrupt(_): return self.cmd.interrupt() interrupt_d.addCallback(do_interrupt) dl = defer.DeferredList([d, interrupt_d]) def check(_): self.assertUpdates(['read(s)', 'close', {'rc': 1}]) dl.addCallback(check) return dl
def test_simple(self): self.fakemaster.count_writes = True # get actual byte counts self.make_command( transfer.SlaveFileUploadCommand, dict( workdir='workdir', slavesrc='data', writer=FakeRemote(self.fakemaster), maxsize=1000, blocksize=64, )) d = self.run_command() def check(_): self.assertEqual(self.get_updates(), [{ 'header': 'sending %s' % self.datafile }, 'write 64', 'write 64', 'write 52', 'close', { 'rc': 0 }]) d.addCallback(check) return d
def test_truncated(self): self.fakemaster.data = test_data = 'tenchars--' * 10 self.make_command( transfer.SlaveFileDownloadCommand, dict( workdir='.', slavedest='data', reader=FakeRemote(self.fakemaster), maxsize=50, blocksize=32, mode=0777, )) d = self.run_command() def check(_): self.assertUpdates([ 'read(s)', 'close', { 'rc': 1, 'stderr': "Maximum filesize reached, truncating file '%s'" % os.path.join(self.basedir, '.', 'data') } ]) datafile = os.path.join(self.basedir, 'data') self.assertTrue(os.path.exists(datafile)) self.assertEqual(open(datafile).read(), test_data[:50]) d.addCallback(check) return d
def test_simple(self): self.fakemaster.count_reads = True # get actual byte counts self.fakemaster.data = test_data = '1234' * 13 assert (len(self.fakemaster.data) == 52) self.make_command( transfer.SlaveFileDownloadCommand, dict( workdir='.', slavedest='data', reader=FakeRemote(self.fakemaster), maxsize=None, blocksize=32, mode=0777, )) d = self.run_command() def check(_): self.assertUpdates( ['read 32', 'read 32', 'read 32', 'close', { 'rc': 0 }]) datafile = os.path.join(self.basedir, 'data') self.assertTrue(os.path.exists(datafile)) self.assertEqual(open(datafile).read(), test_data) if runtime.platformType != 'win32': self.assertEqual(os.stat(datafile).st_mode & 0777, 0777) d.addCallback(check) return d
def test_failure(self): self.fakemaster.data = 'hi' os.makedirs(os.path.join(self.basedir, 'dir')) self.make_command( transfer.SlaveFileDownloadCommand, dict( workdir='.', slavedest='dir', ## but that's a directory! reader=FakeRemote(self.fakemaster), maxsize=None, blocksize=32, mode=0777, )) d = self.run_command() def check(_): self.assertUpdates([ 'close', { 'rc': 1, 'stderr': "Cannot open file '%s' for download" % os.path.join(self.basedir, '.', 'dir') } ]) d.addCallback(check) return d
def test_timestamp(self): self.fakemaster.count_writes = True # get actual byte counts timestamp = (os.path.getatime(self.datafile), os.path.getmtime(self.datafile)) self.make_command( transfer.SlaveFileUploadCommand, dict( workdir='workdir', slavesrc='data', writer=FakeRemote(self.fakemaster), maxsize=1000, blocksize=64, keepstamp=True, )) d = self.run_command() def check(_): self.assertUpdates([{ 'header': 'sending %s' % self.datafile }, 'write 64', 'write 64', 'write 52', 'close', 'utime - %s' % timestamp[0], { 'rc': 0 }]) d.addCallback(check) return d
def test_out_of_space_unpack(self): self.fakemaster.keep_data = True self.fakemaster.unpack_fail = True self.make_command( transfer.SlaveDirectoryUploadCommand, dict(workdir='workdir', slavesrc='data', writer=FakeRemote(self.fakemaster), maxsize=None, blocksize=512, compress=None)) d = self.run_command() self.assertFailure(d, RuntimeError) def check(_): self.assertUpdates([{ 'header': 'sending %s' % self.datadir }, 'write(s)', 'unpack', { 'rc': 1 }]) d.addCallback(check) return d
def test_missing(self): self.make_command( transfer.SlaveFileUploadCommand, dict( workdir='workdir', slavesrc='data-nosuch', writer=FakeRemote(self.fakemaster), maxsize=100, blocksize=64, keepstamp=False, )) d = self.run_command() def check(_): df = self.datafile + "-nosuch" self.assertUpdates([{ 'header': 'sending %s' % df }, 'close', { 'rc': 1, 'stderr': "Cannot open file '%s' for upload" % df }]) d.addCallback(check) return d
def test_out_of_space(self): self.fakemaster.write_out_of_space_at = 70 self.fakemaster.count_writes = True # get actual byte counts self.make_command( transfer.SlaveFileUploadCommand, dict( workdir='workdir', slavesrc='data', writer=FakeRemote(self.fakemaster), maxsize=1000, blocksize=64, keepstamp=False, )) d = self.run_command() self.assertFailure(d, RuntimeError) def check(_): self.assertUpdates([{ 'header': 'sending %s' % self.datafile }, 'write 64', 'close', { 'rc': 1 }]) d.addCallback(check) return d
def test_mkdir(self): self.fakemaster.data = test_data = 'hi' self.make_command( transfer.SlaveFileDownloadCommand, dict( workdir='workdir', slavedest=os.path.join('subdir', 'data'), reader=FakeRemote(self.fakemaster), maxsize=None, blocksize=32, mode=0777, )) d = self.run_command() def check(_): self.assertEqual(self.get_updates(), ['read(s)', 'close', { 'rc': 0 }]) datafile = os.path.join(self.basedir, 'workdir', 'subdir', 'data') self.assertTrue(os.path.exists(datafile)) self.assertEqual(open(datafile).read(), test_data) d.addCallback(check) return d
def test_truncated(self): self.fakemaster.count_writes = True # get actual byte counts self.make_command( transfer.SlaveFileUploadCommand, dict( workdir='workdir', slavesrc='data', writer=FakeRemote(self.fakemaster), maxsize=100, blocksize=64, keepstamp=False, )) d = self.run_command() def check(_): self.assertUpdates([{ 'header': 'sending %s' % self.datafile }, 'write 64', 'write 36', 'close', { 'rc': 1, 'stderr': "Maximum filesize reached, truncating file '%s'" % self.datafile }]) d.addCallback(check) return d
def do_start(_): return self.sb.callRemote( "startCommand", FakeRemote(st), "13", "shell", dict( command=['sleep', '10'], workdir='workdir', ))
def setUp(self): self.basedir = os.path.abspath("basedir") if os.path.exists(self.basedir): shutil.rmtree(self.basedir) os.makedirs(self.basedir) self.real_bot = base.BotBase(self.basedir, False) self.real_bot.startService() self.bot = FakeRemote(self.real_bot)
def setUp(self): self.basedir = os.path.abspath("basedir") if os.path.exists(self.basedir): shutil.rmtree(self.basedir) os.makedirs(self.basedir) self.bot = base.BotBase(self.basedir, False) self.bot.startService() # get a SlaveBuilder object from the bot and wrap it as a fake remote builders = yield self.bot.remote_setBuilderList([('sb', 'sb')]) self.sb = FakeRemote(builders['sb']) self.setUpCommand()
def setUp(self): self.basedir = os.path.abspath("basedir") if os.path.exists(self.basedir): shutil.rmtree(self.basedir) os.makedirs(self.basedir) self.bot = bot.Bot(self.basedir, False) self.bot.startService() # get a SlaveBuilder object from the bot and wrap it as a fake remote wfd = defer.waitForDeferred( self.bot.remote_setBuilderList([('sb', 'sb')])) yield wfd builders = wfd.getResult() self.sb = FakeRemote(builders['sb']) self.setUpCommand()
def do_start(_): return self.sb.callRemote("startCommand", FakeRemote(st), "13", "shell", dict())
def do_start(_): return self.sb.callRemote( "startCommand", FakeRemote(st), "13", "shell", dict(command=['echo', 'hello'], workdir='workdir'))