diff --git a/internal/checks/checks_test.go b/internal/checks/checks_test.go index b88741013..0aca7e8f2 100644 --- a/internal/checks/checks_test.go +++ b/internal/checks/checks_test.go @@ -43,7 +43,7 @@ func TestNewUpdater(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), Features: testFeatureCollection, }, }, @@ -168,7 +168,7 @@ func TestHandleCheckOp(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(publishCh), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), ScraperFactory: testScraperFactory, }, ) @@ -285,7 +285,7 @@ func TestCheckHandlerProbeValidation(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), K6Runner: noopRunner{}, }, probe: sm.Probe{Id: 100, Name: "test-probe", Capabilities: &sm.Probe_Capabilities{ @@ -300,7 +300,7 @@ func TestCheckHandlerProbeValidation(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), }, probe: sm.Probe{Id: 100, Name: "test-probe", Capabilities: &sm.Probe_Capabilities{ DisableScriptedChecks: false, @@ -314,7 +314,7 @@ func TestCheckHandlerProbeValidation(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), K6Runner: noopRunner{}, }, probe: sm.Probe{Id: 100, Name: "test-probe", Capabilities: &sm.Probe_Capabilities{ @@ -329,7 +329,7 @@ func TestCheckHandlerProbeValidation(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), }, probe: sm.Probe{Id: 100, Name: "test-probe", Capabilities: &sm.Probe_Capabilities{ DisableScriptedChecks: true, @@ -343,7 +343,7 @@ func TestCheckHandlerProbeValidation(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), K6Runner: noopRunner{}, }, probe: sm.Probe{Id: 100, Name: "test-probe", Capabilities: &sm.Probe_Capabilities{ @@ -358,7 +358,7 @@ func TestCheckHandlerProbeValidation(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), }, probe: sm.Probe{Id: 100, Name: "test-probe", Capabilities: &sm.Probe_Capabilities{ DisableScriptedChecks: false, @@ -372,7 +372,7 @@ func TestCheckHandlerProbeValidation(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), K6Runner: noopRunner{}, }, probe: sm.Probe{Id: 100, Name: "test-probe", Capabilities: &sm.Probe_Capabilities{ @@ -387,7 +387,7 @@ func TestCheckHandlerProbeValidation(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), }, probe: sm.Probe{Id: 100, Name: "test-probe", Capabilities: &sm.Probe_Capabilities{ DisableScriptedChecks: true, @@ -401,7 +401,7 @@ func TestCheckHandlerProbeValidation(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), }, probe: sm.Probe{Id: 100, Name: "test-probe"}, }, @@ -412,7 +412,7 @@ func TestCheckHandlerProbeValidation(t *testing.T) { PromRegisterer: prometheus.NewPedanticRegistry(), Publisher: channelPublisher(make(chan pusher.Payload)), TenantCh: make(chan<- sm.Tenant), - Logger: zerolog.Nop(), + Logger: testhelper.Logger(t), K6Runner: noopRunner{}, }, probe: sm.Probe{Id: 100, Name: "test-probe"}, @@ -524,7 +524,7 @@ func TestHandleError(t *testing.T) { ctx, cancel := testhelper.Context(context.Background(), t) defer cancel() - logger := zerolog.Nop() + logger := testhelper.Logger(t) t.Run("no error", func(t *testing.T) { backoff := testBackoff(1) diff --git a/internal/k6runner/http_test.go b/internal/k6runner/http_test.go index e99d6c8c2..15d762285 100644 --- a/internal/k6runner/http_test.go +++ b/internal/k6runner/http_test.go @@ -319,7 +319,7 @@ func TestScriptHTTPRun(t *testing.T) { registry = prometheus.NewRegistry() logBuf = bytes.Buffer{} logger = recordingLogger{buf: &logBuf} - zlogger = zerolog.Nop() + zlogger = testhelper.Logger(t) ) success, err := script.Run(ctx, registry, logger, zlogger, SecretStore{}) diff --git a/internal/prober/multihttp/script_test.go b/internal/prober/multihttp/script_test.go index bde0c300b..d0d7e355c 100644 --- a/internal/prober/multihttp/script_test.go +++ b/internal/prober/multihttp/script_test.go @@ -5,8 +5,6 @@ import ( "context" "net/http" "net/http/httptest" - "path/filepath" - "runtime" "strings" "testing" @@ -18,7 +16,6 @@ import ( sm "github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring" "github.com/mccutchen/go-httpbin/v2/httpbin" "github.com/prometheus/client_golang/prometheus" - "github.com/rs/zerolog" "github.com/stretchr/testify/require" ) @@ -851,13 +848,12 @@ func TestSettingsToScript(t *testing.T) { ctx, cancel := testhelper.Context(context.Background(), t) t.Cleanup(cancel) - // logger := zerolog.New(zerolog.NewTestWriter(t)) - logger := zerolog.Nop() - k6path := filepath.Join(testhelper.ModuleDir(t), "dist", runtime.GOOS+"-"+runtime.GOARCH, "sm-k6") - t.Log(k6path) + + k6path := testhelper.K6Path(t) runner := k6runner.New(k6runner.RunnerOpts{Uri: k6path}) store := noopSecretStore{} + logger := testhelper.Logger(t) prober, err := NewProber(ctx, check, logger, runner, http.Header{}, &store) require.NoError(t, err) diff --git a/internal/scraper/scraper_test.go b/internal/scraper/scraper_test.go index bdf9f844e..ac29c1e91 100644 --- a/internal/scraper/scraper_test.go +++ b/internal/scraper/scraper_test.go @@ -960,7 +960,7 @@ func TestValidateLabels(t *testing.T) { s := Scraper{ checkName: "check name", target: check.Target, - logger: zerolog.Nop(), + logger: testhelper.Logger(t), prober: prober, labelsLimiter: testLabelsLimiter{ maxMetricLabels: 100, @@ -1569,7 +1569,7 @@ func TestScraperCollectData(t *testing.T) { s := Scraper{ checkName: checkName, target: "test target", - logger: zerolog.Nop(), + logger: testhelper.Logger(t), prober: testProber{}, labelsLimiter: testLabelsLimiter{ maxMetricLabels: tc.maxMetricLabels, diff --git a/internal/secrets/tenant_test.go b/internal/secrets/tenant_test.go index 16c827552..0307b77e1 100644 --- a/internal/secrets/tenant_test.go +++ b/internal/secrets/tenant_test.go @@ -5,9 +5,8 @@ import ( "errors" "testing" - "github.com/rs/zerolog" - "github.com/grafana/synthetic-monitoring-agent/internal/model" + "github.com/grafana/synthetic-monitoring-agent/internal/testhelper" sm "github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring" "github.com/stretchr/testify/assert" ) @@ -25,7 +24,7 @@ func TestGetSecretCredentials_Success(t *testing.T) { mockSecretStore := &sm.SecretStore{} mockTenant := sm.Tenant{SecretStore: mockSecretStore} mockTenantProvider := &tenantProvider{tenant: mockTenant} - ts := NewTenantSecrets(mockTenantProvider, zerolog.Nop()) + ts := NewTenantSecrets(mockTenantProvider, testhelper.Logger(t)) ctx := context.Background() tenantID := model.GlobalID(1234) @@ -38,7 +37,7 @@ func TestGetSecretCredentials_Success(t *testing.T) { func TestGetSecretCredentials_Error(t *testing.T) { getTenantErr := errors.New("tenant not found") mockTenantProvider := &tenantProvider{err: getTenantErr} - ts := NewTenantSecrets(mockTenantProvider, zerolog.Nop()) + ts := NewTenantSecrets(mockTenantProvider, testhelper.Logger(t)) ctx := context.Background() tenantID := model.GlobalID(1234) diff --git a/internal/telemetry/region_pusher_test.go b/internal/telemetry/region_pusher_test.go index deaa01593..fee73d631 100644 --- a/internal/telemetry/region_pusher_test.go +++ b/internal/telemetry/region_pusher_test.go @@ -8,11 +8,11 @@ import ( "testing" "time" + "github.com/grafana/synthetic-monitoring-agent/internal/testhelper" sm "github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring" prom "github.com/prometheus/client_golang/prometheus" prommodel "github.com/prometheus/client_model/go" - "github.com/rs/zerolog" "github.com/stretchr/testify/require" "google.golang.org/grpc" ) @@ -228,7 +228,7 @@ func TestTenantPusher(t *testing.T) { t.Run("should send telemetry data once", func(t *testing.T) { t.Parallel() - td, tc, pusher, _ := setupTest(context.Background()) + td, tc, pusher, _ := setupTest(t) t.Cleanup(td.shutdownAndWait) @@ -248,7 +248,7 @@ func TestTenantPusher(t *testing.T) { t.Run("should retry sending data once", func(t *testing.T) { t.Parallel() - td, tc, pusher, _ := setupTest(context.Background()) + td, tc, pusher, _ := setupTest(t) t.Cleanup(td.shutdownAndWait) @@ -269,7 +269,7 @@ func TestTenantPusher(t *testing.T) { t.Run("should retry and send more data", func(t *testing.T) { t.Parallel() - td, tc, pusher, _ := setupTest(context.Background()) + td, tc, pusher, _ := setupTest(t) t.Cleanup(td.shutdownAndWait) @@ -297,7 +297,7 @@ func TestTenantPusher(t *testing.T) { t.Run("should push on context done", func(t *testing.T) { t.Parallel() - td, tc, pusher, _ := setupTest(context.Background()) + td, tc, pusher, _ := setupTest(t) // Add some executions addExecutions(pusher, getTestDataset(0).executions) @@ -326,7 +326,7 @@ func TestTenantPusher(t *testing.T) { t.Run("should report push error", func(t *testing.T) { t.Parallel() - td, tc, pusher, metrics := setupTest(context.Background()) + td, tc, pusher, metrics := setupTest(t) t.Cleanup(td.shutdownAndWait) @@ -350,7 +350,7 @@ func TestTenantPusher(t *testing.T) { t.Run("should report push error on unexpected status", func(t *testing.T) { t.Parallel() - td, tc, pusher, metrics := setupTest(context.Background()) + td, tc, pusher, metrics := setupTest(t) t.Cleanup(td.shutdownAndWait) @@ -390,14 +390,14 @@ type testPushResp struct { err error } -func setupTest(ctx context.Context) (*testDriver, *testTelemetryClient, *RegionPusher, RegionMetrics) { +func setupTest(t *testing.T) (*testDriver, *testTelemetryClient, *RegionPusher, RegionMetrics) { var ( wg = &sync.WaitGroup{} - testCtx, cancel = context.WithCancel(ctx) + testCtx, cancel = context.WithCancel(t.Context()) ticker = &testTicker{c: make(chan time.Time)} td = testDriver{wg: wg, cancel: cancel, ticker: ticker} tc = &testTelemetryClient{wg: wg} - logger = zerolog.Nop() + logger = testhelper.Logger(t) metrics = RegionMetrics{ pushRequestsActive: prom.NewGauge(prom.GaugeOpts{}), pushRequestsDuration: prom.NewHistogram(prom.HistogramOpts{}), @@ -408,6 +408,8 @@ func setupTest(ctx context.Context) (*testDriver, *testTelemetryClient, *RegionP opt withTicker = ticker ) + t.Cleanup(cancel) + pusher := NewRegionPusher(testCtx, 1*time.Second, tc, logger, instance, regionID, metrics, opt) return &td, tc, pusher, metrics diff --git a/internal/telemetry/telemeter_test.go b/internal/telemetry/telemeter_test.go index edeaef991..160e251c0 100644 --- a/internal/telemetry/telemeter_test.go +++ b/internal/telemetry/telemeter_test.go @@ -5,9 +5,9 @@ import ( "testing" "time" + "github.com/grafana/synthetic-monitoring-agent/internal/testhelper" sm "github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring" prom "github.com/prometheus/client_golang/prometheus" - "github.com/rs/zerolog" "github.com/stretchr/testify/require" ) @@ -57,28 +57,28 @@ func TestTelemeterAddExecution(t *testing.T) { registerer = prom.NewPedanticRegistry() ) - tele := NewTelemeter(ctx, instance, timeSpan, testClient, zerolog.Nop(), registerer) + tele := NewTelemeter(ctx, instance, timeSpan, testClient, testhelper.Logger(t), registerer) - t.Run("should init with no region pushers", func(t *testing.T) { + { // should init with no region pushers verifyTelemeter(t, tele, 0) - }) + } - t.Run("should create a new region pusher", func(t *testing.T) { + { // should create a new region pusher execution := getTestDataset(0).executions[0] tele.AddExecution(execution) verifyTelemeter(t, tele, 1) verifyRegionPusher(t, tele, execution.RegionID, execution) - }) + } - t.Run("should add telemetry to current region pusher", func(t *testing.T) { + { // should add telemetry to current region pusher executions := getTestDataset(0).executions tele.AddExecution(executions[1]) tele.AddExecution(executions[2]) verifyTelemeter(t, tele, 1) verifyRegionPusher(t, tele, executions[0].RegionID, executions[:2]...) - }) + } - t.Run("should add another region pusher", func(t *testing.T) { + { // should add another region pusher executions := getTestDataset(0).executions executions[2].RegionID = 1 tele.AddExecution(executions[2]) @@ -86,10 +86,10 @@ func TestTelemeterAddExecution(t *testing.T) { tele.AddExecution(executions[3]) verifyTelemeter(t, tele, 2) verifyRegionPusher(t, tele, executions[3].RegionID, executions[2:4]...) - }) + } - t.Run("initial region pusher data should be intact", func(t *testing.T) { + { // initial region pusher data should be intact executions := getTestDataset(0).executions verifyRegionPusher(t, tele, executions[0].RegionID, executions[:2]...) - }) + } } diff --git a/internal/testhelper/testhelper.go b/internal/testhelper/testhelper.go index c49307f64..9e1a419d2 100644 --- a/internal/testhelper/testhelper.go +++ b/internal/testhelper/testhelper.go @@ -8,6 +8,7 @@ import ( "testing" "time" + "github.com/rs/zerolog" "github.com/stretchr/testify/require" ) @@ -20,6 +21,15 @@ func Context(ctx context.Context, t *testing.T) (context.Context, context.Cancel return context.WithDeadline(ctx, deadline) } +func Logger(t *testing.T) zerolog.Logger { + logger := zerolog.New(zerolog.NewTestWriter(t)).Level(zerolog.ErrorLevel) + if testing.Verbose() { + logger = logger.Level(zerolog.DebugLevel) + } + + return logger.With().Caller().Timestamp().Logger() +} + func MustReadFile(t *testing.T, filename string) []byte { t.Helper() @@ -55,3 +65,12 @@ func ModuleDir(t *testing.T) string { return dir } + +func K6Path(t *testing.T) string { + t.Helper() + + k6path := filepath.Join(ModuleDir(t), "dist", runtime.GOOS+"-"+runtime.GOARCH, "sm-k6") + require.FileExistsf(t, k6path, "k6 program must exist at %s", k6path) + + return k6path +}