Example #1
0
    def setUp(self):
        self.itrans = TMemoryBuffer()
        self.iprot = THeaderProtocol(self.itrans)

        self.otrans = TMemoryBuffer()
        self.oprot = THeaderProtocol(self.otrans)

        self.observer = mock.Mock(spec=BaseplateObserver)
        self.root_observer = mock.Mock(spec=RootSpanObserver)
        def _register_mock(context, root_span):
            root_span.register(self.root_observer)
        self.observer.on_root_span_created.side_effect = _register_mock

        self.logger = mock.Mock(spec=logging.Logger)
        self.server_context = TRpcConnectionContext(
            self.itrans, self.iprot, self.oprot)

        baseplate = Baseplate()
        baseplate.register(self.observer)

        event_handler = BaseplateProcessorEventHandler(self.logger, baseplate)

        handler = TestHandler()
        self.processor = BaseplateService.ContextProcessor(handler)
        self.processor.setEventHandler(event_handler)
Example #2
0
    def setUp(self):
        self.itrans = TMemoryBuffer()
        self.iprot = THeaderProtocol(self.itrans)

        self.otrans = TMemoryBuffer()
        self.oprot = THeaderProtocol(self.otrans)

        self.observer = mock.Mock(spec=BaseplateObserver)
        self.server_observer = mock.Mock(spec=ServerSpanObserver)

        def _register_mock(context, server_span):
            server_span.register(self.server_observer)

        self.observer.on_server_span_created.side_effect = _register_mock

        self.logger = mock.Mock(spec=logging.Logger)
        self.server_context = TRpcConnectionContext(self.itrans, self.iprot,
                                                    self.oprot)

        baseplate = Baseplate()
        baseplate.register(self.observer)

        event_handler = BaseplateProcessorEventHandler(self.logger, baseplate)

        handler = TestHandler()
        self.processor = BaseplateService.ContextProcessor(handler)
        self.processor.setEventHandler(event_handler)
Example #3
0
def serve_thrift(handler, server_span_observer=None):
    # create baseplate root
    baseplate = Baseplate()
    if server_span_observer:

        class TestBaseplateObserver(BaseplateObserver):
            def on_server_span_created(self, context, server_span):
                server_span.register(server_span_observer)

        baseplate.register(TestBaseplateObserver())

    # set up the server's processor
    logger = mock.Mock(spec=logging.Logger)
    edge_context_factory = make_edge_context_factory()
    processor = TestService.Processor(handler)
    processor = baseplateify_processor(processor, logger, baseplate, edge_context_factory)

    # bind a server socket on an available port
    server_bind_endpoint = config.Endpoint("127.0.0.1:0")
    listener = make_listener(server_bind_endpoint)
    server = make_server({"max_concurrency": "100"}, listener, processor)

    # figure out what port the server ended up on
    server_address = listener.getsockname()
    server.endpoint = config.Endpoint(f"{server_address[0]}:{server_address[1]}")

    # run the server until our caller is done with it
    server_greenlet = gevent.spawn(server.serve_forever)
    try:
        yield server
    finally:
        server_greenlet.kill()
Example #4
0
    def test_null_server_observer(self):
        mock_context = mock.Mock()
        mock_observer = mock.Mock(spec=BaseplateObserver)
        mock_observer.on_server_span_created.return_value = None

        baseplate = Baseplate()
        baseplate.register(mock_observer)
        server_span = baseplate.make_server_span(mock_context, "name", TraceInfo(1, 2, 3, None, 0))

        self.assertEqual(server_span.observers, [])
Example #5
0
    def test_null_root_observer(self):
        mock_context = mock.Mock()
        mock_observer = mock.Mock(spec=BaseplateObserver)
        mock_observer.on_root_span_created.return_value = None

        baseplate = Baseplate()
        baseplate.register(mock_observer)
        root_span = baseplate.make_root_span(mock_context, 1, 2, "name", 3)

        self.assertEqual(root_span.observers, [])
Example #6
0
    def test_null_root_observer(self):
        mock_context = mock.Mock()
        mock_observer = mock.Mock(spec=BaseplateObserver)
        mock_observer.on_root_span_created.return_value = None

        baseplate = Baseplate()
        baseplate.register(mock_observer)
        root_span = baseplate.make_root_span(mock_context, 1, 2, "name", 3)

        self.assertEqual(root_span.observers, [])
