Beispiel #1
0
 def _signalHandler(self, sigNum, frame):
     # if they rekill, we just exit
     if sigNum == signal.SIGINT:
         signal.signal(sigNum, signal.default_int_handler)
     else:
         signal.signal(sigNum, signal.SIG_DFL)
     try:
         coveragehook.save()
     except:
         pass
     self._halt = True
     self._haltSignal = sigNum
     return
Beispiel #2
0
 def _signalHandler(self, sigNum, frame):
     # if they rekill, we just exit
     if sigNum == signal.SIGINT:
         signal.signal(sigNum, signal.default_int_handler)
     else:
         signal.signal(sigNum, signal.SIG_DFL)
     try:
         coveragehook.save()
     except:
         pass
     self._halt = True
     self._haltSignal = sigNum
     return
Beispiel #3
0
 def serve_forever(self):
     self._serving = True
     startedShutdown = False
     try:
         while True:
             if self._halt:
                 self.info('Shutting down server')
                 coveragehook.save()
                 startedShutdown = True
                 self._shutDownAndExit()
             self._try('loop hook', self._serveLoopHook)
             self._try('request handling', self.handleRequestIfReady, .1)
     except SystemExit, err:
         try:
             coveragehook.save()
         except:
             pass
         self._exit(err.args[0])
Beispiel #4
0
 def serve_forever(self):
     self._serving = True
     startedShutdown = False
     try:
         while True:
             if self._halt:
                 self.info('Shutting down server')
                 coveragehook.save()
                 startedShutdown = True
                 self._shutDownAndExit()
             self._try('loop hook', self._serveLoopHook)
             self._try('request handling', self.handleRequestIfReady)
     except SystemExit, err:
         try:
             coveragehook.save()
         except:
             pass
         self._exit(err.args[0])
Beispiel #5
0
 def serve_once(self):
     self._serving = True
     startedShutdown = False
     self._try("loop hook", self._serveLoopHook)
     try:
         self._try("request handling", self.handleRequestIfReady)
         self._try("loop hook", self._serveLoopHook)
         if self._halt:
             self.info("Shutting down server")
             coveragehook.save()
             startedShutdown = True
             self._shutDownAndExit()
     except SystemExit, err:
         self._serving = False
         try:
             coveragehook.save()
         except:
             pass
         self._exit(err.args[0])
Beispiel #6
0
def handler(req):
    coveragehook.install()
    try:
        return _handler(req)
    finally:
        coveragehook.save()
Beispiel #7
0
                if self._halt:
                    self.info('Shutting down server')
                    coveragehook.save()
                    startedShutdown = True
                    self._shutDownAndExit()
                self._try('loop hook', self._serveLoopHook)
                self._try('request handling', self.handleRequestIfReady, .1)
        except SystemExit, err:
            try:
                coveragehook.save()
            except:
                pass
            self._exit(err.args[0])
        except:
            try:
                coveragehook.save()
            except:
                pass
            if not startedShutdown:
                self._shutDownAndExit()
            raise

    def serve_once(self):
        self._serving = True
        startedShutdown = False
        self._try('loop hook', self._serveLoopHook)
        try:
            self._try('request handling', self.handleRequestIfReady, .1)
            self._try('loop hook', self._serveLoopHook)
            if self._halt:
                self.info('Shutting down server')
Beispiel #8
0
    def testChrootManagementMultinode(self):
        def _getChroot(helper):
            data = helper.listChroots()
            started = time.time()
            while not data:
                if time.time() - started > 60:
                    raise RuntimeError("timeout waiting for chroot to appear")
                time.sleep(.2)
                data = helper.listChroots()
            chroot, = data
            return chroot

        self.openRmakeRepository()
        client = self.startRmakeServer(multinode=True)
        helper = self.getRmakeHelper(client.uri)
        self.startNode()

        self.buildCfg.cleanAfterCook = False
        trv = self.addComponent('simple:source', '1-1', '',
                                [('simple.recipe', recipes.simpleRecipe)])
        jobId = self.discardOutput(helper.buildTroves, ['simple'])
        helper.waitForJob(jobId)
        chroot = helper.listChroots()[0]
        assert (chroot.path == 'simple')
        assert (chroot.jobId == jobId)
        self.stopNodes()
        self.startNode()
        chroot = _getChroot(helper)
        assert (chroot.path == 'simple')
        assert (chroot.jobId == jobId)

        self.stopNodes()
        self.stopRmakeServer()
        client = self.startRmakeServer(multinode=True)
        self.startNode()
        helper = self.getRmakeHelper(client.uri)

        chroot = _getChroot(helper)
        assert (chroot.path == 'simple')
        assert (chroot.jobId == jobId)

        self.captureOutput(helper.archiveChroot, self.nodeCfg.name, 'simple',
                           'foo')
        archivedPath = self.nodeCfg.getChrootArchiveDir() + '/foo'
        assert (os.path.exists(archivedPath))
        archivedChroot = helper.listChroots()[0]
        assert (archivedChroot.path == 'archive/foo')

        self.stopNodes()
        self.stopRmakeServer()
        client = self.startRmakeServer(multinode=True)
        helper = self.getRmakeHelper(client.uri)
        self.startNode()
        archivedChroot = _getChroot(helper)
        assert (archivedChroot.path == 'archive/foo')
        pid, master_fd = os.forkpty()
        if not pid:
            try:
                coveragehook.install()
                helper.startChrootSession(jobId, 'simple', ['/bin/sh'])
                sys.stdout.flush()
                coveragehook.save()
            finally:
                os._exit(0)
        try:
            count = 0
            data = ''
            while not data and count < 60:
                data = _readIfReady(master_fd)
                count += 1
            assert (data)
            os.write(master_fd, 'exit\n')
            data = _readIfReady(master_fd)
            while True:
                try:
                    data += _readIfReady(master_fd)
                except OSError:
                    os.waitpid(pid, 0)
                    break
        finally:
            os.close(master_fd)
