81 lines
1.9 KiB
Go
81 lines
1.9 KiB
Go
|
package config
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"os"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/cloudflare/cloudflared/log"
|
||
|
"github.com/cloudflare/cloudflared/watcher"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"gopkg.in/yaml.v2"
|
||
|
)
|
||
|
|
||
|
type mockNotifier struct {
|
||
|
configs []Root
|
||
|
}
|
||
|
|
||
|
func (n *mockNotifier) ConfigDidUpdate(c Root) {
|
||
|
n.configs = append(n.configs, c)
|
||
|
}
|
||
|
|
||
|
func writeConfig(t *testing.T, f *os.File, c *Root) {
|
||
|
f.Sync()
|
||
|
b, err := yaml.Marshal(c)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
w := bufio.NewWriter(f)
|
||
|
_, err = w.Write(b)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
err = w.Flush()
|
||
|
assert.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
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{
|
||
|
OrgKey: "abcd",
|
||
|
ConfigType: "mytype",
|
||
|
CheckinInterval: 1,
|
||
|
Forwarders: []Forwarder{
|
||
|
{
|
||
|
URL: "test.daltoniam.com",
|
||
|
Listener: "127.0.0.1:8080",
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
writeConfig(t, f, c)
|
||
|
|
||
|
w, err := watcher.NewFile()
|
||
|
assert.NoError(t, err)
|
||
|
logger := log.CreateLogger()
|
||
|
service, err := NewFileManager(w, filePath, logger)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
n := &mockNotifier{}
|
||
|
go service.Start(n)
|
||
|
|
||
|
c.Forwarders = append(c.Forwarders, Forwarder{URL: "add.daltoniam.com", Listener: "127.0.0.1:8081"})
|
||
|
writeConfig(t, f, c)
|
||
|
|
||
|
// give it time to trigger
|
||
|
time.Sleep(10 * time.Millisecond)
|
||
|
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")
|
||
|
}
|