def test_webapp_publish(self): # tornado does not support windows (yet) self.thisHostMustNot(platform='windows') foo = Foo() wapp = s_webapp.WebApp() wapp.listen(0, host='127.0.0.1') wapp.addApiPath('/v1/horked', foo.horked) wapp.addApiPath('/v1/addup/([0-9]+)', foo.addup) port = wapp.getServBinds()[0][1] resp = requests.get('http://127.0.0.1:%d/v1/addup/30?y=40' % port, timeout=1).json() self.assertEqual(resp.get('ret'), 70) self.assertEqual(resp.get('status'), 'ok') resp = requests.get('http://127.0.0.1:%d/v1/addup/20' % port, timeout=1).json() self.assertEqual(resp.get('ret'), 20) self.assertEqual(resp.get('status'), 'ok') resp = requests.get('http://127.0.0.1:%d/v1/horked' % port, timeout=1).json() self.assertEqual(resp.get('err'), 'Horked') self.assertEqual(resp.get('status'), 'err') wapp.fini()
def test_webapp_body(self): # python requests module has windows bug?!?!? self.thisHostMustNot(platform='windows') class Haha: def bar(self, hehe, body=None): return (hehe, body.decode('utf8')) haha = Haha() wapp = s_webapp.WebApp() wapp.listen(0, host='127.0.0.1') wapp.addApiPath('/v1/haha/bar/([a-z]+)', haha.bar) port = wapp.getServBinds()[0][1] headers = {'Content-Type': 'application/octet-stream'} resp = requests.get('http://127.0.0.1:%d/v1/haha/bar/visi' % port, timeout=1, headers=headers, data='GRONK').json() self.assertEqual(tuple(resp.get('ret')), ('visi', 'GRONK')) resp = requests.post('http://127.0.0.1:%d/v1/haha/bar/visi' % port, timeout=1, headers=headers, data='GRONK').json() self.assertEqual(tuple(resp.get('ret')), ('visi', 'GRONK')) wapp.fini()
def test_webapp_publish(self): # tornado does not support windows (yet) self.thisHostMustNot(platform='windows') foo = Foo() wapp = s_webapp.WebApp() wapp.listen(0, host='127.0.0.1') wapp.addApiPath('/v1/horked', foo.horked) wapp.addApiPath('/v1/addup/([0-9]+)', foo.addup) client = AsyncHTTPClient(self.io_loop) port = wapp.getServBinds()[0][1] resp = yield client.fetch('http://127.0.0.1:%d/v1/addup/30?y=40' % port) resp = json.loads(resp.body.decode('utf-8')) self.assertEqual(resp.get('ret'), 70) self.assertEqual(resp.get('status'), 'ok') resp = yield client.fetch('http://127.0.0.1:%d/v1/addup/20' % port) resp = json.loads(resp.body.decode('utf-8')) self.assertEqual(resp.get('ret'), 20) self.assertEqual(resp.get('status'), 'ok') resp = yield client.fetch('http://127.0.0.1:%d/v1/horked' % port) resp = json.loads(resp.body.decode('utf-8')) self.assertEqual(resp.get('err'), 'Horked') self.assertEqual(resp.get('status'), 'err') wapp.fini()
def test_webapp_body(self): class Haha: def bar(self, hehe, body=None): return (hehe,body.decode('utf8')) haha = Haha() wapp = s_webapp.WebApp() wapp.listen(0, host='127.0.0.1') wapp.addApiPath('/v1/haha/bar/([a-z]+)', haha.bar) client = AsyncHTTPClient(self.io_loop) port = wapp.getServBinds()[0][1] headers={'Content-Type': 'application/octet-stream'} resp = yield client.fetch('http://127.0.0.1:%d/v1/haha/bar/visi' % port, headers=headers, body='GRONK', allow_nonstandard_methods=True) resp = json.loads(resp.body.decode('utf-8')) self.assertEqual( tuple(resp.get('ret')), ('visi','GRONK') ) resp = yield client.fetch('http://127.0.0.1:%d/v1/haha/bar/visi' % port, method='POST', headers=headers, body='GRONK') resp = json.loads(resp.body.decode('utf-8')) self.assertEqual( tuple(resp.get('ret')), ('visi','GRONK') ) wapp.fini()
def setUp(self): core = synapse.cortex.openurl('ram://') self.wapp = s_webapp.WebApp() self.wapp.listen(0, host='127.0.0.1') self.host = 'http://127.0.0.1:%d' % (self.wapp.getServBinds()[0][1]) for model_name in ['foo', 'bar']: self.wapp.addHandPath('/v1/(%s)' % (model_name), s_webapp.CrudHand, core=core) self.wapp.addHandPath('/v1/(%s)/([^/]+)' % (model_name), s_webapp.CrudHand, core=core)
def test_openfile_http(self): self.thisHostMustNot(platform='windows') fdir = getTestPath() wapp = s_webapp.WebApp() wapp.listen(0, host='127.0.0.1') wapp.addFilePath('/v1/test/(.*)', fdir) port = wapp.getServBinds()[0][1] with s_openfile.openfd( 'http://127.0.0.1:{}/v1/test/test.dat'.format(port)) as fd: self.true(fd.read().find(b'woot') != -1)
def main(argv): p = getArgParser() opts = p.parse_args(argv) with open(opts.config, 'rb') as fd: conf = json.loads(fd.read().decode('utf8')) settings = conf.get('tornado:settings', {}) wapp = s_webapp.WebApp(**settings) wapp.loadDmonConf(conf) wapp.main()
def test_webapp_static(self): self.thisHostMustNot(platform='windows') fdir = getTestPath() fp = os.path.join(fdir, 'test.dat') self.true(os.path.isfile(fp)) with open(fp, 'rb') as fd: byts = fd.read() self.true(len(byts) > 0) wapp = s_webapp.WebApp() wapp.listen(0, host='127.0.0.1') wapp.addFilePath('/v1/test/(.*)', fdir) client = AsyncHTTPClient(self.io_loop) port = wapp.getServBinds()[0][1] resp = yield client.fetch('http://127.0.0.1:%d/v1/test/test.dat' % port) self.eq(resp.code, 200) self.eq(resp.body, byts)
def test_webapp_ssl(self): # tornado does not support windows (yet) self.thisHostMustNot(platform='windows') foo = Foo() with self.getTestDir() as dirname: cdir = s_certdir.CertDir(path=dirname) cdir.genCaCert('syntest') # Generate a new CA cdir.genUserCert( '*****@*****.**', signas='syntest' ) # Generate a new user cert and key, signed by the new CA cdir.genHostCert( 'localhost', signas='syntest' ) # Generate a new server cert and key, signed by the new CA ca_cert = cdir.getCaCertPath('syntest') host_key = cdir.getHostKeyPath('localhost') host_cert = cdir.getHostCertPath('localhost') ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) ssl_ctx.verify_mode = ssl.CERT_REQUIRED ssl_ctx.load_cert_chain(host_cert, host_key) ssl_ctx.load_verify_locations(ca_cert) conf = {'server': {'ssl_options': ssl_ctx}} wapp = s_webapp.WebApp(**conf) wapp.listen(0, host='127.0.0.1') wapp.addApiPath('/v1/bar', foo.bar) client = AsyncHTTPClient(self.io_loop) port = wapp.getServBinds()[0][1] http_url = 'http://127.0.0.1:%d/v1/bar' % port https_url = 'https://127.0.0.1:%d/v1/bar' % port user_key = cdir.getUserKeyPath('*****@*****.**') user_cert = cdir.getUserCertPath('*****@*****.**') client_opts = { 'ca_certs': ca_cert, 'client_key': user_key, 'client_cert': user_cert } # Assert that the request fails w/ http protocol with self.raises(TstSSLConnectionResetErr): resp = yield client.fetch(http_url) # Assert that the request fails w/ no client SSL config with self.raises(ssl.SSLError): resp = yield client.fetch(https_url) # Assert that the request fails w/ no client SSL config, even if client does not validate cert # (server must also validate client cert) with self.raises(TstSSLInvalidClientCertErr): resp = yield client.fetch(https_url, validate_cert=False) resp = yield client.fetch(https_url, **client_opts) resp = json.loads(resp.body.decode('utf-8')) self.eq(resp.get('ret'), 'baz') self.eq(resp.get('status'), 'ok') wapp.fini()
def fireWebApp(self): self.wapp = s_webapp.WebApp() self.wapp.listen(self.port, host='127.0.0.1') self.wapp.addApiPath('/v1/ip(\?format=[\w]+)?', self.fake.random_ip) self.wapp.addApiPath('/v1/bytes', self.nommer.noms) self.running = True