Beispiel #9
0
    def testChrootSession(self):
        # NOTE: This test is prone to race conditions. The chroot
        # process will occasionally quit right away, probably due to
        # a (hidden) error.
        self.openRmakeRepository()
        client = self.startRmakeServer()
        helper = self.getRmakeHelper(client.uri)

        oldStdin = sys.stdin
        self.buildCfg.cleanAfterCook = False
        self.buildCfg.configLine('[context1]')
        try:
            trv = self.addComponent('simple:source', '1-1', '',
                                    [('simple.recipe', recipes.simpleRecipe)])
            jobId = self.discardOutput(helper.buildTroves,
                                       ['simple{context1}'])
            helper.waitForJob(jobId)
        finally:
            self.buildCfg.cleanAfterCook = True

        pid, master_fd = os.forkpty()
        if not pid:
            try:
                coveragehook.install()
                helper.startChrootSession(jobId, 'simple', ['/bin/sh'])
                sys.stdout.flush()
                coveragehook.save()
            finally:
                os._exit(0)
        try:
            count = 0
            data = ''
            while not data and count < 30:
                try:
                    data = _readIfReady(master_fd)
                except OSError, err:
                    if err.errno == errno.EIO:
                        os.waitpid(pid, 0)
                        raise testsuite.SkipTestException(
                            "testChrootSession failed yet again")
                    raise
                count += 1
            assert (data)
            os.write(master_fd, 'echo "this is a test"\n')
            data = ''
            # White out bash version
            r = re.compile(r"sh-[^$]*\$")
            expected = 'echo "this is a test"\r\r\nthis is a test\r\r\nsh-X.XX$ '
            count = 0
            while not data == expected and count < 60:
                data += r.sub("sh-X.XX$", str(_readIfReady(master_fd)), 1)
                count += 1
            self.assertEquals(data, expected)
            os.write(master_fd, 'exit\n')
            data = _readIfReady(master_fd)
            while True:
                try:
                    data += _readIfReady(master_fd)
                except OSError:
                    os.waitpid(pid, 0)
                    break
            expected = 'exit\r\r\nexit\r\r\n*** Connection closed by remote host ***\r\n'
            count = 0
            while not data == expected and count < 60:
                try:
                    data += _readIfReady(master_fd)
                except OSError:
                    break
                count += 1

            self.assertEquals(data, expected)
