85 lines
2.3 KiB
Go
85 lines
2.3 KiB
Go
|
|
package sources
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"gitea.maximumdirect.net/ejr/feedkit/config"
|
||
|
|
"gitea.maximumdirect.net/ejr/feedkit/event"
|
||
|
|
)
|
||
|
|
|
||
|
|
type testPollSource struct{ name string }
|
||
|
|
|
||
|
|
func (s testPollSource) Name() string { return s.name }
|
||
|
|
func (s testPollSource) Poll(context.Context) ([]event.Event, error) {
|
||
|
|
return nil, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
type testStreamSource struct{ name string }
|
||
|
|
|
||
|
|
func (s testStreamSource) Name() string { return s.name }
|
||
|
|
func (s testStreamSource) Run(context.Context, chan<- event.Event) error {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRegistryBuildInputModeConflicts(t *testing.T) {
|
||
|
|
r := NewRegistry()
|
||
|
|
r.RegisterPoll("poll_driver", func(cfg config.SourceConfig) (PollSource, error) {
|
||
|
|
return testPollSource{name: cfg.Name}, nil
|
||
|
|
})
|
||
|
|
r.RegisterStream("stream_driver", func(cfg config.SourceConfig) (StreamSource, error) {
|
||
|
|
return testStreamSource{name: cfg.Name}, nil
|
||
|
|
})
|
||
|
|
|
||
|
|
_, err := r.BuildInput(config.SourceConfig{
|
||
|
|
Name: "s1",
|
||
|
|
Driver: "stream_driver",
|
||
|
|
Mode: config.SourceModePoll,
|
||
|
|
})
|
||
|
|
if err == nil {
|
||
|
|
t.Fatalf("expected mode conflict error, got nil")
|
||
|
|
}
|
||
|
|
if !strings.Contains(err.Error(), "mode=poll") {
|
||
|
|
t.Fatalf("expected poll conflict error, got: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
_, err = r.BuildInput(config.SourceConfig{
|
||
|
|
Name: "s2",
|
||
|
|
Driver: "poll_driver",
|
||
|
|
Mode: config.SourceModeStream,
|
||
|
|
})
|
||
|
|
if err == nil {
|
||
|
|
t.Fatalf("expected mode conflict error, got nil")
|
||
|
|
}
|
||
|
|
if !strings.Contains(err.Error(), "mode=stream") {
|
||
|
|
t.Fatalf("expected stream conflict error, got: %v", err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRegistryBuildInputAutoByDriverType(t *testing.T) {
|
||
|
|
r := NewRegistry()
|
||
|
|
r.RegisterPoll("poll_driver", func(cfg config.SourceConfig) (PollSource, error) {
|
||
|
|
return testPollSource{name: cfg.Name}, nil
|
||
|
|
})
|
||
|
|
r.RegisterStream("stream_driver", func(cfg config.SourceConfig) (StreamSource, error) {
|
||
|
|
return testStreamSource{name: cfg.Name}, nil
|
||
|
|
})
|
||
|
|
|
||
|
|
src, err := r.BuildInput(config.SourceConfig{Name: "p", Driver: "poll_driver"})
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("BuildInput poll auto failed: %v", err)
|
||
|
|
}
|
||
|
|
if _, ok := src.(PollSource); !ok {
|
||
|
|
t.Fatalf("expected PollSource, got %T", src)
|
||
|
|
}
|
||
|
|
|
||
|
|
src, err = r.BuildInput(config.SourceConfig{Name: "s", Driver: "stream_driver"})
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("BuildInput stream auto failed: %v", err)
|
||
|
|
}
|
||
|
|
if _, ok := src.(StreamSource); !ok {
|
||
|
|
t.Fatalf("expected StreamSource, got %T", src)
|
||
|
|
}
|
||
|
|
}
|