Skip to content

Commit

Permalink
test: update default policy deny all
Browse files Browse the repository at this point in the history
Signed-off-by: Christopher Phillips <[email protected]>
  • Loading branch information
spiffcs committed Feb 13, 2024
1 parent 70de159 commit 12811f8
Show file tree
Hide file tree
Showing 7 changed files with 106 additions and 12 deletions.
13 changes: 4 additions & 9 deletions cmd/grant/cli/option/check.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package option

import "github.com/anchore/clio"
import (
"github.com/anchore/clio"
)

type Check struct {
List `json:",inline" yaml:",inline" mapstructure:",squash"`
Expand All @@ -14,14 +16,7 @@ func DefaultCheck() Check {
List: DefaultList(),
Quiet: false,
OsiApproved: false,
Rules: []Rule{
{
Name: "deny-all",
Reason: "grant by default will deny all licenses",
Pattern: "*",
Severity: "high",
},
},
Rules: []Rule{defaultDenyAll},
}
}

Expand Down
7 changes: 7 additions & 0 deletions cmd/grant/cli/option/rule.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,10 @@ type Rule struct {
Mode string `json:"mode" yaml:"mode" mapstructure:"mode"`
Exceptions []string `json:"exceptions" yaml:"exceptions" mapstructure:"exceptions"`
}

var defaultDenyAll = Rule{
Name: "default-deny-all",
Reason: "grant by default will deny all licenses",
Mode: "deny",
Pattern: "*",
}
1 change: 1 addition & 0 deletions grant/case.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ func NewCases(userInputs ...string) []Case {
log.Errorf("unable to create case handler: %+v", err)
return cases
}

defer ch.Close()
for _, userInput := range userInputs {
c, err := ch.determineRequestCase(userInput)
Expand Down
4 changes: 2 additions & 2 deletions grant/policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ type Policy struct {
}

var DefaultDenyAll = Rule{
Name: "default-deny-all",
Glob: glob.MustCompile("*"),
Exceptions: []glob.Glob{},
Mode: Deny,
Expand Down Expand Up @@ -57,8 +58,7 @@ func (p Policy) IsDenied(license License, pkg *Package) (bool, *Rule) {
var toMatch string
if license.IsSPDX() {
toMatch = strings.ToLower(license.LicenseID)
}
if p.MatchNonSPDX && !license.IsSPDX() {
} else {
toMatch = strings.ToLower(license.Name)
}

Expand Down
40 changes: 40 additions & 0 deletions grant/policy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,43 @@ func Test_NewPolicy(t *testing.T) {
})
}
}

func Test_Policy_DenyAll(t *testing.T) {
tests := []struct {
name string
p Policy
want struct {
denied bool
rule *Rule
}
}{
{
name: "Policy Default Deny All denies all licenses",
p: DefaultPolicy(),
want: struct {
denied bool
rule *Rule
}{
denied: true,
rule: &Rule{
Name: "default deny all",
Glob: glob.MustCompile("*"),
Exceptions: []glob.Glob{},
Mode: Deny,
Reason: "grant by default will deny all licenses",
},
},
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
denied, rule := tc.p.IsDenied(License{LicenseID: "MIT", SPDXExpression: "MIT"}, nil)
if denied != tc.want.denied {
t.Errorf("Expected %t, got %t", tc.want.denied, denied)
}
if diff := cmp.Diff(tc.want.rule, rule); diff != "" {
t.Errorf("IsDenied() mismatch (-want +got):\n%s", diff)
}
})
}
}
38 changes: 38 additions & 0 deletions test/cli/check_test.go
Original file line number Diff line number Diff line change
@@ -1 +1,39 @@
package cli

import (
"os/exec"
"strings"
"testing"
)

func Test_CheckCmd(t *testing.T) {
tests := []struct {
name string
args []string
expectedInOutput []string
}{
{
name: "check command will deny all on empty config",
args: []string{"-c", emptyConfigPath, "check", "dir:../../."},
expectedInOutput: []string{
"check failed",
"license matches for rule: default-deny-all; matched with pattern *",
"Apache-2.0",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cmd := exec.Command(grantTmpPath, tt.args...)
output, err := cmd.CombinedOutput()
if err != nil && !strings.Contains(err.Error(), "exit status 1") {
t.Fatalf("cmd.CombinedOutput() failed with %s\n %s", err, string(output))
}
for _, expected := range tt.expectedInOutput {
if !strings.Contains(string(output), expected) {
t.Errorf("expected %s to be in output, but it wasn't; output: %s", expected, string(output))
}
}
})
}
}
15 changes: 14 additions & 1 deletion test/cli/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,33 @@ import (
"testing"
)

const grantTmpPath = "../../.tmp/grant"
const (
grantTmpPath = "../../.tmp/grant"
emptyConfigPath = "../../.tmp/grant_empty.yaml"
)

func buildBinary() (string, error) {
buildCmd := exec.Command("go", "build", "-o", grantTmpPath, "../../cmd/grant/main.go") // Adjust the last argument to your package path if necessary
err := buildCmd.Run()
return grantTmpPath, err
}

func generateEmptyConfig() (string, error) {
emptyConfigCmd := exec.Command("touch", emptyConfigPath)
err := emptyConfigCmd.Run()
return emptyConfigPath, err
}

// setup function that you want to run before any tests
func setup(m *testing.M) {
_, err := buildBinary()
if err != nil {
log.Fatalf("Failed to build binary: %v", err)
}
_, err = generateEmptyConfig()
if err != nil {
log.Fatalf("Failed to generate empty config: %v", err)
}
}

// teardown function to clean up after the tests
Expand Down

0 comments on commit 12811f8

Please sign in to comment.