diff --git a/pkg/acquisition/acquisition.go b/pkg/acquisition/acquisition.go index 8ab7784a2..239b409a7 100644 --- a/pkg/acquisition/acquisition.go +++ b/pkg/acquisition/acquisition.go @@ -195,10 +195,14 @@ func LoadAcquisitionFromFile(config *csconfig.CrowdsecServiceCfg) ([]DataSource, if err := yaml.Unmarshal(inBytes, &sub); err != nil { return nil, errors.Wrapf(err, "configuration isn't valid config in %s : %s", acquisFile, string(inBytes)) } + sub.ConfigFile = acquisFile //it's an empty item, skip it if len(sub.Labels) == 0 { - log.Debugf("skipping empty item in %s", acquisFile) - continue + if sub.Type == "" { + log.Debugf("skipping empty item in %s", acquisFile) + continue + } + return nil, fmt.Errorf("missing labels in %s", acquisFile) } //for backward compat ('type' was not mandatory, detect it) if guessType := detectBackwardCompatAcquis(inBytes); guessType != "" { @@ -213,7 +217,7 @@ func LoadAcquisitionFromFile(config *csconfig.CrowdsecServiceCfg) ([]DataSource, } src, err := DataSourceConfigure(inBytes, sub) if err != nil { - return nil, errors.Wrapf(err, "while configuring datasource from %s", acquisFile) + return nil, errors.Wrapf(err, "while configuring datasource of type %s from %s", sub.Type, sub.ConfigFile) } sources = append(sources, *src) } diff --git a/pkg/acquisition/acquisition_test.go b/pkg/acquisition/acquisition_test.go index 24072fcf7..0c97089f4 100644 --- a/pkg/acquisition/acquisition_test.go +++ b/pkg/acquisition/acquisition_test.go @@ -243,6 +243,34 @@ func TestLoadAcquisitionFromFile(t *testing.T) { }, ExpectedLen: 2, }, + { + TestName: "missing_labels", + Config: csconfig.CrowdsecServiceCfg{ + AcquisitionFiles: []string{"test_files/missing_labels.yaml"}, + }, + ExpectedError: "missing labels in test_files/missing_labels.yaml", + }, + { + TestName: "backward_compat", + Config: csconfig.CrowdsecServiceCfg{ + AcquisitionFiles: []string{"test_files/backward_compat.yaml"}, + }, + ExpectedLen: 2, + }, + { + TestName: "bad_type", + Config: csconfig.CrowdsecServiceCfg{ + AcquisitionFiles: []string{"test_files/bad_source.yaml"}, + }, + ExpectedError: "unknown data source does_not_exist in test_files/bad_source.yaml", + }, + { + TestName: "invalid_filetype_config", + Config: csconfig.CrowdsecServiceCfg{ + AcquisitionFiles: []string{"test_files/bad_filetype.yaml"}, + }, + ExpectedError: "while configuring datasource of type file from test_files/bad_filetype.yaml", + }, } for _, test := range tests { dss, err := LoadAcquisitionFromFile(&test.Config) diff --git a/pkg/acquisition/test_files/backward_compat.yaml b/pkg/acquisition/test_files/backward_compat.yaml new file mode 100644 index 000000000..d56bf9a8c --- /dev/null +++ b/pkg/acquisition/test_files/backward_compat.yaml @@ -0,0 +1,15 @@ +filename: /tmp/test.log +labels: + type: syslog +--- +filenames: + - /tmp/test*.log +labels: + type: syslog +--- +# to be uncommented when we reimplement back journalctl +# journalctl_filter: +# - "_SYSTEMD_UNIT=ssh.service" +# labels: +# type: syslog +--- diff --git a/pkg/acquisition/test_files/bad_filetype.yaml b/pkg/acquisition/test_files/bad_filetype.yaml new file mode 100644 index 000000000..c7bd131e2 --- /dev/null +++ b/pkg/acquisition/test_files/bad_filetype.yaml @@ -0,0 +1,5 @@ +type: file +filenames: /tmp/tltlt.log #it should be an array +labels: + type: syslog + \ No newline at end of file diff --git a/pkg/acquisition/test_files/bad_source.yaml b/pkg/acquisition/test_files/bad_source.yaml new file mode 100644 index 000000000..596fcd744 --- /dev/null +++ b/pkg/acquisition/test_files/bad_source.yaml @@ -0,0 +1,4 @@ +type: does_not_exist +labels: + type: syslog +foobar: toto diff --git a/pkg/acquisition/test_files/missing_labels.yaml b/pkg/acquisition/test_files/missing_labels.yaml new file mode 100644 index 000000000..b02a817ae --- /dev/null +++ b/pkg/acquisition/test_files/missing_labels.yaml @@ -0,0 +1,2 @@ +type: file +filename: /tmp/test.log