crowdsec/pkg/acquisition/acquisition_test.go
2021-04-28 16:52:26 +02:00

109 lines
2.5 KiB
Go

package acquisition
import (
"fmt"
"testing"
"github.com/crowdsecurity/crowdsec/pkg/acquisition/configuration"
"github.com/crowdsecurity/crowdsec/pkg/types"
"github.com/davecgh/go-spew/spew"
"github.com/pkg/errors"
"github.com/prometheus/client_golang/prometheus"
log "github.com/sirupsen/logrus"
tomb "gopkg.in/tomb.v2"
"gopkg.in/yaml.v2"
)
type MockSource struct {
configuration.DataSourceCommonCfg
logger *log.Entry `yaml:"-"`
Toto string `yaml:"toto"`
}
func (f *MockSource) GetMetrics() []prometheus.Collector {
return nil
}
func (f *MockSource) Configure(cfg []byte, logger *log.Entry) error {
f.logger = logger
f.logger.Infof("config called, bytes: %s", string(cfg))
f.logger.Tracef("this is trace!")
if err := yaml.Unmarshal(cfg, f); err != nil {
return errors.Wrap(err, "while unmarshaling to reader specific config")
}
if f.Toto == "" {
return fmt.Errorf("expect non-empty toto")
}
return nil
}
func (f *MockSource) GetMode() string {
f.logger.Debugf("called")
return f.Mode
}
func (f *MockSource) SupportedModes() []string {
return []string{"tail", "cat"}
}
func (f *MockSource) OneShotAcquisition(chan types.Event, *tomb.Tomb) error {
return nil
}
func (f *MockSource) LiveAcquisition(chan types.Event, *tomb.Tomb) error {
return nil
}
func (f *MockSource) CanRun() error {
return nil
}
//appendMockSource is only used to add mock source for tests
func appendMockSource() {
if GetDataSourceIface("mock") == nil {
mock := struct {
name string
iface DataSource
}{name: "mock", iface: &MockSource{}}
AcquisitionSources = append(AcquisitionSources, mock)
}
}
func TestLoadAcquisition(t *testing.T) {
appendMockSource()
config := []byte(
`
mode: tail
labels:
toto: tutu
type: mock
toto: foobar
log_level: trace
`)
var generic interface{}
var common configuration.DataSourceCommonCfg
if err := yaml.Unmarshal(config, &generic); err != nil {
t.Fatalf("failed to unmarshal %s : %s", config, err)
}
outBytes, err := yaml.Marshal(generic)
if err != nil {
t.Fatal(err)
}
log.Printf("-> %s", outBytes)
if err := yaml.Unmarshal(outBytes, &common); err != nil {
t.Fatalf("cannot unmarshal to generic : %s", err)
}
// if generic == nil {
// t.Fatalf("result of unmarshal is empty :(")
// }
// log.Printf("raw iface : %s", spew.Sdump(generic))
// common = generic.(configuration.DataSourceCommonCfg)
ds, err := DataSourceConfigure(outBytes, common)
log.Printf("-> ds : %s", spew.Sdump(ds))
log.Printf("-> err : %s", err)
}