gvisor/tools/nogo/config_test.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)
}
})
}
}