Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
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()
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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()
Ejemplo n.º 10
0
 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