diff --git a/admin/commands/config.go b/admin/commands/config.go index 665ff3c8c1..cc2875ffd2 100644 --- a/admin/commands/config.go +++ b/admin/commands/config.go @@ -119,8 +119,8 @@ func (cmd *ConfigCommand) args(globals *flags.GlobalFlags) ([]string, bool) { res = append(res, "--force") } - if cmd.MetricsModeFlags.MetricsMode != "" { - res = append(res, fmt.Sprintf("--metrics-mode=%s", cmd.MetricsModeFlags.MetricsMode)) + if cmd.MetricsMode != "" { + res = append(res, fmt.Sprintf("--metrics-mode=%s", cmd.MetricsMode)) } if len(cmd.DisableCollectors) != 0 { diff --git a/admin/commands/inventory/add_agent_node_exporter.go b/admin/commands/inventory/add_agent_node_exporter.go index b1c62b80aa..415598eca8 100644 --- a/admin/commands/inventory/add_agent_node_exporter.go +++ b/admin/commands/inventory/add_agent_node_exporter.go @@ -64,7 +64,7 @@ func (cmd *AddAgentNodeExporterCommand) RunCmd() (commands.Result, error) { PushMetrics: cmd.PushMetrics, ExposeExporter: cmd.ExposeExporter, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), - LogLevel: cmd.LogLevelNoFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_qan_mongodb_mongolog_agent.go b/admin/commands/inventory/add_agent_qan_mongodb_mongolog_agent.go index 3dee2a0b20..a0eaaeb56a 100644 --- a/admin/commands/inventory/add_agent_qan_mongodb_mongolog_agent.go +++ b/admin/commands/inventory/add_agent_qan_mongodb_mongolog_agent.go @@ -96,7 +96,7 @@ func (cmd *AddAgentQANMongoDBMongologAgentCommand) RunCmd() (commands.Result, er TLSCa: tlsCa, AuthenticationMechanism: cmd.AuthenticationMechanism, AuthenticationDatabase: cmd.AuthenticationDatabase, - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_qan_mongodb_profiler_agent.go b/admin/commands/inventory/add_agent_qan_mongodb_profiler_agent.go index 9d76af8548..774a2f192e 100644 --- a/admin/commands/inventory/add_agent_qan_mongodb_profiler_agent.go +++ b/admin/commands/inventory/add_agent_qan_mongodb_profiler_agent.go @@ -94,7 +94,7 @@ func (cmd *AddAgentQANMongoDBProfilerAgentCommand) RunCmd() (commands.Result, er TLSCertificateKeyFilePassword: cmd.TLSCertificateKeyFilePassword, TLSCa: tlsCa, AuthenticationMechanism: cmd.AuthenticationMechanism, - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_qan_mysql_perfschema_agent.go b/admin/commands/inventory/add_agent_qan_mysql_perfschema_agent.go index d1214a423c..bd96180cb5 100644 --- a/admin/commands/inventory/add_agent_qan_mysql_perfschema_agent.go +++ b/admin/commands/inventory/add_agent_qan_mysql_perfschema_agent.go @@ -107,7 +107,7 @@ func (cmd *AddAgentQANMySQLPerfSchemaAgentCommand) RunCmd() (commands.Result, er Password: cmd.Password, CustomLabels: *customLabels, SkipConnectionCheck: cmd.SkipConnectionCheck, - DisableCommentsParsing: !cmd.CommentsParsingFlags.CommentsParsingEnabled(), + DisableCommentsParsing: !cmd.CommentsParsingEnabled(), MaxQueryLength: cmd.MaxQueryLength, DisableQueryExamples: cmd.DisableQueryExamples, TLS: cmd.TLS, @@ -115,7 +115,7 @@ func (cmd *AddAgentQANMySQLPerfSchemaAgentCommand) RunCmd() (commands.Result, er TLSCa: tlsCa, TLSCert: tlsCert, TLSKey: tlsKey, - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_qan_mysql_slowlog_agent.go b/admin/commands/inventory/add_agent_qan_mysql_slowlog_agent.go index e0a8e22d8a..f83cdfca13 100644 --- a/admin/commands/inventory/add_agent_qan_mysql_slowlog_agent.go +++ b/admin/commands/inventory/add_agent_qan_mysql_slowlog_agent.go @@ -120,7 +120,7 @@ func (cmd *AddAgentQANMySQLSlowlogAgentCommand) RunCmd() (commands.Result, error Password: cmd.Password, CustomLabels: *customLabels, SkipConnectionCheck: cmd.SkipConnectionCheck, - DisableCommentsParsing: !cmd.CommentsParsingFlags.CommentsParsingEnabled(), + DisableCommentsParsing: !cmd.CommentsParsingEnabled(), MaxQueryLength: cmd.MaxQueryLength, DisableQueryExamples: cmd.DisableQueryExamples, MaxSlowlogFileSize: strconv.FormatInt(int64(cmd.MaxSlowlogFileSize), 10), @@ -129,7 +129,7 @@ func (cmd *AddAgentQANMySQLSlowlogAgentCommand) RunCmd() (commands.Result, error TLSCa: tlsCa, TLSCert: tlsCert, TLSKey: tlsKey, - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_qan_postgres_pgstatements_agent.go b/admin/commands/inventory/add_agent_qan_postgres_pgstatements_agent.go index 6e69f0ae5c..ceb0240f19 100644 --- a/admin/commands/inventory/add_agent_qan_postgres_pgstatements_agent.go +++ b/admin/commands/inventory/add_agent_qan_postgres_pgstatements_agent.go @@ -98,7 +98,7 @@ func (cmd *AddAgentQANPostgreSQLPgStatementsAgentCommand) RunCmd() (commands.Res Password: cmd.Password, CustomLabels: *customLabels, SkipConnectionCheck: cmd.SkipConnectionCheck, - DisableCommentsParsing: !cmd.CommentsParsingFlags.CommentsParsingEnabled(), + DisableCommentsParsing: !cmd.CommentsParsingEnabled(), MaxQueryLength: cmd.MaxQueryLength, TLS: cmd.TLS, @@ -106,7 +106,7 @@ func (cmd *AddAgentQANPostgreSQLPgStatementsAgentCommand) RunCmd() (commands.Res TLSCa: tlsCa, TLSCert: tlsCert, TLSKey: tlsKey, - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_qan_postgres_pgstatmonitor_agent.go b/admin/commands/inventory/add_agent_qan_postgres_pgstatmonitor_agent.go index 9cf6c85690..deb97cf6ba 100644 --- a/admin/commands/inventory/add_agent_qan_postgres_pgstatmonitor_agent.go +++ b/admin/commands/inventory/add_agent_qan_postgres_pgstatmonitor_agent.go @@ -100,7 +100,7 @@ func (cmd *AddAgentQANPostgreSQLPgStatMonitorAgentCommand) RunCmd() (commands.Re Password: cmd.Password, CustomLabels: *customLabels, SkipConnectionCheck: cmd.SkipConnectionCheck, - DisableCommentsParsing: !cmd.CommentsParsingFlags.CommentsParsingEnabled(), + DisableCommentsParsing: !cmd.CommentsParsingEnabled(), MaxQueryLength: cmd.MaxQueryLength, DisableQueryExamples: cmd.QueryExamplesDisabled, @@ -109,7 +109,7 @@ func (cmd *AddAgentQANPostgreSQLPgStatMonitorAgentCommand) RunCmd() (commands.Re TLSCa: tlsCa, TLSCert: tlsCert, TLSKey: tlsKey, - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), }, }, Context: commands.Ctx, diff --git a/admin/commands/inventory/add_agent_rds_exporter.go b/admin/commands/inventory/add_agent_rds_exporter.go index 42a40d030e..f903dd12fc 100644 --- a/admin/commands/inventory/add_agent_rds_exporter.go +++ b/admin/commands/inventory/add_agent_rds_exporter.go @@ -75,7 +75,7 @@ func (cmd *AddAgentRDSExporterCommand) RunCmd() (commands.Result, error) { DisableBasicMetrics: cmd.DisableBasicMetrics, DisableEnhancedMetrics: cmd.DisableEnhancedMetrics, PushMetrics: cmd.PushMetrics, - LogLevel: cmd.LogLevelFatalFlags.LogLevel.EnumValue(), + LogLevel: cmd.LogLevel.EnumValue(), }, }, Context: commands.Ctx, diff --git a/admin/commands/management/add_external.go b/admin/commands/management/add_external.go index acc5aed1c0..f536ae3752 100644 --- a/admin/commands/management/add_external.go +++ b/admin/commands/management/add_external.go @@ -136,7 +136,7 @@ func (cmd *AddExternalCommand) RunCmd() (commands.Result, error) { Cluster: cmd.Cluster, ReplicationSet: cmd.ReplicationSet, CustomLabels: *customLabels, - MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), + MetricsMode: cmd.MetricsMode.EnumValue(), Group: cmd.Group, SkipConnectionCheck: cmd.SkipConnectionCheck, TLSSkipVerify: cmd.TLSSkipVerify, diff --git a/admin/commands/management/add_haproxy.go b/admin/commands/management/add_haproxy.go index 73d5c9aaa5..38f55edaec 100644 --- a/admin/commands/management/add_haproxy.go +++ b/admin/commands/management/add_haproxy.go @@ -118,7 +118,7 @@ func (cmd *AddHAProxyCommand) RunCmd() (commands.Result, error) { Cluster: cmd.Cluster, ReplicationSet: cmd.ReplicationSet, CustomLabels: *customLabels, - MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), + MetricsMode: cmd.MetricsMode.EnumValue(), SkipConnectionCheck: cmd.SkipConnectionCheck, TLSSkipVerify: cmd.TLSSkipVerify, }, diff --git a/admin/commands/management/add_mongodb.go b/admin/commands/management/add_mongodb.go index 526f0c5180..47b9d54ff1 100644 --- a/admin/commands/management/add_mongodb.go +++ b/admin/commands/management/add_mongodb.go @@ -198,7 +198,7 @@ func (cmd *AddMongoDBCommand) RunCmd() (commands.Result, error) { AuthenticationMechanism: cmd.AuthenticationMechanism, AuthenticationDatabase: cmd.AuthenticationDatabase, - MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), + MetricsMode: cmd.MetricsMode.EnumValue(), EnableAllCollectors: cmd.EnableAllCollectors, DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), diff --git a/admin/commands/management/add_mysql.go b/admin/commands/management/add_mysql.go index e820464f5e..25210e9aea 100644 --- a/admin/commands/management/add_mysql.go +++ b/admin/commands/management/add_mysql.go @@ -230,7 +230,7 @@ func (cmd *AddMySQLCommand) RunCmd() (commands.Result, error) { QANMysqlPerfschema: cmd.QuerySource == MysqlQuerySourcePerfSchema, SkipConnectionCheck: cmd.SkipConnectionCheck, - DisableCommentsParsing: !cmd.CommentsParsingFlags.CommentsParsingEnabled(), + DisableCommentsParsing: !cmd.CommentsParsingEnabled(), MaxQueryLength: cmd.MaxQueryLength, DisableQueryExamples: cmd.DisableQueryExamples, @@ -241,7 +241,7 @@ func (cmd *AddMySQLCommand) RunCmd() (commands.Result, error) { TLSCert: tlsCert, TLSKey: tlsKey, TablestatsGroupTableLimit: tablestatsGroupTableLimit, - MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), + MetricsMode: cmd.MetricsMode.EnumValue(), DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), LogLevel: cmd.LogLevel.EnumValue(), ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), diff --git a/admin/commands/management/add_postgresql.go b/admin/commands/management/add_postgresql.go index a4333d0b00..d5c81d2fea 100644 --- a/admin/commands/management/add_postgresql.go +++ b/admin/commands/management/add_postgresql.go @@ -191,7 +191,7 @@ func (cmd *AddPostgreSQLCommand) RunCmd() (commands.Result, error) { Database: cmd.Database, AgentPassword: cmd.AgentPassword, SkipConnectionCheck: cmd.SkipConnectionCheck, - DisableCommentsParsing: !cmd.CommentsParsingFlags.CommentsParsingEnabled(), + DisableCommentsParsing: !cmd.CommentsParsingEnabled(), PMMAgentID: cmd.PMMAgentID, Environment: cmd.Environment, @@ -210,7 +210,7 @@ func (cmd *AddPostgreSQLCommand) RunCmd() (commands.Result, error) { MaxQueryLength: cmd.MaxQueryLength, DisableQueryExamples: cmd.DisableQueryExamples, - MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), + MetricsMode: cmd.MetricsMode.EnumValue(), DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), AutoDiscoveryLimit: cmd.AutoDiscoveryLimit, MaxExporterConnections: cmd.MaxExporterConnections, diff --git a/admin/commands/management/add_proxysql.go b/admin/commands/management/add_proxysql.go index 318edc07ad..dfc46b378e 100644 --- a/admin/commands/management/add_proxysql.go +++ b/admin/commands/management/add_proxysql.go @@ -151,7 +151,7 @@ func (cmd *AddProxySQLCommand) RunCmd() (commands.Result, error) { SkipConnectionCheck: cmd.SkipConnectionCheck, TLS: cmd.TLS, TLSSkipVerify: cmd.TLSSkipVerify, - MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), + MetricsMode: cmd.MetricsMode.EnumValue(), DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), LogLevel: cmd.LogLevel.EnumValue(), ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), diff --git a/admin/commands/management/add_valkey.go b/admin/commands/management/add_valkey.go index 7243ca3c2a..61e82e8ac5 100644 --- a/admin/commands/management/add_valkey.go +++ b/admin/commands/management/add_valkey.go @@ -160,7 +160,7 @@ func (cmd *AddValkeyCommand) RunCmd() (commands.Result, error) { TLSCa: tlsCa, TLSCert: tlsCert, TLSKey: tlsKey, - MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), + MetricsMode: cmd.MetricsMode.EnumValue(), LogLevel: cmd.LogLevel.EnumValue(), ConnectionTimeout: commands.DurationString(cmd.ConnectionTimeout), }, diff --git a/admin/commands/management/register.go b/admin/commands/management/register.go index 2942c99992..120640b33d 100644 --- a/admin/commands/management/register.go +++ b/admin/commands/management/register.go @@ -83,7 +83,7 @@ func (cmd *RegisterCommand) RunCmd() (commands.Result, error) { AgentPassword: cmd.AgentPassword, Reregister: cmd.Force, - MetricsMode: cmd.MetricsModeFlags.MetricsMode.EnumValue(), + MetricsMode: cmd.MetricsMode.EnumValue(), DisableCollectors: commands.ParseDisableCollectors(cmd.DisableCollectors), }, Context: commands.Ctx, diff --git a/agent/agents/mongodb/mongolog/internal/monitor_test.go b/agent/agents/mongodb/mongolog/internal/monitor_test.go index 1fe64e188b..5ad12411b1 100644 --- a/agent/agents/mongodb/mongolog/internal/monitor_test.go +++ b/agent/agents/mongodb/mongolog/internal/monitor_test.go @@ -32,6 +32,7 @@ import ( "github.com/percona/percona-toolkit/src/go/mongolib/proto" "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.mongodb.org/mongo-driver/bson" @@ -63,9 +64,9 @@ func TestCollector(t *testing.T) { file, err := os.Create(destination) //nolint:gosec require.NoError(t, err) - file.Close() //nolint:errcheck + require.NoError(t, file.Close()) t.Cleanup(func() { - os.Remove(destination) //nolint:errcheck + assert.NoError(t, os.Remove(destination)) }) reader, err := filereader.NewContinuousFileReader(destination, l) @@ -87,12 +88,11 @@ func TestCollector(t *testing.T) { go readSourceWriteDestination(ctx, t, errChan, fmt.Sprintf("./testdata/logs/%s.log", test), destination, delay) var wg sync.WaitGroup - wg.Add(2) + wg.Add(1) monitor.Start(ctx, docsChan, doneChan, &wg) var data []proto.SystemProfile - go func() { - defer wg.Done() + wg.Go(func() { for { select { case <-ctx.Done(): @@ -106,7 +106,7 @@ func TestCollector(t *testing.T) { data = append(data, row) } } - }() + }) err = <-errChan require.NoError(t, err) @@ -120,7 +120,8 @@ func TestCollector(t *testing.T) { expectedFile := fmt.Sprintf("./testdata/expected/%s", test) if os.Getenv("REFRESH_TEST_DATA") != "" { - writeData(t, data, expectedFile) + err = writeData(t, data, expectedFile) + require.NoError(t, err) return } @@ -218,7 +219,9 @@ func writeData(t *testing.T, data []proto.SystemProfile, name string) error { if err != nil { return err } - defer file.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, file.Close()) + }) jsonData, err := dataToJSON(t, data) if err != nil { @@ -239,7 +242,9 @@ func readData(t *testing.T, name string) ([]proto.SystemProfile, error) { if err != nil { return nil, err } - defer file.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, file.Close()) + }) var data []proto.SystemProfile err = json.NewDecoder(file).Decode(&data) @@ -258,6 +263,10 @@ func readSourceWriteDestination(ctx context.Context, t *testing.T, errChan chan errChan <- err return } + defer func() { + assert.NoError(t, srcFile.Close()) + }() + scanner := bufio.NewScanner(srcFile) var lines []string for scanner.Scan() { @@ -273,14 +282,15 @@ func readSourceWriteDestination(ctx context.Context, t *testing.T, errChan chan errChan <- err return } - srcFile.Close() //nolint:errcheck dstFile, err := os.Create(destination) //nolint:gosec if err != nil { errChan <- err return } - defer dstFile.Close() //nolint:errcheck + defer func() { + assert.NoError(t, dstFile.Close()) + }() writer := bufio.NewWriter(dstFile) for _, line := range lines { diff --git a/agent/agents/mongodb/profiler/internal/collector/collector_test.go b/agent/agents/mongodb/profiler/internal/collector/collector_test.go index 6c3584e00f..a58397d246 100644 --- a/agent/agents/mongodb/profiler/internal/collector/collector_test.go +++ b/agent/agents/mongodb/profiler/internal/collector/collector_test.go @@ -55,7 +55,7 @@ func BenchmarkCollector(b *testing.B) { timeout := time.Millisecond*time.Duration(maxDocs*maxLoops) + cursorTimeout*time.Duration(maxLoops*2) + time.Second - ctx, cancel := context.WithTimeout(context.Background(), timeout) + ctx, cancel := context.WithTimeout(b.Context(), timeout) defer cancel() url := "mongodb://root:root-password@127.0.0.1:27017" @@ -63,24 +63,28 @@ func BenchmarkCollector(b *testing.B) { // cursorTimeout*time.Duration(maxLoops*2): Wait time between loops to produce iter.TryNext to return a false client, err := createSession(url, "pmm-agent") - if err != nil { - return - } + require.NoError(b, err) - cleanUpDBs(b, client) // Just in case there are old dbs with matching names - defer cleanUpDBs(b, client) + // Just in case there are old dbs with matching names + require.NoError(b, cleanUpDBs(b.Context(), b, client)) + b.Cleanup(func() { + cleanupCtx, cancelCtx := context.WithTimeout(context.Background(), 5*time.Second) + defer cancelCtx() + assert.NoError(b, cleanUpDBs(cleanupCtx, b, client)) + }) - ps := ProfilerStatus{} + var ps ProfilerStatus err = client.Database("admin").RunCommand(ctx, primitive.M{"profile": -1}).Decode(&ps) - defer func() { // restore profiler status - client.Database("admin").RunCommand(ctx, primitive.D{{"profile", ps.Was}, {"slowms", ps.SlowMs}}) - }() + require.NoError(b, err) + b.Cleanup(func() { // restore profiler status + cmdCtx, cancelCtx := context.WithTimeout(context.Background(), 1*time.Second) + defer cancelCtx() + client.Database("admin").RunCommand(cmdCtx, primitive.D{{Key: "profile", Value: ps.Was}, {Key: "slowms", Value: ps.SlowMs}}) + }) // Enable profilling all queries (2, slowms = 0) - res := client.Database("admin").RunCommand(ctx, primitive.D{{"profile", 2}, {"slowms", 0}}) - if res.Err() != nil { - return - } + res := client.Database("admin").RunCommand(ctx, primitive.D{{Key: "profile", Value: 2}, {Key: "slowms", Value: 0}}) + require.NoError(b, res.Err()) for b.Loop() { ctr := New(client, "test", logrus.WithField("component", "profiler-test")) @@ -120,18 +124,23 @@ func TestCollector(t *testing.T) { // cursorTimeout*time.Duration(maxLoops*2): Wait time between loops to produce iter.TryNext to return a false timeout := time.Millisecond*time.Duration(maxDocs*maxLoops) + cursorTimeout*time.Duration(maxLoops*2) + 5*time.Second - ctx, cancel := context.WithTimeout(context.Background(), timeout) + ctx, cancel := context.WithTimeout(t.Context(), timeout) defer cancel() client, err := createSession(url, "pmm-agent") require.NoError(t, err) - cleanUpDBs(t, client) // Just in case there are old dbs with matching names - defer cleanUpDBs(t, client) + require.NoError(t, cleanUpDBs(t.Context(), t, client)) // Just in case there are old dbs with matching names + t.Cleanup(func() { + cleanupCtx, cancelCtx := context.WithTimeout(context.Background(), 5*time.Second) + defer cancelCtx() + assert.NoError(t, cleanUpDBs(cleanupCtx, t, client)) + }) // It's done create DB before the test. doc := bson.M{} - client.Database("test_collector").Collection("test").InsertOne(context.TODO(), doc) + _, err = client.Database("test_collector").Collection("test").InsertOne(t.Context(), doc) + require.NoError(t, err) <-time.After(time.Second) ctr := New(client, "test_collector", logrus.WithField("component", "collector-test")) @@ -139,6 +148,8 @@ func TestCollector(t *testing.T) { // Start the collector var profiles []proto.SystemProfile docsChan, err := ctr.Start(ctx) + require.NoError(t, err) + wg := &sync.WaitGroup{} wg.Add(1) <-time.After(time.Second) @@ -218,15 +229,19 @@ func createSession(dsn string, agentID string) (*mongo.Client, error) { return client, nil } -func cleanUpDBs[T testing.TB](t T, sess *mongo.Client) error { +func cleanUpDBs[T testing.TB](ctx context.Context, t T, sess *mongo.Client) error { t.Helper() - dbs, err := sess.ListDatabaseNames(context.TODO(), bson.M{}) + dbs, err := sess.ListDatabaseNames(ctx, bson.M{}) if err != nil { return err } for _, dbname := range dbs { if strings.HasPrefix(dbname, "test_") { - err = sess.Database(dbname).Drop(context.TODO()) + err = sess.Database(dbname).Drop(ctx) + if err != nil { + t.Logf("failed to drop database %q: %v", dbname, err) + continue + } } } return nil diff --git a/agent/agents/mongodb/profiler/internal/profiler_test.go b/agent/agents/mongodb/profiler/internal/profiler_test.go index ea5d9844e1..5c1c8d64e4 100644 --- a/agent/agents/mongodb/profiler/internal/profiler_test.go +++ b/agent/agents/mongodb/profiler/internal/profiler_test.go @@ -37,27 +37,12 @@ import ( inventoryv1 "github.com/percona/pmm/api/inventory/v1" ) -type MongoVersion struct { - VersionString string `bson:"version"` - PSMDBVersion string `bson:"psmdbVersion"` - Version []int `bson:"versionArray"` -} - -func GetMongoVersion(ctx context.Context, client *mongo.Client) (string, error) { - var ver MongoVersion - err := client.Database("admin").RunCommand(ctx, bson.D{{"buildInfo", 1}}).Decode(&ver) - if err != nil { - return "", nil - } - - version := fmt.Sprintf("%d.%d", ver.Version[0], ver.Version[1]) - return version, err -} - func TestProfiler(t *testing.T) { defaultInterval := aggregator.DefaultInterval aggregator.DefaultInterval = time.Second - defer func() { aggregator.DefaultInterval = defaultInterval }() + t.Cleanup(func() { + aggregator.DefaultInterval = defaultInterval + }) sslDSNTemplate, files := tests.GetTestMongoDBWithSSLDSN(t, "../../../../") tempDir := t.TempDir() @@ -77,7 +62,13 @@ func testProfiler(t *testing.T, url string) { sess, err := createSession(url, "pmm-agent") require.NoError(t, err) - cleanUpDBs(t, sess) // Just in case there are old dbs with matching names + // Just in case there are old dbs with matching names + require.NoError(t, cleanUpDBs(t.Context(), t, sess)) + t.Cleanup(func() { + cleanupCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + assert.NoError(t, cleanUpDBs(cleanupCtx, t, sess)) + }) dbsCount := 10 docsCount := float32(10) @@ -90,7 +81,7 @@ func testProfiler(t *testing.T, url string) { doc := bson.M{"id": i} dbName := fmt.Sprintf("test_%02d", i) logrus.Traceln("create db", dbName) - _, err := sess.Database(dbName).Collection("test").InsertOne(context.TODO(), doc) + _, err = sess.Database(dbName).Collection("test").InsertOne(t.Context(), doc) require.NoError(t, err) i++ } @@ -102,8 +93,10 @@ func testProfiler(t *testing.T, url string) { } prof := New(url, logrus.WithField("component", "profiler-test"), ms, "test-id", truncate.GetMongoDBDefaultMaxQueryLength()) err = prof.Start() - defer prof.Stop() require.NoError(t, err) + t.Cleanup(func() { + assert.NoError(t, prof.Stop()) + }) <-time.After(aggregator.DefaultInterval * 2) // give it some time to start profiler i = 0 @@ -117,21 +110,23 @@ func testProfiler(t *testing.T, url string) { } dbName := fmt.Sprintf("test_%02d", dbNumber) logrus.Tracef("inserting value %d to %s", i, dbName) - _, err := sess.Database(dbName).Collection("people").InsertOne(context.TODO(), doc) + _, err = sess.Database(dbName).Collection("people").InsertOne(t.Context(), doc) require.NoError(t, err) i++ } - cursor, err := sess.Database("test_00").Collection("people").Find(context.TODO(), bson.M{"name_00\xff": "value_00\xff"}) + cursor, err := sess.Database("test_00").Collection("people").Find(t.Context(), bson.M{"name_00\xff": "value_00\xff"}) require.NoError(t, err) - defer cursor.Close(context.TODO()) + t.Cleanup(func() { + cursorCtx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + assert.NoError(t, cursor.Close(cursorCtx)) + }) <-time.After(aggregator.DefaultInterval * 6) // give it some time to catch all metrics err = prof.Stop() require.NoError(t, err) - defer cleanUpDBs(t, sess) - require.GreaterOrEqual(t, len(ms.reports), 1) var findBucket *agentv1.MetricsBucket @@ -196,14 +191,22 @@ func testProfiler(t *testing.T, url string) { assert.InDelta(t, docsCount, findBucket.Mongodb.MDocsReturnedSum, 0.0001) } -func cleanUpDBs(t *testing.T, sess *mongo.Client) { - dbs, err := sess.ListDatabaseNames(context.TODO(), bson.M{}) +func cleanUpDBs(ctx context.Context, t *testing.T, sess *mongo.Client) error { + t.Helper() + dbs, err := sess.ListDatabaseNames(ctx, bson.M{}) + if err != nil { + return err + } for _, dbname := range dbs { if strings.HasPrefix(dbname, "test_") { - err = sess.Database(dbname).Drop(context.TODO()) - require.NoError(t, err) + err = sess.Database(dbname).Drop(ctx) + if err != nil { + t.Logf("failed to drop database %q: %v", dbname, err) + continue + } } } + return nil } type testWriter struct { diff --git a/agent/agents/mongodb/shared/fingerprinter/fingerprinter_test.go b/agent/agents/mongodb/shared/fingerprinter/fingerprinter_test.go index 31b5e369c2..65a94289ac 100644 --- a/agent/agents/mongodb/shared/fingerprinter/fingerprinter_test.go +++ b/agent/agents/mongodb/shared/fingerprinter/fingerprinter_test.go @@ -91,26 +91,31 @@ func TestProfilerFingerprinter(t *testing.T) { dbName := "test_fingerprint" client, err := createSession(url, "pmm-agent") - if err != nil { - return - } + require.NoError(t, err) ctx, cancel := context.WithTimeout(t.Context(), mgoTimeoutSessionSync) defer cancel() - _ = client.Database(dbName).Drop(ctx) - defer client.Database(dbName).Drop(context.TODO()) //nolint:errcheck + err = client.Database(dbName).Drop(ctx) + require.NoError(t, err) + t.Cleanup(func() { + dropCtx, cancelCtx := context.WithTimeout(context.Background(), 5*time.Second) + defer cancelCtx() + err = client.Database(dbName).Drop(dropCtx) + require.NoError(t, err) + }) ps := ProfilerStatus{} err = client.Database("admin").RunCommand(ctx, primitive.M{"profile": -1}).Decode(&ps) - defer func() { // restore profiler status - client.Database("admin").RunCommand(ctx, primitive.D{{"profile", ps.Was}, {"slowms", ps.SlowMs}}) - }() + require.NoError(t, err) + t.Cleanup(func() { + cmdCtx, cancelCtx := context.WithTimeout(context.Background(), 1*time.Second) + defer cancelCtx() + client.Database("admin").RunCommand(cmdCtx, primitive.D{{Key: "profile", Value: ps.Was}, {Key: "slowms", Value: ps.SlowMs}}) + }) // Enable profilling all queries (2, slowms = 0) res := client.Database("admin").RunCommand(ctx, primitive.D{{"profile", 2}, {"slowms", 0}}) - if res.Err() != nil { - return - } + require.NoError(t, res.Err()) database := client.Database(dbName) _, err = database.Collection("test").InsertOne(ctx, bson.M{"id": 0, "name": "test", "value": 1, "time": time.Now()}) @@ -121,8 +126,9 @@ func TestProfilerFingerprinter(t *testing.T) { database.Collection("test").FindOne(ctx, bson.M{"id": 1, "name": "test", "time": time.Now()}) database.Collection("test").FindOneAndUpdate(ctx, bson.M{"id": 0}, bson.M{"$set": bson.M{"name": "new"}}) database.Collection("test").FindOneAndDelete(ctx, bson.M{"id": 1}) - database.Collection("secondcollection").Find(ctx, bson.M{"name": "sec"}, options.Find().SetLimit(1).SetSort(bson.M{"id": -1})) //nolint:errcheck - database.Collection("test").Aggregate( + _, err = database.Collection("secondcollection").Find(ctx, bson.M{"name": "sec"}, options.Find().SetLimit(1).SetSort(bson.M{"id": -1})) + require.NoError(t, err) + _, err = database.Collection("test").Aggregate( ctx, []bson.M{ { @@ -136,7 +142,8 @@ func TestProfilerFingerprinter(t *testing.T) { }, }, ) - database.Collection("secondcollection").Aggregate(ctx, mongo.Pipeline{ //nolint:errcheck + require.NoError(t, err) + _, err = database.Collection("secondcollection").Aggregate(ctx, mongo.Pipeline{ bson.D{ { Key: "$collStats", @@ -156,15 +163,21 @@ func TestProfilerFingerprinter(t *testing.T) { }, }, }) - database.Collection("secondcollection").DeleteOne(ctx, bson.M{"id": 0}) //nolint:errcheck - database.Collection("test").DeleteMany(ctx, bson.M{"name": "test"}) //nolint:errcheck + require.NoError(t, err) + _, err = database.Collection("secondcollection").DeleteOne(ctx, bson.M{"id": 0}) + require.NoError(t, err) + _, err = database.Collection("test").DeleteMany(ctx, bson.M{"name": "test"}) + require.NoError(t, err) profilerCollection := database.Collection("system.profile") query := createQuery(dbName, time.Now().Add(-10*time.Minute)) cursor, err := createIterator(ctx, profilerCollection, query) require.NoError(t, err) - // do not cancel cursor closing when ctx is canceled - defer cursor.Close(context.Background()) //nolint:errcheck + t.Cleanup(func() { + cursorCtx, cancelCtx := context.WithTimeout(context.Background(), 1*time.Second) + defer cancelCtx() + require.NoError(t, cursor.Close(cursorCtx)) + }) pf := &ProfilerFingerprinter{} diff --git a/agent/agents/mongodb/shared/sender/sender.go b/agent/agents/mongodb/shared/sender/sender.go index 0f96fb23e3..be316c53b3 100644 --- a/agent/agents/mongodb/shared/sender/sender.go +++ b/agent/agents/mongodb/shared/sender/sender.go @@ -88,7 +88,6 @@ func (s *Sender) Stop() { // wait for goroutines to exit s.wg.Wait() - return } func start(ctx context.Context, wg *sync.WaitGroup, reportChan <-chan *report.Report, w Writer, logger *logrus.Entry, doneChan <-chan struct{}) { diff --git a/agent/agents/mysql/perfschema/perfschema_test.go b/agent/agents/mysql/perfschema/perfschema_test.go index e4308136bb..1f6fb143be 100644 --- a/agent/agents/mysql/perfschema/perfschema_test.go +++ b/agent/agents/mysql/perfschema/perfschema_test.go @@ -266,7 +266,9 @@ func prepareDBCopy(t *testing.T, db *reform.DB) { func TestPerfSchema(t *testing.T) { sqlDB := tests.OpenTestMySQL(t) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, mysql.Dialect, reform.NewPrintfLogger(t.Logf)) updateQuery := fmt.Sprintf("UPDATE /* %s */ ", queryTag) @@ -538,10 +540,8 @@ func TestPerfSchema(t *testing.T) { require.NoError(t, m.refreshHistoryCache(t.Context())) var example string - isTruncated := true - if mySQLVendor != version.MariaDBVendor && mySQLVersion.Float() >= 8.0 { - isTruncated = false - } + isTruncated := !(mySQLVendor != version.MariaDBVendor && mySQLVersion.Float() >= 8.0) + switch { // Perf schema truncates queries with non-utf8 characters. case (mySQLVendor == version.PerconaVendor || mySQLVendor == version.OracleVendor) && mySQLVersion.Float() >= 8.0: diff --git a/agent/agents/mysql/slowlog/parser/parser.go b/agent/agents/mysql/slowlog/parser/parser.go index 3a48503cd5..c27fccd881 100644 --- a/agent/agents/mysql/slowlog/parser/parser.go +++ b/agent/agents/mysql/slowlog/parser/parser.go @@ -249,7 +249,7 @@ func (p *SlowLogParser) parseMetrics(line string) { } // we need to skip redundant space to correct the split process - line = strings.Replace(line, ": ", ":", -1) //nolint:gocritic + line = strings.ReplaceAll(line, ": ", ":") for kv := range strings.SplitSeq(line, " ") { if len(kv) == 0 { continue diff --git a/agent/agents/mysql/slowlog/slowlog_test.go b/agent/agents/mysql/slowlog/slowlog_test.go index 8807acd281..c1e264cb47 100644 --- a/agent/agents/mysql/slowlog/slowlog_test.go +++ b/agent/agents/mysql/slowlog/slowlog_test.go @@ -117,7 +117,9 @@ func TestSlowLogMakeBuckets(t *testing.T) { func TestSlowLog(t *testing.T) { t.Parallel() sqlDB := tests.OpenTestMySQL(t) - t.Cleanup(func() { sqlDB.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) q := reform.NewDB(sqlDB, mysql.Dialect, reform.NewPrintfLogger(t.Logf)).WithTag(queryTag) ctx := context.Background() diff --git a/agent/agents/postgres/pgstatmonitor/pgstatmonitor.go b/agent/agents/postgres/pgstatmonitor/pgstatmonitor.go index 9dd857b57f..f2311a5e1a 100644 --- a/agent/agents/postgres/pgstatmonitor/pgstatmonitor.go +++ b/agent/agents/postgres/pgstatmonitor/pgstatmonitor.go @@ -604,12 +604,12 @@ func (m *PGStatMonitorQAN) makeBuckets(current, cache map[time.Time]map[string]* }, Postgresql: &agentv1.MetricsBucket_PostgreSQL{}, } - if currentPSM.pgStatMonitor.CmdType >= 0 && - currentPSM.pgStatMonitor.CmdType < int32(len(commandTypeToText)) { //nolint:gosec // len(commandTypeToText) is not expected to overflow int32 - mb.Postgresql.CmdType = commandTypeToText[currentPSM.pgStatMonitor.CmdType] + if currentPSM.CmdType >= 0 && + currentPSM.CmdType < int32(len(commandTypeToText)) { //nolint:gosec // len(commandTypeToText) is not expected to overflow int32 + mb.Postgresql.CmdType = commandTypeToText[currentPSM.CmdType] } else { mb.Postgresql.CmdType = commandTextNotAvailable - m.l.Warnf("failed to translate command type '%d' into text", currentPSM.pgStatMonitor.CmdType) + m.l.Warnf("failed to translate command type '%d' into text", currentPSM.CmdType) } mb.Postgresql.TopQueryid = pointer.GetString(currentPSM.TopQueryID) diff --git a/agent/agents/postgres/pgstatmonitor/pgstatmonitor_test.go b/agent/agents/postgres/pgstatmonitor/pgstatmonitor_test.go index ca426881b3..80f613db58 100644 --- a/agent/agents/postgres/pgstatmonitor/pgstatmonitor_test.go +++ b/agent/agents/postgres/pgstatmonitor/pgstatmonitor_test.go @@ -98,7 +98,9 @@ func TestVersion(t *testing.T) { func TestPGStatMonitorSchema(t *testing.T) { t.Skip("Skip it until the sandbox supports pg_stat_monitor by default. The current PostgreSQL image is the official, not the one from PerconaLab") sqlDB := tests.OpenTestPostgreSQL(t) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) majorVersion, _ := tests.PostgreSQLVersion(t, sqlDB) diff --git a/agent/agents/postgres/pgstatmonitor/stat_monitor_cache.go b/agent/agents/postgres/pgstatmonitor/stat_monitor_cache.go index 7d8b6a3dfd..ea04f87a69 100644 --- a/agent/agents/postgres/pgstatmonitor/stat_monitor_cache.go +++ b/agent/agents/postgres/pgstatmonitor/stat_monitor_cache.go @@ -173,7 +173,7 @@ func (ssc *statMonitorCache) getStatMonitorExtended( } if err != nil { // Either real syntax error in the query or pg_stat_monitor truncated the query and it causes the syntax error. - if c.pgStatMonitor.Elevel != 0 { + if c.Elevel != 0 { c.IsQueryTruncated = false ssc.l.Warnf("generating fingerprint failed for query with id %v: %v", c.QueryID, err) } else { diff --git a/agent/agents/postgres/pgstatmonitor/stat_monitor_cache_test.go b/agent/agents/postgres/pgstatmonitor/stat_monitor_cache_test.go index 6e3246a425..04c4a4df34 100644 --- a/agent/agents/postgres/pgstatmonitor/stat_monitor_cache_test.go +++ b/agent/agents/postgres/pgstatmonitor/stat_monitor_cache_test.go @@ -18,6 +18,7 @@ import ( "context" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gopkg.in/reform.v1" "gopkg.in/reform.v1/dialects/postgresql" @@ -28,7 +29,9 @@ import ( func TestPGStatMonitorStructs(t *testing.T) { sqlDB := tests.OpenTestPostgreSQL(t) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) majorVersion, _ := tests.PostgreSQLVersion(t, sqlDB) diff --git a/agent/agents/postgres/pgstatstatements/pgstatstatements_test.go b/agent/agents/postgres/pgstatstatements/pgstatstatements_test.go index b07bc059a7..c767eb5b98 100644 --- a/agent/agents/postgres/pgstatstatements/pgstatstatements_test.go +++ b/agent/agents/postgres/pgstatstatements/pgstatstatements_test.go @@ -67,7 +67,9 @@ func filter(mb []*agentv1.MetricsBucket) []*agentv1.MetricsBucket { func TestPGStatStatementsQAN(t *testing.T) { sqlDB := tests.OpenTestPostgreSQL(t) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) _, err := db.Exec("CREATE EXTENSION IF NOT EXISTS pg_stat_statements SCHEMA public") @@ -478,7 +480,9 @@ func TestPGStatStatementsQAN(t *testing.T) { func TestPGStatStatementsQPS(t *testing.T) { sqlDB := tests.OpenTestPostgreSQL(t) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, nil) _, err := db.Exec("CREATE EXTENSION IF NOT EXISTS pg_stat_statements SCHEMA public") diff --git a/agent/agents/supervisor/ports_registry_test.go b/agent/agents/supervisor/ports_registry_test.go index d15cc70a9c..08f27efbd1 100644 --- a/agent/agents/supervisor/ports_registry_test.go +++ b/agent/agents/supervisor/ports_registry_test.go @@ -27,7 +27,9 @@ func TestRegistry(t *testing.T) { r := newPortsRegistry(65000, 65002, []uint16{65000}) l1, err := net.Listen("tcp", "127.0.0.1:65001") require.NoError(t, err) - defer l1.Close() //nolint:gosec,errcheck,nolintlint + t.Cleanup(func() { + _ = l1.Close() + }) p, err := r.Reserve() require.NoError(t, err) @@ -37,7 +39,9 @@ func TestRegistry(t *testing.T) { l2, err := net.Listen("tcp", "127.0.0.1:65002") require.NoError(t, err) - defer l2.Close() //nolint:errcheck,gosec,nolintlint + t.Cleanup(func() { + _ = l2.Close() + }) err = r.Release(65000) require.NoError(t, err) @@ -46,8 +50,8 @@ func TestRegistry(t *testing.T) { err = r.Release(65002) assert.Equal(t, errPortBusy, err) - l1.Close() //nolint:errcheck - l2.Close() //nolint:errcheck + require.NoError(t, l1.Close()) + require.NoError(t, l2.Close()) p, err = r.Reserve() require.NoError(t, err) diff --git a/agent/main_test.go b/agent/main_test.go index 801d561dfc..1af0ac0127 100644 --- a/agent/main_test.go +++ b/agent/main_test.go @@ -21,6 +21,7 @@ import ( "strings" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "golang.org/x/tools/go/packages" ) @@ -210,7 +211,9 @@ func TestImports(t *testing.T) { f, err := os.Create("packages.dot") require.NoError(t, err) - defer func() { require.NoError(t, f.Close()) }() + t.Cleanup(func() { + assert.NoError(t, f.Close()) + }) var lines []string for _, p := range allPkgs { @@ -230,15 +233,18 @@ func TestImports(t *testing.T) { } sort.Strings(lines) - fmt.Fprintf(f, "digraph packages {\n") + _, err = fmt.Fprintf(f, "digraph packages {\n") + require.NoError(t, err) duplicate := make(map[string]struct{}) for _, line := range lines { if _, ok := duplicate[line]; !ok { duplicate[line] = struct{}{} - fmt.Fprint(f, line) //nolint:errcheck + _, err = fmt.Fprint(f, line) + require.NoError(t, err) } } - fmt.Fprintf(f, "}\n") + _, err = fmt.Fprintf(f, "}\n") + require.NoError(t, err) } func formatPkgName(t *testing.T, name string) string { diff --git a/agent/runner/actions/mongodb_explain_action_test.go b/agent/runner/actions/mongodb_explain_action_test.go index 3356590c92..db6627c0f0 100644 --- a/agent/runner/actions/mongodb_explain_action_test.go +++ b/agent/runner/actions/mongodb_explain_action_test.go @@ -24,6 +24,7 @@ import ( "path/filepath" "strconv" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -38,13 +39,15 @@ import ( func TestQueryExplain(t *testing.T) { database := "testdb" - ctx := context.TODO() + ctx := t.Context() dsn := tests.GetTestMongoDBDSN(t) client := tests.OpenTestMongoDB(t, dsn) t.Cleanup(func() { - defer client.Disconnect(ctx) //nolint:errcheck - defer client.Database(database).Drop(ctx) //nolint:errcheck + cleanupCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + assert.NoError(t, client.Database(database).Drop(cleanupCtx)) + assert.NoError(t, client.Disconnect(cleanupCtx)) }) t.Run("Find", func(t *testing.T) { @@ -259,7 +262,9 @@ func TestMongoDBExplain(t *testing.T) { dsn := tests.GetTestMongoDBDSN(t) client := tests.OpenTestMongoDB(t, dsn) - defer client.Database(database).Drop(ctx) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, client.Database(database).Drop(ctx)) + }) err := prepareData(ctx, client, database, collection) require.NoError(t, err) @@ -327,7 +332,9 @@ func TestNewMongoDBExplain(t *testing.T) { dsn := tests.GetTestMongoDBDSN(t) client := tests.OpenTestMongoDB(t, dsn) - defer client.Database(database).Drop(ctx) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, client.Database(database).Drop(ctx)) + }) _, err := client.Database(database).Collection("people").InsertOne(ctx, bson.M{"last_name": "Brannigan", "first_name": "Zapp"}) require.NoError(t, err) diff --git a/agent/runner/actions/mysql_explain_action_test.go b/agent/runner/actions/mysql_explain_action_test.go index 0d2261e209..4717da760a 100644 --- a/agent/runner/actions/mysql_explain_action_test.go +++ b/agent/runner/actions/mysql_explain_action_test.go @@ -38,7 +38,9 @@ func TestMySQLExplain(t *testing.T) { dsn := tests.GetTestMySQLDSN(t) sqlDB := tests.OpenTestMySQL(t) - t.Cleanup(func() { sqlDB.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) q := reform.NewDB(sqlDB, mysql.Dialect, reform.NewPrintfLogger(t.Logf)).WithTag(queryTag) ctx := context.Background() @@ -303,11 +305,13 @@ func TestMySQLExplain(t *testing.T) { // setup func(t *testing.T) { t.Helper() - ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*2) defer cancel() conn, err := sqlDB.Conn(ctx) require.NoError(t, err) - defer conn.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, conn.Close()) + }) _, err = conn.ExecContext(ctx, "DROP TABLE IF EXISTS test_explain_table") require.NoError(t, err) diff --git a/agent/runner/actions/mysql_query_select_action_test.go b/agent/runner/actions/mysql_query_select_action_test.go index 1617c1da99..354a44b3f4 100644 --- a/agent/runner/actions/mysql_query_select_action_test.go +++ b/agent/runner/actions/mysql_query_select_action_test.go @@ -32,7 +32,9 @@ func TestMySQLQuerySelect(t *testing.T) { dsn := tests.GetTestMySQLDSN(t) db := tests.OpenTestMySQL(t) - t.Cleanup(func() { db.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, db.Close()) + }) t.Run("Default", func(t *testing.T) { t.Parallel() diff --git a/agent/runner/actions/mysql_query_show_action_test.go b/agent/runner/actions/mysql_query_show_action_test.go index 3c6c73fca3..a9f879b148 100644 --- a/agent/runner/actions/mysql_query_show_action_test.go +++ b/agent/runner/actions/mysql_query_show_action_test.go @@ -32,7 +32,9 @@ func TestMySQLQueryShow(t *testing.T) { dsn := tests.GetTestMySQLDSN(t) db := tests.OpenTestMySQL(t) - t.Cleanup(func() { db.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, db.Close()) + }) t.Run("Default", func(t *testing.T) { t.Parallel() diff --git a/agent/runner/actions/mysql_show_create_table_action_test.go b/agent/runner/actions/mysql_show_create_table_action_test.go index 2bad8c7755..4e8b036bdf 100644 --- a/agent/runner/actions/mysql_show_create_table_action_test.go +++ b/agent/runner/actions/mysql_show_create_table_action_test.go @@ -35,7 +35,9 @@ func TestMySQLShowCreateTable(t *testing.T) { dsn := tests.GetTestMySQLDSN(t) sqlDB := tests.OpenTestMySQL(t) - t.Cleanup(func() { sqlDB.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) q := reform.NewDB(sqlDB, mysql.Dialect, reform.NewPrintfLogger(t.Logf)).WithTag(queryTag) ctx := context.Background() diff --git a/agent/runner/actions/mysql_show_index_action_test.go b/agent/runner/actions/mysql_show_index_action_test.go index 0b25e49d20..7bd8edd426 100644 --- a/agent/runner/actions/mysql_show_index_action_test.go +++ b/agent/runner/actions/mysql_show_index_action_test.go @@ -35,7 +35,9 @@ func TestMySQLShowIndex(t *testing.T) { dsn := tests.GetTestMySQLDSN(t) sqlDB := tests.OpenTestMySQL(t) - t.Cleanup(func() { sqlDB.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) q := reform.NewDB(sqlDB, mysql.Dialect, reform.NewPrintfLogger(t.Logf)).WithTag(queryTag) ctx := context.Background() diff --git a/agent/runner/actions/mysql_show_table_status_action_test.go b/agent/runner/actions/mysql_show_table_status_action_test.go index 0a6a26757f..463a1b2643 100644 --- a/agent/runner/actions/mysql_show_table_status_action_test.go +++ b/agent/runner/actions/mysql_show_table_status_action_test.go @@ -32,7 +32,9 @@ func TestShowTableStatus(t *testing.T) { dsn := tests.GetTestMySQLDSN(t) db := tests.OpenTestMySQL(t) - t.Cleanup(func() { db.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, db.Close()) + }) t.Run("Default", func(t *testing.T) { t.Parallel() diff --git a/agent/runner/actions/postgresql_query_select_action_test.go b/agent/runner/actions/postgresql_query_select_action_test.go index e5341c43bb..f7c5928f1d 100644 --- a/agent/runner/actions/postgresql_query_select_action_test.go +++ b/agent/runner/actions/postgresql_query_select_action_test.go @@ -33,7 +33,9 @@ func TestPostgreSQLQuerySelect(t *testing.T) { dsn := tests.GetTestPostgreSQLDSN(t) db := tests.OpenTestPostgreSQL(t) - t.Cleanup(func() { db.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, db.Close()) + }) t.Run("Default", func(t *testing.T) { t.Parallel() diff --git a/agent/runner/actions/postgresql_query_show_action_test.go b/agent/runner/actions/postgresql_query_show_action_test.go index 1b5ce7ba24..7c147a6b0a 100644 --- a/agent/runner/actions/postgresql_query_show_action_test.go +++ b/agent/runner/actions/postgresql_query_show_action_test.go @@ -33,7 +33,9 @@ func TestPostgreSQLQueryShow(t *testing.T) { dsn := tests.GetTestPostgreSQLDSN(t) db := tests.OpenTestPostgreSQL(t) - t.Cleanup(func() { db.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, db.Close()) + }) t.Run("Default", func(t *testing.T) { t.Parallel() diff --git a/agent/runner/actions/postgresql_show_create_table_action_test.go b/agent/runner/actions/postgresql_show_create_table_action_test.go index 5e7cf50744..e68f1ee154 100644 --- a/agent/runner/actions/postgresql_show_create_table_action_test.go +++ b/agent/runner/actions/postgresql_show_create_table_action_test.go @@ -32,7 +32,9 @@ func TestPostgreSQLShowCreateTable(t *testing.T) { dsn := tests.GetTestPostgreSQLDSN(t) db := tests.OpenTestPostgreSQL(t) - t.Cleanup(func() { db.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, db.Close()) + }) t.Run("With Schema Name", func(t *testing.T) { t.Parallel() diff --git a/agent/runner/actions/postgresql_show_index_action_test.go b/agent/runner/actions/postgresql_show_index_action_test.go index 3d497dc7d3..00e7f2cebf 100644 --- a/agent/runner/actions/postgresql_show_index_action_test.go +++ b/agent/runner/actions/postgresql_show_index_action_test.go @@ -33,7 +33,9 @@ func TestPostgreSQLShowIndex(t *testing.T) { dsn := tests.GetTestPostgreSQLDSN(t) db := tests.OpenTestPostgreSQL(t) - t.Cleanup(func() { db.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, db.Close()) + }) t.Run("Default", func(t *testing.T) { t.Parallel() diff --git a/agent/runner/jobs/mysql_backup_job.go b/agent/runner/jobs/mysql_backup_job.go index c5a2460536..51c10cf9de 100644 --- a/agent/runner/jobs/mysql_backup_job.go +++ b/agent/runner/jobs/mysql_backup_job.go @@ -171,8 +171,8 @@ func (j *MySQLBackupJob) backup(ctx context.Context) (rerr error) { } var xbcloudCmd *exec.Cmd - switch { - case j.locationConfig.Type == S3BackupLocationType: + switch j.locationConfig.Type { + case S3BackupLocationType: xtrabackupCmd.Args = append(xtrabackupCmd.Args, "--stream=xbstream") artifactFolder := path.Join(j.folder, j.name) diff --git a/agent/utils/version/mysql_test.go b/agent/utils/version/mysql_test.go index ce3accceaa..f5d322550b 100644 --- a/agent/utils/version/mysql_test.go +++ b/agent/utils/version/mysql_test.go @@ -31,7 +31,10 @@ func TestGetMySQLVersion(t *testing.T) { t.Log("error creating mock database") return } - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + _ = mock.ExpectClose() + assert.NoError(t, sqlDB.Close()) + }) q := reform.NewDB(sqlDB, mysql.Dialect, reform.NewPrintfLogger(t.Logf)).WithTag("pmm-agent:mysqlversion") ctx := context.Background() diff --git a/api-tests/server/auth_test.go b/api-tests/server/auth_test.go index d8631eba12..e451c3d8ae 100644 --- a/api-tests/server/auth_test.go +++ b/api-tests/server/auth_test.go @@ -68,7 +68,9 @@ func TestAuth(t *testing.T) { req, _ := http.NewRequestWithContext(pmmapitests.Context, http.MethodGet, uri.String(), nil) resp, err := http.DefaultClient.Do(req) require.NoError(t, err) - defer resp.Body.Close() //nolint:gosec,errcheck,nolintlint + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) b, err := httputil.DumpResponse(resp, true) require.NoError(t, err) @@ -126,7 +128,9 @@ func TestSwagger(t *testing.T) { resp, err := http.DefaultClient.Do(req) require.NoError(t, err) - defer resp.Body.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) assert.Equal(t, 401, resp.StatusCode) }) @@ -154,7 +158,9 @@ func TestSwagger(t *testing.T) { resp, err := client.Do(req) require.NoError(t, err) - defer resp.Body.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) assert.Equal(t, 200, resp.StatusCode) }) @@ -167,7 +173,9 @@ func doRequest(tb testing.TB, client *http.Client, req *http.Request) (*http.Res resp, err := client.Do(req) require.NoError(tb, err) - defer resp.Body.Close() //nolint:errcheck + tb.Cleanup(func() { + assert.NoError(tb, resp.Body.Close()) + }) b, err := io.ReadAll(resp.Body) require.NoError(tb, err) @@ -231,7 +239,9 @@ func TestBasicAuthPermissions(t *testing.T) { resp, err := http.DefaultClient.Do(req) require.NoError(t, err) - defer resp.Body.Close() //nolint:gosec,errcheck,nolintlint + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) assert.Equal(t, user.statusCode, resp.StatusCode) }) @@ -378,7 +388,9 @@ func TestServiceAccountPermissions(t *testing.T) { resp, err := http.DefaultClient.Do(req) require.NoError(t, err) - defer resp.Body.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) assert.Equal(t, user.statusCode, resp.StatusCode) }) @@ -394,7 +406,9 @@ func TestServiceAccountPermissions(t *testing.T) { resp, err := http.DefaultClient.Do(req) require.NoError(t, err) - defer resp.Body.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) assert.Equal(t, user.statusCode, resp.StatusCode) }) @@ -421,8 +435,7 @@ func createServiceAccountWithRole(t *testing.T, role, nodeName string) int { req.Header.Set("Content-Type", "application/json; charset=utf-8") - resp, b := doRequest(t, http.DefaultClient, req) - defer resp.Body.Close() //nolint:errcheck + resp, b := doRequest(t, http.DefaultClient, req) //nolint:bodyclose require.Equalf(t, http.StatusCreated, resp.StatusCode, "failed to create Service account, status code: %d, response: %s", resp.StatusCode, b) @@ -442,8 +455,7 @@ func createServiceAccountWithRole(t *testing.T, role, nodeName string) int { req.Header.Set("Content-Type", "application/json; charset=utf-8") - resp1, b := doRequest(t, http.DefaultClient, req) - defer resp1.Body.Close() //nolint:errcheck + resp, b = doRequest(t, http.DefaultClient, req) //nolint:bodyclose require.Equalf(t, http.StatusCreated, resp.StatusCode, "failed to set orgId=1 to Service account, status code: %d, response: %s", resp.StatusCode, b) @@ -459,8 +471,7 @@ func deleteServiceAccount(t *testing.T, serviceAccountID int) { req, err := http.NewRequestWithContext(pmmapitests.Context, http.MethodDelete, u.String(), nil) require.NoError(t, err) - resp, b := doRequest(t, http.DefaultClient, req) - defer resp.Body.Close() //nolint:gosec,errcheck,nolintlint + resp, b := doRequest(t, http.DefaultClient, req) //nolint:bodyclose require.Equalf(t, http.StatusOK, resp.StatusCode, "failed to delete service account, status code: %d, response: %s", resp.StatusCode, b) } @@ -482,8 +493,7 @@ func createServiceToken(t *testing.T, serviceAccountID int, nodeName string) (in req.Header.Set("Content-Type", "application/json; charset=utf-8") - resp, b := doRequest(t, http.DefaultClient, req) - defer resp.Body.Close() //nolint:gosec,errcheck,nolintlint + resp, b := doRequest(t, http.DefaultClient, req) //nolint:bodyclose require.Equalf(t, http.StatusOK, resp.StatusCode, "failed to create Service account, status code: %d, response: %s", resp.StatusCode, b) @@ -503,8 +513,7 @@ func deleteServiceToken(t *testing.T, serviceAccountID, serviceTokenID int) { req, err := http.NewRequestWithContext(pmmapitests.Context, http.MethodDelete, u.String(), nil) require.NoError(t, err) - resp, b := doRequest(t, http.DefaultClient, req) - defer resp.Body.Close() //nolint:errcheck + resp, b := doRequest(t, http.DefaultClient, req) //nolint:bodyclose require.Equalf(t, http.StatusOK, resp.StatusCode, "failed to delete service token, status code: %d, response: %s", resp.StatusCode, b) } diff --git a/api-tests/server/readyz_test.go b/api-tests/server/readyz_test.go index 10d49d2228..a2347c6fcf 100644 --- a/api-tests/server/readyz_test.go +++ b/api-tests/server/readyz_test.go @@ -22,6 +22,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" pmmapitests "github.com/percona/pmm/api-tests" @@ -57,7 +58,9 @@ func TestReadyz(t *testing.T) { if err != nil { return false } - defer resp.Body.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) b, err := io.ReadAll(resp.Body) if err != nil { diff --git a/api-tests/server/serialization_test.go b/api-tests/server/serialization_test.go index 4afd8264c6..26dce871cd 100644 --- a/api-tests/server/serialization_test.go +++ b/api-tests/server/serialization_test.go @@ -50,7 +50,9 @@ func TestSerialization(t *testing.T) { resp, err := http.DefaultClient.Do(req) require.NoError(t, err) - defer resp.Body.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) b, err := io.ReadAll(resp.Body) require.NoError(t, err) diff --git a/api-tests/server/settings/settings_test.go b/api-tests/server/settings/settings_test.go index e4ef24f9cb..7e4986776f 100644 --- a/api-tests/server/settings/settings_test.go +++ b/api-tests/server/settings/settings_test.go @@ -732,7 +732,9 @@ func TestSettings(t *testing.T) { } b, err = io.ReadAll(resp.Body) require.NoError(t, err) - resp.Body.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) if get == "" { require.Equal(t, 400, resp.StatusCode, "response:\n%s", b) @@ -766,7 +768,9 @@ func TestSettings(t *testing.T) { } b, err = io.ReadAll(resp.Body) require.NoError(t, err) - resp.Body.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) assert.Equal(t, 200, resp.StatusCode, "response:\n%s", b) p.Settings.MetricsResolutions.LR = "" diff --git a/api-tests/server/version_test.go b/api-tests/server/version_test.go index 8413391697..5f092d4cbc 100644 --- a/api-tests/server/version_test.go +++ b/api-tests/server/version_test.go @@ -48,7 +48,9 @@ func TestVersion(t *testing.T) { req, _ := http.NewRequestWithContext(pmmapitests.Context, http.MethodGet, uri.String(), nil) resp, err := http.DefaultClient.Do(req) require.NoError(t, err) - defer resp.Body.Close() //nolint:gosec,errcheck,nolintlint + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) b, err := io.ReadAll(resp.Body) require.NoError(t, err) diff --git a/managed/cmd/pmm-managed/main_test.go b/managed/cmd/pmm-managed/main_test.go index 065f9cc4d8..17e536726f 100644 --- a/managed/cmd/pmm-managed/main_test.go +++ b/managed/cmd/pmm-managed/main_test.go @@ -182,15 +182,18 @@ func TestImports(t *testing.T) { } sort.Strings(lines) - fmt.Fprintf(f, "digraph packages {\n") //nolint:errcheck + _, err = fmt.Fprintf(f, "digraph packages {\n") + require.NoError(t, err) duplicate := make(map[string]struct{}) for _, line := range lines { if _, ok := duplicate[line]; !ok { duplicate[line] = struct{}{} - fmt.Fprint(f, line) //nolint:errcheck + _, err = fmt.Fprint(f, line) + require.NoError(t, err) } } - fmt.Fprintf(f, "}\n") + _, err = fmt.Fprintf(f, "}\n") + require.NoError(t, err) } func formatPkgName(t *testing.T, name string) string { diff --git a/managed/models/agent_helpers.go b/managed/models/agent_helpers.go index 6a15b98c82..92c82e1ea9 100644 --- a/managed/models/agent_helpers.go +++ b/managed/models/agent_helpers.go @@ -719,7 +719,7 @@ type CreateExternalExporterParams struct { // CreateExternalExporter creates ExternalExporter. func CreateExternalExporter(q *reform.Querier, params *CreateExternalExporterParams) (*Agent, error) { - if !(params.ListenPort > 0 && params.ListenPort < 65536) { + if params.ListenPort <= 0 || params.ListenPort >= 65536 { return nil, status.Errorf(codes.InvalidArgument, "Listen port should be between 1 and 65535.") } var pmmAgentID *string diff --git a/managed/models/database_test.go b/managed/models/database_test.go index ad7586d550..c57d538a3e 100644 --- a/managed/models/database_test.go +++ b/managed/models/database_test.go @@ -358,7 +358,9 @@ func TestDatabaseChecks(t *testing.T) { func TestDatabaseMigrations(t *testing.T) { t.Run("push metrics field migration: from root to exporter_options", func(t *testing.T) { sqlDB := testdb.Open(t, models.SkipFixtures, new(58)) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) // Insert dummy node in DB _, err := sqlDB.ExecContext( diff --git a/managed/models/dump_helpers_test.go b/managed/models/dump_helpers_test.go index ed76ac7e5a..1d0c967286 100644 --- a/managed/models/dump_helpers_test.go +++ b/managed/models/dump_helpers_test.go @@ -100,7 +100,9 @@ func TestDumps(t *testing.T) { t.Run("find", func(t *testing.T) { findTX, err := db.Begin() require.NoError(t, err) - defer findTX.Rollback() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, findTX.Rollback()) + }) endTime := time.Now() startTime := endTime.Add(-10 * time.Minute) @@ -135,7 +137,7 @@ func TestDumps(t *testing.T) { }) require.NoError(t, err) dump3.Status = models.DumpStatusError - err = findTX.Querier.Update(dump3) + err = findTX.Update(dump3) require.NoError(t, err) type testCase struct { diff --git a/managed/models/job_helpers_test.go b/managed/models/job_helpers_test.go index a3c72c1de3..45a5d47a02 100644 --- a/managed/models/job_helpers_test.go +++ b/managed/models/job_helpers_test.go @@ -72,7 +72,9 @@ func TestJobs(t *testing.T) { t.Run("find", func(t *testing.T) { findTX, err := db.Begin() require.NoError(t, err) - defer findTX.Rollback() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, findTX.Rollback()) + }) const jobsCount = 3 jobs := make([]*models.Job, 0, jobsCount) diff --git a/managed/models/postgresql_version_test.go b/managed/models/postgresql_version_test.go index 505d57d8e7..9f203dc922 100644 --- a/managed/models/postgresql_version_test.go +++ b/managed/models/postgresql_version_test.go @@ -74,7 +74,10 @@ func TestGetPostgreSQLVersion(t *testing.T) { sqlDB, mock, err := sqlmock.New() require.NoError(t, err) - t.Cleanup(func() { sqlDB.Close() }) //nolint:errcheck + t.Cleanup(func() { + _ = mock.ExpectClose() + assert.NoError(t, sqlDB.Close()) + }) q := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)).WithTag("pmm-agent:postgresqlversion") ctx := t.Context() diff --git a/managed/models/role_helpers.go b/managed/models/role_helpers.go index 7f8cc162bf..12f784e2ff 100644 --- a/managed/models/role_helpers.go +++ b/managed/models/role_helpers.go @@ -173,7 +173,7 @@ func replaceRole(tx *reform.TX, roleID, newRoleID int) error { // findRole retrieves a role by ID. func findRole(tx *reform.TX, roleID int, role *Role) error { - err := tx.Querier.SelectOneTo(role, "WHERE id = $1", roleID) + err := tx.SelectOneTo(role, "WHERE id = $1", roleID) if err != nil { if errors.Is(err, reform.ErrNoRows) { return ErrRoleNotFound diff --git a/managed/models/software_version_helpers.go b/managed/models/software_version_helpers.go index e4f72a3f2d..43b945f545 100644 --- a/managed/models/software_version_helpers.go +++ b/managed/models/software_version_helpers.go @@ -195,7 +195,10 @@ func FindServicesSoftwareVersions( if err := ValidateServiceType(*filter.ServiceType); err != nil { return nil, errors.WithStack(err) } - tail.WriteString(fmt.Sprintf("WHERE service_type = %s ", q.Placeholder(idx))) + _, err := fmt.Fprintf(&tail, "WHERE service_type = %s ", q.Placeholder(idx)) + if err != nil { + return nil, errors.WithStack(err) + } args = append(args, string(*filter.ServiceType)) idx++ } @@ -207,7 +210,10 @@ func FindServicesSoftwareVersions( } if filter.Limit != nil { - tail.WriteString(fmt.Sprintf("LIMIT %s", q.Placeholder(idx))) + _, err := fmt.Fprintf(&tail, "LIMIT %s", q.Placeholder(idx)) + if err != nil { + return nil, errors.WithStack(err) + } args = append(args, *filter.Limit) } diff --git a/managed/services/agents/connection_checker_test.go b/managed/services/agents/connection_checker_test.go index 33719c9c24..f4eaaf9c2f 100644 --- a/managed/services/agents/connection_checker_test.go +++ b/managed/services/agents/connection_checker_test.go @@ -33,7 +33,10 @@ func TestConnectionRequestUsesExporterConnectionTimeout(t *testing.T) { sqlDB, mock, err := sqlmock.New() require.NoError(t, err) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + _ = mock.ExpectClose() + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) mock.ExpectQuery(`SELECT .+ FROM "agents" WHERE .+ LIMIT 1`). @@ -120,7 +123,10 @@ func TestConnectionRequestDialTimeoutPostgreSQLCloudDefaults(t *testing.T) { sqlDB, mock, err := sqlmock.New() require.NoError(t, err) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + _ = mock.ExpectClose() + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) nodeColumns := []string{ diff --git a/managed/services/agents/handler_test.go b/managed/services/agents/handler_test.go index ff145dc05b..f1096c4e73 100644 --- a/managed/services/agents/handler_test.go +++ b/managed/services/agents/handler_test.go @@ -46,7 +46,10 @@ func TestCheckPortChanged(t *testing.T) { sqlDB, mock, err := sqlmock.New() require.NoError(t, err) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + _ = mock.ExpectClose() + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) @@ -66,7 +69,10 @@ func TestCheckPortChanged(t *testing.T) { sqlDB, mock, err := sqlmock.New() require.NoError(t, err) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + _ = mock.ExpectClose() + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) @@ -118,7 +124,10 @@ func TestCheckPortChanged(t *testing.T) { sqlDB, mock, err := sqlmock.New() require.NoError(t, err) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + _ = mock.ExpectClose() + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) @@ -170,7 +179,10 @@ func TestCheckPortChanged(t *testing.T) { sqlDB, mock, err := sqlmock.New() require.NoError(t, err) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + _ = mock.ExpectClose() + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) @@ -222,7 +234,10 @@ func TestCheckPortChanged(t *testing.T) { sqlDB, mock, err := sqlmock.New() require.NoError(t, err) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + _ = mock.ExpectClose() + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) diff --git a/managed/services/agents/jobs.go b/managed/services/agents/jobs.go index 266ec5bef7..82e21dd64a 100644 --- a/managed/services/agents/jobs.go +++ b/managed/services/agents/jobs.go @@ -238,7 +238,7 @@ func (s *JobsService) handleJobResult(_ context.Context, l *logrus.Entry, result return errors.Wrapf(err, "cannot get scheduled task %s", scheduleID) } taskData := task.Data - taskData.MongoDBBackupTask.CommonBackupTaskData.Folder = artifact.Name + taskData.MongoDBBackupTask.Folder = artifact.Name params := models.ChangeScheduledTaskParams{ Data: taskData, @@ -272,9 +272,10 @@ func (s *JobsService) handleJobResult(_ context.Context, l *logrus.Entry, result return errors.Errorf("result type %s doesn't match job type %s", models.MongoDBRestoreBackupJob, job.Type) } - if job.Data.MongoDBRestoreBackup.DataModel == models.LogicalDataModel { + switch job.Data.MongoDBRestoreBackup.DataModel { + case models.LogicalDataModel: s.l.Info("restore successfully completed") - } else if job.Data.MongoDBRestoreBackup.DataModel == models.PhysicalDataModel { + case models.PhysicalDataModel: s.l.Info("restore successfully completed, PMM will restart mongod and pbm-agent") if err := s.runMongoPostRestore(t.Querier, job.Data.MongoDBRestoreBackup.ServiceID); err != nil { s.l.WithError(err).Error("failed to restart components after restore from a physical backup") diff --git a/managed/services/backup/removal_service.go b/managed/services/backup/removal_service.go index f6f35848f8..ae9824daea 100644 --- a/managed/services/backup/removal_service.go +++ b/managed/services/backup/removal_service.go @@ -186,7 +186,7 @@ func (s *RemovalService) lockArtifact(artifactID string, lockingStatus models.Ba err error ) - errTx := s.db.InTransactionContext(s.db.Querier.Context(), &sql.TxOptions{Isolation: sql.LevelSerializable}, func(tx *reform.TX) error { + errTx := s.db.InTransactionContext(s.db.Context(), &sql.TxOptions{Isolation: sql.LevelSerializable}, func(tx *reform.TX) error { artifact, err = models.FindArtifactByID(tx.Querier, artifactID) if err != nil { return err diff --git a/managed/services/encryption/encryption_rotation_test.go b/managed/services/encryption/encryption_rotation_test.go index b49a53514f..cf90575c5f 100644 --- a/managed/services/encryption/encryption_rotation_test.go +++ b/managed/services/encryption/encryption_rotation_test.go @@ -22,6 +22,7 @@ import ( "time" "github.com/pkg/errors" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/percona/pmm/managed/models" @@ -40,7 +41,9 @@ const ( func TestEncryptionRotation(t *testing.T) { db := testdb.Open(t, models.SkipFixtures, nil) - defer db.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, db.Close()) + }) err := createOriginalEncryptionKey(t) require.NoError(t, err) diff --git a/managed/services/inventory/inventory_metrics_test.go b/managed/services/inventory/inventory_metrics_test.go index 08b8f16cb0..c8c7046bbb 100644 --- a/managed/services/inventory/inventory_metrics_test.go +++ b/managed/services/inventory/inventory_metrics_test.go @@ -43,7 +43,9 @@ func TestNewInventoryMetricsCollector(t *testing.T) { require.NoError(t, err) resp, err := client.Do(req) require.NoError(t, err) - defer resp.Body.Close() //nolint:gosec,errcheck,nolintlint + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) body, err := io.ReadAll(resp.Body) require.NoError(t, err) diff --git a/managed/services/management/accesscontrol.go b/managed/services/management/accesscontrol.go index d0e5941543..f149ee95ec 100644 --- a/managed/services/management/accesscontrol.go +++ b/managed/services/management/accesscontrol.go @@ -128,7 +128,8 @@ func (acs *AccessControlService) DeleteRole(ctx context.Context, req *rolev1beta // GetRole retrieves a Role. func (acs *AccessControlService) GetRole(_ context.Context, req *rolev1beta1.GetRoleRequest) (*rolev1beta1.GetRoleResponse, error) { var role models.Role - if err := acs.db.Querier.FindByPrimaryKeyTo(&role, req.RoleId); err != nil { + err := acs.db.FindByPrimaryKeyTo(&role, req.RoleId) + if err != nil { if errors.As(err, &reform.ErrNoRows) { return nil, status.Errorf(codes.NotFound, "Role not found") } @@ -146,7 +147,7 @@ func (acs *AccessControlService) GetRole(_ context.Context, req *rolev1beta1.Get // ListRoles lists all Roles. func (acs *AccessControlService) ListRoles(_ context.Context, _ *rolev1beta1.ListRolesRequest) (*rolev1beta1.ListRolesResponse, error) { - rows, err := acs.db.Querier.SelectAllFrom(models.RoleTable, "") + rows, err := acs.db.SelectAllFrom(models.RoleTable, "") if err != nil { return nil, err } diff --git a/managed/services/management/accesscontrol_test.go b/managed/services/management/accesscontrol_test.go index dc8418dc35..2b4d94dded 100644 --- a/managed/services/management/accesscontrol_test.go +++ b/managed/services/management/accesscontrol_test.go @@ -53,9 +53,9 @@ func TestAccessControlService(t *testing.T) { teardown := func(t *testing.T) { t.Helper() - _, err := db.Querier.DeleteFrom(models.RoleTable, "") + _, err := db.DeleteFrom(models.RoleTable, "") require.NoError(t, err) - _, err = db.Querier.DeleteFrom(models.UserDetailsTable, "") + _, err = db.DeleteFrom(models.UserDetailsTable, "") require.NoError(t, err) } diff --git a/managed/services/management/add_service_exporter_timeout_test.go b/managed/services/management/add_service_exporter_timeout_test.go index a390b0d9ef..73b5ada35b 100644 --- a/managed/services/management/add_service_exporter_timeout_test.go +++ b/managed/services/management/add_service_exporter_timeout_test.go @@ -42,7 +42,9 @@ func TestAddServiceExporterTimeout(t *testing.T) { ctx := logger.Set(context.Background(), t.Name()) sqlDB := testdb.Open(t, models.SetupFixtures, nil) - t.Cleanup(func() { sqlDB.Close() }) //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) cc := &mockConnectionChecker{} diff --git a/managed/services/management/rds_test.go b/managed/services/management/rds_test.go index 2b76a26a7b..fed69a8b71 100644 --- a/managed/services/management/rds_test.go +++ b/managed/services/management/rds_test.go @@ -50,7 +50,9 @@ func TestRDSService(t *testing.T) { defer uuid.SetRand(nil) sqlDB := testdb.Open(t, models.SetupFixtures, nil) - defer sqlDB.Close() //nolint:errcheck + t.Cleanup(func() { + assert.NoError(t, sqlDB.Close()) + }) db := reform.NewDB(sqlDB, postgresql.Dialect, reform.NewPrintfLogger(t.Logf)) cc := &mockConnectionChecker{} diff --git a/managed/services/minio/client.go b/managed/services/minio/client.go index 037d6c84cb..9ae6640036 100644 --- a/managed/services/minio/client.go +++ b/managed/services/minio/client.go @@ -208,10 +208,7 @@ func createMinioClient(endpoint, accessKey, secretKey string) (*minio.Client, er return nil, err } - secure := true - if url.Scheme == "http" { - secure = false - } + secure := url.Scheme != "http" return minio.New(url.Host, &minio.Options{ Secure: secure, diff --git a/managed/services/scheduler/scheduler.go b/managed/services/scheduler/scheduler.go index 401445dc07..b526eac209 100644 --- a/managed/services/scheduler/scheduler.go +++ b/managed/services/scheduler/scheduler.go @@ -85,7 +85,7 @@ func (s *Service) Add(task Task, params AddParams) (*models.ScheduledTask, error var scheduledTask *models.ScheduledTask // This transaction is valid only with serializable isolation level. On lower isolation levels it can produce anomalies. - errTx := s.db.InTransactionContext(s.db.Querier.Context(), &sql.TxOptions{Isolation: sql.LevelSerializable}, func(tx *reform.TX) error { + errTx := s.db.InTransactionContext(s.db.Context(), &sql.TxOptions{Isolation: sql.LevelSerializable}, func(tx *reform.TX) error { var err error if err = checkAddPreconditions(tx.Querier, task.Data(), !params.Disabled, ""); err != nil { return err @@ -157,7 +157,7 @@ func (s *Service) Remove(id string) error { // Update changes scheduled task in DB and re-add it to scheduler. func (s *Service) Update(id string, params models.ChangeScheduledTaskParams) error { - return s.db.InTransactionContext(s.db.Querier.Context(), &sql.TxOptions{Isolation: sql.LevelSerializable}, func(tx *reform.TX) error { + return s.db.InTransactionContext(s.db.Context(), &sql.TxOptions{Isolation: sql.LevelSerializable}, func(tx *reform.TX) error { if err := checkUpdatePreconditions(tx.Querier, params.Data, !pointer.GetBool(params.Disable), id); err != nil { return err } diff --git a/managed/services/server/logs_test.go b/managed/services/server/logs_test.go index 5d0d8bad07..6c9f740058 100644 --- a/managed/services/server/logs_test.go +++ b/managed/services/server/logs_test.go @@ -72,10 +72,13 @@ func TestReadLog(t *testing.T) { require.NoError(t, err) for i := range 10 { - fmt.Fprintf(f, "line #%03d\n", i) //nolint:errcheck // 10 bytes - fmt.Fprintf(fNoNewLineEnding, "line #%03d\n", i) //nolint:errcheck // 10 bytes + _, err = fmt.Fprintf(f, "line #%03d\n", i) // 10 bytes + require.NoError(t, err) + _, err = fmt.Fprintf(fNoNewLineEnding, "line #%03d\n", i) // 10 bytes + require.NoError(t, err) } - fmt.Fprintf(fNoNewLineEnding, "some string without new line") //nolint:errcheck + _, err = fmt.Fprintf(fNoNewLineEnding, "some string without new line") + require.NoError(t, err) require.NoError(t, f.Close()) require.NoError(t, fNoNewLineEnding.Close()) @@ -107,10 +110,13 @@ func TestReadLogUnlimited(t *testing.T) { require.NoError(t, err) for i := range 10 { - fmt.Fprintf(f, "line #%03d\n", i) // 10 bytes - fmt.Fprintf(fNoNewLineEnding, "line #%03d\n", i) // 10 bytes + _, err = fmt.Fprintf(f, "line #%03d\n", i) // 10 bytes + require.NoError(t, err) + _, err = fmt.Fprintf(fNoNewLineEnding, "line #%03d\n", i) // 10 bytes + require.NoError(t, err) } - fmt.Fprintf(fNoNewLineEnding, "some string without new line") + _, err = fmt.Fprintf(fNoNewLineEnding, "some string without new line") + require.NoError(t, err) require.NoError(t, f.Close()) require.NoError(t, fNoNewLineEnding.Close()) diff --git a/managed/utils/dir/dir_test.go b/managed/utils/dir/dir_test.go index aa9fbe6483..842b815b7f 100644 --- a/managed/utils/dir/dir_test.go +++ b/managed/utils/dir/dir_test.go @@ -46,7 +46,11 @@ func TestCreateDataDir(t *testing.T) { for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { t.Parallel() - defer os.Remove(tc.path) //nolint:errcheck + if tc.path != "" { + t.Cleanup(func() { + assert.NoError(t, os.Remove(tc.path)) + }) + } err := CreateDataDir(tc.path, tc.perm) if tc.err != "" { diff --git a/version/release_test.go b/version/release_test.go index 026c95fadf..ffdee0bb89 100644 --- a/version/release_test.go +++ b/version/release_test.go @@ -53,12 +53,12 @@ func TestFullInfoPlainManaged(t *testing.T) { setupDataForManaged() expected := strings.Join([]string{ - fmt.Sprintf("ProjectName: %s", ProjectName), //nolint:errcheck - fmt.Sprintf("Version: %s", Version), //nolint:errcheck - fmt.Sprintf("PMMVersion: %s", PMMVersion), //nolint:errcheck - fmt.Sprintf("Timestamp: %s", timestampFormatted()), //nolint:errcheck - fmt.Sprintf("FullCommit: %s", FullCommit), //nolint:errcheck - fmt.Sprintf("Branch: %s", Branch), //nolint:errcheck + "ProjectName: " + ProjectName, + "Version: " + Version, + "PMMVersion: " + PMMVersion, + "Timestamp: " + timestampFormatted(), + "FullCommit: " + FullCommit, + "Branch: " + Branch, }, "\n") actual := FullInfo() if expected != actual { diff --git a/vmproxy/proxy/proxy_test.go b/vmproxy/proxy/proxy_test.go index 050f607aaf..6888c9f74c 100644 --- a/vmproxy/proxy/proxy_test.go +++ b/vmproxy/proxy/proxy_test.go @@ -72,7 +72,9 @@ func TestProxy(t *testing.T) { handler.ServeHTTP(rec, req) resp := rec.Result() - defer resp.Body.Close() //nolint:gosec,errcheck,nolintlint + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) require.Equal(t, http.StatusOK, resp.StatusCode) }) @@ -159,7 +161,9 @@ func TestProxy(t *testing.T) { handler.ServeHTTP(rec, req) resp := rec.Result() - defer resp.Body.Close() //nolint:gosec,errcheck,nolintlint + t.Cleanup(func() { + assert.NoError(t, resp.Body.Close()) + }) require.Equal(t, tc.expectedStatus, resp.StatusCode) })