Skip to content

Commit 14caf96

Browse files
committed
test(TestPromClientControllerSync_ClientCreation): have prometheus client tests build an entire descheduler as well
1 parent aa21eed commit 14caf96

File tree

1 file changed

+89
-58
lines changed

1 file changed

+89
-58
lines changed

pkg/descheduler/descheduler_test.go

Lines changed: 89 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1968,75 +1968,106 @@ func TestPromClientControllerSync_ClientCreation(t *testing.T) {
19681968

19691969
for _, tc := range testCases {
19701970
t.Run(tc.name, func(t *testing.T) {
1971-
ctx, cancel := context.WithCancel(context.TODO())
1972-
defer cancel()
1973-
setup := setupPromClientControllerTest(ctx, tc.objects, newPrometheusConfig())
1971+
for _, setupMode := range []struct {
1972+
name string
1973+
setupFn func(context.Context, *testing.T, []runtime.Object) *promClientController
1974+
}{
1975+
{
1976+
name: "running with prom reconciler directly",
1977+
setupFn: func(ctx context.Context, t *testing.T, objects []runtime.Object) *promClientController {
1978+
setup := setupPromClientControllerTest(ctx, objects, newPrometheusConfig())
1979+
return setup.ctrl
1980+
},
1981+
},
1982+
{
1983+
name: "running with full descheduler",
1984+
setupFn: func(ctx context.Context, t *testing.T, objects []runtime.Object) *promClientController {
1985+
deschedulerPolicy := &api.DeschedulerPolicy{
1986+
MetricsProviders: []api.MetricsProvider{
1987+
{
1988+
Source: api.PrometheusMetrics,
1989+
Prometheus: newPrometheusConfig(),
1990+
},
1991+
},
1992+
}
1993+
_, descheduler, _, _ := initDescheduler(t, ctx, initFeatureGates(), deschedulerPolicy, nil, false, objects...)
1994+
return descheduler.promClientCtrl
1995+
},
1996+
},
1997+
} {
1998+
t.Run(setupMode.name, func(t *testing.T) {
1999+
ctx, cancel := context.WithCancel(context.TODO())
2000+
defer cancel()
19742001

1975-
// Set additional test-specific fields
1976-
setup.ctrl.currentPrometheusAuthToken = tc.currentAuthToken
1977-
if tc.currentAuthToken != "" {
1978-
setup.ctrl.previousPrometheusClientTransport = &http.Transport{}
1979-
}
2002+
ctrl := setupMode.setupFn(ctx, t, tc.objects)
19802003

1981-
// Mock createPrometheusClient
1982-
clientCreated := false
1983-
if tc.createPrometheusClientFunc != nil {
1984-
setup.ctrl.createPrometheusClient = func(url, token string) (promapi.Client, *http.Transport, error) {
1985-
client, transport, err := tc.createPrometheusClientFunc(url, token)
1986-
if err == nil {
1987-
clientCreated = true
2004+
// Set additional test-specific fields
2005+
ctrl.currentPrometheusAuthToken = tc.currentAuthToken
2006+
if tc.currentAuthToken != "" {
2007+
ctrl.previousPrometheusClientTransport = &http.Transport{}
19882008
}
1989-
return client, transport, err
1990-
}
1991-
}
19922009

1993-
// Call sync
1994-
err := setup.ctrl.sync()
2010+
// Mock createPrometheusClient
2011+
clientCreated := false
2012+
if tc.createPrometheusClientFunc != nil {
2013+
ctrl.createPrometheusClient = func(url, token string) (promapi.Client, *http.Transport, error) {
2014+
client, transport, err := tc.createPrometheusClientFunc(url, token)
2015+
if err == nil {
2016+
clientCreated = true
2017+
}
2018+
return client, transport, err
2019+
}
2020+
}
19952021

1996-
// Verify error expectations
1997-
if tc.expectedErr != nil {
1998-
if err == nil {
1999-
t.Errorf("Expected error %q but got none", tc.expectedErr)
2000-
} else if err.Error() != tc.expectedErr.Error() {
2001-
t.Errorf("Expected error %q but got %q", tc.expectedErr, err.Error())
2002-
}
2003-
} else {
2004-
if err != nil {
2005-
t.Errorf("Expected no error but got: %v", err)
2006-
}
2007-
}
2022+
// Call sync
2023+
err := ctrl.sync()
20082024

2009-
// Verify client creation expectations
2010-
if tc.expectClientCreated && !clientCreated {
2011-
t.Errorf("Expected prometheus client to be created but it wasn't")
2012-
}
2013-
if !tc.expectClientCreated && clientCreated {
2014-
t.Errorf("Expected prometheus client not to be created but it was")
2015-
}
2025+
// Verify error expectations
2026+
if tc.expectedErr != nil {
2027+
if err == nil {
2028+
t.Errorf("Expected error %q but got none", tc.expectedErr)
2029+
} else if err.Error() != tc.expectedErr.Error() {
2030+
t.Errorf("Expected error %q but got %q", tc.expectedErr, err.Error())
2031+
}
2032+
} else {
2033+
if err != nil {
2034+
t.Errorf("Expected no error but got: %v", err)
2035+
}
2036+
}
20162037

2017-
// Verify token cleared expectations
2018-
if tc.expectCurrentTokenCleared && setup.ctrl.currentPrometheusAuthToken != "" {
2019-
t.Errorf("Expected current auth token to be cleared but it wasn't")
2020-
}
2038+
// Verify client creation expectations
2039+
if tc.expectClientCreated && !clientCreated {
2040+
t.Errorf("Expected prometheus client to be created but it wasn't")
2041+
}
2042+
if !tc.expectClientCreated && clientCreated {
2043+
t.Errorf("Expected prometheus client not to be created but it was")
2044+
}
20212045

2022-
// Verify previous transport cleared expectations
2023-
if tc.expectPreviousTransportCleared && setup.ctrl.previousPrometheusClientTransport != nil {
2024-
t.Errorf("Expected previous transport to be cleared but it wasn't")
2025-
}
2046+
// Verify token cleared expectations
2047+
if tc.expectCurrentTokenCleared && ctrl.currentPrometheusAuthToken != "" {
2048+
t.Errorf("Expected current auth token to be cleared but it wasn't")
2049+
}
20262050

2027-
// Verify promClient cleared when secret not found
2028-
if tc.expectPreviousTransportCleared && setup.ctrl.promClient != nil {
2029-
t.Errorf("Expected promClient to be cleared but it wasn't")
2030-
}
2051+
// Verify previous transport cleared expectations
2052+
if tc.expectPreviousTransportCleared && ctrl.previousPrometheusClientTransport != nil {
2053+
t.Errorf("Expected previous transport to be cleared but it wasn't")
2054+
}
20312055

2032-
// Verify token updated when client created
2033-
if tc.expectClientCreated && len(tc.objects) > 0 {
2034-
if secret, ok := tc.objects[0].(*v1.Secret); ok && secret.Data != nil {
2035-
expectedToken := string(secret.Data[prometheusAuthTokenSecretKey])
2036-
if setup.ctrl.currentPrometheusAuthToken != expectedToken {
2037-
t.Errorf("Expected current auth token to be %q but got %q", expectedToken, setup.ctrl.currentPrometheusAuthToken)
2056+
// Verify promClient cleared when secret not found
2057+
if tc.expectPreviousTransportCleared && ctrl.promClient != nil {
2058+
t.Errorf("Expected promClient to be cleared but it wasn't")
20382059
}
2039-
}
2060+
2061+
// Verify token updated when client created
2062+
if tc.expectClientCreated && len(tc.objects) > 0 {
2063+
if secret, ok := tc.objects[0].(*v1.Secret); ok && secret.Data != nil {
2064+
expectedToken := string(secret.Data[prometheusAuthTokenSecretKey])
2065+
if ctrl.currentPrometheusAuthToken != expectedToken {
2066+
t.Errorf("Expected current auth token to be %q but got %q", expectedToken, ctrl.currentPrometheusAuthToken)
2067+
}
2068+
}
2069+
}
2070+
})
20402071
}
20412072
})
20422073
}

0 commit comments

Comments
 (0)