1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package config
- import (
- "os"
- "testing"
- "github.com/rs/zerolog"
- "github.com/stretchr/testify/assert"
- "github.com/cloudflare/cloudflared/watcher"
- )
- type mockNotifier struct {
- configs []Root
- }
- func (n *mockNotifier) ConfigDidUpdate(c Root) {
- n.configs = append(n.configs, c)
- }
- type mockFileWatcher struct {
- path string
- notifier watcher.Notification
- ready chan struct{}
- }
- func (w *mockFileWatcher) Start(n watcher.Notification) {
- w.notifier = n
- w.ready <- struct{}{}
- }
- func (w *mockFileWatcher) Add(string) error {
- return nil
- }
- func (w *mockFileWatcher) Shutdown() {
- }
- func (w *mockFileWatcher) TriggerChange() {
- w.notifier.WatcherItemDidChange(w.path)
- }
- func TestConfigChanged(t *testing.T) {
- filePath := "config.yaml"
- f, err := os.Create(filePath)
- assert.NoError(t, err)
- defer func() {
- _ = f.Close()
- _ = os.Remove(filePath)
- }()
- c := &Root{
- Forwarders: []Forwarder{
- {
- URL: "test.daltoniam.com",
- Listener: "127.0.0.1:8080",
- },
- },
- }
- configRead := func(configPath string, log *zerolog.Logger) (Root, error) {
- return *c, nil
- }
- wait := make(chan struct{})
- w := &mockFileWatcher{path: filePath, ready: wait}
- log := zerolog.Nop()
- service, err := NewFileManager(w, filePath, &log)
- service.ReadConfig = configRead
- assert.NoError(t, err)
- n := &mockNotifier{}
- go service.Start(n)
- <-wait
- c.Forwarders = append(c.Forwarders, Forwarder{URL: "add.daltoniam.com", Listener: "127.0.0.1:8081"})
- w.TriggerChange()
- service.Shutdown()
- assert.Len(t, n.configs, 2, "did not get 2 config updates as expected")
- assert.Len(t, n.configs[0].Forwarders, 1, "not the amount of forwarders expected")
- assert.Len(t, n.configs[1].Forwarders, 2, "not the amount of forwarders expected")
- assert.Equal(t, n.configs[0].Forwarders[0].Hash(), c.Forwarders[0].Hash(), "forwarder hashes don't match")
- assert.Equal(t, n.configs[1].Forwarders[0].Hash(), c.Forwarders[0].Hash(), "forwarder hashes don't match")
- assert.Equal(t, n.configs[1].Forwarders[1].Hash(), c.Forwarders[1].Hash(), "forwarder hashes don't match")
- }
|