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
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
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])
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])
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])
def handler(req): coveragehook.install() try: return _handler(req) finally: coveragehook.save()
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')
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)
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)
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)
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)
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')
def handler(req): coveragehook.install() try: return _handler(req) finally: coveragehook.save()