Example #7
0
    def test_null_server_observer(self):
        mock_context = mock.Mock()
        mock_observer = mock.Mock(spec=BaseplateObserver)
        mock_observer.on_server_span_created.return_value = None

        baseplate = Baseplate()
        baseplate.register(mock_observer)
        server_span = baseplate.make_server_span(mock_context, "name", TraceInfo(1, 2, 3, None, 0))

        self.assertEqual(server_span.observers, [])
Example #8
0
def baseplate_thrift_client(endpoint, client_span_observer=None):
    baseplate = Baseplate()

    if client_span_observer:

        class TestServerSpanObserver(ServerSpanObserver):
            def on_child_span_created(self, span):
                span.register(client_span_observer)

        observer = TestServerSpanObserver()

        class TestBaseplateObserver(BaseplateObserver):
            def on_server_span_created(self, context, span):
                span.register(observer)

        baseplate.register(TestBaseplateObserver())

    context = baseplate.make_context_object()
    trace_info = TraceInfo.from_upstream(
        trace_id=1234, parent_id=2345, span_id=3456, flags=4567, sampled=True
    )

    baseplate.configure_context(
        {"example_service.endpoint": str(endpoint)},
        {"example_service": ThriftClient(TestService.Client)},
    )

    baseplate.make_server_span(context, "example_service.example", trace_info)

    edge_context_factory = make_edge_context_factory()
    edge_context = edge_context_factory.from_upstream(SERIALIZED_EDGECONTEXT_WITH_VALID_AUTH)
    edge_context.attach_context(context)

    yield context
Example #9
0
    def test_server_observer_made(self):
        mock_context = mock.Mock()
        mock_observer = mock.Mock(spec=BaseplateObserver)

        baseplate = Baseplate()
        baseplate.register(mock_observer)
        server_span = baseplate.make_server_span(mock_context, "name", TraceInfo(1, 2, 3, None, 0))

        self.assertEqual(baseplate.observers, [mock_observer])
        self.assertEqual(mock_observer.on_server_span_created.call_count, 1)
        self.assertEqual(mock_observer.on_server_span_created.call_args,
            mock.call(mock_context, server_span))
Example #10
0
    def test_root_observer_made(self):
        mock_context = mock.Mock()
        mock_observer = mock.Mock(spec=BaseplateObserver)

        baseplate = Baseplate()
        baseplate.register(mock_observer)
        root_span = baseplate.make_root_span(mock_context, 1, 2, "name", 3)

        self.assertEqual(baseplate.observers, [mock_observer])
        self.assertEqual(mock_observer.on_root_span_created.call_count, 1)
        self.assertEqual(mock_observer.on_root_span_created.call_args,
            mock.call(mock_context, root_span))
Example #11
0
    def test_server_observer_made(self):
        mock_context = mock.Mock()
        mock_observer = mock.Mock(spec=BaseplateObserver)

        baseplate = Baseplate()
        baseplate.register(mock_observer)
        server_span = baseplate.make_server_span(mock_context, "name", TraceInfo(1, 2, 3, None, 0))

        self.assertEqual(baseplate.observers, [mock_observer])
        self.assertEqual(mock_observer.on_server_span_created.call_count, 1)
        self.assertEqual(mock_observer.on_server_span_created.call_args,
            mock.call(mock_context, server_span))
Example #12
0
    def test_root_observer_made(self):
        mock_context = mock.Mock()
        mock_observer = mock.Mock(spec=BaseplateObserver)

        baseplate = Baseplate()
        baseplate.register(mock_observer)
        root_span = baseplate.make_root_span(mock_context, 1, 2, "name", 3)

        self.assertEqual(baseplate.observers, [mock_observer])
        self.assertEqual(mock_observer.on_root_span_created.call_count, 1)
        self.assertEqual(mock_observer.on_root_span_created.call_args,
            mock.call(mock_context, root_span))
        self.assertEqual(root_span.observers,
            [mock_observer.on_root_span_created.return_value])
