def __init__(self): self.port = testhelp.findPorts(num=1)[0] self.childPid = os.fork() if self.childPid > 0: sock_utils.tryConnect('127.0.0.1', self.port) return server = SimpleXMLRPCServer6(("::", self.port), logRequests=False) server.register_instance(self.handlerFactory()) server.serve_forever()
def __init__(self): self.port = testhelp.findPorts(num = 1)[0] self.childPid = os.fork() if self.childPid > 0: sock_utils.tryConnect('127.0.0.1', self.port) return server = SimpleXMLRPCServer6(("::", self.port), logRequests=False) server.register_instance(self.handlerFactory()) server.serve_forever()
def testSecureHTTPServer(self): # Checks that the secure SSL server works if not server.SSL: raise testhelp.SkipTestException("m2crypto not installed") cfg = server.ServerConfig() cfg.port = testhelp.findPorts(1)[0] cfg.tmpdir = os.path.join(self.workDir, 'proxyTmpDir') cfg.changesetCacheDir = os.path.join(self.workDir, 'changesetCacheDir') cfg.proxyContentsDir = os.path.join(self.workDir, 'proxyContentsDir') cfg.traceLog = (10, os.path.join(self.workDir, "proxy.debug")) cfg.useSSL = True cfg.sslCert = os.path.join(resources.get_archive(), 'ssl-cert.crt') cfg.sslKey = os.path.join(resources.get_archive(), 'ssl-cert.key') cfgfile = os.path.join(self.workDir, "proxy.conf") serverrc = open(cfgfile, "w+") cfg.store(serverrc, includeDocs=False) serverrc.close() util.mkdirChain(cfg.tmpdir) util.mkdirChain(cfg.changesetCacheDir) util.mkdirChain(cfg.proxyContentsDir) pid = os.fork() if pid == 0: # In the child try: errfd = os.open(os.path.join(self.workDir, "proxy.log"), os.O_RDWR | os.O_CREAT) os.dup2(errfd, sys.stderr.fileno()) os.close(errfd) srvpy = os.path.abspath(server.__file__).replace('.pyc', '.py') os.execv(srvpy, [ srvpy, '--config-file', cfgfile ]) os._exit(0) except: os._exit(70) self.openRepository(2, useSSL=True) # In the parent try: # Set conary proxy self.cfg.configLine("conaryProxy https://localhost:%s" % cfg.port) client = conaryclient.ConaryClient(self.cfg) sock_utils.tryConnect("127.0.0.1", cfg.port) srvVers = client.repos.c['localhost2'].checkVersion() self.assertTrue(srvVers) finally: self.servers.stopServer(2) os.kill(pid, signal.SIGTERM) os.waitpid(pid, 0)
def startServer(): def startFunc(port, queue): srv = HTTPServer(queue, ("127.0.0.1", port), QueuedRequestHandler) queue.put("started") # Handle only one request srv.handle_request() port = testhelp.findPorts(num=1)[0] queue = Queue.Queue(maxsize=20) t = threading.Thread(target=startFunc, args=(port, queue)) t.start() return t, port, queue
def startServer(): def startFunc(port, queue): srv = HTTPServer(queue, ("127.0.0.1", port), QueuedRequestHandler) queue.put("started") # Handle only one request srv.handle_request() port = testhelp.findPorts(num = 1)[0] queue = Queue.Queue(maxsize = 20) t = threading.Thread(target = startFunc, args = (port, queue)) t.start() return t, port, queue
def setUp(self): testhelp.TestCase.setUp(self) self.archivePath = resources.get_archive() import testserver ports = testhelp.findPorts(num=1, closeSockets=True) self.server = testserver.ThreadServer(port=ports[0], debug=self._debug_flag) import logging log = logging.getLogger('robj.http.traffic') self._old_log_level = log.level if self._debug_flag: log.setLevel(logging.DEBUG)
def _initPath(self): self.sqlPid = None self.port = testhelp.findPorts(num = 1)[0] if self.path: assert(isinstance(self.path, str)) if self.path.lower() != self.path: raise RuntimeError("The SQL server harness requires that " "repository dirs be all lowercase") else: self.path = tempfile.mkdtemp() os.rmdir(self.path) # this is a sick hack because we're using the lowercase table # option on mysql self.path = self.path.lower() self.log = "%s/log" % self.path if os.path.exists(self.path): shutil.rmtree(self.path) util.mkdirChain("%s/data" % self.path) util.mkdirChain("%s/tmp" % self.path)
def initPort(self): ports = testhelp.findPorts(num = 1, closeSockets=False)[0] self.port = ports[0] self.socket = ports[1]
def _testSlowActionWithStandalone(self, useSSL = False): # Test to make sure that slow commits still work even with the # proxy keepalive code added (CNY-1341) cfg = server.ServerConfig() cfg.port = testhelp.findPorts(1)[0] cfg.contentsDir = ('legacy', [self.workDir + '/contents']) cfg.repositoryDB = ('sqlite', self.workDir + '/serverdb') cfg.logFile = self.workDir + '/serverlog' cfg.tmpDir = self.workDir + '/tmp' cfg.serverName = 'localhost' util.mkdirChain(cfg.tmpDir) util.mkdirChain(cfg.contentsDir[1][0]) if useSSL: cfg.useSSL = True cfg.sslCert = os.path.join(resources.get_archive(), 'ssl-cert.crt') cfg.sslKey = os.path.join(resources.get_archive(), 'ssl-cert.key') (driver, database) = cfg.repositoryDB db = dbstore.connect(database, driver) schema.loadSchema(db) schema.setupTempTables(db) auth = netauth.NetworkAuthorization(db, 'localhost') auth.addRole('foo') auth.addUser('foo', 'foo') auth.addRoleMember('foo', 'foo') auth.addAcl('foo', None, None, write = True) if useSSL: proto = "https" else: proto = "http" baseUrl = '%s://localhost:%s/' % (proto, cfg.port) pid = os.fork() if not pid: try: netServer = netserver.NetworkRepositoryServer(cfg, baseUrl) oldGetChangeSet = netServer.getChangeSet @netserver.accessReadOnly def getChangeSet(*args, **kw): rv = oldGetChangeSet(*args, **kw) # make sure the client sends its message self.sleep(7) return rv getChangeSet.im_func = getChangeSet netServer.getChangeSet = getChangeSet class HttpRequestsSubclass(server.HttpRequests): tmpDir = cfg.tmpDir netRepos = proxy.SimpleRepositoryFilter(cfg, baseUrl, netServer) restHandler = None HttpRequestsSubclass.cfg = cfg if useSSL: ctx = server.createSSLContext(cfg) httpServer = server.SecureHTTPServer(("", cfg.port), HttpRequestsSubclass, ctx) else: httpServer = server.HTTPServer(("", cfg.port), HttpRequestsSubclass) self.captureOutput(server.serve, httpServer) finally: os._exit(0) try: sock_utils.tryConnect("127.0.0.1", cfg.port) cfg = conarycfg.ConaryConfiguration(False) cfg.repositoryMap = {'localhost' : baseUrl } cfg.user.addServerGlob('localhost', 'foo', 'foo') client = conaryclient.ConaryClient(cfg) repos = client.getRepos() trv, cs = self.Component('foo:run', '1') repos.commitChangeSet(cs) # getTrove will fail because it takes more than 5 seconds assert(repos.getTrove(*trv.getNameVersionFlavor())) finally: os.kill(pid, signal.SIGTERM) os.waitpid(pid, 0)