mirror of
https://github.com/prometheus/alertmanager.git
synced 2026-02-05 15:45:34 +01:00
chore: bump golangci-lint to v2.3.0
Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
This commit is contained in:
6
.github/workflows/golangci-lint.yml
vendored
6
.github/workflows/golangci-lint.yml
vendored
@@ -26,14 +26,14 @@ jobs:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0
|
||||
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0
|
||||
with:
|
||||
go-version: 1.24.x
|
||||
- name: Install snmp_exporter/generator dependencies
|
||||
run: sudo apt-get update && sudo apt-get -y install libsnmp-dev
|
||||
if: github.repository == 'prometheus/snmp_exporter'
|
||||
- name: Lint
|
||||
uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
|
||||
uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0
|
||||
with:
|
||||
args: --verbose
|
||||
version: v1.64.6
|
||||
version: v2.3.0
|
||||
|
||||
169
.golangci.yml
169
.golangci.yml
@@ -1,99 +1,96 @@
|
||||
output:
|
||||
sort-results: true
|
||||
|
||||
version: "2"
|
||||
linters:
|
||||
enable:
|
||||
- depguard
|
||||
- errorlint
|
||||
- godot
|
||||
- gofumpt
|
||||
- goimports
|
||||
- misspell
|
||||
- revive
|
||||
- testifylint
|
||||
- sloglint
|
||||
|
||||
- testifylint
|
||||
settings:
|
||||
depguard:
|
||||
rules:
|
||||
main:
|
||||
deny:
|
||||
- pkg: sync/atomic
|
||||
desc: "Use go.uber.org/atomic instead of sync/atomic"
|
||||
- pkg: github.com/stretchr/testify/assert
|
||||
desc: "Use github.com/stretchr/testify/require instead of github.com/stretchr/testify/assert"
|
||||
- pkg: github.com/go-kit/kit/log
|
||||
desc: "Use github.com/go-kit/log instead of github.com/go-kit/kit/log"
|
||||
- pkg: github.com/pkg/errors
|
||||
desc: "Use errors or fmt instead of github.com/pkg/errors"
|
||||
errcheck:
|
||||
exclude-functions:
|
||||
# Don't flag lines such as "io.Copy(io.Discard, resp.Body)".
|
||||
- io.Copy
|
||||
# The next two are used in HTTP handlers, any error is handled by the server itself.
|
||||
- io.WriteString
|
||||
- (net/http.ResponseWriter).Write
|
||||
# No need to check for errors on server's shutdown.
|
||||
- (*net/http.Server).Shutdown
|
||||
# Never check for rollback errors as Rollback() is called when a previous error was detected.
|
||||
- (github.com/prometheus/prometheus/storage.Appender).Rollback
|
||||
godot:
|
||||
scope: toplevel
|
||||
exclude:
|
||||
- "^ ?This file is safe to edit"
|
||||
- "^ ?scheme value"
|
||||
period: true
|
||||
capital: true
|
||||
revive:
|
||||
rules:
|
||||
- name: blank-imports
|
||||
- name: context-as-argument
|
||||
- name: error-naming
|
||||
- name: error-return
|
||||
- name: error-strings
|
||||
- name: errorf
|
||||
- name: exported
|
||||
arguments:
|
||||
- disableStutteringCheck
|
||||
- name: if-return
|
||||
- name: increment-decrement
|
||||
- name: indent-error-flow
|
||||
- name: package-comments
|
||||
- name: range
|
||||
- name: receiver-naming
|
||||
- name: time-naming
|
||||
- name: unexported-return
|
||||
- name: var-declaration
|
||||
- name: var-naming
|
||||
testifylint:
|
||||
disable:
|
||||
- float-compare
|
||||
- go-require
|
||||
enable-all: true
|
||||
exclusions:
|
||||
presets:
|
||||
- comments
|
||||
- common-false-positives
|
||||
- legacy
|
||||
- std-error-handling
|
||||
paths:
|
||||
# Skip autogenerated files.
|
||||
- ^.*\.(pb|y)\.go$
|
||||
rules:
|
||||
- linters:
|
||||
- errcheck
|
||||
path: _test.go
|
||||
warn-unused: true
|
||||
issues:
|
||||
max-issues-per-linter: 0
|
||||
max-same-issues: 0
|
||||
exclude-rules:
|
||||
- path: _test.go
|
||||
linters:
|
||||
- errcheck
|
||||
exclude-files:
|
||||
# Skip autogenerated files.
|
||||
- ^.*\.(pb|y)\.go$
|
||||
|
||||
run:
|
||||
timeout: 5m
|
||||
|
||||
linters-settings:
|
||||
depguard:
|
||||
rules:
|
||||
main:
|
||||
deny:
|
||||
- pkg: sync/atomic
|
||||
desc: "Use go.uber.org/atomic instead of sync/atomic"
|
||||
- pkg: github.com/stretchr/testify/assert
|
||||
desc: "Use github.com/stretchr/testify/require instead of github.com/stretchr/testify/assert"
|
||||
- pkg: github.com/go-kit/kit/log
|
||||
desc: "Use github.com/go-kit/log instead of github.com/go-kit/kit/log"
|
||||
- pkg: github.com/pkg/errors
|
||||
desc: "Use errors or fmt instead of github.com/pkg/errors"
|
||||
errcheck:
|
||||
exclude-functions:
|
||||
# Don't flag lines such as "io.Copy(io.Discard, resp.Body)".
|
||||
- io.Copy
|
||||
# The next two are used in HTTP handlers, any error is handled by the server itself.
|
||||
- io.WriteString
|
||||
- (net/http.ResponseWriter).Write
|
||||
# No need to check for errors on server's shutdown.
|
||||
- (*net/http.Server).Shutdown
|
||||
# Never check for rollback errors as Rollback() is called when a previous error was detected.
|
||||
- (github.com/prometheus/prometheus/storage.Appender).Rollback
|
||||
godot:
|
||||
scope: toplevel
|
||||
exclude:
|
||||
- "^ ?This file is safe to edit"
|
||||
- "^ ?scheme value"
|
||||
period: true
|
||||
capital: true
|
||||
goimports:
|
||||
local-prefixes: github.com/prometheus/alertmanager
|
||||
gofumpt:
|
||||
extra-rules: true
|
||||
revive:
|
||||
rules:
|
||||
- name: exported
|
||||
arguments: ["disableStutteringCheck"]
|
||||
- name: blank-imports
|
||||
- name: context-as-argument
|
||||
- name: error-return
|
||||
- name: error-strings
|
||||
- name: error-naming
|
||||
- name: if-return
|
||||
- name: increment-decrement
|
||||
- name: var-naming
|
||||
- name: var-declaration
|
||||
- name: package-comments
|
||||
- name: range
|
||||
- name: receiver-naming
|
||||
- name: time-naming
|
||||
- name: unexported-return
|
||||
- name: indent-error-flow
|
||||
- name: errorf
|
||||
testifylint:
|
||||
disable:
|
||||
- float-compare
|
||||
- go-require
|
||||
enable:
|
||||
- bool-compare
|
||||
- compares
|
||||
- empty
|
||||
- error-is-as
|
||||
- error-nil
|
||||
- expected-actual
|
||||
- len
|
||||
- require-error
|
||||
- suite-dont-use-pkg
|
||||
- suite-extra-assert-call
|
||||
formatters:
|
||||
enable:
|
||||
- gofumpt
|
||||
- goimports
|
||||
settings:
|
||||
gofumpt:
|
||||
extra-rules: true
|
||||
goimports:
|
||||
local-prefixes:
|
||||
- github.com/prometheus/alertmanager
|
||||
|
||||
@@ -61,7 +61,7 @@ PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_
|
||||
SKIP_GOLANGCI_LINT :=
|
||||
GOLANGCI_LINT :=
|
||||
GOLANGCI_LINT_OPTS ?=
|
||||
GOLANGCI_LINT_VERSION ?= v1.64.6
|
||||
GOLANGCI_LINT_VERSION ?= v2.3.0
|
||||
# golangci-lint only supports linux, darwin and windows platforms on i386/amd64/arm64.
|
||||
# windows isn't included here because of the path separator being different.
|
||||
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin))
|
||||
|
||||
@@ -565,16 +565,16 @@ func SortSilences(sils open_api_models.GettableSilences) {
|
||||
}
|
||||
switch state1 {
|
||||
case types.SilenceStateActive:
|
||||
endsAt1 := time.Time(*sils[i].Silence.EndsAt)
|
||||
endsAt2 := time.Time(*sils[j].Silence.EndsAt)
|
||||
endsAt1 := time.Time(*sils[i].EndsAt)
|
||||
endsAt2 := time.Time(*sils[j].EndsAt)
|
||||
return endsAt1.Before(endsAt2)
|
||||
case types.SilenceStatePending:
|
||||
startsAt1 := time.Time(*sils[i].Silence.StartsAt)
|
||||
startsAt2 := time.Time(*sils[j].Silence.StartsAt)
|
||||
startsAt1 := time.Time(*sils[i].StartsAt)
|
||||
startsAt2 := time.Time(*sils[j].StartsAt)
|
||||
return startsAt1.Before(startsAt2)
|
||||
case types.SilenceStateExpired:
|
||||
endsAt1 := time.Time(*sils[i].Silence.EndsAt)
|
||||
endsAt2 := time.Time(*sils[j].Silence.EndsAt)
|
||||
endsAt1 := time.Time(*sils[i].EndsAt)
|
||||
endsAt2 := time.Time(*sils[j].EndsAt)
|
||||
return endsAt1.After(endsAt2)
|
||||
}
|
||||
return false
|
||||
|
||||
@@ -48,8 +48,8 @@ func (formatter *ExtendedFormatter) FormatSilences(silences []models.GettableSil
|
||||
"%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",
|
||||
*silence.ID,
|
||||
extendedFormatMatchers(silence.Matchers),
|
||||
FormatDate(*silence.Silence.StartsAt),
|
||||
FormatDate(*silence.Silence.EndsAt),
|
||||
FormatDate(*silence.StartsAt),
|
||||
FormatDate(*silence.EndsAt),
|
||||
FormatDate(*silence.UpdatedAt),
|
||||
*silence.CreatedBy,
|
||||
*silence.Comment,
|
||||
|
||||
@@ -27,7 +27,7 @@ type ByEndAt []models.GettableSilence
|
||||
func (s ByEndAt) Len() int { return len(s) }
|
||||
func (s ByEndAt) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
||||
func (s ByEndAt) Less(i, j int) bool {
|
||||
return time.Time(*s[i].Silence.EndsAt).Before(time.Time(*s[j].Silence.EndsAt))
|
||||
return time.Time(*s[i].Silence.EndsAt).Before(time.Time(*s[j].EndsAt))
|
||||
}
|
||||
|
||||
type ByStartsAt []*models.GettableAlert
|
||||
|
||||
@@ -105,7 +105,7 @@ func testJoinLeave(t *testing.T) {
|
||||
p2.Leave(0 * time.Second)
|
||||
require.Equal(t, 1, p.ClusterSize())
|
||||
require.Len(t, p.failedPeers, 1)
|
||||
require.Equal(t, p2.Self().Address(), p.peers[p2.Self().Address()].Node.Address())
|
||||
require.Equal(t, p2.Self().Address(), p.peers[p2.Self().Address()].Address())
|
||||
require.Equal(t, p2.Name(), p.failedPeers[0].Name)
|
||||
}
|
||||
|
||||
@@ -341,6 +341,6 @@ func testTLSConnection(t *testing.T) {
|
||||
p2.Leave(0 * time.Second)
|
||||
require.Equal(t, 1, p1.ClusterSize())
|
||||
require.Len(t, p1.failedPeers, 1)
|
||||
require.Equal(t, p2.Self().Address(), p1.peers[p2.Self().Address()].Node.Address())
|
||||
require.Equal(t, p2.Self().Address(), p1.peers[p2.Self().Address()].Address())
|
||||
require.Equal(t, p2.Name(), p1.failedPeers[0].Name)
|
||||
}
|
||||
|
||||
@@ -236,19 +236,19 @@ func (d *delegate) MergeRemoteState(buf []byte, _ bool) {
|
||||
// NotifyJoin is called if a peer joins the cluster.
|
||||
func (d *delegate) NotifyJoin(n *memberlist.Node) {
|
||||
d.logger.Debug("NotifyJoin", "node", n.Name, "addr", n.Address())
|
||||
d.Peer.peerJoin(n)
|
||||
d.peerJoin(n)
|
||||
}
|
||||
|
||||
// NotifyLeave is called if a peer leaves the cluster.
|
||||
func (d *delegate) NotifyLeave(n *memberlist.Node) {
|
||||
d.logger.Debug("NotifyLeave", "node", n.Name, "addr", n.Address())
|
||||
d.Peer.peerLeave(n)
|
||||
d.peerLeave(n)
|
||||
}
|
||||
|
||||
// NotifyUpdate is called if a cluster peer gets updated.
|
||||
func (d *delegate) NotifyUpdate(n *memberlist.Node) {
|
||||
d.logger.Debug("NotifyUpdate", "node", n.Name, "addr", n.Address())
|
||||
d.Peer.peerUpdate(n)
|
||||
d.peerUpdate(n)
|
||||
}
|
||||
|
||||
// NotifyAlive implements the memberlist.AliveDelegate interface.
|
||||
|
||||
@@ -97,7 +97,7 @@ func (u *URL) Copy() *URL {
|
||||
// MarshalYAML implements the yaml.Marshaler interface for URL.
|
||||
func (u URL) MarshalYAML() (interface{}, error) {
|
||||
if u.URL != nil {
|
||||
return u.URL.String(), nil
|
||||
return u.String(), nil
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
@@ -119,7 +119,7 @@ func (u *URL) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||
// MarshalJSON implements the json.Marshaler interface for URL.
|
||||
func (u URL) MarshalJSON() ([]byte, error) {
|
||||
if u.URL != nil {
|
||||
return json.Marshal(u.URL.String())
|
||||
return json.Marshal(u.String())
|
||||
}
|
||||
return []byte("null"), nil
|
||||
}
|
||||
@@ -145,7 +145,7 @@ type SecretURL URL
|
||||
func (s SecretURL) MarshalYAML() (interface{}, error) {
|
||||
if s.URL != nil {
|
||||
if MarshalSecretValue {
|
||||
return s.URL.String(), nil
|
||||
return s.String(), nil
|
||||
}
|
||||
return secretToken, nil
|
||||
}
|
||||
@@ -174,7 +174,7 @@ func (s SecretURL) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal("")
|
||||
}
|
||||
if MarshalSecretValue {
|
||||
return json.Marshal(s.URL.String())
|
||||
return json.Marshal(s.String())
|
||||
}
|
||||
return json.Marshal(secretToken)
|
||||
}
|
||||
|
||||
@@ -818,7 +818,7 @@ func TestUnmarshalEmptyRegexp(t *testing.T) {
|
||||
err := json.Unmarshal(b, &re)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, regexp.MustCompile("^(?:)$"), re.Regexp)
|
||||
require.Equal(t, "", re.original)
|
||||
require.Empty(t, re.original)
|
||||
}
|
||||
|
||||
{
|
||||
@@ -826,7 +826,7 @@ func TestUnmarshalEmptyRegexp(t *testing.T) {
|
||||
err := yaml.Unmarshal(b, &re)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, regexp.MustCompile("^(?:)$"), re.Regexp)
|
||||
require.Equal(t, "", re.original)
|
||||
require.Empty(t, re.original)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -837,7 +837,7 @@ func TestUnmarshalNullRegexp(t *testing.T) {
|
||||
var re Regexp
|
||||
err := json.Unmarshal(input, &re)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "", re.original)
|
||||
require.Empty(t, re.original)
|
||||
}
|
||||
|
||||
{
|
||||
@@ -845,7 +845,7 @@ func TestUnmarshalNullRegexp(t *testing.T) {
|
||||
err := yaml.Unmarshal(input, &re) // Interestingly enough, unmarshalling `null` in YAML doesn't even call UnmarshalYAML.
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, re.Regexp)
|
||||
require.Equal(t, "", re.original)
|
||||
require.Empty(t, re.original)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -131,7 +131,7 @@ func NewFlags(logger *slog.Logger, features string) (Flagger, error) {
|
||||
opts = append(opts, enableAutoGOMAXPROCS())
|
||||
logger.Warn("Automatically set GOMAXPROCS to match Linux container CPU quota")
|
||||
default:
|
||||
return nil, fmt.Errorf("Unknown option '%s' for --enable-feature", feature)
|
||||
return nil, fmt.Errorf("unknown option '%s' for --enable-feature", feature)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,12 +35,12 @@ func TestFlags(t *testing.T) {
|
||||
{
|
||||
name: "with only invalid feature flags",
|
||||
featureFlags: "somethingsomething",
|
||||
err: errors.New("Unknown option 'somethingsomething' for --enable-feature"),
|
||||
err: errors.New("unknown option 'somethingsomething' for --enable-feature"),
|
||||
},
|
||||
{
|
||||
name: "with both, valid and invalid feature flags",
|
||||
featureFlags: strings.Join([]string{FeatureReceiverNameInMetrics, "somethingbad"}, ","),
|
||||
err: errors.New("Unknown option 'somethingbad' for --enable-feature"),
|
||||
err: errors.New("unknown option 'somethingbad' for --enable-feature"),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ func FallbackMatcherParser(l *slog.Logger) ParseMatcher {
|
||||
}
|
||||
// If the input is valid in both parsers, but produces different results,
|
||||
// then there is disagreement.
|
||||
if nErr == nil && cErr == nil && !reflect.DeepEqual(nMatcher, cMatcher) {
|
||||
if cErr == nil && !reflect.DeepEqual(nMatcher, cMatcher) {
|
||||
l.Warn("Matchers input has disagreement", "input", input, "origin", origin)
|
||||
return cMatcher, nil
|
||||
}
|
||||
@@ -179,7 +179,7 @@ func FallbackMatchersParser(l *slog.Logger) ParseMatchers {
|
||||
// If the input is valid in both parsers, but produces different results,
|
||||
// then there is disagreement. We need to compare to labels.Matchers(cMatchers)
|
||||
// as cMatchers is a []*labels.Matcher not labels.Matchers.
|
||||
if nErr == nil && cErr == nil && !reflect.DeepEqual(nMatchers, labels.Matchers(cMatchers)) {
|
||||
if cErr == nil && !reflect.DeepEqual(nMatchers, labels.Matchers(cMatchers)) {
|
||||
l.Warn("Matchers input has disagreement", "input", input, "origin", origin)
|
||||
return cMatchers, nil
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ func TestFallbackMatcherParser(t *testing.T) {
|
||||
require.EqualError(t, err, test.err)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, test.expected, matcher)
|
||||
require.Equal(t, test.expected, matcher)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -118,7 +118,7 @@ func TestFallbackMatchersParser(t *testing.T) {
|
||||
require.EqualError(t, err, test.err)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, test.expected, matchers)
|
||||
require.Equal(t, test.expected, matchers)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ func TestMatchers(t *testing.T) {
|
||||
require.EqualError(t, err, test.error)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, test.expected, matchers)
|
||||
require.Equal(t, test.expected, matchers)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -372,7 +372,7 @@ func TestMatcher(t *testing.T) {
|
||||
require.EqualError(t, err, test.error)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, test.expected, matcher)
|
||||
require.Equal(t, test.expected, matcher)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -555,13 +555,13 @@ type replaceFile struct {
|
||||
}
|
||||
|
||||
func (f *replaceFile) Close() error {
|
||||
if err := f.File.Sync(); err != nil {
|
||||
if err := f.Sync(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := f.File.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
return os.Rename(f.File.Name(), f.filename)
|
||||
return os.Rename(f.Name(), f.filename)
|
||||
}
|
||||
|
||||
// openReplace opens a new temporary file that is moved to filename on closing.
|
||||
|
||||
@@ -361,8 +361,8 @@ func TestQuery(t *testing.T) {
|
||||
entries, err := nl.Query(QGroupKey("key"), QReceiver(recv))
|
||||
require.NoError(t, err, "querying nflog failed")
|
||||
entry := entries[0]
|
||||
require.EqualValues(t, firingAlerts, entry.FiringAlerts)
|
||||
require.EqualValues(t, resolvedAlerts, entry.ResolvedAlerts)
|
||||
require.Equal(t, firingAlerts, entry.FiringAlerts)
|
||||
require.Equal(t, resolvedAlerts, entry.ResolvedAlerts)
|
||||
}
|
||||
|
||||
func TestStateDecodingError(t *testing.T) {
|
||||
|
||||
@@ -119,7 +119,7 @@ func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error)
|
||||
return n.transitionIssue(ctx, logger, existingIssue, alerts.HasFiring())
|
||||
}
|
||||
|
||||
func (n *Notifier) prepareIssueRequestBody(ctx context.Context, logger *slog.Logger, groupID string, tmplTextFunc templateFunc) (issue, error) {
|
||||
func (n *Notifier) prepareIssueRequestBody(_ context.Context, logger *slog.Logger, groupID string, tmplTextFunc templateFunc) (issue, error) {
|
||||
summary, err := tmplTextFunc(n.conf.Summary)
|
||||
if err != nil {
|
||||
return issue{}, fmt.Errorf("summary template: %w", err)
|
||||
|
||||
@@ -179,7 +179,7 @@ func TestSearchExistingIssue(t *testing.T) {
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
}
|
||||
require.EqualValues(t, tc.expectedIssue, issue)
|
||||
require.Equal(t, tc.expectedIssue, issue)
|
||||
require.Equal(t, tc.expectedRetry, retry)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -547,7 +547,7 @@ func TestRetryStageNoResolved(t *testing.T) {
|
||||
// All alerts are resolved.
|
||||
sent = sent[:0]
|
||||
ctx = WithFiringAlerts(ctx, []uint64{})
|
||||
alerts[1].Alert.EndsAt = time.Now().Add(-time.Hour)
|
||||
alerts[1].EndsAt = time.Now().Add(-time.Hour)
|
||||
|
||||
resctx, res, err = r.Exec(ctx, promslog.NewNopLogger(), alerts...)
|
||||
require.NoError(t, err)
|
||||
@@ -592,7 +592,7 @@ func TestRetryStageSendResolved(t *testing.T) {
|
||||
// All alerts are resolved.
|
||||
sent = sent[:0]
|
||||
ctx = WithFiringAlerts(ctx, []uint64{})
|
||||
alerts[1].Alert.EndsAt = time.Now().Add(-time.Hour)
|
||||
alerts[1].EndsAt = time.Now().Add(-time.Hour)
|
||||
|
||||
resctx, res, err = r.Exec(ctx, promslog.NewNopLogger(), alerts...)
|
||||
require.NoError(t, err)
|
||||
@@ -915,7 +915,7 @@ func TestTimeMuteStage(t *testing.T) {
|
||||
|
||||
if len(test.mutedBy) == 0 {
|
||||
// All alerts should be active.
|
||||
require.Equal(t, len(test.alerts), len(active))
|
||||
require.Len(t, active, len(test.alerts))
|
||||
// The group should not be marked.
|
||||
mutedBy, isMuted := marker.Muted("route1", "group1")
|
||||
require.False(t, isMuted)
|
||||
@@ -1033,7 +1033,7 @@ func TestTimeActiveStage(t *testing.T) {
|
||||
|
||||
if len(test.mutedBy) == 0 {
|
||||
// All alerts should be active.
|
||||
require.Equal(t, len(test.alerts), len(active))
|
||||
require.Len(t, active, len(test.alerts))
|
||||
// The group should not be marked.
|
||||
mutedBy, isMuted := marker.Muted("route1", "group1")
|
||||
require.False(t, isMuted)
|
||||
|
||||
@@ -1029,13 +1029,13 @@ type replaceFile struct {
|
||||
}
|
||||
|
||||
func (f *replaceFile) Close() error {
|
||||
if err := f.File.Sync(); err != nil {
|
||||
if err := f.Sync(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := f.File.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
return os.Rename(f.File.Name(), f.filename)
|
||||
return os.Rename(f.Name(), f.filename)
|
||||
}
|
||||
|
||||
// openReplace opens a new temporary file that is moved to filename on closing.
|
||||
|
||||
@@ -430,7 +430,7 @@ func TestSilenceSet(t *testing.T) {
|
||||
}
|
||||
versionBeforeOp := s.Version()
|
||||
require.NoError(t, s.Set(sil1))
|
||||
require.NotEqual(t, "", sil1.Id)
|
||||
require.NotEmpty(t, sil1.Id)
|
||||
require.NotEqual(t, versionBeforeOp, s.Version())
|
||||
|
||||
want := state{
|
||||
@@ -457,7 +457,7 @@ func TestSilenceSet(t *testing.T) {
|
||||
}
|
||||
versionBeforeOp = s.Version()
|
||||
require.NoError(t, s.Set(sil2))
|
||||
require.NotEqual(t, "", sil2.Id)
|
||||
require.NotEmpty(t, sil2.Id)
|
||||
require.NotEqual(t, versionBeforeOp, s.Version())
|
||||
|
||||
want = state{
|
||||
@@ -740,7 +740,7 @@ func TestSilenceNoLimits(t *testing.T) {
|
||||
Comment: strings.Repeat("c", 2<<9),
|
||||
}
|
||||
require.NoError(t, s.Set(sil))
|
||||
require.NotEqual(t, "", sil.Id)
|
||||
require.NotEmpty(t, sil.Id)
|
||||
}
|
||||
|
||||
func TestSetActiveSilence(t *testing.T) {
|
||||
|
||||
@@ -123,7 +123,7 @@ func (a *Alerts) DeleteIfNotModified(alerts types.AlertSlice) error {
|
||||
defer a.Unlock()
|
||||
for _, alert := range alerts {
|
||||
fp := alert.Fingerprint()
|
||||
if other, ok := a.c[fp]; ok && alert.UpdatedAt == other.UpdatedAt {
|
||||
if other, ok := a.c[fp]; ok && alert.UpdatedAt.Equal(other.UpdatedAt) {
|
||||
delete(a.c, fp)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ func TestPairNames(t *testing.T) {
|
||||
}
|
||||
|
||||
expected := []string{"name1", "name2", "name3"}
|
||||
require.EqualValues(t, expected, pairs.Names())
|
||||
require.Equal(t, expected, pairs.Names())
|
||||
}
|
||||
|
||||
func TestPairValues(t *testing.T) {
|
||||
@@ -46,7 +46,7 @@ func TestPairValues(t *testing.T) {
|
||||
}
|
||||
|
||||
expected := []string{"value1", "value2", "value3"}
|
||||
require.EqualValues(t, expected, pairs.Values())
|
||||
require.Equal(t, expected, pairs.Values())
|
||||
}
|
||||
|
||||
func TestPairsString(t *testing.T) {
|
||||
@@ -66,8 +66,8 @@ func TestKVSortedPairs(t *testing.T) {
|
||||
}
|
||||
|
||||
for i, p := range kv.SortedPairs() {
|
||||
require.EqualValues(t, p.Name, expectedPairs[i].Name)
|
||||
require.EqualValues(t, p.Value, expectedPairs[i].Value)
|
||||
require.Equal(t, p.Name, expectedPairs[i].Name)
|
||||
require.Equal(t, p.Value, expectedPairs[i].Value)
|
||||
}
|
||||
|
||||
// validates alertname always comes first
|
||||
@@ -82,8 +82,8 @@ func TestKVSortedPairs(t *testing.T) {
|
||||
}
|
||||
|
||||
for i, p := range kv.SortedPairs() {
|
||||
require.EqualValues(t, p.Name, expectedPairs[i].Name)
|
||||
require.EqualValues(t, p.Value, expectedPairs[i].Value)
|
||||
require.Equal(t, p.Name, expectedPairs[i].Name)
|
||||
require.Equal(t, p.Value, expectedPairs[i].Value)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ func TestKVRemove(t *testing.T) {
|
||||
kv = kv.Remove([]string{"key2", "key4"})
|
||||
|
||||
expected := []string{"key1", "key3"}
|
||||
require.EqualValues(t, expected, kv.Names())
|
||||
require.Equal(t, expected, kv.Names())
|
||||
}
|
||||
|
||||
func TestAlertsFiring(t *testing.T) {
|
||||
|
||||
@@ -200,7 +200,7 @@ func (t *AcceptanceTest) Run() {
|
||||
|
||||
err := t.amc.Start()
|
||||
if err != nil {
|
||||
t.T.Fatal(err)
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Set the reference time right before running the test actions to avoid
|
||||
@@ -562,7 +562,7 @@ func (amc *AlertmanagerCluster) SetSilence(at float64, sil *TestSilence) {
|
||||
func (am *Alertmanager) SetSilence(at float64, sil *TestSilence) {
|
||||
out, err := am.addSilenceCommand(sil)
|
||||
if err != nil {
|
||||
am.t.T.Errorf("Unable to set silence %v %v", err, string(out))
|
||||
am.t.Errorf("Unable to set silence %v %v", err, string(out))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -585,7 +585,7 @@ func (am *Alertmanager) QuerySilence(match ...string) ([]TestSilence, error) {
|
||||
cmd := exec.Command(amtool, args...)
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
am.t.T.Error("Silence query command failed: ", err)
|
||||
am.t.Error("Silence query command failed: ", err)
|
||||
}
|
||||
return parseSilenceQueryResponse(out)
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@ func equalAlerts(a, b *models.GettableAlert, opts *AcceptanceOpts) bool {
|
||||
if (a.EndsAt == nil) != (b.EndsAt == nil) {
|
||||
return false
|
||||
}
|
||||
if !(a.EndsAt == nil) && !(b.EndsAt == nil) && !equalTime(time.Time(*a.EndsAt), time.Time(*b.EndsAt), opts) {
|
||||
if (a.EndsAt != nil) && (b.EndsAt != nil) && !equalTime(time.Time(*a.EndsAt), time.Time(*b.EndsAt), opts) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
|
||||
@@ -169,14 +169,14 @@ func (t *AcceptanceTest) Run() {
|
||||
|
||||
for _, am := range t.amc.ams {
|
||||
am.errc = errc
|
||||
t.T.Cleanup(am.Terminate)
|
||||
t.T.Cleanup(am.cleanup)
|
||||
t.Cleanup(am.Terminate)
|
||||
t.Cleanup(am.cleanup)
|
||||
}
|
||||
|
||||
err := t.amc.Start()
|
||||
if err != nil {
|
||||
t.T.Log(err)
|
||||
t.T.Fail()
|
||||
t.Log(err)
|
||||
t.Fail()
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@ func equalAlerts(a, b *models.GettableAlert, opts *AcceptanceOpts) bool {
|
||||
if (a.EndsAt == nil) != (b.EndsAt == nil) {
|
||||
return false
|
||||
}
|
||||
if !(a.EndsAt == nil) && !(b.EndsAt == nil) && !equalTime(time.Time(*a.EndsAt), time.Time(*b.EndsAt), opts) {
|
||||
if (a.EndsAt != nil) && (b.EndsAt != nil) && !equalTime(time.Time(*a.EndsAt), time.Time(*b.EndsAt), opts) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
|
||||
@@ -436,7 +436,7 @@ func (tz Location) MarshalText() ([]byte, error) {
|
||||
if tz.Location == nil {
|
||||
return nil, fmt.Errorf("unable to convert nil location into string")
|
||||
}
|
||||
return []byte(tz.Location.String()), nil
|
||||
return []byte(tz.String()), nil
|
||||
}
|
||||
|
||||
// MarshalYAML implements the yaml.Marshaler interface for Location.
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package types
|
||||
package types //nolint:revive
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
|
||||
Reference in New Issue
Block a user