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
Esempio n. 4
0
    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
Esempio n. 10
0
    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
Esempio n. 11
0
    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
Esempio n. 12
0
    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
Esempio n. 13
0
    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
Esempio n. 14
0
 def do_start(_):
     return self.sb.callRemote(
         "startCommand", FakeRemote(st), "13", "shell",
         dict(
             command=['sleep', '10'],
             workdir='workdir',
         ))
Esempio n. 15
0
    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)
Esempio n. 16
0
    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()
Esempio n. 17
0
    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()
Esempio n. 18
0
 def do_start(_):
     return self.sb.callRemote("startCommand", FakeRemote(st), "13",
                               "shell", dict())
Esempio n. 19
0
 def do_start(_):
     return self.sb.callRemote(
         "startCommand", FakeRemote(st), "13", "shell",
         dict(command=['echo', 'hello'], workdir='workdir'))