Example #13
0
    def setUp(self):
        self.baseplate_observer = TestBaseplateObserver()

        profiles = {
            "foo": ExecutionProfile(consistency_level=ConsistencyLevel.QUORUM)
        }

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.configure_context(
            {
                "cassandra.contact_points":
                cassandra_endpoint.address.host,
                "cassandra_no_prof.contact_points":
                cassandra_endpoint.address.host,
            },
            {
                "cassandra_no_prof":
                CassandraClient(keyspace="system"),
                "cassandra":
                CassandraClient(keyspace="system",
                                execution_profiles=profiles),
            },
        )

        self.context = baseplate.make_context_object()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #14
0
    def setUp(self):
        self.itrans = TMemoryBuffer()
        self.iprot = THeaderProtocol(self.itrans)

        self.otrans = TMemoryBuffer()
        self.oprot = THeaderProtocol(self.otrans)

        self.observer = mock.Mock(spec=BaseplateObserver)
        self.server_observer = mock.Mock(spec=ServerSpanObserver)

        def _register_mock(context, server_span):
            server_span.register(self.server_observer)

        self.observer.on_server_span_created.side_effect = _register_mock

        self.logger = mock.Mock(spec=logging.Logger)
        self.server_context = TRpcConnectionContext(self.itrans, self.iprot,
                                                    self.oprot)

        mock_filewatcher = mock.Mock(spec=FileWatcher)
        mock_filewatcher.get_data.return_value = {
            "secrets": {
                "secret/authentication/public-key": {
                    "type": "versioned",
                    "current": AUTH_TOKEN_PUBLIC_KEY,
                },
            },
            "vault": {
                "token": "test",
                "url": "http://vault.example.com:8200/",
            }
        }
        self.secrets = store.SecretsStore("/secrets")
        self.secrets._filewatcher = mock_filewatcher

        baseplate = Baseplate()
        baseplate.register(self.observer)

        self.edge_context_factory = EdgeRequestContextFactory(self.secrets)

        event_handler = BaseplateProcessorEventHandler(
            self.logger,
            baseplate,
            edge_context_factory=self.edge_context_factory,
        )

        handler = TestHandler()
        self.processor = TestService.ContextProcessor(handler)
        self.processor.setEventHandler(event_handler)
Example #15
0
    def setUp(self):
        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.configure_context(
            {"memcache.endpoint": str(memcached_endpoint)},
            {"memcache": MemcacheClient()})

        self.context = baseplate.make_context_object()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #16
0
    def setUp(self):
        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.configure_context(
            {"redis.url": f"redis://{redis_endpoint}/0"},
            {"redis": RedisClient()})

        self.context = baseplate.make_context_object()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #17
0
    def setUp(self):
        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.configure_context(
            {"cassandra.contact_points": cassandra_endpoint.address.host},
            {"cassandra": CassandraClient(keyspace="system")},
        )

        self.context = baseplate.make_context_object()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #18
0
    def setUp(self):
        secrets_store = mock.Mock(spec=SecretsStore)
        secrets_store.get_vault_url.return_value = "http://%s:%d/" % vault_endpoint.address
        secrets_store.get_vault_token.return_value = "b4c6f298-3f80-11e7-8b88-5254001e7ad3"

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.configure_context({}, {"vault": HvacClient(secrets_store)})

        self.context = baseplate.make_context_object()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #19
0
    def setUp(self):
        self.itrans = TMemoryBuffer()
        self.iprot = THeaderProtocol(self.itrans)

        self.otrans = TMemoryBuffer()
        self.oprot = THeaderProtocol(self.otrans)

        self.observer = mock.Mock(spec=BaseplateObserver)
        self.logger = mock.Mock(spec=logging.Logger)
        self.server_context = TRpcConnectionContext(
            self.itrans, self.iprot, self.oprot)

        baseplate = Baseplate()
        baseplate.register(self.observer)

        event_handler = BaseplateProcessorEventHandler(self.logger, baseplate)

        handler = TestHandler()
        self.processor = BaseplateService.ContextProcessor(handler)
        self.processor.setEventHandler(event_handler)
Example #20
0
    def setUp(self):
        self.allowance = 10
        self.interval = 1
        ratelimiter_factory = RateLimiterContextFactory(
            self.backend_factory, self.allowance, self.interval)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("ratelimiter", ratelimiter_factory)

        self.context = baseplate.make_context_object()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #21
0
    def setUp(self):
        engine = engine_from_config({"database.url":
                                     "sqlite://"})  # in-memory db
        Base.metadata.create_all(bind=engine)
        factory = SQLAlchemySessionContextFactory(engine)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("db", factory)

        self.context = baseplate.make_context_object()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #22
