cscli setup: accept stdin; fix proftpd detection test and service unmask (#2496)

This commit is contained in:
mmetc 2023-09-29 12:58:35 +02:00 committed by GitHub
parent 0d1c4c6070
commit 95ed308207
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 74 additions and 60 deletions

View file

@ -10,7 +10,6 @@ import (
"github.com/lithammer/dedent"
"github.com/stretchr/testify/require"
"github.com/crowdsecurity/go-cs-lib/csstring"
"github.com/crowdsecurity/go-cs-lib/cstest"
"github.com/crowdsecurity/crowdsec/pkg/setup"
@ -58,7 +57,7 @@ func TestSetupHelperProcess(t *testing.T) {
os.Exit(0)
}
func tempYAML(t *testing.T, content string) string {
func tempYAML(t *testing.T, content string) os.File {
t.Helper()
require := require.New(t)
file, err := os.CreateTemp("", "")
@ -70,7 +69,10 @@ func tempYAML(t *testing.T, content string) string {
err = file.Close()
require.NoError(err)
return file.Name()
file, err = os.Open(file.Name())
require.NoError(err)
return *file
}
func TestPathExists(t *testing.T) {
@ -239,7 +241,7 @@ func TestListSupported(t *testing.T) {
"invalid yaml: bad version",
"version: 2.0",
nil,
"unsupported version tag '2.0' (must be 1.0)",
"invalid version tag '2.0' (must be 1.0)",
},
}
@ -248,8 +250,8 @@ func TestListSupported(t *testing.T) {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
f := tempYAML(t, tc.yml)
defer os.Remove(f)
supported, err := setup.ListSupported(f)
defer os.Remove(f.Name())
supported, err := setup.ListSupported(&f)
cstest.RequireErrorContains(t, err, tc.expectedErr)
require.ElementsMatch(t, tc.expected, supported)
})
@ -373,9 +375,9 @@ func TestDetectSimpleRule(t *testing.T) {
- false
ugly:
`)
defer os.Remove(f)
defer os.Remove(f.Name())
detected, err := setup.Detect(f, setup.DetectOptions{})
detected, err := setup.Detect(&f, setup.DetectOptions{})
require.NoError(err)
expected := []setup.ServiceSetup{
@ -420,9 +422,9 @@ detect:
tc := tc
t.Run(tc.name, func(t *testing.T) {
f := tempYAML(t, tc.config)
defer os.Remove(f)
defer os.Remove(f.Name())
detected, err := setup.Detect(f, setup.DetectOptions{})
detected, err := setup.Detect(&f, setup.DetectOptions{})
cstest.RequireErrorContains(t, err, tc.expectedErr)
require.Equal(tc.expected, detected)
})
@ -514,9 +516,9 @@ detect:
tc := tc
t.Run(tc.name, func(t *testing.T) {
f := tempYAML(t, tc.config)
defer os.Remove(f)
defer os.Remove(f.Name())
detected, err := setup.Detect(f, setup.DetectOptions{})
detected, err := setup.Detect(&f, setup.DetectOptions{})
cstest.RequireErrorContains(t, err, tc.expectedErr)
require.Equal(tc.expected, detected)
})
@ -542,9 +544,9 @@ func TestDetectForcedUnit(t *testing.T) {
journalctl_filter:
- _SYSTEMD_UNIT=crowdsec-setup-forced.service
`)
defer os.Remove(f)
defer os.Remove(f.Name())
detected, err := setup.Detect(f, setup.DetectOptions{ForcedUnits: []string{"crowdsec-setup-forced.service"}})
detected, err := setup.Detect(&f, setup.DetectOptions{ForcedUnits: []string{"crowdsec-setup-forced.service"}})
require.NoError(err)
expected := setup.Setup{
@ -580,9 +582,9 @@ func TestDetectForcedProcess(t *testing.T) {
when:
- ProcessRunning("foobar")
`)
defer os.Remove(f)
defer os.Remove(f.Name())
detected, err := setup.Detect(f, setup.DetectOptions{ForcedProcesses: []string{"foobar"}})
detected, err := setup.Detect(&f, setup.DetectOptions{ForcedProcesses: []string{"foobar"}})
require.NoError(err)
expected := setup.Setup{
@ -610,9 +612,9 @@ func TestDetectSkipService(t *testing.T) {
when:
- ProcessRunning("foobar")
`)
defer os.Remove(f)
defer os.Remove(f.Name())
detected, err := setup.Detect(f, setup.DetectOptions{ForcedProcesses: []string{"foobar"}, SkipServices: []string{"wizard"}})
detected, err := setup.Detect(&f, setup.DetectOptions{ForcedProcesses: []string{"foobar"}, SkipServices: []string{"wizard"}})
require.NoError(err)
expected := setup.Setup{[]setup.ServiceSetup{}}
@ -826,9 +828,9 @@ func TestDetectForcedOS(t *testing.T) {
tc := tc
t.Run(tc.name, func(t *testing.T) {
f := tempYAML(t, tc.config)
defer os.Remove(f)
defer os.Remove(f.Name())
detected, err := setup.Detect(f, setup.DetectOptions{ForcedOS: tc.forced})
detected, err := setup.Detect(&f, setup.DetectOptions{ForcedOS: tc.forced})
cstest.RequireErrorContains(t, err, tc.expectedErr)
require.Equal(tc.expected, detected)
})
@ -882,7 +884,7 @@ func TestDetectDatasourceValidation(t *testing.T) {
datasource:
source: file`,
expected: setup.Setup{Setup: []setup.ServiceSetup{}},
expectedErr: "while parsing {{.DetectYaml}}: yaml: unmarshal errors:\n line 6: field source not found in type setup.Service",
expectedErr: "yaml: unmarshal errors:\n line 6: field source not found in type setup.Service",
}, {
name: "source is mismatched",
config: `
@ -1001,18 +1003,10 @@ func TestDetectDatasourceValidation(t *testing.T) {
for _, tc := range tests {
tc := tc
t.Run(tc.name, func(t *testing.T) {
detectYaml := tempYAML(t, tc.config)
defer os.Remove(detectYaml)
data := map[string]string{
"DetectYaml": detectYaml,
}
expectedErr, err := csstring.Interpolate(tc.expectedErr, data)
require.NoError(err)
detected, err := setup.Detect(detectYaml, setup.DetectOptions{})
cstest.RequireErrorContains(t, err, expectedErr)
f := tempYAML(t, tc.config)
defer os.Remove(f.Name())
detected, err := setup.Detect(&f, setup.DetectOptions{})
cstest.RequireErrorContains(t, err, tc.expectedErr)
require.Equal(tc.expected, detected)
})
}