Exemplo n.º 1
0
 def start(self):
     self.reset()
     self.server.start()
     sock_utils.tryConnect('::', self.plainPort,
             logFile=self.errorLog,
             abortFunc=self.server.check,
             )
Exemplo n.º 2
0
    def testAuthenticatedHTTPProxy(self):
        # CNY-1687
        self.openRepository()
        if not os.path.exists(rephelp.HTTPProxy.proxyBinPath):
            raise testhelp.SkipTestException(
                'testHTTPProxy depends on squid being installed')

        h = rephelp.HTTPProxy(os.path.join(self.workDir, "http-cache"))
        proxyUri = h.start()
        try:
            sock_utils.tryConnect("localhost", h.port)

            # We cannot have an HTTP proxy and a Conary proxy chained together.
            # (we can have a client talking to a Conary proxy that talks to a repo
            # via an HTTP proxy)
            self.cfg.conaryProxy = {}

            # Unauthenticated, should fail
            self.cfg.configLine("proxy http://localhost:%s" % h.authPort)
            client = conaryclient.ConaryClient(self.cfg)
            repos = client.getRepos()
            try:
                versions = repos.c['localhost'].checkVersion()
            except errors.OpenError, e:
                self.assertTrue('407 Proxy Authentication Required' in str(e),
                                str(e))
            else:
Exemplo n.º 3
0
    def testAuthenticatedHTTPProxy(self):
        # CNY-1687
        self.openRepository()
        if not os.path.exists(rephelp.HTTPProxy.proxyBinPath):
            raise testhelp.SkipTestException('testHTTPProxy depends on squid being installed')

        h = rephelp.HTTPProxy(os.path.join(self.workDir, "http-cache"))
        proxyUri = h.start()
        try:
            sock_utils.tryConnect("localhost", h.port)

            # We cannot have an HTTP proxy and a Conary proxy chained together.
            # (we can have a client talking to a Conary proxy that talks to a repo
            # via an HTTP proxy)
            self.cfg.conaryProxy = {}

            # Unauthenticated, should fail
            self.cfg.configLine("proxy http://localhost:%s" %
                                h.authPort)
            client = conaryclient.ConaryClient(self.cfg)
            repos = client.getRepos()
            try:
                versions = repos.c['localhost'].checkVersion()
            except errors.OpenError, e:
                self.assertTrue('407 Proxy Authentication Required' in str(e),
                                str(e))
            else:
Exemplo n.º 4
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()
Exemplo n.º 5
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()
Exemplo n.º 6
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)
Exemplo n.º 7
0
 def start(self):
     self.reset()
     self.server.stdout = self.server.stderr = open(self.errorLog, 'a')
     self.server.start()
     if self.socketPath:
         host = None
         port = self.socketPath
     else:
         host = '127.0.0.1'
         port = self.port
     sock_utils.tryConnect(host, port,
             logFile=self.errorLog,
             abortFunc=self.server.check,
             )
Exemplo n.º 8
0
    def start(self, resetDir = True):
        self._startAppSpecificTasks(resetDir = resetDir)
        if self.serverpid != -1:
            return

        # This may not be catching all semaphores (and may catch extra ones
        # too)
        oldSemaphores = os_utils.listSemaphores()

        if getattr(self, 'socket', None):
            self.socket.close()
            self.socket = None
        self.serverpid = os.fork()
        if self.serverpid == 0:
            try:
                os.chdir('/')
                #print "starting server in %s" % self.serverRoot
                args = (self._serverFileName,
                        "-X",
                        "-d", self.serverRoot,
                        "-f", "httpd.conf",
                        "-C", 'DocumentRoot "%s"' % self.serverRoot)
                # need to setpgrp because httpd stop kills the processgroup
                os.setpgrp()
                os_utils.osExec(args)
            except:
                traceback.print_exc()
                os._exit(70)
        else:
            pass
        sock_utils.tryConnect("localhost", self.port,
                             logFile = self.serverRoot + '/error_log')
        for _ in range(200):
            self.semaphores = os_utils.listSemaphores() - oldSemaphores
            if self.semaphores:
                break
            time.sleep(.1)

        os.mkdir(os.path.join(self.serverRoot, 'cscache'))
Exemplo n.º 9
0
 def start(self):
     self.server.start()
     sock_utils.tryConnect('::', self.port, abortFunc=self.server.check)
Exemplo n.º 10
0
 def url(self):
     # make sure the child is ready
     sock_utils.tryConnect("127.0.0.1", self.port)
     return "http://127.0.0.1:%d/" % self.port
Exemplo n.º 11
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)
Exemplo n.º 12
0
 def url(self):
     # make sure the child is ready
     sock_utils.tryConnect("127.0.0.1", self.port)
     return "http://127.0.0.1:%d/" % self.port
Exemplo n.º 13
0
 def start(self):
     self.reset()
     self.server.stdout = self.server.stderr = open(self.errorLog, "a")
     self.server.start()
     sock_utils.tryConnect("::", self.port, logFile=self.errorLog, abortFunc=self.server.check)