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>')
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()
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()
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()
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()