Beispiel #10
0
    def testChrootManagementMultinode(self):
        def _getChroot(helper):
            data = helper.listChroots()
            started = time.time()
            while not data:
                if time.time() - started > 60:
                    raise RuntimeError("timeout waiting for chroot to appear")
                time.sleep(.2)
                data = helper.listChroots()
            chroot, = data
            return chroot

        self.openRmakeRepository()
        client = self.startRmakeServer(multinode=True)
        helper = self.getRmakeHelper(client.uri)
        self.startNode()

        self.buildCfg.cleanAfterCook = False
        trv = self.addComponent('simple:source', '1-1', '',
                                [('simple.recipe', recipes.simpleRecipe)])
        jobId = self.discardOutput(helper.buildTroves, ['simple'])
        helper.waitForJob(jobId)
        chroot = helper.listChroots()[0]
        assert(chroot.path == 'simple')
        assert(chroot.jobId == jobId)
        self.stopNodes()
        self.startNode()
        chroot = _getChroot(helper)
        assert(chroot.path == 'simple')
        assert(chroot.jobId == jobId)


        self.stopNodes()
        self.stopRmakeServer()
        client = self.startRmakeServer(multinode=True)
        self.startNode()
        helper = self.getRmakeHelper(client.uri)

        chroot = _getChroot(helper)
        assert(chroot.path == 'simple')
        assert(chroot.jobId == jobId)

        self.captureOutput(helper.archiveChroot, self.nodeCfg.name, 'simple', 'foo')
        archivedPath = self.nodeCfg.getChrootArchiveDir() + '/foo'
        assert(os.path.exists(archivedPath))
        archivedChroot = helper.listChroots()[0]
        assert(archivedChroot.path == 'archive/foo')

        self.stopNodes()
        self.stopRmakeServer()
        client = self.startRmakeServer(multinode=True)
        helper = self.getRmakeHelper(client.uri)
        self.startNode()
        archivedChroot = _getChroot(helper)
        assert(archivedChroot.path == 'archive/foo')
        pid, master_fd = os.forkpty()
        if not pid:
            try:
                coveragehook.install()
                helper.startChrootSession(jobId, 'simple', ['/bin/sh'])
                sys.stdout.flush()
                coveragehook.save()
            finally:
                os._exit(0)
        try:
            count = 0
            data = ''
            while not data and count < 60:
                data = _readIfReady(master_fd)
                count += 1
            assert(data)
            os.write(master_fd, 'exit\n')
            data = _readIfReady(master_fd)
            while True:
                try:
                    data += _readIfReady(master_fd)
                except OSError:
                    os.waitpid(pid, 0)
                    break
        finally:
            os.close(master_fd)
Beispiel #11
0
    def testChrootSession(self):
        # NOTE: This test is prone to race conditions. The chroot
        # process will occasionally quit right away, probably due to
        # a (hidden) error.
        self.openRmakeRepository()
        client = self.startRmakeServer()
        helper = self.getRmakeHelper(client.uri)


        oldStdin = sys.stdin
        self.buildCfg.cleanAfterCook = False
        self.buildCfg.configLine('[context1]')
        try:
            trv = self.addComponent('simple:source', '1-1', '',
                                    [('simple.recipe', recipes.simpleRecipe)])
            jobId = self.discardOutput(helper.buildTroves, ['simple{context1}'])
            helper.waitForJob(jobId)
        finally:
            self.buildCfg.cleanAfterCook = True

        pid, master_fd = os.forkpty()
        if not pid:
            try:
                coveragehook.install()
                helper.startChrootSession(jobId, 'simple', ['/bin/sh'])
                sys.stdout.flush()
                coveragehook.save()
            finally:
                os._exit(0)
        try:
            count = 0
            data = ''
            while not data and count < 30:
                try:
                    data = _readIfReady(master_fd)
                except OSError, err:
                    if err.errno == errno.EIO:
                        os.waitpid(pid, 0)
                        raise testsuite.SkipTestException(
                                "testChrootSession failed yet again")
                    raise
                count += 1
            assert(data)
            os.write(master_fd, 'echo "this is a test"\n')
            data = ''
            # White out bash version
            r = re.compile(r"sh-[^$]*\$")
            expected = 'echo "this is a test"\r\r\nthis is a test\r\r\nsh-X.XX$ '
            count = 0
            while not data == expected and count < 60:
                data += r.sub("sh-X.XX$", str(_readIfReady(master_fd)), 1)
                count += 1
            self.assertEquals(data, expected)
            os.write(master_fd, 'exit\n')
            data = _readIfReady(master_fd)
            while True:
                try:
                    data += _readIfReady(master_fd)
                except OSError:
                    os.waitpid(pid, 0)
                    break
            expected = 'exit\r\r\nexit\r\r\n*** Connection closed by remote host ***\r\n'
            count = 0
            while not data == expected and count < 60:
                try:
                    data += _readIfReady(master_fd)
                except OSError:
                    break
                count += 1

            self.assertEquals(data, expected)
Beispiel #12
0
                if self._halt:
                    self.info('Shutting down server')
                    coveragehook.save()
                    startedShutdown = True
                    self._shutDownAndExit()
                self._try('loop hook', self._serveLoopHook)
                self._try('request handling', self.handleRequestIfReady)
        except SystemExit, err:
            try:
                coveragehook.save()
            except:
                pass
            self._exit(err.args[0])
        except:
            try:
                coveragehook.save()
            except:
                pass
            if not startedShutdown:
                self._shutDownAndExit()
            raise

    def serve_once(self):
        self._serving = True
        startedShutdown = False
        self._try('loop hook', self._serveLoopHook)
        try:
            self._try('request handling', self.handleRequestIfReady)
            self._try('loop hook', self._serveLoopHook)
            if self._halt:
                self.info('Shutting down server')
Beispiel #13
0
def handler(req):
    coveragehook.install()
    try:
        return _handler(req)
    finally:
        coveragehook.save()