Skip to content

Commit 06b32c0

Browse files
Organize talismanrc tests
Authored-by: Owen Nelson <[email protected]>
1 parent 17fcb79 commit 06b32c0

File tree

3 files changed

+114
-70
lines changed

3 files changed

+114
-70
lines changed

talismanrc/rc_file_test.go

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,56 @@
11
package talismanrc
22

33
import (
4+
"regexp"
45
"talisman/detector/severity"
56
"testing"
67

8+
"github.com/spf13/afero"
79
"github.com/stretchr/testify/assert"
810
)
911

12+
func TestLoadingFromFile(t *testing.T) {
13+
fs := afero.NewMemMapFs()
14+
file, err := afero.TempFile(fs, "", DefaultRCFileName)
15+
assert.NoError(t, err, "Problem setting up test .talismanrc?")
16+
talismanRCFile := file.Name()
17+
SetFs__(fs)
18+
19+
t.Run("Creates an empty TalismanRC if .talismanrc file doesn't exist", func(t *testing.T) {
20+
SetRcFilename__("not-a-file")
21+
emptyRC, err := Load()
22+
assert.NoError(t, err, "Should not error if there is a problem reading the file")
23+
assert.Equal(t, &TalismanRC{Version: DefaultRCVersion}, emptyRC)
24+
})
25+
26+
t.Run("Loads all valid TalismanRC fields", func(t *testing.T) {
27+
SetRcFilename__(talismanRCFile)
28+
err = afero.WriteFile(fs, talismanRCFile, []byte(fullyConfiguredTalismanRC), 0666)
29+
assert.NoError(t, err, "Problem setting up test .talismanrc?")
30+
31+
talismanRCFromFile, _ := Load()
32+
expectedTalismanRC := &TalismanRC{
33+
FileIgnoreConfig: []FileIgnoreConfig{
34+
{FileName: "existing.pem", Checksum: "123444ddssa75333b25b6275f97680604add51b84eb8f4a3b9dcbbc652e6f27ac"}},
35+
ScopeConfig: []ScopeConfig{{"go"}},
36+
AllowedPatterns: []*Pattern{
37+
{regexp.MustCompile("this-is-okay")},
38+
{regexp.MustCompile("key={listOfThings.id}")}},
39+
CustomPatterns: []PatternString{"this-isn't-okay"},
40+
Threshold: severity.Medium,
41+
CustomSeverities: []CustomSeverityConfig{
42+
{Detector: "HexContent", Severity: severity.Low}},
43+
Experimental: ExperimentalConfig{Base64EntropyThreshold: 4.7},
44+
Version: "1.0",
45+
}
46+
assert.Equal(t, expectedTalismanRC, talismanRCFromFile)
47+
})
48+
49+
SetRcFilename__(DefaultRCFileName)
50+
}
51+
1052
func TestUnmarshalsValidYaml(t *testing.T) {
11-
t.Run("talismanrc should not fail as long as the yaml structure is correct", func(t *testing.T) {
53+
t.Run("Should not fail as long as the yaml structure is correct", func(t *testing.T) {
1254
fileContents := []byte(`
1355
---
1456
fileignoreconfig:
@@ -23,7 +65,7 @@ custom_patterns:
2365
assert.Equal(t, 1, len(rc.CustomPatterns))
2466
})
2567

26-
t.Run("talismanrc.For(mode) should read multiple entries in rc file correctly", func(t *testing.T) {
68+
t.Run("Should read multiple entries in rc file correctly", func(t *testing.T) {
2769
fileContent := []byte(`
2870
fileignoreconfig:
2971
- filename: testfile_1.yml
@@ -43,6 +85,22 @@ fileignoreconfig:
4385
assert.Equal(t, rc.FileIgnoreConfig[2].GetFileName(), "testfile_3.yml")
4486
assert.True(t, rc.FileIgnoreConfig[2].ChecksumMatches("file3_checksum"))
4587
})
88+
89+
t.Run("Should read severity level", func(t *testing.T) {
90+
talismanRCContents := []byte("threshold: high")
91+
persistedTalismanrc, _ := newPersistedRC(talismanRCContents)
92+
assert.Equal(t, persistedTalismanrc.Threshold, severity.High)
93+
})
94+
95+
t.Run("Should read custom severities", func(t *testing.T) {
96+
talismanRCContents := []byte(`
97+
custom_severities:
98+
- detector: Base64Content
99+
severity: low
100+
`)
101+
talismanRC, _ := newPersistedRC(talismanRCContents)
102+
assert.Equal(t, talismanRC.CustomSeverities, []CustomSeverityConfig{{Detector: "Base64Content", Severity: severity.Low}})
103+
})
46104
}
47105

48106
func TestShouldIgnoreUnformattedFiles(t *testing.T) {
@@ -53,9 +111,3 @@ func TestShouldIgnoreUnformattedFiles(t *testing.T) {
53111
assert.Equal(t, &TalismanRC{Version: "1.0"}, talismanRC, "Expected commented line '%s' to result in an empty TalismanRC")
54112
}
55113
}
56-
57-
func TestShouldConvertThresholdToValue(t *testing.T) {
58-
talismanRCContents := []byte("threshold: high")
59-
persistedTalismanrc, _ := newPersistedRC(talismanRCContents)
60-
assert.Equal(t, persistedTalismanrc.Threshold, severity.High)
61-
}

talismanrc/talismanrc_test.go

Lines changed: 21 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,26 @@ import (
1414
"github.com/stretchr/testify/assert"
1515
)
1616

17+
const fullyConfiguredTalismanRC = `
18+
---
19+
fileignoreconfig:
20+
- filename: existing.pem
21+
checksum: 123444ddssa75333b25b6275f97680604add51b84eb8f4a3b9dcbbc652e6f27ac
22+
scopeconfig: [scope: go]
23+
allowed_patterns:
24+
- this-is-okay
25+
- key={listOfThings.id}
26+
custom_patterns:
27+
- this-isn't-okay
28+
threshold: medium
29+
custom_severities:
30+
- detector: HexContent
31+
severity: low
32+
experimental:
33+
base64EntropyThreshold: 4.7
34+
version: 1.0
35+
`
36+
1737
func init() {
1838
logr.SetOutput(io.Discard)
1939
}
@@ -43,18 +63,6 @@ func TestShouldFilterAllowedPatternsFromAdditionBasedOnFileConfig(t *testing.T)
4363
assert.Equal(t, fileContentFiltered2, fileContent)
4464
}
4565

46-
func TestObeysCustomSeverityLevelsAndThreshold(t *testing.T) {
47-
talismanRCContents := []byte(`threshold: high
48-
custom_severities:
49-
- detector: Base64Content
50-
severity: low
51-
`)
52-
talismanRC, _ := newPersistedRC(talismanRCContents)
53-
assert.Equal(t, talismanRC.Threshold, severity.High)
54-
assert.Equal(t, len(talismanRC.CustomSeverities), 1)
55-
assert.Equal(t, talismanRC.CustomSeverities, []CustomSeverityConfig{{Detector: "Base64Content", Severity: severity.Low}})
56-
}
57-
5866
func TestDirectoryPatterns(t *testing.T) {
5967
assertAccepts("foo/", "", "bar", t)
6068
assertAccepts("foo/", "", "foo", t)
@@ -138,25 +146,7 @@ func TestAddingFileIgnores(t *testing.T) {
138146
})
139147

140148
t.Run("When there already is a .talismanrc", func(t *testing.T) {
141-
existingContent := `
142-
fileignoreconfig:
143-
- filename: existing.pem
144-
checksum: 123444ddssa75333b25b6275f97680604add51b84eb8f4a3b9dcbbc652e6f27ac
145-
scopeconfig: [scope: go]
146-
allowed_patterns:
147-
- this-is-okay
148-
- key={listOfThings.id}
149-
custom_patterns:
150-
- this-isn't-okay
151-
threshold: medium
152-
custom_severities:
153-
- detector: HexContent
154-
severity: low
155-
experimental:
156-
base64EntropyThreshold: 4.7
157-
version: 1.0
158-
`
159-
err = afero.WriteFile(fs, ignoreFile, []byte(existingContent), 0666)
149+
err = afero.WriteFile(fs, ignoreFile, []byte(fullyConfiguredTalismanRC), 0666)
160150
assert.NoError(t, err)
161151

162152
initialRCConfig, _ := Load()
@@ -229,37 +219,6 @@ func createTalismanRCWithScopeIgnores(scopesToIgnore []string) *TalismanRC {
229219
return &TalismanRC{ScopeConfig: scopeConfigs}
230220
}
231221

232-
func TestFileIgnoreConfig_ChecksumMatches(t *testing.T) {
233-
fileIgnoreConfig := &FileIgnoreConfig{
234-
FileName: "some_filename",
235-
Checksum: "some_checksum",
236-
IgnoreDetectors: nil,
237-
AllowedPatterns: nil,
238-
}
239-
240-
assert.True(t, fileIgnoreConfig.ChecksumMatches("some_checksum"))
241-
assert.False(t, fileIgnoreConfig.ChecksumMatches("some_other_checksum"))
242-
}
243-
244-
func TestFileIgnoreConfig_GetAllowedPatterns(t *testing.T) {
245-
fileIgnoreConfig := &FileIgnoreConfig{
246-
FileName: "some_filename",
247-
Checksum: "some_checksum",
248-
IgnoreDetectors: nil,
249-
AllowedPatterns: nil,
250-
}
251-
252-
//No allowed patterns specified
253-
allowedPatterns := fileIgnoreConfig.GetAllowedPatterns()
254-
assert.Equal(t, 0, len(allowedPatterns))
255-
256-
fileIgnoreConfig.compiledPatterns = nil
257-
fileIgnoreConfig.AllowedPatterns = []string{"[Ff]ile[nN]ame"}
258-
allowedPatterns = fileIgnoreConfig.GetAllowedPatterns()
259-
assert.Equal(t, 1, len(allowedPatterns))
260-
assert.Regexp(t, allowedPatterns[0], "fileName")
261-
}
262-
263222
func TestSuggestRCFor(t *testing.T) {
264223
t.Run("should suggest proper RC when ignore configs are valid", func(t *testing.T) {
265224
fileIgnoreConfigs := []FileIgnoreConfig{

talismanrc/types_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,36 @@ func TestCustomMarshalling(t *testing.T) {
3131
assert.Equal(t, pattern.String(), strings.TrimSpace(string(str)))
3232
})
3333
}
34+
35+
func TestFileIgnoreConfig(t *testing.T) {
36+
t.Run("Checksum matching", func(t *testing.T) {
37+
fileIgnoreConfig := &FileIgnoreConfig{
38+
FileName: "some_filename",
39+
Checksum: "some_checksum",
40+
IgnoreDetectors: nil,
41+
AllowedPatterns: nil,
42+
}
43+
44+
assert.True(t, fileIgnoreConfig.ChecksumMatches("some_checksum"))
45+
assert.False(t, fileIgnoreConfig.ChecksumMatches("some_other_checksum"))
46+
})
47+
48+
t.Run("Compiles regexes for patterns as needed", func(t *testing.T) {
49+
fileIgnoreConfig := &FileIgnoreConfig{
50+
FileName: "some_filename",
51+
Checksum: "some_checksum",
52+
IgnoreDetectors: nil,
53+
AllowedPatterns: nil,
54+
}
55+
56+
//No allowed patterns specified
57+
allowedPatterns := fileIgnoreConfig.GetAllowedPatterns()
58+
assert.Equal(t, 0, len(allowedPatterns))
59+
60+
fileIgnoreConfig.compiledPatterns = nil
61+
fileIgnoreConfig.AllowedPatterns = []string{"[Ff]ile[nN]ame"}
62+
allowedPatterns = fileIgnoreConfig.GetAllowedPatterns()
63+
assert.Equal(t, 1, len(allowedPatterns))
64+
assert.Regexp(t, allowedPatterns[0], "fileName")
65+
})
66+
}

0 commit comments

Comments
 (0)