From 177c4b0ed1cf04ee884fb8437d042874d6989c2a Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 22 Jan 2024 16:52:05 +0100 Subject: [PATCH] fix: flakiness test on configuration watcher --- pkg/server/configurationwatcher_test.go | 69 +++++++++++++------------ 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/pkg/server/configurationwatcher_test.go b/pkg/server/configurationwatcher_test.go index c65e6acf6..1f571effb 100644 --- a/pkg/server/configurationwatcher_test.go +++ b/pkg/server/configurationwatcher_test.go @@ -23,7 +23,7 @@ type mockProvider struct { throttleDuration time.Duration } -func (p *mockProvider) Provide(configurationChan chan<- dynamic.Message, pool *safe.Pool) error { +func (p *mockProvider) Provide(configurationChan chan<- dynamic.Message, _ *safe.Pool) error { wait := p.wait if wait == 0 { wait = 20 * time.Millisecond @@ -48,7 +48,7 @@ func (p *mockProvider) Provide(configurationChan chan<- dynamic.Message, pool *s } // ThrottleDuration returns the throttle duration. -func (p mockProvider) ThrottleDuration() time.Duration { +func (p *mockProvider) ThrottleDuration() time.Duration { return p.throttleDuration } @@ -122,7 +122,7 @@ func TestWaitForRequiredProvider(t *testing.T) { config := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo")), + th.WithRouters(th.WithRouter("foo", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar")), ), } @@ -166,19 +166,19 @@ func TestIgnoreTransientConfiguration(t *testing.T) { config := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo")), + th.WithRouters(th.WithRouter("foo", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar")), ), } config2 := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("baz")), + th.WithRouters(th.WithRouter("baz", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("toto")), ), } - watcher := NewConfigurationWatcher(routinesPool, &mockProvider{}, []string{"defaultEP"}, "") + watcher := NewConfigurationWatcher(routinesPool, &mockProvider{}, []string{}, "") publishedConfigCount := 0 var lastConfig dynamic.Configuration @@ -209,17 +209,20 @@ func TestIgnoreTransientConfiguration(t *testing.T) { Configuration: config, } - close(blockConfConsumer) - - // give some time so that the configuration can be processed + // give some time before closing the channel. time.Sleep(20 * time.Millisecond) - // after 20 milliseconds we should have 1 configs published + close(blockConfConsumer) + + // give some time so that the configuration can be processed. + time.Sleep(20 * time.Millisecond) + + // after 20 milliseconds we should have 1 config published. assert.Equal(t, 1, publishedConfigCount, "times configs were published") expected := dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo@mock", th.WithEntryPoints("defaultEP"))), + th.WithRouters(th.WithRouter("foo@mock", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar@mock")), th.WithMiddlewares(), ), @@ -256,7 +259,7 @@ func TestListenProvidersThrottleProviderConfigReload(t *testing.T) { ProviderName: "mock", Configuration: &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo"+strconv.Itoa(i))), + th.WithRouters(th.WithRouter("foo"+strconv.Itoa(i), th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar")), ), }, @@ -316,7 +319,7 @@ func TestListenProvidersSkipsSameConfigurationForProvider(t *testing.T) { ProviderName: "mock", Configuration: &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo")), + th.WithRouters(th.WithRouter("foo", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar")), ), }, @@ -348,14 +351,14 @@ func TestListenProvidersDoesNotSkipFlappingConfiguration(t *testing.T) { configuration := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo")), + th.WithRouters(th.WithRouter("foo", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar")), ), } transientConfiguration := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("bad")), + th.WithRouters(th.WithRouter("bad", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bad")), ), } @@ -370,7 +373,7 @@ func TestListenProvidersDoesNotSkipFlappingConfiguration(t *testing.T) { }, } - watcher := NewConfigurationWatcher(routinesPool, pvd, []string{"defaultEP"}, "") + watcher := NewConfigurationWatcher(routinesPool, pvd, []string{}, "") var lastConfig dynamic.Configuration watcher.AddListener(func(conf dynamic.Configuration) { @@ -387,7 +390,7 @@ func TestListenProvidersDoesNotSkipFlappingConfiguration(t *testing.T) { expected := dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo@mock", th.WithEntryPoints("defaultEP"))), + th.WithRouters(th.WithRouter("foo@mock", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar@mock")), th.WithMiddlewares(), ), @@ -416,14 +419,14 @@ func TestListenProvidersIgnoreSameConfig(t *testing.T) { configuration := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo")), + th.WithRouters(th.WithRouter("foo", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar")), ), } transientConfiguration := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("bad")), + th.WithRouters(th.WithRouter("bad", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bad")), ), } @@ -449,7 +452,7 @@ func TestListenProvidersIgnoreSameConfig(t *testing.T) { err := providerAggregator.AddProvider(pvd) assert.NoError(t, err) - watcher := NewConfigurationWatcher(routinesPool, providerAggregator, []string{"defaultEP"}, "") + watcher := NewConfigurationWatcher(routinesPool, providerAggregator, []string{}, "") var configurationReloads int var lastConfig dynamic.Configuration @@ -476,7 +479,7 @@ func TestListenProvidersIgnoreSameConfig(t *testing.T) { expected := dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo@mock", th.WithEntryPoints("defaultEP"))), + th.WithRouters(th.WithRouter("foo@mock", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar@mock")), th.WithMiddlewares(), ), @@ -505,7 +508,7 @@ func TestListenProvidersIgnoreSameConfig(t *testing.T) { func TestApplyConfigUnderStress(t *testing.T) { routinesPool := safe.NewPool(context.Background()) - watcher := NewConfigurationWatcher(routinesPool, &mockProvider{}, []string{"defaultEP"}, "") + watcher := NewConfigurationWatcher(routinesPool, &mockProvider{}, []string{}, "") routinesPool.GoCtx(func(ctx context.Context) { i := 0 @@ -515,7 +518,7 @@ func TestApplyConfigUnderStress(t *testing.T) { return case watcher.allProvidersConfigs <- dynamic.Message{ProviderName: "mock", Configuration: &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo"+strconv.Itoa(i))), + th.WithRouters(th.WithRouter("foo"+strconv.Itoa(i), th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar")), ), }}: @@ -550,28 +553,28 @@ func TestListenProvidersIgnoreIntermediateConfigs(t *testing.T) { configuration := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo")), + th.WithRouters(th.WithRouter("foo", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar")), ), } transientConfiguration := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("bad")), + th.WithRouters(th.WithRouter("bad", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bad")), ), } transientConfiguration2 := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("bad2")), + th.WithRouters(th.WithRouter("bad2", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bad2")), ), } finalConfiguration := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("final")), + th.WithRouters(th.WithRouter("final", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("final")), ), } @@ -591,7 +594,7 @@ func TestListenProvidersIgnoreIntermediateConfigs(t *testing.T) { err := providerAggregator.AddProvider(pvd) assert.NoError(t, err) - watcher := NewConfigurationWatcher(routinesPool, providerAggregator, []string{"defaultEP"}, "") + watcher := NewConfigurationWatcher(routinesPool, providerAggregator, []string{}, "") var configurationReloads int var lastConfig dynamic.Configuration @@ -610,7 +613,7 @@ func TestListenProvidersIgnoreIntermediateConfigs(t *testing.T) { expected := dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("final@mock", th.WithEntryPoints("defaultEP"))), + th.WithRouters(th.WithRouter("final@mock", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("final@mock")), th.WithMiddlewares(), ), @@ -641,7 +644,7 @@ func TestListenProvidersPublishesConfigForEachProvider(t *testing.T) { configuration := &dynamic.Configuration{ HTTP: th.BuildConfiguration( - th.WithRouters(th.WithRouter("foo")), + th.WithRouters(th.WithRouter("foo", th.WithEntryPoints("ep"))), th.WithLoadBalancerServices(th.WithService("bar")), ), } @@ -653,7 +656,7 @@ func TestListenProvidersPublishesConfigForEachProvider(t *testing.T) { }, } - watcher := NewConfigurationWatcher(routinesPool, pvd, []string{"defaultEP"}, "") + watcher := NewConfigurationWatcher(routinesPool, pvd, []string{}, "") var publishedProviderConfig dynamic.Configuration @@ -672,8 +675,8 @@ func TestListenProvidersPublishesConfigForEachProvider(t *testing.T) { expected := dynamic.Configuration{ HTTP: th.BuildConfiguration( th.WithRouters( - th.WithRouter("foo@mock", th.WithEntryPoints("defaultEP")), - th.WithRouter("foo@mock2", th.WithEntryPoints("defaultEP")), + th.WithRouter("foo@mock", th.WithEntryPoints("ep")), + th.WithRouter("foo@mock2", th.WithEntryPoints("ep")), ), th.WithLoadBalancerServices( th.WithService("bar@mock"),