示例#1
0
def make_server(db_dir='/tmp/fake_mesh_dir',
                host='0.0.0.0',
                port=8829,
                ca_cert=default_ca_cert,
                server_cert=default_server_cert,
                server_key=default_server_key,
                debug=False,
                logging=False):
    app = FakeMeshApplication(db_dir)
    if debug:
        app = DebugMiddleware(app)
    elif logging:
        app = LoggingMiddleware(app, logger=LOGGER_NAME)
    httpd = Server((host, port), app)

    server_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,
                                                cafile=ca_cert)
    server_context.load_cert_chain(server_cert, server_key)
    server_context.check_hostname = False
    server_context.verify_mode = ssl.CERT_REQUIRED

    ssl_adapter = BuiltinSSLAdapter(server_cert, server_key, ca_cert)
    ssl_adapter.context = server_context
    httpd.ssl_adapter = ssl_adapter

    return httpd
def e2e_test_context():
    app = DomainDispatcherApplication(create_backend_app)
    aws_server = Server((FAKE_AWS_HOST, FAKE_AWS_PORT), app)
    aws_httpd = ThreadedHttpd(aws_server)
    aws_httpd.start()

    mesh_dir = TemporaryDirectory()
    forwarder_dir = TemporaryDirectory()

    app = FakeMeshApplication(mesh_dir.name,
                              FAKE_MESH_SHARED_KEY.encode("utf-8"),
                              FAKE_MESH_CLIENT_PASSWORD)
    mesh_server = Server((FAKE_MESH_HOST, FAKE_MESH_PORT), app)

    server_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,
                                                cafile=CA_CERT_PATH)
    server_context.load_cert_chain(SERVER_CERT_PATH, SERVER_KEY_PATH)
    server_context.check_hostname = False
    server_context.verify_mode = ssl.CERT_REQUIRED

    ssl_adapter = BuiltinSSLAdapter(SERVER_CERT_PATH, SERVER_KEY_PATH,
                                    CA_CERT_PATH)
    ssl_adapter.context = server_context

    mesh_server.ssl_adapter = ssl_adapter
    mesh_httpd = ThreadedHttpd(mesh_server)
    mesh_httpd.start()
    yield E2ETestContext(
        fowarder_home=forwarder_dir.name,
        fake_aws_endpoint=f"http://{FAKE_AWS_HOST}:{FAKE_AWS_PORT}",
    )
    mesh_httpd.stop()
    aws_httpd.stop()
    mesh_dir.cleanup()
    forwarder_dir.cleanup()
def _build_fake_mesh(mesh_dir):
    app = FakeMeshApplication(mesh_dir, _utf_8(FAKE_MESH_SHARED_KEY),
                              FAKE_MESH_CLIENT_PASSWORD)
    httpd = Server((FAKE_MESH_HOST, FAKE_MESH_PORT), app)

    server_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,
                                                cafile=CA_CERT_PATH)
    server_context.load_cert_chain(SERVER_CERT_PATH, SERVER_KEY_PATH)
    server_context.check_hostname = False
    server_context.verify_mode = ssl.CERT_REQUIRED

    ssl_adapter = BuiltinSSLAdapter(SERVER_CERT_PATH, SERVER_KEY_PATH,
                                    CA_CERT_PATH)
    ssl_adapter.context = server_context
    httpd.ssl_adapter = ssl_adapter
    return ThreadedHttpd(httpd)