Example #1
0
    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()
Example #2
0
    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()
Example #3
0
    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)
Example #4
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
Example #5
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
Example #6
0
    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)
Example #7
0
 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)
Example #8
0
 def initPort(self):
     ports = testhelp.findPorts(num = 1, closeSockets=False)[0]
     self.port = ports[0]
     self.socket = ports[1]
Example #9
0
    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)