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
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)
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)
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")
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()
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;")
def test_null_server_observer(self): baseplate = Baseplate() mock_context = baseplate.make_context_object() mock_observer = mock.Mock(spec=BaseplateObserver) mock_observer.on_server_span_created.return_value = None baseplate.register(mock_observer) server_span = baseplate.make_server_span(mock_context, "name", TraceInfo(1, 2, 3, None, 0)) self.assertEqual(server_span.observers, [])
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, [])
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")
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")
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")
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))
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")
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))
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")
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")
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")
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")
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 = mock.Mock() self.server_span = baseplate.make_server_span(self.context, "test")
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)
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")