From a0fa7c2a92ba12de064613dc50e2a37980508f46 Mon Sep 17 00:00:00 2001 From: Mike Goldsmth Date: Thu, 25 Mar 2021 15:55:57 +0000 Subject: [PATCH 1/2] add metrics qualifiers for structs that inject metrics --- app/app.go | 2 +- app/app_test.go | 2 +- collect/collect.go | 2 +- route/route.go | 2 +- sample/sample.go | 2 +- transmit/transmit.go | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/app.go b/app/app.go index d6731d14e3..3109a1ba60 100644 --- a/app/app.go +++ b/app/app.go @@ -14,7 +14,7 @@ type App struct { IncomingRouter route.Router `inject:"inline"` PeerRouter route.Router `inject:"inline"` Collector collect.Collector `inject:""` - Metrics metrics.Metrics `inject:""` + Metrics metrics.Metrics `inject:"metrics"` // Version is the build ID for Refinery so that the running process may answer // requests for the version diff --git a/app/app_test.go b/app/app_test.go index eb89bb6ac2..e6cd45ae51 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -185,7 +185,7 @@ func newStartedApp( &inject.Object{Value: &transmit.DefaultTransmission{LibhClient: peerClient, Name: "peer_"}, Name: "peerTransmission"}, &inject.Object{Value: shrdr}, &inject.Object{Value: collector}, - &inject.Object{Value: metricsr}, + &inject.Object{Value: metricsr, Name: "metrics"}, &inject.Object{Value: "test", Name: "version"}, &inject.Object{Value: samplerFactory}, &inject.Object{Value: &a}, diff --git a/collect/collect.go b/collect/collect.go index 503fbc4401..b4cffd3e52 100644 --- a/collect/collect.go +++ b/collect/collect.go @@ -51,7 +51,7 @@ type InMemCollector struct { Config config.Config `inject:""` Logger logger.Logger `inject:""` Transmission transmit.Transmission `inject:"upstreamTransmission"` - Metrics metrics.Metrics `inject:""` + Metrics metrics.Metrics `inject:"metrics"` SamplerFactory *sample.SamplerFactory `inject:""` // For test use only diff --git a/route/route.go b/route/route.go index df79743fd8..05630cc201 100644 --- a/route/route.go +++ b/route/route.go @@ -62,7 +62,7 @@ type Router struct { PeerTransmission transmit.Transmission `inject:"peerTransmission"` Sharder sharder.Sharder `inject:""` Collector collect.Collector `inject:""` - Metrics metrics.Metrics `inject:""` + Metrics metrics.Metrics `inject:"metrics"` // version is set on startup so that the router may answer HTTP requests for // the version diff --git a/sample/sample.go b/sample/sample.go index f312162f4c..9fb4539cfb 100644 --- a/sample/sample.go +++ b/sample/sample.go @@ -17,7 +17,7 @@ type Sampler interface { type SamplerFactory struct { Config config.Config `inject:""` Logger logger.Logger `inject:""` - Metrics metrics.Metrics `inject:""` + Metrics metrics.Metrics `inject:"metrics"` } // GetSamplerImplementationForDataset returns the sampler implementation for the dataset, diff --git a/transmit/transmit.go b/transmit/transmit.go index ab811ed1e0..aa4f7667f7 100644 --- a/transmit/transmit.go +++ b/transmit/transmit.go @@ -31,7 +31,7 @@ const ( type DefaultTransmission struct { Config config.Config `inject:""` Logger logger.Logger `inject:""` - Metrics metrics.Metrics `inject:""` + Metrics metrics.Metrics `inject:"metrics"` Version string `inject:"version"` LibhClient *libhoney.Client From b25ad60f7074f66f98c7080b5d7c9df363ec2cf9 Mon Sep 17 00:00:00 2001 From: Mike Goldsmth Date: Thu, 25 Mar 2021 16:55:24 +0000 Subject: [PATCH 2/2] add tests for verifying named metrics dependencies --- collect/collect_test.go | 19 +++++++++++++++++++ route/route_test.go | 39 ++++++++++++++++++++++++++++++++------- sample/sample_test.go | 26 ++++++++++++++++++++++++++ transmit/transmit_test.go | 19 +++++++++++++++++++ 4 files changed, 96 insertions(+), 7 deletions(-) diff --git a/collect/collect_test.go b/collect/collect_test.go index bda6a84313..2d912d1056 100644 --- a/collect/collect_test.go +++ b/collect/collect_test.go @@ -8,6 +8,7 @@ import ( "testing" "time" + "github.com/facebookgo/inject" lru "github.com/hashicorp/golang-lru" "github.com/stretchr/testify/assert" @@ -569,3 +570,21 @@ func TestAddSpanNoBlock(t *testing.T) { err = coll.AddSpanFromPeer(span) assert.Error(t, err) } + +func TestDependencyInjection(t *testing.T) { + var g inject.Graph + err := g.Provide( + &inject.Object{Value: &InMemCollector{}}, + &inject.Object{Value: &config.MockConfig{}}, + &inject.Object{Value: &logger.NullLogger{}}, + &inject.Object{Value: &transmit.MockTransmission{}, Name: "upstreamTransmission"}, + &inject.Object{Value: &metrics.NullMetrics{}, Name: "metrics"}, + &inject.Object{Value: &sample.SamplerFactory{}}, + ) + if err != nil { + t.Error(err) + } + if err := g.Populate(); err != nil { + t.Error(err) + } +} diff --git a/route/route_test.go b/route/route_test.go index 47c43bf6ff..8cb5bebf1f 100644 --- a/route/route_test.go +++ b/route/route_test.go @@ -7,13 +7,6 @@ import ( "compress/gzip" "context" "fmt" - "github.com/honeycombio/refinery/config" - collectortrace "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/collector/trace/v1" - common "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/common/v1" - trace "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/trace/v1" - "github.com/honeycombio/refinery/logger" - "github.com/honeycombio/refinery/metrics" - "github.com/honeycombio/refinery/transmit" "io" "io/ioutil" "math" @@ -23,6 +16,16 @@ import ( "testing" "time" + "github.com/facebookgo/inject" + "github.com/honeycombio/refinery/collect" + "github.com/honeycombio/refinery/config" + collectortrace "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/collector/trace/v1" + common "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/common/v1" + trace "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/trace/v1" + "github.com/honeycombio/refinery/logger" + "github.com/honeycombio/refinery/metrics" + "github.com/honeycombio/refinery/transmit" + "github.com/gorilla/mux" "github.com/honeycombio/refinery/sharder" "github.com/klauspost/compress/zstd" @@ -441,6 +444,28 @@ func TestOTLPHandler(t *testing.T) { }) } +func TestDependencyInjection(t *testing.T) { + var g inject.Graph + err := g.Provide( + &inject.Object{Value: &Router{}}, + + &inject.Object{Value: &config.MockConfig{}}, + &inject.Object{Value: &logger.NullLogger{}}, + &inject.Object{Value: http.DefaultTransport, Name: "upstreamTransport"}, + &inject.Object{Value: &transmit.MockTransmission{}, Name: "upstreamTransmission"}, + &inject.Object{Value: &transmit.MockTransmission{}, Name: "peerTransmission"}, + &inject.Object{Value: &TestSharder{}}, + &inject.Object{Value: &collect.InMemCollector{}}, + &inject.Object{Value: &metrics.NullMetrics{}, Name: "metrics"}, + ) + if err != nil { + t.Error(err) + } + if err := g.Populate(); err != nil { + t.Error(err) + } +} + func helperOTLPRequestSpansWithoutStatus() []*trace.Span { now := time.Now() return []*trace.Span{ diff --git a/sample/sample_test.go b/sample/sample_test.go index 184c9dc239..53fad51b40 100644 --- a/sample/sample_test.go +++ b/sample/sample_test.go @@ -1,3 +1,29 @@ // +build all race package sample + +import ( + "testing" + + "github.com/facebookgo/inject" + "github.com/honeycombio/refinery/config" + "github.com/honeycombio/refinery/logger" + "github.com/honeycombio/refinery/metrics" +) + +func TestDependencyInjection(t *testing.T) { + var g inject.Graph + err := g.Provide( + &inject.Object{Value: &SamplerFactory{}}, + + &inject.Object{Value: &config.MockConfig{}}, + &inject.Object{Value: &logger.NullLogger{}}, + &inject.Object{Value: &metrics.NullMetrics{}, Name: "metrics"}, + ) + if err != nil { + t.Error(err) + } + if err := g.Populate(); err != nil { + t.Error(err) + } +} diff --git a/transmit/transmit_test.go b/transmit/transmit_test.go index 3d35fc2303..efb0a954b0 100644 --- a/transmit/transmit_test.go +++ b/transmit/transmit_test.go @@ -5,6 +5,7 @@ package transmit import ( "testing" + "github.com/facebookgo/inject" "github.com/honeycombio/refinery/config" "github.com/honeycombio/refinery/logger" "github.com/honeycombio/refinery/metrics" @@ -27,3 +28,21 @@ func TestDefaultTransmissionUpdatesUserAgentAdditionAfterStart(t *testing.T) { assert.Nil(t, err) assert.Equal(t, libhoney.UserAgentAddition, "refinery/test") } + +func TestDependencyInjection(t *testing.T) { + var g inject.Graph + err := g.Provide( + &inject.Object{Value: &DefaultTransmission{}}, + + &inject.Object{Value: &config.MockConfig{}}, + &inject.Object{Value: &logger.NullLogger{}}, + &inject.Object{Value: &metrics.NullMetrics{}, Name: "metrics"}, + &inject.Object{Value: "test", Name: "version"}, + ) + if err != nil { + t.Error(err) + } + if err := g.Populate(); err != nil { + t.Error(err) + } +}