From 85ef042f0ea0ee242e88bfcf0ebd635d41636f9d Mon Sep 17 00:00:00 2001 From: Yuri Shkuro Date: Tue, 2 Aug 2022 10:39:26 -0400 Subject: [PATCH 1/2] Rename TenancyManager to tenancy.Manager Signed-off-by: Yuri Shkuro --- cmd/all-in-one/main.go | 4 ++-- cmd/collector/app/collector.go | 4 ++-- cmd/collector/app/collector_test.go | 8 +++---- cmd/collector/app/handler/grpc_handler.go | 6 ++--- .../app/handler/grpc_handler_test.go | 10 ++++---- cmd/collector/app/handler/otlp_receiver.go | 6 ++--- .../app/handler/otlp_receiver_test.go | 10 ++++---- cmd/collector/app/server/grpc_test.go | 10 ++++---- cmd/collector/app/span_handler_builder.go | 2 +- .../app/span_handler_builder_test.go | 4 ++-- cmd/collector/main.go | 2 +- cmd/query/app/apiv3/grpc_gateway.go | 2 +- cmd/query/app/apiv3/grpc_gateway_test.go | 8 +++---- cmd/query/app/grpc_handler_test.go | 16 ++++++------- cmd/query/app/http_handler.go | 4 ++-- cmd/query/app/http_handler_test.go | 20 ++++++++-------- cmd/query/app/server.go | 6 ++--- cmd/query/app/server_test.go | 24 +++++++++---------- cmd/query/main.go | 2 +- cmd/remote-storage/app/server.go | 4 ++-- cmd/remote-storage/app/server_test.go | 10 ++++---- cmd/remote-storage/main.go | 2 +- .../{config_test.go => manage_test.go} | 0 pkg/tenancy/{config.go => manager.go} | 14 +++++------ 24 files changed, 89 insertions(+), 89 deletions(-) rename pkg/tenancy/{config_test.go => manage_test.go} (100%) rename pkg/tenancy/{config.go => manager.go} (100%) diff --git a/cmd/all-in-one/main.go b/cmd/all-in-one/main.go index c3ceb111d77..963b224d5c5 100644 --- a/cmd/all-in-one/main.go +++ b/cmd/all-in-one/main.go @@ -156,7 +156,7 @@ by default uses only in-memory database.`, logger.Fatal("Failed to configure query service", zap.Error(err)) } - tm := tenancy.NewTenancyManager(&cOpts.GRPC.Tenancy) + tm := tenancy.NewManager(&cOpts.GRPC.Tenancy) // collector c := collectorApp.New(&collectorApp.CollectorParams{ @@ -269,7 +269,7 @@ func startQuery( depReader dependencystore.Reader, metricsQueryService querysvc.MetricsQueryService, baseFactory metrics.Factory, - tm *tenancy.TenancyManager, + tm *tenancy.Manager, ) *queryApp.Server { spanReader = storageMetrics.NewReadMetricsDecorator(spanReader, baseFactory.Namespace(metrics.NSOptions{Name: "query"})) qs := querysvc.NewQueryService(spanReader, depReader, *queryOpts) diff --git a/cmd/collector/app/collector.go b/cmd/collector/app/collector.go index 2beff366f01..1d45f9bb58e 100644 --- a/cmd/collector/app/collector.go +++ b/cmd/collector/app/collector.go @@ -53,7 +53,7 @@ type Collector struct { hCheck *healthcheck.HealthCheck spanProcessor processor.SpanProcessor spanHandlers *SpanHandlers - tenancyMgr *tenancy.TenancyManager + tenancyMgr *tenancy.Manager // state, read only hServer *http.Server @@ -74,7 +74,7 @@ type CollectorParams struct { StrategyStore strategystore.StrategyStore Aggregator strategystore.Aggregator HealthCheck *healthcheck.HealthCheck - TenancyMgr *tenancy.TenancyManager + TenancyMgr *tenancy.Manager } // New constructs a new collector component, ready to be started diff --git a/cmd/collector/app/collector_test.go b/cmd/collector/app/collector_test.go index cf951f22e23..a3036cd42ab 100644 --- a/cmd/collector/app/collector_test.go +++ b/cmd/collector/app/collector_test.go @@ -54,7 +54,7 @@ func TestNewCollector(t *testing.T) { baseMetrics := metricstest.NewFactory(time.Hour) spanWriter := &fakeSpanWriter{} strategyStore := &mockStrategyStore{} - tm := &tenancy.TenancyManager{} + tm := &tenancy.Manager{} c := New(&CollectorParams{ ServiceName: "collector", @@ -80,7 +80,7 @@ func TestCollector_StartErrors(t *testing.T) { baseMetrics := metricstest.NewFactory(time.Hour) spanWriter := &fakeSpanWriter{} strategyStore := &mockStrategyStore{} - tm := &tenancy.TenancyManager{} + tm := &tenancy.Manager{} c := New(&CollectorParams{ ServiceName: "collector", @@ -135,7 +135,7 @@ func TestCollector_PublishOpts(t *testing.T) { metricsFactory := fork.New("internal", forkFactory, baseMetrics) spanWriter := &fakeSpanWriter{} strategyStore := &mockStrategyStore{} - tm := &tenancy.TenancyManager{} + tm := &tenancy.Manager{} c := New(&CollectorParams{ ServiceName: "collector", @@ -171,7 +171,7 @@ func TestAggregator(t *testing.T) { spanWriter := &fakeSpanWriter{} strategyStore := &mockStrategyStore{} agg := &mockAggregator{} - tm := &tenancy.TenancyManager{} + tm := &tenancy.Manager{} c := New(&CollectorParams{ ServiceName: "collector", diff --git a/cmd/collector/app/handler/grpc_handler.go b/cmd/collector/app/handler/grpc_handler.go index 1c6d9e79f08..9e23ec602cf 100644 --- a/cmd/collector/app/handler/grpc_handler.go +++ b/cmd/collector/app/handler/grpc_handler.go @@ -36,7 +36,7 @@ type GRPCHandler struct { } // NewGRPCHandler registers routes for this handler on the given router. -func NewGRPCHandler(logger *zap.Logger, spanProcessor processor.SpanProcessor, tenancyMgr *tenancy.TenancyManager) *GRPCHandler { +func NewGRPCHandler(logger *zap.Logger, spanProcessor processor.SpanProcessor, tenancyMgr *tenancy.Manager) *GRPCHandler { return &GRPCHandler{ logger: logger, batchConsumer: newBatchConsumer(logger, @@ -58,10 +58,10 @@ type batchConsumer struct { logger *zap.Logger spanProcessor processor.SpanProcessor spanOptions processor.SpansOptions - tenancyMgr *tenancy.TenancyManager + tenancyMgr *tenancy.Manager } -func newBatchConsumer(logger *zap.Logger, spanProcessor processor.SpanProcessor, transport processor.InboundTransport, spanFormat processor.SpanFormat, tenancyMgr *tenancy.TenancyManager) batchConsumer { +func newBatchConsumer(logger *zap.Logger, spanProcessor processor.SpanProcessor, transport processor.InboundTransport, spanFormat processor.SpanFormat, tenancyMgr *tenancy.Manager) batchConsumer { return batchConsumer{ logger: logger, spanProcessor: spanProcessor, diff --git a/cmd/collector/app/handler/grpc_handler_test.go b/cmd/collector/app/handler/grpc_handler_test.go index 171835e578c..17a8af07e52 100644 --- a/cmd/collector/app/handler/grpc_handler_test.go +++ b/cmd/collector/app/handler/grpc_handler_test.go @@ -98,7 +98,7 @@ func newClient(t *testing.T, addr net.Addr) (api_v2.CollectorServiceClient, *grp func TestPostSpans(t *testing.T) { processor := &mockSpanProcessor{} server, addr := initializeGRPCTestServer(t, func(s *grpc.Server) { - handler := NewGRPCHandler(zap.NewNop(), processor, &tenancy.TenancyManager{}) + handler := NewGRPCHandler(zap.NewNop(), processor, &tenancy.Manager{}) api_v2.RegisterCollectorServiceServer(s, handler) }) defer server.Stop() @@ -133,7 +133,7 @@ func TestPostSpans(t *testing.T) { func TestGRPCCompressionEnabled(t *testing.T) { processor := &mockSpanProcessor{} server, addr := initializeGRPCTestServer(t, func(s *grpc.Server) { - handler := NewGRPCHandler(zap.NewNop(), processor, &tenancy.TenancyManager{}) + handler := NewGRPCHandler(zap.NewNop(), processor, &tenancy.Manager{}) api_v2.RegisterCollectorServiceServer(s, handler) }) defer server.Stop() @@ -171,7 +171,7 @@ func TestPostSpansWithError(t *testing.T) { processor := &mockSpanProcessor{expectedError: test.processorError} logger, logBuf := testutils.NewLogger() server, addr := initializeGRPCTestServer(t, func(s *grpc.Server) { - handler := NewGRPCHandler(logger, processor, &tenancy.TenancyManager{}) + handler := NewGRPCHandler(logger, processor, &tenancy.Manager{}) api_v2.RegisterCollectorServiceServer(s, handler) }) defer server.Stop() @@ -210,7 +210,7 @@ func TestPostTenantedSpans(t *testing.T) { processor := &mockSpanProcessor{} server, addr := initializeGRPCTestServer(t, func(s *grpc.Server) { handler := NewGRPCHandler(zap.NewNop(), processor, - tenancy.NewTenancyManager(&tenancy.Options{ + tenancy.NewManager(&tenancy.Options{ Enabled: true, Header: tenantHeader, Tenants: []string{dummyTenant}, @@ -346,7 +346,7 @@ func TestGetTenant(t *testing.T) { processor := &mockSpanProcessor{} handler := NewGRPCHandler(zap.NewNop(), processor, - tenancy.NewTenancyManager(&tenancy.Options{ + tenancy.NewManager(&tenancy.Options{ Enabled: true, Header: tenantHeader, Tenants: validTenants, diff --git a/cmd/collector/app/handler/otlp_receiver.go b/cmd/collector/app/handler/otlp_receiver.go index 678fdd78b6d..1fbb52134b7 100644 --- a/cmd/collector/app/handler/otlp_receiver.go +++ b/cmd/collector/app/handler/otlp_receiver.go @@ -40,7 +40,7 @@ import ( var _ component.Host = (*otelHost)(nil) // API check // StartOTLPReceiver starts OpenTelemetry OTLP receiver listening on gRPC and HTTP ports. -func StartOTLPReceiver(options *flags.CollectorOptions, logger *zap.Logger, spanProcessor processor.SpanProcessor, tm *tenancy.TenancyManager) (component.TracesReceiver, error) { +func StartOTLPReceiver(options *flags.CollectorOptions, logger *zap.Logger, spanProcessor processor.SpanProcessor, tm *tenancy.Manager) (component.TracesReceiver, error) { otlpFactory := otlpreceiver.NewFactory() return startOTLPReceiver( options, @@ -60,7 +60,7 @@ func startOTLPReceiver( options *flags.CollectorOptions, logger *zap.Logger, spanProcessor processor.SpanProcessor, - tm *tenancy.TenancyManager, + tm *tenancy.Manager, // from here: params that can be mocked in tests otlpFactory component.ReceiverFactory, newTraces func(consume consumer.ConsumeTracesFunc, options ...consumer.Option) (consumer.Traces, error), @@ -140,7 +140,7 @@ func applyTLSSettings(opts *tlscfg.Options) *configtls.TLSServerSetting { } } -func newConsumerDelegate(logger *zap.Logger, spanProcessor processor.SpanProcessor, tm *tenancy.TenancyManager) *consumerDelegate { +func newConsumerDelegate(logger *zap.Logger, spanProcessor processor.SpanProcessor, tm *tenancy.Manager) *consumerDelegate { return &consumerDelegate{ batchConsumer: newBatchConsumer(logger, spanProcessor, diff --git a/cmd/collector/app/handler/otlp_receiver_test.go b/cmd/collector/app/handler/otlp_receiver_test.go index b05b5ef5d0b..4f7d9490fa2 100644 --- a/cmd/collector/app/handler/otlp_receiver_test.go +++ b/cmd/collector/app/handler/otlp_receiver_test.go @@ -49,7 +49,7 @@ func optionsWithPorts(port string) *flags.CollectorOptions { func TestStartOtlpReceiver(t *testing.T) { spanProcessor := &mockSpanProcessor{} logger, _ := testutils.NewLogger() - tm := &tenancy.TenancyManager{} + tm := &tenancy.Manager{} rec, err := StartOTLPReceiver(optionsWithPorts(":0"), logger, spanProcessor, tm) require.NoError(t, err) defer func() { @@ -81,7 +81,7 @@ func TestConsumerDelegate(t *testing.T) { t.Run(test.expectLog, func(t *testing.T) { logger, logBuf := testutils.NewLogger() spanProcessor := &mockSpanProcessor{expectedError: test.expectErr} - consumer := newConsumerDelegate(logger, spanProcessor, &tenancy.TenancyManager{}) + consumer := newConsumerDelegate(logger, spanProcessor, &tenancy.Manager{}) err := consumer.consume(context.Background(), makeTracesOneSpan()) @@ -100,7 +100,7 @@ func TestStartOtlpReceiver_Error(t *testing.T) { spanProcessor := &mockSpanProcessor{} logger, _ := testutils.NewLogger() opts := optionsWithPorts(":-1") - tm := &tenancy.TenancyManager{} + tm := &tenancy.Manager{} _, err := StartOTLPReceiver(opts, logger, spanProcessor, tm) require.Error(t, err) assert.Contains(t, err.Error(), "could not start the OTLP receiver") @@ -109,7 +109,7 @@ func TestStartOtlpReceiver_Error(t *testing.T) { return nil, errors.New("mock error") } f := otlpreceiver.NewFactory() - _, err = startOTLPReceiver(opts, logger, spanProcessor, &tenancy.TenancyManager{}, f, newTraces, f.CreateTracesReceiver) + _, err = startOTLPReceiver(opts, logger, spanProcessor, &tenancy.Manager{}, f, newTraces, f.CreateTracesReceiver) require.Error(t, err) assert.Contains(t, err.Error(), "could not create the OTLP consumer") @@ -118,7 +118,7 @@ func TestStartOtlpReceiver_Error(t *testing.T) { ) (component.TracesReceiver, error) { return nil, errors.New("mock error") } - _, err = startOTLPReceiver(opts, logger, spanProcessor, &tenancy.TenancyManager{}, f, consumer.NewTraces, createTracesReceiver) + _, err = startOTLPReceiver(opts, logger, spanProcessor, &tenancy.Manager{}, f, consumer.NewTraces, createTracesReceiver) require.Error(t, err) assert.Contains(t, err.Error(), "could not create the OTLP receiver") } diff --git a/cmd/collector/app/server/grpc_test.go b/cmd/collector/app/server/grpc_test.go index bdf722a8206..9acc872b5c4 100644 --- a/cmd/collector/app/server/grpc_test.go +++ b/cmd/collector/app/server/grpc_test.go @@ -40,7 +40,7 @@ func TestFailToListen(t *testing.T) { logger, _ := zap.NewDevelopment() server, err := StartGRPCServer(&GRPCServerParams{ HostPort: ":-1", - Handler: handler.NewGRPCHandler(logger, &mockSpanProcessor{}, &tenancy.TenancyManager{}), + Handler: handler.NewGRPCHandler(logger, &mockSpanProcessor{}, &tenancy.Manager{}), SamplingStore: &mockSamplingStore{}, Logger: logger, }) @@ -57,7 +57,7 @@ func TestFailServe(t *testing.T) { logger := zap.New(core) serveGRPC(grpc.NewServer(), lis, &GRPCServerParams{ - Handler: handler.NewGRPCHandler(logger, &mockSpanProcessor{}, &tenancy.TenancyManager{}), + Handler: handler.NewGRPCHandler(logger, &mockSpanProcessor{}, &tenancy.Manager{}), SamplingStore: &mockSamplingStore{}, Logger: logger, OnError: func(e error) { @@ -72,7 +72,7 @@ func TestFailServe(t *testing.T) { func TestSpanCollector(t *testing.T) { logger, _ := zap.NewDevelopment() params := &GRPCServerParams{ - Handler: handler.NewGRPCHandler(logger, &mockSpanProcessor{}, &tenancy.TenancyManager{}), + Handler: handler.NewGRPCHandler(logger, &mockSpanProcessor{}, &tenancy.Manager{}), SamplingStore: &mockSamplingStore{}, Logger: logger, MaxReceiveMessageLength: 1024 * 1024, @@ -97,7 +97,7 @@ func TestSpanCollector(t *testing.T) { func TestCollectorStartWithTLS(t *testing.T) { logger, _ := zap.NewDevelopment() params := &GRPCServerParams{ - Handler: handler.NewGRPCHandler(logger, &mockSpanProcessor{}, &tenancy.TenancyManager{}), + Handler: handler.NewGRPCHandler(logger, &mockSpanProcessor{}, &tenancy.Manager{}), SamplingStore: &mockSamplingStore{}, Logger: logger, TLSConfig: tlscfg.Options{ @@ -116,7 +116,7 @@ func TestCollectorStartWithTLS(t *testing.T) { func TestCollectorReflection(t *testing.T) { logger, _ := zap.NewDevelopment() params := &GRPCServerParams{ - Handler: handler.NewGRPCHandler(logger, &mockSpanProcessor{}, &tenancy.TenancyManager{}), + Handler: handler.NewGRPCHandler(logger, &mockSpanProcessor{}, &tenancy.Manager{}), SamplingStore: &mockSamplingStore{}, Logger: logger, } diff --git a/cmd/collector/app/span_handler_builder.go b/cmd/collector/app/span_handler_builder.go index dd5dd311702..6f87ab97327 100644 --- a/cmd/collector/app/span_handler_builder.go +++ b/cmd/collector/app/span_handler_builder.go @@ -36,7 +36,7 @@ type SpanHandlerBuilder struct { CollectorOpts *flags.CollectorOptions Logger *zap.Logger MetricsFactory metrics.Factory - TenancyMgr *tenancy.TenancyManager + TenancyMgr *tenancy.Manager } // SpanHandlers holds instances to the span handlers built by the SpanHandlerBuilder diff --git a/cmd/collector/app/span_handler_builder_test.go b/cmd/collector/app/span_handler_builder_test.go index 3f747f83372..9799a2ad25a 100644 --- a/cmd/collector/app/span_handler_builder_test.go +++ b/cmd/collector/app/span_handler_builder_test.go @@ -42,7 +42,7 @@ func TestNewSpanHandlerBuilder(t *testing.T) { builder := &SpanHandlerBuilder{ SpanWriter: spanWriter, CollectorOpts: cOpts, - TenancyMgr: &tenancy.TenancyManager{}, + TenancyMgr: &tenancy.Manager{}, } assert.NotNil(t, builder.logger()) assert.NotNil(t, builder.metricsFactory()) @@ -52,7 +52,7 @@ func TestNewSpanHandlerBuilder(t *testing.T) { CollectorOpts: cOpts, Logger: zap.NewNop(), MetricsFactory: metrics.NullFactory, - TenancyMgr: &tenancy.TenancyManager{}, + TenancyMgr: &tenancy.Manager{}, } spanProcessor := builder.BuildSpanProcessor() diff --git a/cmd/collector/main.go b/cmd/collector/main.go index f92c9482689..290b02401b2 100644 --- a/cmd/collector/main.go +++ b/cmd/collector/main.go @@ -103,7 +103,7 @@ func main() { if err != nil { logger.Fatal("Failed to initialize collector", zap.Error(err)) } - tm := tenancy.NewTenancyManager(&collectorOpts.GRPC.Tenancy) + tm := tenancy.NewManager(&collectorOpts.GRPC.Tenancy) collector := app.New(&app.CollectorParams{ ServiceName: serviceName, diff --git a/cmd/query/app/apiv3/grpc_gateway.go b/cmd/query/app/apiv3/grpc_gateway.go index f563f7158e9..0abc723bbc5 100644 --- a/cmd/query/app/apiv3/grpc_gateway.go +++ b/cmd/query/app/apiv3/grpc_gateway.go @@ -31,7 +31,7 @@ import ( ) // RegisterGRPCGateway registers api_v3 endpoints into provided mux. -func RegisterGRPCGateway(ctx context.Context, logger *zap.Logger, r *mux.Router, basePath string, grpcEndpoint string, grpcTLS tlscfg.Options, tm *tenancy.TenancyManager) error { +func RegisterGRPCGateway(ctx context.Context, logger *zap.Logger, r *mux.Router, basePath string, grpcEndpoint string, grpcTLS tlscfg.Options, tm *tenancy.Manager) error { jsonpb := &runtime.JSONPb{} muxOpts := []runtime.ServeMuxOption{ diff --git a/cmd/query/app/apiv3/grpc_gateway_test.go b/cmd/query/app/apiv3/grpc_gateway_test.go index 92b9ac5a4cf..b950b371408 100644 --- a/cmd/query/app/apiv3/grpc_gateway_test.go +++ b/cmd/query/app/apiv3/grpc_gateway_test.go @@ -66,7 +66,7 @@ func setupGRPCGateway(t *testing.T, basePath string, serverTLS tlscfg.Options, c serverGRPCOpts = append(serverGRPCOpts, grpc.Creds(creds)) } if tenancyOptions.Enabled { - tm := tenancy.NewTenancyManager(&tenancyOptions) + tm := tenancy.NewManager(&tenancyOptions) serverGRPCOpts = append(serverGRPCOpts, grpc.StreamInterceptor(tenancy.NewGuardingStreamInterceptor(tm)), grpc.UnaryInterceptor(tenancy.NewGuardingUnaryInterceptor(tm)), @@ -86,7 +86,7 @@ func setupGRPCGateway(t *testing.T, basePath string, serverTLS tlscfg.Options, c router := &mux.Router{} router = router.PathPrefix(basePath).Subrouter() ctx, cancel := context.WithCancel(context.Background()) - err := RegisterGRPCGateway(ctx, zap.NewNop(), router, basePath, lis.Addr().String(), clientTLS, tenancy.NewTenancyManager(&tenancyOptions)) + err := RegisterGRPCGateway(ctx, zap.NewNop(), router, basePath, lis.Addr().String(), clientTLS, tenancy.NewManager(&tenancyOptions)) require.NoError(t, err) httpLis, err := net.Listen("tcp", ":0") @@ -176,7 +176,7 @@ func TestTenancyGRPCGateway(t *testing.T) { tenancyOptions := tenancy.Options{ Enabled: true, } - tm := tenancy.NewTenancyManager(&tenancyOptions) + tm := tenancy.NewManager(&tenancyOptions) testGRPCGatewayWithTenancy(t, "/", tlscfg.Options{}, tlscfg.Options{}, // Configure the gateway to forward tenancy header from HTTP to GRPC tenancyOptions, @@ -217,7 +217,7 @@ func TestTenancyGRPCRejection(t *testing.T) { require.Equal(t, http.StatusForbidden, response.StatusCode) // Try again with tenant header set - tm := tenancy.NewTenancyManager(&tenancyOptions) + tm := tenancy.NewManager(&tenancyOptions) req.Header.Set(tm.Header, "acme") response, err = http.DefaultClient.Do(req) require.NoError(t, err) diff --git a/cmd/query/app/grpc_handler_test.go b/cmd/query/app/grpc_handler_test.go index c25b890ccf3..8384bafb40b 100644 --- a/cmd/query/app/grpc_handler_test.go +++ b/cmd/query/app/grpc_handler_test.go @@ -145,7 +145,7 @@ type grpcClient struct { conn *grpc.ClientConn } -func newGRPCServer(t *testing.T, q *querysvc.QueryService, mq querysvc.MetricsQueryService, logger *zap.Logger, tracer opentracing.Tracer, tenancyMgr *tenancy.TenancyManager) (*grpc.Server, net.Addr) { +func newGRPCServer(t *testing.T, q *querysvc.QueryService, mq querysvc.MetricsQueryService, logger *zap.Logger, tracer opentracing.Tracer, tenancyMgr *tenancy.Manager) (*grpc.Server, net.Addr) { lis, _ := net.Listen("tcp", ":0") var grpcOpts []grpc.ServerOption if tenancyMgr.Enabled { @@ -203,7 +203,7 @@ func withMetricsQuery() testOption { } func withServerAndClient(t *testing.T, actualTest func(server *grpcServer, client *grpcClient), options ...testOption) { - server := initializeTenantedTestServerGRPCWithOptions(t, &tenancy.TenancyManager{}, options...) + server := initializeTenantedTestServerGRPCWithOptions(t, &tenancy.Manager{}, options...) client := newGRPCClient(t, server.lisAddr.String()) defer server.server.Stop() defer client.conn.Close() @@ -901,7 +901,7 @@ func TestMetricsQueryNilRequestGRPC(t *testing.T) { assert.EqualError(t, err, errNilRequest.Error()) } -func initializeTenantedTestServerGRPCWithOptions(t *testing.T, tm *tenancy.TenancyManager, options ...testOption) *grpcServer { +func initializeTenantedTestServerGRPCWithOptions(t *testing.T, tm *tenancy.Manager, options ...testOption) *grpcServer { archiveSpanReader := &spanstoremocks.Reader{} archiveSpanWriter := &spanstoremocks.Writer{} @@ -942,7 +942,7 @@ func initializeTenantedTestServerGRPCWithOptions(t *testing.T, tm *tenancy.Tenan } } -func withTenantedServerAndClient(t *testing.T, tm *tenancy.TenancyManager, actualTest func(server *grpcServer, client *grpcClient), options ...testOption) { +func withTenantedServerAndClient(t *testing.T, tm *tenancy.Manager, actualTest func(server *grpcServer, client *grpcClient), options ...testOption) { server := initializeTenantedTestServerGRPCWithOptions(t, tm, options...) client := newGRPCClient(t, server.lisAddr.String()) defer server.server.Stop() @@ -960,7 +960,7 @@ func withOutgoingMetadata(t *testing.T, ctx context.Context, headerName, headerV } func TestSearchTenancyGRPC(t *testing.T) { - tm := tenancy.NewTenancyManager(&tenancy.Options{ + tm := tenancy.NewManager(&tenancy.Options{ Enabled: true, }) withTenantedServerAndClient(t, tm, func(server *grpcServer, client *grpcClient) { @@ -996,7 +996,7 @@ func TestSearchTenancyGRPC(t *testing.T) { } func TestServicesTenancyGRPC(t *testing.T) { - tm := tenancy.NewTenancyManager(&tenancy.Options{ + tm := tenancy.NewManager(&tenancy.Options{ Enabled: true, }) withTenantedServerAndClient(t, tm, func(server *grpcServer, client *grpcClient) { @@ -1015,7 +1015,7 @@ func TestServicesTenancyGRPC(t *testing.T) { } func TestSearchTenancyGRPCExplicitList(t *testing.T) { - tm := tenancy.NewTenancyManager(&tenancy.Options{ + tm := tenancy.NewManager(&tenancy.Options{ Enabled: true, Header: "non-standard-tenant-header", Tenants: []string{"mercury", "venus", "mars"}, @@ -1097,7 +1097,7 @@ func TestSearchTenancyGRPCExplicitList(t *testing.T) { } func TestTenancyContextFlowGRPC(t *testing.T) { - tm := tenancy.NewTenancyManager(&tenancy.Options{ + tm := tenancy.NewManager(&tenancy.Options{ Enabled: true, }) withTenantedServerAndClient(t, tm, func(server *grpcServer, client *grpcClient) { diff --git a/cmd/query/app/http_handler.go b/cmd/query/app/http_handler.go index 8abde1b9b74..49b7805a628 100644 --- a/cmd/query/app/http_handler.go +++ b/cmd/query/app/http_handler.go @@ -85,7 +85,7 @@ type APIHandler struct { queryService *querysvc.QueryService metricsQueryService querysvc.MetricsQueryService queryParser queryParser - tenancyMgr *tenancy.TenancyManager + tenancyMgr *tenancy.Manager basePath string apiPrefix string logger *zap.Logger @@ -93,7 +93,7 @@ type APIHandler struct { } // NewAPIHandler returns an APIHandler -func NewAPIHandler(queryService *querysvc.QueryService, tm *tenancy.TenancyManager, options ...HandlerOption) *APIHandler { +func NewAPIHandler(queryService *querysvc.QueryService, tm *tenancy.Manager, options ...HandlerOption) *APIHandler { aH := &APIHandler{ queryService: queryService, queryParser: queryParser{ diff --git a/cmd/query/app/http_handler_test.go b/cmd/query/app/http_handler_test.go index 881b164cf4d..ae6124feffd 100644 --- a/cmd/query/app/http_handler_test.go +++ b/cmd/query/app/http_handler_test.go @@ -93,7 +93,7 @@ type structuredTraceResponse struct { func initializeTestServerWithHandler(queryOptions querysvc.QueryServiceOptions, options ...HandlerOption) *testServer { return initializeTestServerWithOptions( - &tenancy.TenancyManager{}, + &tenancy.Manager{}, queryOptions, append( []HandlerOption{ @@ -108,7 +108,7 @@ func initializeTestServerWithHandler(queryOptions querysvc.QueryServiceOptions, ) } -func initializeTestServerWithOptions(tenancyMgr *tenancy.TenancyManager, queryOptions querysvc.QueryServiceOptions, options ...HandlerOption) *testServer { +func initializeTestServerWithOptions(tenancyMgr *tenancy.Manager, queryOptions querysvc.QueryServiceOptions, options ...HandlerOption) *testServer { readStorage := &spanstoremocks.Reader{} dependencyStorage := &depsmocks.Reader{} qs := querysvc.NewQueryService(readStorage, dependencyStorage, queryOptions) @@ -135,7 +135,7 @@ type testServer struct { } func withTestServer(doTest func(s *testServer), queryOptions querysvc.QueryServiceOptions, options ...HandlerOption) { - ts := initializeTestServerWithOptions(&tenancy.TenancyManager{}, queryOptions, options...) + ts := initializeTestServerWithOptions(&tenancy.Manager{}, queryOptions, options...) defer ts.server.Close() doTest(ts) } @@ -183,7 +183,7 @@ func TestLogOnServerError(t *testing.T) { apiHandlerOptions := []HandlerOption{ HandlerOptions.Logger(zap.New(l)), } - h := NewAPIHandler(qs, &tenancy.TenancyManager{}, apiHandlerOptions...) + h := NewAPIHandler(qs, &tenancy.Manager{}, apiHandlerOptions...) e := errors.New("test error") h.handleError(&testHttp.TestResponseWriter{}, e, http.StatusInternalServerError) require.Equal(t, 1, len(*l.logs)) @@ -404,7 +404,7 @@ func TestSearchByTraceIDSuccess(t *testing.T) { func TestSearchByTraceIDSuccessWithArchive(t *testing.T) { archiveReadMock := &spanstoremocks.Reader{} - ts := initializeTestServerWithOptions(&tenancy.TenancyManager{}, querysvc.QueryServiceOptions{ + ts := initializeTestServerWithOptions(&tenancy.Manager{}, querysvc.QueryServiceOptions{ ArchiveSpanReader: archiveReadMock, }) defer ts.server.Close() @@ -447,7 +447,7 @@ func TestSearchByTraceIDFailure(t *testing.T) { func TestSearchModelConversionFailure(t *testing.T) { ts := initializeTestServerWithOptions( - &tenancy.TenancyManager{}, + &tenancy.Manager{}, querysvc.QueryServiceOptions{ Adjuster: adjuster.Func(func(trace *model.Trace) (*model.Trace, error) { return trace, errAdjustment @@ -886,7 +886,7 @@ func TestSearchTenancyHTTP(t *testing.T) { Enabled: true, } ts := initializeTestServerWithOptions( - tenancy.NewTenancyManager(&tenancyOptions), + tenancy.NewManager(&tenancyOptions), querysvc.QueryServiceOptions{}) defer ts.server.Close() ts.spanReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("model.TraceID")). @@ -913,7 +913,7 @@ func TestSearchTenancyRejectionHTTP(t *testing.T) { Enabled: true, } ts := initializeTestServerWithOptions( - tenancy.NewTenancyManager(&tenancyOptions), + tenancy.NewManager(&tenancyOptions), querysvc.QueryServiceOptions{}) defer ts.server.Close() ts.spanReader.On("GetTrace", mock.AnythingOfType("*context.valueCtx"), mock.AnythingOfType("model.TraceID")). @@ -927,7 +927,7 @@ func TestSearchTenancyRejectionHTTP(t *testing.T) { assert.NoError(t, err) assert.Equal(t, http.StatusUnauthorized, resp.StatusCode) - tm := tenancy.NewTenancyManager(&tenancyOptions) + tm := tenancy.NewManager(&tenancyOptions) req.Header.Set(tm.Header, "acme") resp, err = http.DefaultClient.Do(req) require.NoError(t, err) @@ -940,7 +940,7 @@ func TestSearchTenancyFlowTenantHTTP(t *testing.T) { Enabled: true, } ts := initializeTestServerWithOptions( - tenancy.NewTenancyManager(&tenancyOptions), + tenancy.NewManager(&tenancyOptions), querysvc.QueryServiceOptions{}) defer ts.server.Close() ts.spanReader.On("GetTrace", mock.MatchedBy(func(v interface{}) bool { diff --git a/cmd/query/app/server.go b/cmd/query/app/server.go index 721a0491ead..3e06b2e2538 100644 --- a/cmd/query/app/server.go +++ b/cmd/query/app/server.go @@ -65,7 +65,7 @@ type Server struct { } // NewServer creates and initializes Server -func NewServer(logger *zap.Logger, querySvc *querysvc.QueryService, metricsQuerySvc querysvc.MetricsQueryService, options *QueryOptions, tm *tenancy.TenancyManager, tracer opentracing.Tracer) (*Server, error) { +func NewServer(logger *zap.Logger, querySvc *querysvc.QueryService, metricsQuerySvc querysvc.MetricsQueryService, options *QueryOptions, tm *tenancy.Manager, tracer opentracing.Tracer) (*Server, error) { _, httpPort, err := net.SplitHostPort(options.HTTPHostPort) if err != nil { return nil, err @@ -107,7 +107,7 @@ func (s Server) HealthCheckStatus() chan healthcheck.Status { return s.unavailableChannel } -func createGRPCServer(querySvc *querysvc.QueryService, metricsQuerySvc querysvc.MetricsQueryService, options *QueryOptions, tm *tenancy.TenancyManager, logger *zap.Logger, tracer opentracing.Tracer) (*grpc.Server, error) { +func createGRPCServer(querySvc *querysvc.QueryService, metricsQuerySvc querysvc.MetricsQueryService, options *QueryOptions, tm *tenancy.Manager, logger *zap.Logger, tracer opentracing.Tracer) (*grpc.Server, error) { var grpcOpts []grpc.ServerOption if options.TLSGRPC.Enabled { @@ -151,7 +151,7 @@ func createGRPCServer(querySvc *querysvc.QueryService, metricsQuerySvc querysvc. return server, nil } -func createHTTPServer(querySvc *querysvc.QueryService, metricsQuerySvc querysvc.MetricsQueryService, queryOpts *QueryOptions, tm *tenancy.TenancyManager, tracer opentracing.Tracer, logger *zap.Logger) (*http.Server, context.CancelFunc, error) { +func createHTTPServer(querySvc *querysvc.QueryService, metricsQuerySvc querysvc.MetricsQueryService, queryOpts *QueryOptions, tm *tenancy.Manager, tracer opentracing.Tracer, logger *zap.Logger) (*http.Server, context.CancelFunc, error) { apiHandlerOptions := []HandlerOption{ HandlerOptions.Logger(logger), HandlerOptions.Tracer(tracer), diff --git a/cmd/query/app/server_test.go b/cmd/query/app/server_test.go index f72373d3434..d1d473d57af 100644 --- a/cmd/query/app/server_test.go +++ b/cmd/query/app/server_test.go @@ -69,7 +69,7 @@ func TestCreateTLSServerSinglePortError(t *testing.T) { _, err := NewServer(zap.NewNop(), &querysvc.QueryService{}, nil, &QueryOptions{HTTPHostPort: ":8080", GRPCHostPort: ":8080", TLSGRPC: tlsCfg, TLSHTTP: tlsCfg}, - tenancy.NewTenancyManager(&tenancy.Options{}), opentracing.NoopTracer{}) + tenancy.NewManager(&tenancy.Options{}), opentracing.NoopTracer{}) assert.NotNil(t, err) } @@ -83,7 +83,7 @@ func TestCreateTLSGrpcServerError(t *testing.T) { _, err := NewServer(zap.NewNop(), &querysvc.QueryService{}, nil, &QueryOptions{HTTPHostPort: ":8080", GRPCHostPort: ":8081", TLSGRPC: tlsCfg}, - tenancy.NewTenancyManager(&tenancy.Options{}), opentracing.NoopTracer{}) + tenancy.NewManager(&tenancy.Options{}), opentracing.NoopTracer{}) assert.NotNil(t, err) } @@ -97,7 +97,7 @@ func TestCreateTLSHttpServerError(t *testing.T) { _, err := NewServer(zap.NewNop(), &querysvc.QueryService{}, nil, &QueryOptions{HTTPHostPort: ":8080", GRPCHostPort: ":8081", TLSHTTP: tlsCfg}, - tenancy.NewTenancyManager(&tenancy.Options{}), opentracing.NoopTracer{}) + tenancy.NewManager(&tenancy.Options{}), opentracing.NoopTracer{}) assert.NotNil(t, err) } @@ -339,7 +339,7 @@ func TestServerHTTPTLS(t *testing.T) { querySvc := querysvc.NewQueryService(spanReader, dependencyReader, querysvc.QueryServiceOptions{}) server, err := NewServer(flagsSvc.Logger, querySvc, nil, - serverOptions, tenancy.NewTenancyManager(&tenancy.Options{}), + serverOptions, tenancy.NewManager(&tenancy.Options{}), opentracing.NoopTracer{}) assert.Nil(t, err) assert.NoError(t, server.Start()) @@ -499,7 +499,7 @@ func TestServerGRPCTLS(t *testing.T) { querySvc := querysvc.NewQueryService(spanReader, dependencyReader, querysvc.QueryServiceOptions{}) server, err := NewServer(flagsSvc.Logger, querySvc, nil, - serverOptions, tenancy.NewTenancyManager(&tenancy.Options{}), + serverOptions, tenancy.NewManager(&tenancy.Options{}), opentracing.NoopTracer{}) assert.Nil(t, err) assert.NoError(t, server.Start()) @@ -554,13 +554,13 @@ func TestServerGRPCTLS(t *testing.T) { func TestServerBadHostPort(t *testing.T) { _, err := NewServer(zap.NewNop(), &querysvc.QueryService{}, nil, &QueryOptions{HTTPHostPort: "8080", GRPCHostPort: "127.0.0.1:8081", BearerTokenPropagation: true}, - tenancy.NewTenancyManager(&tenancy.Options{}), + tenancy.NewManager(&tenancy.Options{}), opentracing.NoopTracer{}) assert.NotNil(t, err) _, err = NewServer(zap.NewNop(), &querysvc.QueryService{}, nil, &QueryOptions{HTTPHostPort: "127.0.0.1:8081", GRPCHostPort: "9123", BearerTokenPropagation: true}, - tenancy.NewTenancyManager(&tenancy.Options{}), + tenancy.NewManager(&tenancy.Options{}), opentracing.NoopTracer{}) assert.NotNil(t, err) @@ -591,7 +591,7 @@ func TestServerInUseHostPort(t *testing.T) { GRPCHostPort: tc.grpcHostPort, BearerTokenPropagation: true, }, - tenancy.NewTenancyManager(&tenancy.Options{}), + tenancy.NewManager(&tenancy.Options{}), opentracing.NoopTracer{}, ) assert.NoError(t, err) @@ -621,7 +621,7 @@ func TestServerSinglePort(t *testing.T) { querySvc := querysvc.NewQueryService(spanReader, dependencyReader, querysvc.QueryServiceOptions{}) server, err := NewServer(flagsSvc.Logger, querySvc, nil, &QueryOptions{GRPCHostPort: hostPort, HTTPHostPort: hostPort, BearerTokenPropagation: true}, - tenancy.NewTenancyManager(&tenancy.Options{}), + tenancy.NewManager(&tenancy.Options{}), opentracing.NoopTracer{}) assert.Nil(t, err) assert.NoError(t, server.Start()) @@ -671,7 +671,7 @@ func TestServerGracefulExit(t *testing.T) { tracer := opentracing.NoopTracer{} server, err := NewServer(flagsSvc.Logger, querySvc, nil, &QueryOptions{GRPCHostPort: hostPort, HTTPHostPort: hostPort}, - tenancy.NewTenancyManager(&tenancy.Options{}), tracer) + tenancy.NewManager(&tenancy.Options{}), tracer) assert.Nil(t, err) assert.NoError(t, server.Start()) go func() { @@ -700,7 +700,7 @@ func TestServerHandlesPortZero(t *testing.T) { tracer := opentracing.NoopTracer{} server, err := NewServer(flagsSvc.Logger, querySvc, nil, &QueryOptions{GRPCHostPort: ":0", HTTPHostPort: ":0"}, - tenancy.NewTenancyManager(&tenancy.Options{}), + tenancy.NewManager(&tenancy.Options{}), tracer) assert.Nil(t, err) assert.NoError(t, server.Start()) @@ -751,7 +751,7 @@ func TestServerHTTPTenancy(t *testing.T) { Enabled: true, }, } - tenancyMgr := tenancy.NewTenancyManager(&serverOptions.Tenancy) + tenancyMgr := tenancy.NewManager(&serverOptions.Tenancy) spanReader := &spanstoremocks.Reader{} dependencyReader := &depsmocks.Reader{} diff --git a/cmd/query/main.go b/cmd/query/main.go index bd9b7e49530..51c374637d8 100644 --- a/cmd/query/main.go +++ b/cmd/query/main.go @@ -125,7 +125,7 @@ func main() { spanReader, dependencyReader, *queryServiceOptions) - tm := tenancy.NewTenancyManager(&queryOpts.Tenancy) + tm := tenancy.NewManager(&queryOpts.Tenancy) server, err := app.NewServer(svc.Logger, queryService, metricsQueryService, queryOpts, tm, tracer) if err != nil { logger.Fatal("Failed to create server", zap.Error(err)) diff --git a/cmd/remote-storage/app/server.go b/cmd/remote-storage/app/server.go index 1093517c71d..b7ccbf596da 100644 --- a/cmd/remote-storage/app/server.go +++ b/cmd/remote-storage/app/server.go @@ -43,7 +43,7 @@ type Server struct { } // NewServer creates and initializes Server. -func NewServer(options *Options, storageFactory storage.Factory, tm *tenancy.TenancyManager, logger *zap.Logger) (*Server, error) { +func NewServer(options *Options, storageFactory storage.Factory, tm *tenancy.Manager, logger *zap.Logger) (*Server, error) { handler, err := createGRPCHandler(storageFactory, logger) if err != nil { return nil, err @@ -99,7 +99,7 @@ func (s Server) HealthCheckStatus() chan healthcheck.Status { return s.unavailableChannel } -func createGRPCServer(opts *Options, tm *tenancy.TenancyManager, handler *shared.GRPCHandler, logger *zap.Logger) (*grpc.Server, error) { +func createGRPCServer(opts *Options, tm *tenancy.Manager, handler *shared.GRPCHandler, logger *zap.Logger) (*grpc.Server, error) { var grpcOpts []grpc.ServerOption if opts.TLSGRPC.Enabled { diff --git a/cmd/remote-storage/app/server_test.go b/cmd/remote-storage/app/server_test.go index 4a6f43ad0e3..613f09cf26e 100644 --- a/cmd/remote-storage/app/server_test.go +++ b/cmd/remote-storage/app/server_test.go @@ -57,7 +57,7 @@ func TestNewServer_CreateStorageErrors(t *testing.T) { return NewServer( &Options{GRPCHostPort: ":0"}, factory, - tenancy.NewTenancyManager(&tenancy.Options{}), + tenancy.NewManager(&tenancy.Options{}), zap.NewNop(), ) } @@ -128,7 +128,7 @@ func TestNewServer_TLSConfigError(t *testing.T) { _, err := NewServer( &Options{GRPCHostPort: ":8081", TLSGRPC: tlsCfg}, storageMocks.factory, - tenancy.NewTenancyManager(&tenancy.Options{}), + tenancy.NewManager(&tenancy.Options{}), zap.NewNop(), ) require.Error(t, err) @@ -293,7 +293,7 @@ type grpcClient struct { conn *grpc.ClientConn } -func newGRPCClient(t *testing.T, addr string, creds credentials.TransportCredentials, tm *tenancy.TenancyManager) *grpcClient { +func newGRPCClient(t *testing.T, addr string, creds credentials.TransportCredentials, tm *tenancy.Manager) *grpcClient { ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) defer cancel() @@ -329,7 +329,7 @@ func TestServerGRPCTLS(t *testing.T) { expectedServices := []string{"test"} storageMocks.reader.On("GetServices", mock.AnythingOfType("*context.valueCtx")).Return(expectedServices, nil) - tm := tenancy.NewTenancyManager(&tenancy.Options{Enabled: true}) + tm := tenancy.NewManager(&tenancy.Options{Enabled: true}) server, err := NewServer( serverOptions, storageMocks.factory, @@ -393,7 +393,7 @@ func TestServerHandlesPortZero(t *testing.T) { server, err := NewServer( &Options{GRPCHostPort: ":0"}, storageMocks.factory, - tenancy.NewTenancyManager(&tenancy.Options{}), + tenancy.NewManager(&tenancy.Options{}), flagsSvc.Logger, ) require.Nil(t, err) diff --git a/cmd/remote-storage/main.go b/cmd/remote-storage/main.go index 6a9d797a307..a020504d72d 100644 --- a/cmd/remote-storage/main.go +++ b/cmd/remote-storage/main.go @@ -75,7 +75,7 @@ func main() { logger.Fatal("Failed to init storage factory", zap.Error(err)) } - tm := tenancy.NewTenancyManager(&opts.Tenancy) + tm := tenancy.NewManager(&opts.Tenancy) server, err := app.NewServer(opts, storageFactory, tm, svc.Logger) if err != nil { logger.Fatal("Failed to create server", zap.Error(err)) diff --git a/pkg/tenancy/config_test.go b/pkg/tenancy/manage_test.go similarity index 100% rename from pkg/tenancy/config_test.go rename to pkg/tenancy/manage_test.go diff --git a/pkg/tenancy/config.go b/pkg/tenancy/manager.go similarity index 100% rename from pkg/tenancy/config.go rename to pkg/tenancy/manager.go index 5277ead9b93..4c5ab17d3c3 100644 --- a/pkg/tenancy/config.go +++ b/pkg/tenancy/manager.go @@ -14,6 +14,13 @@ package tenancy +// Options describes the configuration properties for multitenancy +type Options struct { + Enabled bool + Header string + Tenants []string +} + // TenancyManager can check tenant usage for multi-tenant Jaeger configurations type TenancyManager struct { Enabled bool @@ -26,13 +33,6 @@ type guard interface { Valid(candidate string) bool } -// Options describes the configuration properties for multitenancy -type Options struct { - Enabled bool - Header string - Tenants []string -} - // NewTenancyManager creates a TenancyManager from tenancy Options func NewTenancyManager(options *Options) *TenancyManager { // Default header value (although set by CLI flags, this helps tests and API users) From ae5b7e42c8096a80e2073cdc3c1f6f122d007628 Mon Sep 17 00:00:00 2001 From: Yuri Shkuro Date: Tue, 2 Aug 2022 10:46:49 -0400 Subject: [PATCH 2/2] fix Signed-off-by: Yuri Shkuro --- pkg/tenancy/grpc.go | 8 ++++---- pkg/tenancy/grpc_test.go | 18 +++++++++--------- pkg/tenancy/http.go | 4 ++-- pkg/tenancy/http_test.go | 16 ++++++++-------- pkg/tenancy/manage_test.go | 2 +- pkg/tenancy/manager.go | 12 ++++++------ 6 files changed, 30 insertions(+), 30 deletions(-) diff --git a/pkg/tenancy/grpc.go b/pkg/tenancy/grpc.go index 468101fa2a9..1bcf4705ed7 100644 --- a/pkg/tenancy/grpc.go +++ b/pkg/tenancy/grpc.go @@ -33,7 +33,7 @@ func (tss *tenantedServerStream) Context() context.Context { return tss.context } -func getValidTenant(ctx context.Context, tc *TenancyManager) (string, error) { +func getValidTenant(ctx context.Context, tc *Manager) (string, error) { // Handle case where tenant is already directly in the context tenant := GetTenant(ctx) if tenant != "" { @@ -67,7 +67,7 @@ func directlyAttachedTenant(ctx context.Context) bool { // NewGuardingStreamInterceptor blocks handling of streams whose tenancy header doesn't meet tenancy requirements. // It also ensures the tenant is directly in the context, rather than context metadata. -func NewGuardingStreamInterceptor(tc *TenancyManager) grpc.StreamServerInterceptor { +func NewGuardingStreamInterceptor(tc *Manager) grpc.StreamServerInterceptor { return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { tenant, err := getValidTenant(ss.Context(), tc) if err != nil { @@ -99,7 +99,7 @@ func tenantFromMetadata(md metadata.MD, tenancyHeader string) (string, error) { // NewGuardingUnaryInterceptor blocks handling of RPCs whose tenancy header doesn't meet tenancy requirements. // It also ensures the tenant is directly in the context, rather than context metadata. -func NewGuardingUnaryInterceptor(tc *TenancyManager) grpc.UnaryServerInterceptor { +func NewGuardingUnaryInterceptor(tc *Manager) grpc.UnaryServerInterceptor { return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { tenant, err := getValidTenant(ctx, tc) if err != nil { @@ -115,7 +115,7 @@ func NewGuardingUnaryInterceptor(tc *TenancyManager) grpc.UnaryServerInterceptor } // NewClientUnaryInterceptor injects tenant header into gRPC request metadata. -func NewClientUnaryInterceptor(tc *TenancyManager) grpc.UnaryClientInterceptor { +func NewClientUnaryInterceptor(tc *Manager) grpc.UnaryClientInterceptor { return grpc.UnaryClientInterceptor(func( ctx context.Context, method string, diff --git a/pkg/tenancy/grpc_test.go b/pkg/tenancy/grpc_test.go index 94e68dbbb74..d2fb69622ce 100644 --- a/pkg/tenancy/grpc_test.go +++ b/pkg/tenancy/grpc_test.go @@ -28,49 +28,49 @@ import ( func TestTenancyInterceptors(t *testing.T) { tests := []struct { name string - tenancyMgr *TenancyManager + tenancyMgr *Manager ctx context.Context errMsg string }{ { name: "missing tenant context", - tenancyMgr: NewTenancyManager(&Options{Enabled: true}), + tenancyMgr: NewManager(&Options{Enabled: true}), ctx: context.Background(), errMsg: "rpc error: code = PermissionDenied desc = missing tenant header", }, { name: "invalid tenant context", - tenancyMgr: NewTenancyManager(&Options{Enabled: true, Tenants: []string{"megacorp"}}), + tenancyMgr: NewManager(&Options{Enabled: true, Tenants: []string{"megacorp"}}), ctx: WithTenant(context.Background(), "acme"), errMsg: "rpc error: code = PermissionDenied desc = unknown tenant", }, { name: "valid tenant context", - tenancyMgr: NewTenancyManager(&Options{Enabled: true, Tenants: []string{"acme"}}), + tenancyMgr: NewManager(&Options{Enabled: true, Tenants: []string{"acme"}}), ctx: WithTenant(context.Background(), "acme"), errMsg: "", }, { name: "invalid tenant header", - tenancyMgr: NewTenancyManager(&Options{Enabled: true, Tenants: []string{"megacorp"}}), + tenancyMgr: NewManager(&Options{Enabled: true, Tenants: []string{"megacorp"}}), ctx: metadata.NewIncomingContext(context.Background(), map[string][]string{"x-tenant": {"acme"}}), errMsg: "rpc error: code = PermissionDenied desc = unknown tenant", }, { name: "missing tenant header", - tenancyMgr: NewTenancyManager(&Options{Enabled: true, Tenants: []string{"megacorp"}}), + tenancyMgr: NewManager(&Options{Enabled: true, Tenants: []string{"megacorp"}}), ctx: metadata.NewIncomingContext(context.Background(), map[string][]string{}), errMsg: "rpc error: code = PermissionDenied desc = missing tenant header", }, { name: "valid tenant header", - tenancyMgr: NewTenancyManager(&Options{Enabled: true, Tenants: []string{"acme"}}), + tenancyMgr: NewManager(&Options{Enabled: true, Tenants: []string{"acme"}}), ctx: metadata.NewIncomingContext(context.Background(), map[string][]string{"x-tenant": {"acme"}}), errMsg: "", }, { name: "extra tenant header", - tenancyMgr: NewTenancyManager(&Options{Enabled: true, Tenants: []string{"acme"}}), + tenancyMgr: NewManager(&Options{Enabled: true, Tenants: []string{"acme"}}), ctx: metadata.NewIncomingContext(context.Background(), map[string][]string{"x-tenant": {"acme", "megacorp"}}), errMsg: "rpc error: code = PermissionDenied desc = extra tenant header", }, @@ -114,7 +114,7 @@ func TestTenancyInterceptors(t *testing.T) { } func TestClientUnaryInterceptor(t *testing.T) { - tm := NewTenancyManager(&Options{Enabled: true, Tenants: []string{"acme"}}) + tm := NewManager(&Options{Enabled: true, Tenants: []string{"acme"}}) interceptor := NewClientUnaryInterceptor(tm) var tenant string fakeErr := errors.New("foo") diff --git a/pkg/tenancy/http.go b/pkg/tenancy/http.go index 156fb45d400..0884a7d41ed 100644 --- a/pkg/tenancy/http.go +++ b/pkg/tenancy/http.go @@ -24,7 +24,7 @@ import ( // PropagationHandler returns a http.Handler containing the logic to extract // the tenancy header of the http.Request and insert the tenant into request.Context // for propagation. The token can be accessed via tenancy.GetTenant(). -func ExtractTenantHTTPHandler(tc *TenancyManager, h http.Handler) http.Handler { +func ExtractTenantHTTPHandler(tc *Manager, h http.Handler) http.Handler { if !tc.Enabled { return h } @@ -50,7 +50,7 @@ func ExtractTenantHTTPHandler(tc *TenancyManager, h http.Handler) http.Handler { // MetadataAnnotator returns a function suitable for propagating tenancy // via github.com/grpc-ecosystem/grpc-gateway/runtime.NewServeMux -func (tc *TenancyManager) MetadataAnnotator() func(context.Context, *http.Request) metadata.MD { +func (tc *Manager) MetadataAnnotator() func(context.Context, *http.Request) metadata.MD { return func(ctx context.Context, req *http.Request) metadata.MD { tenant := req.Header.Get(tc.Header) if tenant == "" { diff --git a/pkg/tenancy/http_test.go b/pkg/tenancy/http_test.go index db0ba9191ca..c4ee53a53d0 100644 --- a/pkg/tenancy/http_test.go +++ b/pkg/tenancy/http_test.go @@ -36,31 +36,31 @@ func (thh *testHttpHandler) ServeHTTP(res http.ResponseWriter, req *http.Request func TestProgationHandler(t *testing.T) { tests := []struct { name string - tenancyMgr *TenancyManager + tenancyMgr *Manager shouldReach bool requestHeaders map[string][]string }{ { name: "untenanted", - tenancyMgr: NewTenancyManager(&Options{}), + tenancyMgr: NewManager(&Options{}), requestHeaders: map[string][]string{}, shouldReach: true, }, { name: "missing tenant header", - tenancyMgr: NewTenancyManager(&Options{Enabled: true}), + tenancyMgr: NewManager(&Options{Enabled: true}), requestHeaders: map[string][]string{}, shouldReach: false, }, { name: "valid tenant header", - tenancyMgr: NewTenancyManager(&Options{Enabled: true}), + tenancyMgr: NewManager(&Options{Enabled: true}), requestHeaders: map[string][]string{"x-tenant": {"acme"}}, shouldReach: true, }, { name: "unauthorized tenant", - tenancyMgr: NewTenancyManager(&Options{Enabled: true, Tenants: []string{"megacorp"}}), + tenancyMgr: NewManager(&Options{Enabled: true, Tenants: []string{"megacorp"}}), requestHeaders: map[string][]string{"x-tenant": {"acme"}}, shouldReach: false, }, @@ -87,17 +87,17 @@ func TestProgationHandler(t *testing.T) { func TestMetadataAnnotator(t *testing.T) { tests := []struct { name string - tenancyMgr *TenancyManager + tenancyMgr *Manager requestHeaders map[string][]string }{ { name: "missing tenant", - tenancyMgr: NewTenancyManager(&Options{Enabled: true}), + tenancyMgr: NewManager(&Options{Enabled: true}), requestHeaders: map[string][]string{}, }, { name: "tenanted", - tenancyMgr: NewTenancyManager(&Options{Enabled: true}), + tenancyMgr: NewManager(&Options{Enabled: true}), requestHeaders: map[string][]string{"x-tenant": {"acme"}}, }, } diff --git a/pkg/tenancy/manage_test.go b/pkg/tenancy/manage_test.go index a38067dc39e..c3e926b908e 100644 --- a/pkg/tenancy/manage_test.go +++ b/pkg/tenancy/manage_test.go @@ -84,7 +84,7 @@ func TestTenancyValidity(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - tc := NewTenancyManager(&test.options) + tc := NewManager(&test.options) assert.Equal(t, test.valid, tc.Valid(test.tenant)) }) } diff --git a/pkg/tenancy/manager.go b/pkg/tenancy/manager.go index 4c5ab17d3c3..9f6addf1471 100644 --- a/pkg/tenancy/manager.go +++ b/pkg/tenancy/manager.go @@ -21,8 +21,8 @@ type Options struct { Tenants []string } -// TenancyManager can check tenant usage for multi-tenant Jaeger configurations -type TenancyManager struct { +// Manager can check tenant usage for multi-tenant Jaeger configurations +type Manager struct { Enabled bool Header string guard guard @@ -33,21 +33,21 @@ type guard interface { Valid(candidate string) bool } -// NewTenancyManager creates a TenancyManager from tenancy Options -func NewTenancyManager(options *Options) *TenancyManager { +// NewManager creates a tenancy.Manager for given tenancy.Options. +func NewManager(options *Options) *Manager { // Default header value (although set by CLI flags, this helps tests and API users) header := options.Header if header == "" && options.Enabled { header = "x-tenant" } - return &TenancyManager{ + return &Manager{ Enabled: options.Enabled, Header: header, guard: tenancyGuardFactory(options), } } -func (tc *TenancyManager) Valid(tenant string) bool { +func (tc *Manager) Valid(tenant string) bool { return tc.guard.Valid(tenant) }