Skip to content

Commit 45652a8

Browse files
authored
fix bug : Skip level (#61)
* add description to skip level struct * fix writer packages * add scratch test and use tar files
1 parent a0f8069 commit 45652a8

9 files changed

Lines changed: 51 additions & 17 deletions

File tree

pkg/assessor/group/group.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,13 @@ func (a GroupAssessor) Assess(fileMap extractor.FileMap) ([]*types.Assessment, e
4949
}
5050
}
5151
if !existFile {
52-
assesses = []*types.Assessment{{Code: types.AvoidDuplicateUserGroup, Level: types.SkipLevel}}
52+
assesses = []*types.Assessment{
53+
{
54+
Code: types.AvoidDuplicateUserGroup,
55+
Level: types.SkipLevel,
56+
Desc: fmt.Sprintf("failed to detect %s", strings.Join(a.RequiredFiles(), ",")),
57+
},
58+
}
5359
}
5460

5561
return assesses, nil

pkg/assessor/passwd/passwd.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,13 @@ func (a PasswdAssessor) Assess(fileMap extractor.FileMap) ([]*types.Assessment,
4444
}
4545
}
4646
if !existFile {
47-
assesses = []*types.Assessment{{Code: types.AvoidEmptyPassword, Level: types.SkipLevel}}
47+
assesses = []*types.Assessment{
48+
{
49+
Code: types.AvoidEmptyPassword,
50+
Level: types.SkipLevel,
51+
Desc: fmt.Sprintf("failed to detect %s", strings.Join(a.RequiredFiles(), ",")),
52+
},
53+
}
4854
}
4955
return assesses, nil
5056
}

pkg/assessor/user/user.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ func (a UserAssessor) Assess(fileMap extractor.FileMap) ([]*types.Assessment, er
4747
}
4848
}
4949
if !existFile {
50-
assesses = []*types.Assessment{{Code: types.AvoidDuplicateUserGroup, Level: types.SkipLevel}}
50+
assesses = []*types.Assessment{{
51+
Code: types.AvoidDuplicateUserGroup,
52+
Level: types.SkipLevel,
53+
Desc: fmt.Sprintf("failed to detect %s", strings.Join(a.RequiredFiles(), ",")),
54+
}}
5155
}
5256

5357
return assesses, nil

