Beispiel #1
0
 def connect(self, address):
     """Connect to the remote syncapi."""
     context = gruvi.create_ssl_context(ciphers='ADH+AES')
     dhparams = util.asset('pem', 'dhparams.pem')
     context.load_dh_params(dhparams)
     client = HttpClient()
     try:
         client.connect(address, ssl=context)
     except gruvi.Error as e:
         self._log.error('could not connect to {}:{}' % address)
         raise SyncApiError('Could not connect')
     self.address = address
     self.client = client
Beispiel #2
0
 def test_simple_pipe(self):
     server = HttpServer(hello_app)
     server.listen(self.pipename())
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     client.request('GET', '/')
     resp = client.getresponse()
     self.assertEqual(resp.body.read(), b'Hello!')
     server.close()
     client.close()
Beispiel #3
0
 def test_simple_ssl(self):
     server = HttpServer(hello_app)
     context = self.get_ssl_context()
     server.listen(('localhost', 0), ssl=context)
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr, ssl=context)
     client.request('GET', '/')
     resp = client.getresponse()
     self.assertEqual(resp.body.read(), b'Hello!')
     server.close()
     client.close()
Beispiel #4
0
 def test_request_body_sequence(self):
     server = HttpServer(echo_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     client.request('POST', '/', body=[b'foo', b'bar'])
     resp = client.getresponse()
     body = resp.body.read()
     self.assertEqual(body, b'foobar')
     server.close()
     client.close()
Beispiel #5
0
 def test_request_headers(self):
     server = HttpServer(echo_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     client.request('GET', '/', headers=[('X-Echo', 'Bar')])
     resp = client.getresponse()
     self.assertEqual(resp.get_header('X-Echo'), 'Bar')
     body = resp.body.read()
     self.assertEqual(body, b'')
     server.close()
     client.close()
Beispiel #6
0
 def test_request_body_string(self):
     # When making a request with a string body, it should be encoded as
     # ISO-8859-1.
     server = HttpServer(echo_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     client.request('POST', '/', body='foo')
     response = client.getresponse()
     body = response.read()
     self.assertEqual(body, b'foo')
     server.close()
     client.close()
Beispiel #7
0
 def test_simple_pipe(self):
     server = HttpServer(hello_app)
     server.listen(self.pipename())
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     client.request('GET', '/')
     resp = client.getresponse()
     self.assertEqual(resp.body.read(), b'Hello!')
     server.close()
     client.close()
Beispiel #8
0
 def test_simple_ssl(self):
     server = HttpServer(hello_app)
     context = self.get_ssl_context()
     server.listen(('localhost', 0), ssl=context)
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr, ssl=context)
     client.request('GET', '/')
     resp = client.getresponse()
     self.assertEqual(resp.body.read(), b'Hello!')
     server.close()
     client.close()
Beispiel #9
0
 def test_request_body_sequence(self):
     server = HttpServer(echo_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     client.request('POST', '/', body=[b'foo', b'bar'])
     resp = client.getresponse()
     body = resp.body.read()
     self.assertEqual(body, b'foobar')
     server.close()
     client.close()
Beispiel #10
0
 def test_request_headers(self):
     server = HttpServer(echo_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     client.request('GET', '/', headers=[('X-Echo', 'Bar')])
     resp = client.getresponse()
     self.assertEqual(resp.get_header('X-Echo'), 'Bar')
     body = resp.body.read()
     self.assertEqual(body, b'')
     server.close()
     client.close()
Beispiel #11
0
 def test_simple(self):
     server = HttpServer(hello_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     client.request('GET', '/')
     resp = client.getresponse()
     self.assertEqual(resp.version, '1.1')
     self.assertEqual(resp.status_code, 200)
     serv = resp.get_header('Server')
     self.assertTrue(serv.startswith('gruvi'))
     ctype = resp.get_header('Content-Type')
     self.assertEqual(ctype, 'text/plain')
     self.assertEqual(resp.body.read(), b'Hello!')
     server.close()
     client.close()
Beispiel #12
0
 def test_request_body_string(self):
     # When making a request with a string body, it should be encoded as
     # ISO-8859-1.
     server = HttpServer(echo_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     client.request('POST', '/', body='foo')
     response = client.getresponse()
     body = response.read()
     self.assertEqual(body, b'foo')
     server.close()
     client.close()
Beispiel #13
0
 def perf_server_throughput(self):
     server = HttpServer(hello_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     nrequests = 0
     t0 = t1 = time.time()
     while t1 - t0 < 0.2:
         client.request('GET', '/')
         resp = client.getresponse()
         self.assertEqual(resp.body.read(), b'Hello!')
         nrequests += 1
         t1 = time.time()
     throughput = nrequests / (t1 - t0)
     self.add_result(throughput)
     server.close()
     client.close()
Beispiel #14
0
    def test_request_trailers(self):
        server = HttpServer(echo_app)
        server.listen(('localhost', 0))
        addr = server.addresses[0]
        client = HttpClient()
        client.connect(addr)
        headers = [('X-Echo', 'Bar'), ('Trailer', 'X-Length')]

        def genbody():
            yield b'FooBody'
            headers.append(('X-Length', '7'))

        client.request('GET', '/', body=genbody(), headers=headers)
        resp = client.getresponse()
        self.assertEqual(resp.get_header('X-Echo'), 'Bar')
        self.assertEqual(resp.get_header('X-Length'), '7')
        body = resp.body.read()
        self.assertEqual(body, b'FooBody')
        server.close()
        client.close()
Beispiel #15
0
 def test_simple(self):
     server = HttpServer(hello_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     client.request('GET', '/')
     resp = client.getresponse()
     self.assertEqual(resp.version, '1.1')
     self.assertEqual(resp.status_code, 200)
     serv = resp.get_header('Server')
     self.assertTrue(serv.startswith('gruvi'))
     ctype = resp.get_header('Content-Type')
     self.assertEqual(ctype, 'text/plain')
     self.assertEqual(resp.body.read(), b'Hello!')
     server.close()
     client.close()
Beispiel #16
0
 def perf_server_throughput(self):
     server = HttpServer(hello_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     nrequests = 0
     t0 = t1 = time.time()
     while t1 - t0 < 0.2:
         client.request('GET', '/')
         resp = client.getresponse()
         self.assertEqual(resp.body.read(), b'Hello!')
         nrequests += 1
         t1 = time.time()
     throughput = nrequests / (t1 - t0)
     self.add_result(throughput)
     server.close()
     client.close()
Beispiel #17
0
 def test_request_trailers(self):
     server = HttpServer(echo_app)
     server.listen(('localhost', 0))
     addr = server.addresses[0]
     client = HttpClient()
     client.connect(addr)
     headers = [('X-Echo', 'Bar'), ('Trailer', 'X-Length')]
     def genbody():
         yield b'FooBody'
         headers.append(('X-Length', '7'))
     client.request('GET', '/', body=genbody(), headers=headers)
     resp = client.getresponse()
     self.assertEqual(resp.get_header('X-Echo'), 'Bar')
     self.assertEqual(resp.get_header('X-Length'), '7')
     body = resp.body.read()
     self.assertEqual(body, b'FooBody')
     server.close()
     client.close()
Beispiel #18
0
 def test_simple(self):
     server = HttpServer(hello_app)
     server.listen(('localhost', 0))
     port = server.transport.getsockname()[1]
     client = HttpClient()
     client.connect(('localhost', port))
     client.request('GET', '/')
     response = client.getresponse()
     assert response.version == (1, 1)
     assert response.status == 200
     server = response.get_header('Server')
     assert server.startswith('gruvi.http')
     ctype = response.get_header('Content-Type')
     assert ctype == 'text/plain'
     assert response.read() == b'Hello!'
Beispiel #19
0
# HTTP client and server example.

from gruvi.http import HttpClient, HttpServer


def handler(env, start_response):
    headers = [('Content-Type', 'text/plain; charset=UTF-8')]
    status = '200 OK'
    body = 'pong'
    start_response(status, headers)
    yield body.encode('utf-8')


server = HttpServer(handler)
server.listen(('localhost', 0))
addr = server.addresses[0]

client = HttpClient()
client.connect(addr)
client.request('GET', '/ping')

resp = client.getresponse()
assert resp.status_code == 200

body = resp.body.read()
print('result = {}'.format(body.decode(resp.charset)))
Beispiel #20
0
import sys
import argparse
from six.moves.urllib_parse import urlsplit
from gruvi.http import HttpClient

parser = argparse.ArgumentParser()
parser.add_argument('url')
args = parser.parse_args()

url = urlsplit(args.url)
if not url.scheme:
    url = urlsplit('http://{0}'.format(args.url))
is_ssl = url.scheme == 'https'
port = url.port if url.port else 443 if is_ssl else 80

client = HttpClient()
client.connect((url.hostname, port), ssl=is_ssl)
client.request('GET', url.path or '/')

response = client.getresponse()
if not 200 <= response.status <= 299:
    sys.stderr.write('Error: got status {}\n'.format(response.status))
    sys.exit(1)

stdout = getattr(sys.stdout, 'buffer', sys.stdout)
while True:
    buf = response.body.read(4096)
    if not buf:
        break
    stdout.write(buf)
Beispiel #21
0
# Gruvi example program: a cURL like URL downloader

import sys
import argparse
from gruvi.http import HttpClient, parse_url

parser = argparse.ArgumentParser()
parser.add_argument('url')
args = parser.parse_args()

url = parse_url(args.url)

client = HttpClient()
client.connect(url.addr, ssl=url.ssl)
client.request('GET', url.target)

resp = client.getresponse()
if not 200 <= resp.status_code <= 399:
    sys.stderr.write('Error: got status {}\n'.format(resp.status_code))
    sys.exit(1)

charset = resp.charset or 'iso8859-1'

while True:
    buf = resp.body.read(4096)
    if not buf:
        break
    sys.stdout.write(buf.decode(charset))
Beispiel #22
0
# Example: cURL like URL downloader

import sys
import logging
import argparse
from gruvi.http import HttpClient, geturlinfo

logging.basicConfig()

parser = argparse.ArgumentParser()
parser.add_argument('url');
args = parser.parse_args()

client = HttpClient()
host, port, ssl, path = geturlinfo(args.url)
client.connect((host, port), ssl=ssl)

client.request('GET', path)
response = client.getresponse()

while True:
    buf = response.read(4096)
    if not buf:
        break
    print(buf)
Beispiel #23
0
# Example: cURL like URL downloader

import sys
import logging
import argparse
from gruvi.http import HttpClient, geturlinfo

logging.basicConfig()

parser = argparse.ArgumentParser()
parser.add_argument('url')
args = parser.parse_args()

client = HttpClient()
host, port, ssl, path = geturlinfo(args.url)
client.connect((host, port), ssl=ssl)

client.request('GET', path)
response = client.getresponse()

while True:
    buf = response.read(4096)
    if not buf:
        break
    print(buf)
Beispiel #24
0
# HTTP client and server example.

from gruvi.http import HttpClient, HttpServer

def handler(env, start_response):
    headers = [('Content-Type', 'text/plain; charset=UTF-8')]
    status = '200 OK'
    body = 'pong'
    start_response(status, headers)
    yield body.encode('utf-8')

server = HttpServer(handler)
server.listen(('localhost', 0))
addr = server.addresses[0]

client = HttpClient()
client.connect(addr)
client.request('GET', '/ping')

resp = client.getresponse()
assert resp.status_code == 200

body = resp.body.read()
print('result = {}'.format(body.decode(resp.charset)))