Skip to content

Commit 10fada9

Browse files
committed
test(TestPromClientControllerSync_EventHandler): have prometheus client tests build an entire descheduler as well
1 parent 4361c13 commit 10fada9

File tree

1 file changed

+73
-38
lines changed

1 file changed

+73
-38
lines changed

pkg/descheduler/descheduler_test.go

Lines changed: 73 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2074,28 +2074,9 @@ func TestPromClientControllerSync_ClientCreation(t *testing.T) {
20742074
}
20752075

20762076
func TestPromClientControllerSync_EventHandler(t *testing.T) {
2077-
ctx, cancel := context.WithCancel(context.Background())
2078-
defer cancel()
2079-
2080-
setup := setupPromClientControllerTest(ctx, nil, newPrometheusConfig())
2081-
2082-
// Track created clients to verify different instances
2083-
var createdClients []promapi.Client
2084-
var createdClientsMu sync.Mutex
2085-
setup.ctrl.createPrometheusClient = func(url, token string) (promapi.Client, *http.Transport, error) {
2086-
client := &mockPrometheusClient{name: "client-" + token}
2087-
createdClientsMu.Lock()
2088-
createdClients = append(createdClients, client)
2089-
createdClientsMu.Unlock()
2090-
return client, &http.Transport{}, nil
2091-
}
2092-
2093-
// Start the reconciler to process queue items
2094-
go setup.ctrl.runAuthenticationSecretReconciler(ctx)
2095-
20962077
testCases := []struct {
20972078
name string
2098-
operation func() error
2079+
operation func(ctx context.Context, fakeClient *fakeclientset.Clientset) error
20992080
processItem bool
21002081
expectedPromClientSet bool
21012082
expectedCreatedClientsCount int
@@ -2106,7 +2087,7 @@ func TestPromClientControllerSync_EventHandler(t *testing.T) {
21062087
// Check initial conditions
21072088
{
21082089
name: "no secret initially",
2109-
operation: func() error { return nil },
2090+
operation: func(ctx context.Context, fakeClient *fakeclientset.Clientset) error { return nil },
21102091
processItem: false,
21112092
expectedPromClientSet: false,
21122093
expectedCreatedClientsCount: 0,
@@ -2115,9 +2096,9 @@ func TestPromClientControllerSync_EventHandler(t *testing.T) {
21152096
// Change conditions
21162097
{
21172098
name: "add secret",
2118-
operation: func() error {
2099+
operation: func(ctx context.Context, fakeClient *fakeclientset.Clientset) error {
21192100
secret := newPrometheusAuthSecret(withToken("token-1"))
2120-
_, err := setup.fakeClient.CoreV1().Secrets(secret.Namespace).Create(ctx, secret, metav1.CreateOptions{})
2101+
_, err := fakeClient.CoreV1().Secrets(secret.Namespace).Create(ctx, secret, metav1.CreateOptions{})
21212102
return err
21222103
},
21232104
processItem: true,
@@ -2127,9 +2108,9 @@ func TestPromClientControllerSync_EventHandler(t *testing.T) {
21272108
},
21282109
{
21292110
name: "update secret",
2130-
operation: func() error {
2111+
operation: func(ctx context.Context, fakeClient *fakeclientset.Clientset) error {
21312112
secret := newPrometheusAuthSecret(withToken("token-2"))
2132-
_, err := setup.fakeClient.CoreV1().Secrets(secret.Namespace).Update(ctx, secret, metav1.UpdateOptions{})
2113+
_, err := fakeClient.CoreV1().Secrets(secret.Namespace).Update(ctx, secret, metav1.UpdateOptions{})
21332114
return err
21342115
},
21352116
processItem: true,
@@ -2140,9 +2121,9 @@ func TestPromClientControllerSync_EventHandler(t *testing.T) {
21402121
},
21412122
{
21422123
name: "delete secret",
2143-
operation: func() error {
2124+
operation: func(ctx context.Context, fakeClient *fakeclientset.Clientset) error {
21442125
secret := newPrometheusAuthSecret(withToken("token-2"))
2145-
return setup.fakeClient.CoreV1().Secrets(secret.Namespace).Delete(ctx, secret.Name, metav1.DeleteOptions{})
2126+
return fakeClient.CoreV1().Secrets(secret.Namespace).Delete(ctx, secret.Name, metav1.DeleteOptions{})
21462127
},
21472128
processItem: true,
21482129
expectedPromClientSet: false,
@@ -2152,9 +2133,61 @@ func TestPromClientControllerSync_EventHandler(t *testing.T) {
21522133
},
21532134
}
21542135

2136+
for _, setupMode := range []struct {
2137+
name string
2138+
init func(t *testing.T, ctx context.Context) (ctrl *promClientController, fakeClient *fakeclientset.Clientset)
2139+
}{
2140+
{
2141+
name: "running with prom reconciler directly",
2142+
init: func(t *testing.T, ctx context.Context) (ctrl *promClientController, fakeClient *fakeclientset.Clientset) {
2143+
setup := setupPromClientControllerTest(ctx, nil, newPrometheusConfig())
2144+
2145+
// Start the reconciler to process queue items
2146+
go setup.ctrl.runAuthenticationSecretReconciler(ctx)
2147+
2148+
return setup.ctrl, setup.fakeClient
2149+
},
2150+
},
2151+
{
2152+
name: "running with full descheduler",
2153+
init: func(t *testing.T, ctx context.Context) (ctrl *promClientController, fakeClient *fakeclientset.Clientset) {
2154+
prometheusConfig := newPrometheusConfig()
2155+
deschedulerPolicy := &api.DeschedulerPolicy{
2156+
MetricsProviders: []api.MetricsProvider{
2157+
{
2158+
Source: api.PrometheusMetrics,
2159+
Prometheus: prometheusConfig,
2160+
},
2161+
},
2162+
}
2163+
2164+
_, descheduler, _, client := initDescheduler(t, ctx, initFeatureGates(), deschedulerPolicy, nil, false)
2165+
// The reconciler is already started by initDescheduler via bootstrapDescheduler
2166+
2167+
return descheduler.promClientCtrl, client
2168+
},
2169+
},
2170+
} {
2171+
t.Run(setupMode.name, func(t *testing.T) {
2172+
ctx, cancel := context.WithCancel(context.Background())
2173+
defer cancel()
2174+
2175+
ctrl, fakeClient := setupMode.init(t, ctx)
2176+
2177+
// Track created clients to verify different instances
2178+
var createdClients []promapi.Client
2179+
var createdClientsMu sync.Mutex
2180+
ctrl.createPrometheusClient = func(url, token string) (promapi.Client, *http.Transport, error) {
2181+
client := &mockPrometheusClient{name: "client-" + token}
2182+
createdClientsMu.Lock()
2183+
createdClients = append(createdClients, client)
2184+
createdClientsMu.Unlock()
2185+
return client, &http.Transport{}, nil
2186+
}
2187+
21552188
for _, tc := range testCases {
21562189
t.Run(tc.name, func(t *testing.T) {
2157-
if err := tc.operation(); err != nil {
2190+
if err := tc.operation(ctx, fakeClient); err != nil {
21582191
t.Fatalf("Failed to execute operation: %v", err)
21592192
}
21602193

@@ -2163,11 +2196,11 @@ func TestPromClientControllerSync_EventHandler(t *testing.T) {
21632196
err := wait.PollUntilContextTimeout(ctx, 10*time.Millisecond, 2*time.Second, true, func(ctx context.Context) (bool, error) {
21642197
// Check if all expected conditions are met
21652198
if tc.expectedPromClientSet {
2166-
if setup.ctrl.promClient == nil {
2199+
if ctrl.promClient == nil {
21672200
return false, nil
21682201
}
21692202
} else {
2170-
if setup.ctrl.promClient != nil {
2203+
if ctrl.promClient != nil {
21712204
return false, nil
21722205
}
21732206
}
@@ -2179,12 +2212,12 @@ func TestPromClientControllerSync_EventHandler(t *testing.T) {
21792212
return false, nil
21802213
}
21812214

2182-
if setup.ctrl.currentPrometheusAuthToken != tc.expectedCurrentToken {
2215+
if ctrl.currentPrometheusAuthToken != tc.expectedCurrentToken {
21832216
return false, nil
21842217
}
21852218

21862219
if tc.expectedPreviousTransportCleared {
2187-
if setup.ctrl.previousPrometheusClientTransport != nil {
2220+
if ctrl.previousPrometheusClientTransport != nil {
21882221
return false, nil
21892222
}
21902223
}
@@ -2202,12 +2235,12 @@ func TestPromClientControllerSync_EventHandler(t *testing.T) {
22022235

22032236
// Validate post-conditions
22042237
if tc.expectedPromClientSet {
2205-
if setup.ctrl.promClient == nil {
2238+
if ctrl.promClient == nil {
22062239
t.Error("Expected prometheus client to be set, but it was nil")
22072240
}
22082241
} else {
2209-
if setup.ctrl.promClient != nil {
2210-
t.Errorf("Expected prometheus client to be nil, but got: %v", setup.ctrl.promClient)
2242+
if ctrl.promClient != nil {
2243+
t.Errorf("Expected prometheus client to be nil, but got: %v", ctrl.promClient)
22112244
}
22122245
}
22132246

@@ -2218,12 +2251,12 @@ func TestPromClientControllerSync_EventHandler(t *testing.T) {
22182251
t.Errorf("Expected %d clients created, but got %d", tc.expectedCreatedClientsCount, len(createdClients))
22192252
}
22202253

2221-
if setup.ctrl.currentPrometheusAuthToken != tc.expectedCurrentToken {
2222-
t.Errorf("Expected current token to be %q, got %q", tc.expectedCurrentToken, setup.ctrl.currentPrometheusAuthToken)
2254+
if ctrl.currentPrometheusAuthToken != tc.expectedCurrentToken {
2255+
t.Errorf("Expected current token to be %q, got %q", tc.expectedCurrentToken, ctrl.currentPrometheusAuthToken)
22232256
}
22242257

22252258
if tc.expectedPreviousTransportCleared {
2226-
if setup.ctrl.previousPrometheusClientTransport != nil {
2259+
if ctrl.previousPrometheusClientTransport != nil {
22272260
t.Error("Expected previous transport to be cleared, but it was set")
22282261
}
22292262
}
@@ -2237,6 +2270,8 @@ func TestPromClientControllerSync_EventHandler(t *testing.T) {
22372270
}
22382271
})
22392272
}
2273+
})
2274+
}
22402275
}
22412276

22422277
func TestReconcileInClusterSAToken(t *testing.T) {

0 commit comments

Comments
 (0)