pkg/report/json.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ type JsonSummary struct {
2222
Fatal int `json:"fatal"`
2323
Warn int `json:"warn"`
2424
Info int `json:"info"`
25+
Skip int `json:"skip"`
2526
Pass int `json:"pass"`
2627
}
2728
type JsonDetail struct {
@@ -40,22 +41,24 @@ func (jw JsonWriter) Write(assessMap types.AssessmentMap) (abend bool, err error
4041
jsonSummary.Pass++
4142
continue
4243
}
43-
assesses := assessMap[ass.Code].Assessments
44-
detail := jsonDetail(ass.Code, ass.Level, assesses)
44+
assess := assessMap[ass.Code]
45+
detail := jsonDetail(assess.Code, assess.Level, assess.Assessments)
4546
if detail != nil {
4647
jsonDetails = append(jsonDetails, detail)
4748
}
4849

4950
// increment summary
50-
switch ass.Level {
51+
switch assess.Level {
5152
case types.FatalLevel:
5253
jsonSummary.Fatal++
5354
case types.WarnLevel:
5455
jsonSummary.Warn++
5556
case types.InfoLevel:
5657
jsonSummary.Info++
58+
case types.SkipLevel:
59+
jsonSummary.Skip++
5760
}
58-
if ass.Level >= config.Conf.ExitLevel {
61+
if assess.Level >= config.Conf.ExitLevel {
5962
abend = true
6063
}
6164
}

pkg/report/list.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ func (lw ListWriter) Write(assessMap types.AssessmentMap) (abend bool, err error
3737
if _, ok := assessMap[ass.Code]; !ok {
3838
continue
3939
}
40-
assesses := assessMap[ass.Code].Assessments
41-
showTargetResult(ass.Code, ass.Level, assesses)
42-
if ass.Level >= config.Conf.ExitLevel {
40+
assess := assessMap[ass.Code]
41+
showTargetResult(assess.Code, assess.Level, assess.Assessments)
42+
if assess.Level >= config.Conf.ExitLevel {
4343
abend = true
4444
}
4545
}
@@ -48,7 +48,7 @@ func (lw ListWriter) Write(assessMap types.AssessmentMap) (abend bool, err error
4848

4949
func showTargetResult(code string, level int, assessments []*types.Assessment) {
5050
showTitleLine(code, level)
51-
if level != types.IgnoreLevel {
51+
if level > types.IgnoreLevel {
5252
for _, assessment := range assessments {
5353
showDescription(assessment)
5454
}

pkg/scanner/scan_test.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,14 @@ import (
66
"testing"
77
"time"
88

9-
"github.com/goodwithtech/dockle/pkg/assessor/contentTrust"
10-
11-
"github.com/goodwithtech/dockle/pkg/assessor/manifest"
12-
139
"github.com/google/go-cmp/cmp/cmpopts"
1410

1511
deckodertypes "github.com/goodwithtech/deckoder/types"
1612

1713
"github.com/google/go-cmp/cmp"
1814

15+
"github.com/goodwithtech/dockle/pkg/assessor/contentTrust"
16+
"github.com/goodwithtech/dockle/pkg/assessor/manifest"
1917
"github.com/goodwithtech/dockle/pkg/log"
2018
"github.com/goodwithtech/dockle/pkg/types"
2119
)
@@ -30,7 +28,7 @@ func TestScanImage(t *testing.T) {
3028
expected []*types.Assessment
3129
}{
3230
"Dockerfile.base": {
33-
fileName: "",
31+
// TODO : too large to use github / fileName: "base.tar",
3432
// testdata/Dockerfile.base
3533
imageName: "goodwithtech/dockle-test:base-test",
3634
option: deckodertypes.DockerOption{Timeout: time.Minute},
@@ -51,6 +49,17 @@ func TestScanImage(t *testing.T) {
5149
{Code: types.UseContentTrust, Filename: contentTrust.HostEnvironmentFileName},
5250
},
5351
},
52+
"Dockerfile.scratch": {
53+
fileName: "./testdata/scratch.tar",
54+
expected: []*types.Assessment{
55+
{Code: types.AvoidCredential, Filename: "credentials.json"},
56+
{Code: types.AddHealthcheck, Filename: manifest.ConfigFileName},
57+
{Code: types.UseContentTrust, Filename: contentTrust.HostEnvironmentFileName},
58+
{Code: types.AvoidEmptyPassword, Level: types.SkipLevel},
59+
{Code: types.AvoidDuplicateUserGroup, Level: types.SkipLevel},
60+
{Code: types.AvoidDuplicateUserGroup, Level: types.SkipLevel},
61+
},
62+
},
5463
"emptyArg": {
5564
wantErr: types.ErrSetImageOrFile,
5665
},
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM scratch
2+
ADD Dockerfile.base /credentials.json
3+
USER scratch

pkg/scanner/testdata/scratch.tar

11 KB
Binary file not shown.

pkg/types/assessment.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ type AssessmentMap map[string]CodeInfo
1717
func CreateAssessmentMap(as AssessmentSlice, ignoreMap map[string]struct{}) AssessmentMap {
1818
asMap := AssessmentMap{}
1919
for _, a := range as {
20-
level := DefaultLevelMap[a.Code]
20+
level := a.Level
21+
if level == 0 {
22+
level = DefaultLevelMap[a.Code]
23+
}
2124
if _, ok := ignoreMap[a.Code]; ok {
2225
level = IgnoreLevel
2326
}

0 commit comments

Comments
 (0)