302 lines
6.7 KiB
Go
302 lines
6.7 KiB
Go
// Copyright 2021 The gVisor Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.package nogo
|
|
package nogo
|
|
|
|
import (
|
|
"go/token"
|
|
"testing"
|
|
)
|
|
|
|
// TestShouldReport validates the suppression behavior of Config.ShouldReport.
|
|
func TestShouldReport(t *testing.T) {
|
|
config := &Config{
|
|
Groups: []Group{
|
|
{
|
|
Name: "default-enabled",
|
|
Regex: "^default-enabled/",
|
|
Default: true,
|
|
},
|
|
{
|
|
Name: "default-disabled",
|
|
Regex: "^default-disabled/",
|
|
Default: false,
|
|
},
|
|
{
|
|
Name: "default-disabled-omitted-from-global",
|
|
Regex: "^default-disabled-omitted-from-global/",
|
|
Default: false,
|
|
},
|
|
},
|
|
Global: AnalyzerConfig{
|
|
"default-enabled": &ItemConfig{
|
|
Exclude: []string{"excluded.go"},
|
|
Suppress: []string{"suppressed"},
|
|
},
|
|
"default-disabled": &ItemConfig{
|
|
Exclude: []string{"excluded.go"},
|
|
Suppress: []string{"suppressed"},
|
|
},
|
|
// Omitting default-disabled-omitted-from-global here
|
|
// has no effect on configuration below.
|
|
},
|
|
Analyzers: map[AnalyzerName]AnalyzerConfig{
|
|
"analyzer-suppressions": AnalyzerConfig{
|
|
// Suppress some.
|
|
"default-enabled": &ItemConfig{
|
|
Exclude: []string{"limited-exclude.go"},
|
|
Suppress: []string{"limited suppress"},
|
|
},
|
|
// Enable all.
|
|
"default-disabled": nil,
|
|
},
|
|
"enabled-for-default-disabled": AnalyzerConfig{
|
|
"default-disabled": nil,
|
|
"default-disabled-omitted-from-global": nil,
|
|
},
|
|
},
|
|
}
|
|
|
|
if err := config.Compile(); err != nil {
|
|
t.Fatalf("Compile(%+v) = %v, want nil", config, err)
|
|
}
|
|
|
|
cases := []struct {
|
|
name string
|
|
finding Finding
|
|
want bool
|
|
}{
|
|
{
|
|
name: "enabled",
|
|
finding: Finding{
|
|
Category: "foo",
|
|
Position: token.Position{
|
|
Filename: "default-enabled/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "ungrouped",
|
|
finding: Finding{
|
|
Category: "foo",
|
|
Position: token.Position{
|
|
Filename: "ungrouped/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "suppressed",
|
|
finding: Finding{
|
|
Category: "foo",
|
|
Position: token.Position{
|
|
Filename: "default-enabled/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message suppressed",
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "excluded",
|
|
finding: Finding{
|
|
Category: "foo",
|
|
Position: token.Position{
|
|
Filename: "default-enabled/excluded.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "disabled",
|
|
finding: Finding{
|
|
Category: "foo",
|
|
Position: token.Position{
|
|
Filename: "default-disabled/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "analyzer suppressed",
|
|
finding: Finding{
|
|
Category: "analyzer-suppressions",
|
|
Position: token.Position{
|
|
Filename: "default-enabled/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message limited suppress",
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "analyzer suppressed not global",
|
|
finding: Finding{
|
|
// Doesn't apply outside of analyzer-suppressions.
|
|
Category: "foo",
|
|
Position: token.Position{
|
|
Filename: "default-enabled/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message limited suppress",
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "analyzer suppressed grouped",
|
|
finding: Finding{
|
|
Category: "analyzer-suppressions",
|
|
Position: token.Position{
|
|
// Doesn't apply outside of default-enabled.
|
|
Filename: "default-disabled/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message limited suppress",
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "analyzer excluded",
|
|
finding: Finding{
|
|
Category: "analyzer-suppressions",
|
|
Position: token.Position{
|
|
Filename: "default-enabled/limited-exclude.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "analyzer excluded not global",
|
|
finding: Finding{
|
|
// Doesn't apply outside of analyzer-suppressions.
|
|
Category: "foo",
|
|
Position: token.Position{
|
|
Filename: "default-enabled/limited-exclude.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "analyzer excluded grouped",
|
|
finding: Finding{
|
|
Category: "analyzer-suppressions",
|
|
Position: token.Position{
|
|
// Doesn't apply outside of default-enabled.
|
|
Filename: "default-disabled/limited-exclude.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "disabled-omitted",
|
|
finding: Finding{
|
|
Category: "foo",
|
|
Position: token.Position{
|
|
Filename: "default-disabled-omitted-from-global/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "default enabled applies to customized analyzer",
|
|
finding: Finding{
|
|
Category: "enabled-for-default-disabled",
|
|
Position: token.Position{
|
|
Filename: "default-enabled/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "default overridden in customized analyzer",
|
|
finding: Finding{
|
|
Category: "enabled-for-default-disabled",
|
|
Position: token.Position{
|
|
Filename: "default-disabled/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "default overridden in customized analyzer even when omitted from global",
|
|
finding: Finding{
|
|
Category: "enabled-for-default-disabled",
|
|
Position: token.Position{
|
|
Filename: "default-disabled-omitted-from-global/file.go",
|
|
Offset: 0,
|
|
Line: 1,
|
|
Column: 1,
|
|
},
|
|
Message: "message",
|
|
},
|
|
want: true,
|
|
},
|
|
}
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
if got := config.ShouldReport(tc.finding); got != tc.want {
|
|
t.Errorf("ShouldReport(%+v) = %v, want %v", tc.finding, got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|