def start(self): assert self.start_cmd, 'No start command defined' if self.stdout: self.stdout = self._reopen(self.stdout) if self.stderr: self.stderr = self._reopen(self.stderr, 'stderr') if isinstance(self.start_cmd, basestring): cmd = shlex.split(self.start_cmd) else: cmd = self.start_cmd # make sure we the ports are free for server in self.servers: assert not util.isUp( *server), 'Port already listening %s:%s' % server logging.info('Starting server %r', cmd) self.process = subprocess.Popen(cmd, **self.subprocess_args) to_start = deque(self.servers) while to_start: time.sleep(0.05) returncode = self.process.poll() if not returncode is None and returncode != 0: raise SystemError("Failed to start server rc=%s cmd=%s" % (returncode, self.start_cmd)) server = to_start.popleft() if not util.isUp(*server): logging.info('Server not up %s:%s', *server) to_start.append(server) else: logging.info('Server up %s:%s', *server)
def setUp(self): if util.isUp('', self.port): raise RuntimeError, "Port already listening: %r" % self.port if not os.path.exists(self.dbDir): self.srv.initDB() self.srv.start() exists, sp = self.snapshotInfo('__scripts__') if exists: if not self.srv.dbExists(self.dbName): self.srv.createDB(self.dbName) if self.setup is None: self.srv.restore(self.dbName, sp) else: self.srv.dropDB(self.dbName) self.srv.createDB(self.dbName) if self.scripts: try: self.srv.runScripts(self.dbName, self.scripts) except: self.srv.stop() raise self.srv.dump(self.dbName, sp) # create the snapshot for app dirty = False if self.setup is not None: exists, sps = self.snapshotInfo(self.snapshotIdent) if not exists: self.setup(self) self.srv.dump(self.dbName, sps) else: self.srv.restore(self.dbName, sps)
def tearDown(self): self.stop() to_stop = deque(self.servers) time.sleep(0.05) while to_stop: server = to_stop.popleft() if util.isUp(*server): logging.info('Server still up %s:%s', *server) to_stop.append(server) time.sleep(0.05) else: logging.info('Server stopped %s:%s', *server)