0
    def test_configure_context_supports_complex_specs(self):
        from baseplate.context.thrift import ThriftClient
        from baseplate.thrift import BaseplateService

        app_config = {
            "enable_some_fancy_feature": "true",
            "thrift.foo.endpoint": "localhost:9090",
            "thrift.bar.endpoint": "localhost:9091",
        }

        baseplate = Baseplate()
        baseplate.configure_context(
            app_config,
            {
                "enable_some_fancy_feature": config.Boolean,
                "thrift": {
                    "foo": ThriftClient(BaseplateService.Client),
                    "bar": ThriftClient(BaseplateService.Client),
                },
            },
        )

        context = baseplate.make_context_object()
        with baseplate.make_server_span(context, "test"):
            self.assertTrue(context.enable_some_fancy_feature)
            self.assertIsNotNone(context.thrift.foo)
            self.assertIsNotNone(context.thrift.bar)
Example #23
0
    def test_simple_config(self):
        baseplate = Baseplate()
        baseplate.configure_context({"db.url": "sqlite://"},
                                    {"db": SQLAlchemySession()})

        context = baseplate.make_context_object()
        with baseplate.make_server_span(context, "test"):
            context.db.execute("SELECT 1;")
Example #24
0
    def setUp(self):
        pool = PooledClient(server=("localhost", 11211))
        factory = MemcacheContextFactory(pool)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("memcache", factory)

        self.context = mock.Mock()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #25
0
    def setUp(self):
        pool = redis.ConnectionPool(host="localhost")
        factory = RedisContextFactory(pool)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("redis", factory)

        self.context = mock.Mock()
        self.server_span = baseplate.make_server_span(self.context, "test")
    def setUp(self):
        cluster = Cluster(["localhost"])
        session = cluster.connect("system")
        factory = CassandraContextFactory(session)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("cassandra", factory)

        self.context = mock.Mock()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #27
0
    def setUp(self):
        engine = create_engine("sqlite://")  # in-memory db
        Base.metadata.create_all(bind=engine)
        factory = SQLAlchemySessionContextFactory(engine)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("db", factory)

        self.context = mock.Mock()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #28
0
    def setUp(self):
        pool = PooledClient(server=("localhost", 11211))
        factory = MemcacheContextFactory(pool)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("memcache", factory)

        self.context = mock.Mock()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #29
0
    def setUp(self):
        pool = redis.ConnectionPool(host="localhost")
        factory = RedisContextFactory(pool)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("redis", factory)

        self.context = mock.Mock()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #30
0
    def setUp(self):
        app_config = {}
        secrets_store = mock.Mock(spec=SecretsStore)
        secrets_store.get_vault_url.return_value = "http://%s:%d/" % vault_endpoint.address
        secrets_store.get_vault_token.return_value = "b4c6f298-3f80-11e7-8b88-5254001e7ad3"

        factory = hvac_factory_from_config(app_config, secrets_store)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("vault", factory)

        self.context = mock.Mock()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #31
0
    def setUp(self):
        engine = create_engine("sqlite://")  # in-memory db
        Base.metadata.create_all(bind=engine)
        factory = SQLAlchemySessionContextFactory(engine)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("db", factory)

        self.context = mock.Mock()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #32
0
    def setUp(self):
        cluster = Cluster(["localhost"])
        session = cluster.connect("system")
        factory = CassandraContextFactory(session)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("cassandra", factory)

        self.context = mock.Mock()
        self.server_span = baseplate.make_server_span(self.context, "test")
Example #33
0
    def setUp(self):
        app_config = {}
        secrets_store = mock.Mock(spec=SecretsStore)
        secrets_store.get_vault_url.return_value = "http://localhost:8200/"
        secrets_store.get_vault_token.return_value = "b4c6f298-3f80-11e7-8b88-5254001e7ad3"

        factory = hvac_factory_from_config(app_config, secrets_store)

        self.baseplate_observer = TestBaseplateObserver()

        baseplate = Baseplate()
        baseplate.register(self.baseplate_observer)
        baseplate.add_to_context("vault", factory)

        self.context = mock.Mock()
        self.server_span = baseplate.make_server_span(self.context, "test")