Skip to content

Commit 34e705a

Browse files
authored
add config observer test (#645)
* add config observer test * cleanup
1 parent 76870e1 commit 34e705a

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

utils/configobserver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type ConfigBuilder[T any] interface {
1616
}
1717

1818
type ConfigDefaulter[T any] interface {
19-
InitDefaults(*T)
19+
InitDefaults(*T) error
2020
}
2121

2222
type ConfigObserver[T any] struct {

utils/configobserver_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package utils
2+
3+
import (
4+
"os"
5+
"testing"
6+
"time"
7+
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
const testConfig0 = `foo: a`
12+
const testConfig1 = `foo: b`
13+
14+
type TestConfig struct {
15+
Foo string `yaml:"foo"`
16+
Bar string `yaml:"bar"`
17+
}
18+
19+
type testConfigBuilder struct{}
20+
21+
func (testConfigBuilder) New() (*TestConfig, error) {
22+
return &TestConfig{}, nil
23+
}
24+
25+
func (testConfigBuilder) InitDefaults(c *TestConfig) error {
26+
c.Bar = "c"
27+
return nil
28+
}
29+
30+
func TestConfigObserver(t *testing.T) {
31+
f, err := os.CreateTemp(os.TempDir(), "lk-test-*.yaml")
32+
t.Cleanup(func() {
33+
_ = f.Close()
34+
})
35+
require.NoError(t, err)
36+
_, err = f.WriteString(testConfig0)
37+
require.NoError(t, err)
38+
39+
obs, conf, err := NewConfigObserver(f.Name(), testConfigBuilder{})
40+
require.NoError(t, err)
41+
42+
require.Equal(t, "a", conf.Foo)
43+
require.Equal(t, "c", conf.Bar)
44+
45+
done := make(chan struct{})
46+
obs.Observe(func(c *TestConfig) {
47+
require.Equal(t, "b", c.Foo)
48+
require.Equal(t, "c", c.Bar)
49+
close(done)
50+
})
51+
52+
_, err = f.WriteAt([]byte(testConfig1), 0)
53+
require.NoError(t, err)
54+
55+
select {
56+
case <-done:
57+
case <-time.After(100 * time.Millisecond):
58+
require.FailNow(t, "timed out waiting for config update")
59+
}
60+
}

0 commit comments

Comments
 (0)