R58: idempotent RefreshCoordinator Shutdown; no close-close

This commit is contained in:
2026-08-13 15:58:20 +01:00
parent ed5f528c60
commit 6ac451da1d
2 changed files with 40 additions and 2 deletions
+31
View File
@@ -0,0 +1,31 @@
package traefikoidc
import (
"testing"
"time"
)
// TestRefreshCoordinatorShutdownIdempotent guards against a panic when the
// coordinator is shut down more than once. Close() on the same
// Authenticator can be reached via both the plugin-context cancellation hook
// (main.go) and the resource-manager teardown path, so RefreshCoordinator
// Shutdown must tolerate repeated calls — the previous close(rc.stopChan)
// panicked with 'close of closed channel' on the second call.
func TestRefreshCoordinatorShutdownIdempotent(t *testing.T) {
rc := NewRefreshCoordinator(DefaultRefreshCoordinatorConfig(), NewLogger(DefaultLogLevel))
defer func() {
if r := recover(); r != nil {
t.Fatalf("second Shutdown panicked: %v", r)
}
}()
rc.Shutdown()
rc.Shutdown()
}
// Ensure cleanup goroutine is running before shutdown completes so the
// shutdown path is actually exercised (stopChan close) and wg drained.
func TestRefreshCoordinatorShutdownStopsCleanup(t *testing.T) {
rc := NewRefreshCoordinator(DefaultRefreshCoordinatorConfig(), NewLogger(DefaultLogLevel))
time.Sleep(50 * time.Millisecond)
rc.Shutdown()
}