Skip to content

Commit

Permalink
added test for score
Browse files Browse the repository at this point in the history
  • Loading branch information
makoscafee committed Jan 29, 2021
1 parent 512a5f2 commit fe0060a
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 115 deletions.
4 changes: 3 additions & 1 deletion cmd/polaris/audit.go
Expand Up @@ -32,6 +32,7 @@ import (
)

var setExitCode bool
var onlyShowFailedTests bool
var minScore int
var auditOutputURL string
var auditOutputFile string
Expand All @@ -42,6 +43,7 @@ func init() {
rootCmd.AddCommand(auditCmd)
auditCmd.PersistentFlags().StringVar(&auditPath, "audit-path", "", "If specified, audits one or more YAML files instead of a cluster.")
auditCmd.PersistentFlags().BoolVar(&setExitCode, "set-exit-code-on-danger", false, "Set an exit code of 3 when the audit contains danger-level issues.")
auditCmd.PersistentFlags().BoolVar(&onlyShowFailedTests, "only-show-failed-tests", false, "If specified, audit output will only show failed tests.")
auditCmd.PersistentFlags().IntVar(&minScore, "set-exit-code-below-score", 0, "Set an exit code of 4 when the score is below this threshold (1-100).")
auditCmd.PersistentFlags().StringVar(&auditOutputURL, "output-url", "", "Destination URL to send audit results.")
auditCmd.PersistentFlags().StringVar(&auditOutputFile, "output-file", "", "Destination file for audit results.")
Expand Down Expand Up @@ -81,7 +83,7 @@ func runAndReportAudit(ctx context.Context, c conf.Configuration, auditPath, wor
os.Exit(1)
}
var auditData validator.AuditData
auditData, err = validator.RunAudit(c, k)
auditData, err = validator.RunAudit(c, k, onlyShowFailedTests)

if err != nil {
logrus.Errorf("Error while running audit on resources: %v", err)
Expand Down
5 changes: 1 addition & 4 deletions go.mod
Expand Up @@ -10,20 +10,17 @@ require (
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/uuid v1.1.3 // indirect
github.com/googleapis/gnostic v0.5.3 // indirect
github.com/gophercloud/gophercloud v0.15.0 // indirect
github.com/gorilla/mux v1.8.0
github.com/imdario/mergo v0.3.11 // indirect
github.com/jessevdk/go-flags v1.4.0 // indirect
github.com/karrick/godirwalk v1.16.1 // indirect
github.com/kr/pretty v0.2.1 // indirect
github.com/prometheus/client_golang v1.9.0 // indirect
github.com/qri-io/jsonschema v0.1.1
github.com/rogpeppe/go-internal v1.6.2 // indirect
github.com/sirupsen/logrus v1.7.0
github.com/spf13/cobra v1.1.1
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.7.0
gitlab.com/golang-commonmark/linkify v0.0.0-20200225224916-64bca66f6ad3 // indirect
gitlab.com/golang-commonmark/markdown v0.0.0-20191127184510-91b5b3c99c19
go.uber.org/zap v1.16.0 // indirect
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect
golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
Expand Down
120 changes: 14 additions & 106 deletions go.sum

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions pkg/dashboard/dashboard.go
Expand Up @@ -181,7 +181,7 @@ func GetRouter(c config.Configuration, auditPath string, port int, basePath stri
}

var auditDataObj validator.AuditData
auditDataObj, err = validator.RunAudit(adjustedConf, k)
auditDataObj, err = validator.RunAudit(adjustedConf, k, false)
if err != nil {
http.Error(w, "Error Fetching Deployments", http.StatusInternalServerError)
return
Expand Down Expand Up @@ -214,7 +214,7 @@ func GetRouter(c config.Configuration, auditPath string, port int, basePath stri
}

var auditData validator.AuditData
auditData, err = validator.RunAudit(adjustedConf, k)
auditData, err = validator.RunAudit(adjustedConf, k, false)
if err != nil {
logrus.Errorf("Error getting audit data: %v", err)
http.Error(w, "Error running audit", 500)
Expand Down
6 changes: 5 additions & 1 deletion pkg/validator/fullaudit.go
Expand Up @@ -16,7 +16,7 @@ import (
)

// RunAudit runs a full Polaris audit and returns an AuditData object
func RunAudit(config conf.Configuration, kubeResources *kube.ResourceProvider) (AuditData, error) {
func RunAudit(config conf.Configuration, kubeResources *kube.ResourceProvider, onlyShowFailedTests bool) (AuditData, error) {
displayName := config.DisplayName
if displayName == "" {
displayName = kubeResources.SourceName
Expand Down Expand Up @@ -49,6 +49,10 @@ func RunAudit(config conf.Configuration, kubeResources *kube.ResourceProvider) (
},
Results: results,
}
auditData.Score = auditData.GetSummary().GetScore()
if onlyShowFailedTests {
auditData.RemoveSuccessfulResults()
}
return auditData, nil
}

Expand Down
4 changes: 3 additions & 1 deletion pkg/validator/fullaudit_test.go
Expand Up @@ -28,10 +28,12 @@ func TestGetTemplateData(t *testing.T) {
Warnings: uint(3),
Dangers: uint(3),
}
score := uint(0)

var actualAudit AuditData
actualAudit, err = RunAudit(c, resources)
actualAudit, err = RunAudit(c, resources, false)
assert.Equal(t, err, nil, "error should be nil")
assert.Equal(t, score, actualAudit.Score, "")
assert.EqualValues(t, sum, actualAudit.GetSummary())
assert.Equal(t, actualAudit.SourceType, "Cluster", "should be from a cluster")
assert.Equal(t, actualAudit.SourceName, "test", "should be from a cluster")
Expand Down
36 changes: 36 additions & 0 deletions pkg/validator/output.go
Expand Up @@ -34,6 +34,14 @@ type AuditData struct {
DisplayName string
ClusterInfo ClusterInfo
Results []Result
Score uint
}

// RemoveSuccessfulResults remove all test that have passed.
func (res *AuditData) RemoveSuccessfulResults() {
for _, auditDataResult := range res.Results {
auditDataResult.removeSuccessfulResults()
}
}

// ClusterInfo contains Polaris results as well as some high-level stats
Expand Down Expand Up @@ -67,15 +75,43 @@ type Result struct {
CreatedTime time.Time
}

func (res *Result) removeSuccessfulResults() {
for k, resultMessage := range res.Results {
if resultMessage.Success {
delete(res.Results, k)
}
}
res.PodResult.removeSuccessfulResults()
}

// PodResult provides a list of validation messages for each pod.
type PodResult struct {
Name string
Results ResultSet
ContainerResults []ContainerResult
}

func (res *PodResult) removeSuccessfulResults() {
for k, resultMessage := range res.Results {
if resultMessage.Success {
delete(res.Results, k)
}
}
for _, containerResult := range res.ContainerResults {
containerResult.removeSuccessfulResults()
}
}

// ContainerResult provides a list of validation messages for each container.
type ContainerResult struct {
Name string
Results ResultSet
}

func (res *ContainerResult) removeSuccessfulResults() {
for k, resultMessage := range res.Results {
if resultMessage.Success {
delete(res.Results, k)
}
}
}

0 comments on commit fe0060a

Please sign in to comment.