示例#1
0
def uhttpserver(request):
    tmp = tempfile.NamedTemporaryFile()
    server = uhttp.Server(tmp.name, uhttp.Connection)
    util.start_thread(server.serve_forever, kwargs={"poll_interval": 0.1})
    request.addfinalizer(server.shutdown)
    request.addfinalizer(tmp.close)
    return server
示例#2
0
def test_start_thread_kwargs():
    result = {}

    def f(k=None):
        result["k"] = k

    util.start_thread(f, kwargs={"k": "v"}).join()
    assert result == {"k": "v"}
示例#3
0
def test_start_thread_args():
    result = []

    def f(*a):
        result.extend(a)

    util.start_thread(f, args=(1, 2)).join()
    assert result == [1, 2]
示例#4
0
def test_run_operation_benchmark():
    # Run 1000000 operations with 4 concurrent threads.
    ticket = Ticket(testutil.create_ticket(ops=["read"]))
    operations = 10**6
    workers = 4
    chunk = 10**9
    step = chunk * workers // operations

    def worker(offset, size):
        while offset < size:
            ticket.run(Operation(offset, step))
            offset += step

    start = time.time()

    threads = []
    try:
        for i in range(workers):
            t = util.start_thread(worker, args=(i * chunk, chunk))
            threads.append(t)
    finally:
        for t in threads:
            t.join()

    elapsed = time.time() - start

    print("%d operations, %d concurrent threads in %.2f seconds (%d nsec/op)" %
          (operations, workers, elapsed, elapsed * 10**9 // operations))
示例#5
0
def server():
    server = http.Server(("127.0.0.1", 0), http.Connection)
    log.info("Server listening on port %d", server.server_port)

    server.app = http.Router([
        (r"/demo/(.*)", Demo()),
        (r"/echo-read/(.*)", EchoRead()),
        (r"/echo-readinto/(.*)", EchoReadinto()),
        (r"/json/", JSON()),
        (r"/range-demo/", RangeDemo()),
        (r"/request-info/(.*)", RequestInfo()),
        (r"/context/(.*)", Context()),
        (r"/close-context/(.*)", CloseContext()),
        (r"/server-error/(.*)", ServerError()),
        (r"/server-socket-error/(.*)", ServerSocketError()),
        (r"/client-error/(.*)", ClientError()),
        (r"/keep-connection/", KeepConnection()),
        (r"/partial-response/", PartialResponse()),
    ])

    t = util.start_thread(server.serve_forever, kwargs={"poll_interval": 0.1})
    try:
        yield server
    finally:
        server.shutdown()
        t.join()
示例#6
0
def uhttp_server(tmp_pki):
    server = uhttp.Server("", uhttp.Connection)
    log.info("Server listening on %r", server.server_address)

    server.app = http.Router([])

    t = util.start_thread(server.serve_forever, kwargs={"poll_interval": 0.1})

    yield server

    server.shutdown()
    t.join()
示例#7
0
def test_uninterruptible_interrupt():
    r, w = os.pipe()
    signo = signal.SIGUSR1
    prev = signal.signal(signo, lambda s, f: True)
    try:

        def read():
            return os.read(r, 1)

        def write():
            time.sleep(0.1)
            os.kill(os.getpid(), signo)
            time.sleep(0.1)
            os.write(w, b'a')

        util.start_thread(write)
        assert util.uninterruptible(read) == b'a'
    finally:
        signal.signal(signo, prev)
        os.close(r)
        os.close(w)
示例#8
0
def http_server(tmp_pki):
    server = http.Server(("localhost", 0), http.Connection)
    log.info("Server listening on port %d", server.server_port)

    ctx = ssl.server_context(tmp_pki.certfile,
                             tmp_pki.keyfile,
                             cafile=tmp_pki.cafile)
    server.socket = ctx.wrap_socket(server.socket, server_side=True)

    server.url = urlparse("https://localhost:{}/".format(server.server_port))
    server.cafile = tmp_pki.cafile
    server.app = http.Router([])

    t = util.start_thread(server.serve_forever, kwargs={"poll_interval": 0.1})

    yield server

    server.shutdown()
    t.join()
示例#9
0
def test_start_thread_non_daemon():
    t = util.start_thread(lambda: None, daemon=False)
    t.join()
    assert not t.daemon
示例#10
0
def test_start_thread_daemon():
    t = util.start_thread(lambda: None)
    t.join()
    assert t.daemon
示例#11
0
def test_start_thread_name():
    t = util.start_thread(lambda: None, name="foo")
    t.join()
    assert t.name == "foo"