コード例 #1
0
 def testServerProxyHidingPassword(self):
     sp = util.ServerProxy("http://*****:*****@host:1234/XMLRPD", None)
     self.assertEqual(
         repr(sp),
         '<ServerProxy for http://user:<PASSWD>@host:1234/XMLRPD>')
     self.assertEqual(
         str(sp), '<ServerProxy for http://user:<PASSWD>@host:1234/XMLRPD>')
コード例 #2
0
    def testAbort(self):
        class SlowServer:
            def snooze(self):
                time.sleep(100000)

            def ping(self):
                return [True]

        class SlowXMLServer:
            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 = SimpleXMLRPCServer(("127.0.0.1", self.port),
                                            logRequests=False)
                server.register_instance(SlowServer())
                server.serve_forever()

            def kill(self):
                os.kill(self.childPid, 15)
                os.waitpid(self.childPid, 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

        class AbortChecker:
            def __init__(self):
                self.checked = 0

            def check(self):
                self.checked += 1
                # abort on the 3rd check
                if self.checked == 3:
                    return True
                return False

        transporter = transport.Transport()
        checker = AbortChecker()
        transporter.setAbortCheck(checker.check)

        server = SlowXMLServer()
        try:
            proxy = util.ServerProxy(url=server.url(), transport=transporter)
            self.assertEqual(proxy.ping(), ([True], ))
            # now try something that takes a long time..
            self.assertRaises(transport.AbortError, proxy.snooze)
        finally:
            server.kill()
コード例 #3
0
    def testProxyBypass(self):
        if not os.path.exists(rephelp.HTTPProxy.proxyBinPath):
            raise testhelp.SkipTestException(
                'testProxyBypass depends on squid being installed')

        class Controller(ServerController):
            class XMLRPCHandler:
                def ping(self):
                    return [True]

            def handlerFactory(self):
                return self.XMLRPCHandler()

        sc = Controller()
        h = None
        oldLocalHosts = httputils.LocalHosts
        try:
            h = rephelp.HTTPProxy(os.path.join(self.workDir, "http-cache"))
            proxyUri = h.start()

            proxyMap = proxy_map.ProxyMap()
            proxyMap.addStrategy('*', ['http://' + proxyUri])

            tsp = transport.Transport(proxyMap=proxyMap)
            sp = util.ServerProxy(url=sc.url(), transport=tsp)

            # Make sure we're proxying
            logsz0 = h.getAccessLogSize()
            self.assertEqual(sp.ping(), ([True], ))
            logEntry = h.getAccessLogEntry(logsz0)
            self.assertTrue(logEntry)

            # Now mangle localhosts. Proxy is 127.0.0.1, server is on
            # localhost.
            # Make the proxy appear to be remote

            localhosts = set(httputils.LocalHosts)
            localhosts.remove('127.0.0.1')
            httputils.LocalHosts = localhosts

            logsz0 = h.getAccessLogSize()
            sp.ping()
            self.sleep(1)
            logsz1 = h.getAccessLogSize()

            self.assertEqual(logsz1, logsz0)
        finally:
            httputils.LocalHosts = oldLocalHosts
            sc.kill()
            if h:
                h.stop()
コード例 #4
0
    def testHostnameDoesNotResolve(self):
        # make sure that a hostname that doesn't resolve does not prevent
        # the transport code from working (CNY-1531)
        def gethostname():
            return 'garblygook'

        class Server:
            def snooze(self):
                time.sleep(100000)

            def ping(self):
                return [True]

        class XMLServer:
            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 = SimpleXMLRPCServer(("127.0.0.1", self.port),
                                            logRequests=False)
                server.register_instance(Server())
                server.serve_forever()

            def kill(self):
                os.kill(self.childPid, 15)
                os.waitpid(self.childPid, 0)

            def url(self):
                return "http://127.0.0.1:%d/" % self.port

        oldgethostname = socket.gethostname
        server = XMLServer()
        socket.gethostname = gethostname
        try:
            transporter = transport.Transport()
            proxy = util.ServerProxy(url=server.url(), transport=transporter)
            proxy.ping()
        finally:
            socket.gethostname = oldgethostname
            server.kill()
コード例 #5
0
    def testProxyBypassConary(self):
        """Test that no_proxy does not affect conary proxies (CNY-3349)"""
        if not os.path.exists(rephelp.HTTPProxy.proxyBinPath):
            raise testhelp.SkipTestException(
                'testProxyBypass depends on squid being installed')

        class Controller(ServerController):
            class XMLRPCHandler:
                def ping(self):
                    return [True]

            def handlerFactory(self):
                return self.XMLRPCHandler()

        environ = os.environ.copy()
        self.mock(os, 'environ', environ)

        sc = Controller()
        h = None
        oldLocalHosts = httputils.LocalHosts
        try:
            h = rephelp.HTTPProxy(os.path.join(self.workDir, "http-cache"))
            proxyUri = h.start()

            proxyMap = proxy_map.ProxyMap()
            proxyMap.addStrategy('*', ['conary://' + proxyUri])

            tsp = transport.Transport(proxyMap=proxyMap)
            sp = util.ServerProxy(url=sc.url(), transport=tsp)

            # Now mangle localhosts. Proxy is 127.0.0.1, server is on
            # localhost.
            # Make the proxy appear to be remote
            localhosts = set(httputils.LocalHosts)
            localhosts.remove('127.0.0.1')
            httputils.LocalHosts = localhosts

            # Remote proxy, local host. Go direct
            logsz0 = h.getAccessLogSize()
            sp.ping()
            self.sleep(1)
            logsz1 = h.getAccessLogSize()
            self.assertEqual(logsz1, logsz0)

            # Local proxy, remote host. Proxy
            localhosts.add('127.0.0.1')
            localhosts.remove('localhost')

            logsz0 = h.getAccessLogSize()
            sp.ping()
            self.sleep(1)
            logsz1 = h.getAccessLogSize()
            self.assertTrue(logsz1 > logsz0, "Proxy should have been used")

            environ['no_proxy'] = '*'
            # Proxy should still be used, the environemnt variable should
            # not affect the result since it's a Conary proxy
            logsz0 = h.getAccessLogSize()
            sp.ping()
            self.sleep(1)
            logsz1 = h.getAccessLogSize()
            self.assertTrue(logsz1 > logsz0, "Proxy should have been used")
        finally:
            httputils.LocalHosts = oldLocalHosts
            sc.kill()
            if h:
                h.stop()