def test_getChild(self): """ L{_HostResource.getChild} returns the proper I{Resource} for the vhost embedded in the URL. Verify that returning the proper I{Resource} required changing the I{Host} in the header. """ bazroot = Data(b"root data", "") bazuri = Data(b"uri data", "") baztest = Data(b"test data", "") bazuri.putChild(b"test", baztest) bazroot.putChild(b"uri", bazuri) hr = _HostResource() root = NameVirtualHost() root.default = Data(b"default data", "") root.addHost(b"baz.com", bazroot) request = DummyRequest([b"uri", b"test"]) request.prepath = [b"bar", b"http", b"baz.com"] request.site = Site(root) request.isSecure = lambda: False request.host = b"" step = hr.getChild(b"baz.com", request) # Consumes rest of path self.assertIsInstance(step, Data) request = DummyRequest([b"uri", b"test"]) step = root.getChild(b"uri", request) self.assertIsInstance(step, NoResource)
def test_getChild(self): """ L{_HostResource.getChild} returns the proper I{Resource} for the vhost embedded in the URL. Verify that returning the proper I{Resource} required changing the I{Host} in the header. """ bazroot = Data(b'root data', "") bazuri = Data(b'uri data', "") baztest = Data(b'test data', "") bazuri.putChild(b'test', baztest) bazroot.putChild(b'uri', bazuri) hr = _HostResource() root = NameVirtualHost() root.default = Data(b'default data', "") root.addHost(b'baz.com', bazroot) request = DummyRequest([b'uri', b'test']) request.prepath = [b'bar', b'http', b'baz.com'] request.site = Site(root) request.isSecure = lambda: False request.host = b'' step = hr.getChild(b'baz.com', request) # Consumes rest of path self.assertIsInstance(step, Data) request = DummyRequest([b'uri', b'test']) step = root.getChild(b'uri', request) self.assertIsInstance(step, NoResource)
def test_renderWithoutHost(self): """ L{NameVirtualHost.render} returns the result of rendering the instance's C{default} if it is not C{None} and there is no I{Host} header in the request. """ virtualHostResource = NameVirtualHost() virtualHostResource.default = Data("correct result", "") request = DummyRequest(['']) self.assertEqual(virtualHostResource.render(request), "correct result")
def test_renderWithoutHost(self): """ L{NameVirtualHost.render} returns the result of rendering the instance's C{default} if it is not C{None} and there is no I{Host} header in the request. """ virtualHostResource = NameVirtualHost() virtualHostResource.default = Data("correct result", "") request = DummyRequest([""]) self.assertEqual(virtualHostResource.render(request), "correct result")
def test_renderWithUnknownHost(self): """ L{NameVirtualHost.render} returns the result of rendering the instance's C{default} if it is not C{None} and there is no host matching the value of the I{Host} header in the request. """ virtualHostResource = NameVirtualHost() virtualHostResource.default = Data(b"correct data", "") request = DummyRequest([b'']) request.requestHeaders.addRawHeader(b'host', b'example.com') d = _render(virtualHostResource, request) def cbRendered(ignored): self.assertEqual(b''.join(request.written), b"correct data") d.addCallback(cbRendered) return d
def test_renderWithUnknownHost(self): """ L{NameVirtualHost.render} returns the result of rendering the instance's C{default} if it is not C{None} and there is no host matching the value of the I{Host} header in the request. """ virtualHostResource = NameVirtualHost() virtualHostResource.default = Data("correct data", "") request = DummyRequest(['']) request.headers['host'] = 'example.com' d = _render(virtualHostResource, request) def cbRendered(ignored): self.assertEqual(''.join(request.written), "correct data") d.addCallback(cbRendered) return d
def setupSite(self): html.WebStatus.setupSite(self) resource = self.site.resource docdevPath = os.path.join(self.master.basedir, "doc-dev") docdev = File(docdevPath) File.contentTypes[".py,cover"] = "text/plain" File.contentTypes[".svg"] = "image/svg+xml" File.contentTypes[".json"] = "application/json" # Historical name resultsPath = os.path.join(self.master.basedir, "private_html") results = File(resultsPath) resource.putChild(b'results', results) resource.putChild(b'metrics', PrometheusMetrics()) vhost = NameVirtualHost() vhost.default = resource vhost.addHost('doc-dev.clusterhq.com', docdev) self.site.resource = vhost
def setupSite(self): html.WebStatus.setupSite(self) resource = self.site.resource docdevPath = os.path.join(self.master.basedir, "doc-dev") docdev = File(docdevPath) File.contentTypes[".py,cover"] = "text/plain" File.contentTypes[".svg"] = "image/svg+xml" File.contentTypes[".json"] = "application/json" # Historical name resultsPath = os.path.join(self.master.basedir, "private_html") results = File(resultsPath) resource.putChild(b'results', results) resource.putChild(b'metrics', PrometheusMetrics()) vhost = NameVirtualHost() vhost.default = resource vhost.addHost('doc-dev.clusterhq.com', docdev) self.site.resource = vhost
def setUp(self): # prepare the authentication systems self.userdb = cred.InMemoryUnicodeUsernamePasswordDatabase() self.sitedb = cred.InMemoryUnicodeUsernamePasswordDatabase() self.userrealm = TestUserRealm() self.siterealm = TestSiteRealm() self.userportal = portal.Portal(self.userrealm) self.siteportal = portal.Portal(self.siterealm) self.userportal.registerChecker(self.userdb) self.siteportal.registerChecker(self.sitedb) # register tokens self.sitedb.addUser( self.SITE_A_TOKEN, self.SITE_A_SECRET, ) self.siterealm.register_csauth_perm( self.SITE_A_TOKEN, TestWebAuthPermission( self.SITE_A_NAME, "http://{}/login".format(self.WEB_NAME), full_username=True, ), ) self.sitedb.addUser( self.SITE_B_TOKEN, self.SITE_B_SECRET, ) self.siterealm.register_csauth_perm( self.SITE_B_TOKEN, TestWebAuthPermission( self.SITE_B_NAME, "http://{}/bpage".format(self.WEB_NAME), full_username=False, ), ) # register Users self.userdb.addUser( self.USER_A_NAME, self.USER_A_PSWD, ) self.userdb.addUser( self.USER_B_NAME, self.USER_B_PSWD, ) # prepare the auth site lr = BasicLoginResource() authpage = AuthResource( self.siteportal, self.userportal, lr, url=u"http://{}/auth".format(self.AUTH_NAME), ) arr = DebugResource("auth") arr.putChild(b"auth", authpage) arr.putChild(b"expire", SessionExpiringResource()) # prepare the web site lrr = DebugResource("web") # add the login page loginpage = TestLoginResource( u"http://{}/auth".format(self.AUTH_NAME), self.SITE_A_TOKEN, self.SITE_A_SECRET, ) lrr.putChild(b"login", loginpage) # add a login page with a different permission bpage = TestLoginResource( u"http://{}/auth".format(self.AUTH_NAME), self.SITE_B_TOKEN, self.SITE_B_SECRET, ) lrr.putChild(b"bpage", bpage) # add a resource with an invalid token/secret combination invalidepage = TestLoginResource( u"http://{}/auth".format(self.AUTH_NAME), self.SITE_A_TOKEN, self.SITE_B_SECRET, # <- site B secret ) lrr.putChild(b"invalid", invalidepage) # create and install treq stubs supersite = NameVirtualHost() supersite.addHost(self.AUTH_NAME.encode("ascii"), arr) supersite.addHost(self.WEB_NAME.encode("ascii"), lrr) supersite.default = DebugResource("default") self.treq = StubTreq(supersite) loginpage._set_request_dispatcher(self.treq) bpage._set_request_dispatcher(self.treq) invalidepage._set_request_dispatcher(self.treq)