Skip to content

Commit 198d276

Browse files
authored
unit tests for ApplyDefaultForManagedBy (#4083)
* unit tests for ApplyDefaultForManagedBy * Review comment: multi-queue --> multikueue
1 parent cd925f8 commit 198d276

File tree

1 file changed

+70
-1
lines changed

1 file changed

+70
-1
lines changed

pkg/controller/jobframework/base_webhook_test.go

+70-1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ type testGenericJob struct {
5151

5252
var _ jobframework.GenericJob = (*testGenericJob)(nil)
5353
var _ jobframework.JobWithCustomValidation = (*testGenericJob)(nil)
54+
var _ jobframework.JobWithManagedBy = (*testGenericJob)(nil)
5455

5556
func (t *testGenericJob) Object() client.Object {
5657
return t.Job
@@ -88,6 +89,20 @@ func (t *testGenericJob) PodsReady() bool {
8889
panic("not implemented")
8990
}
9091

92+
func (j *testGenericJob) CanDefaultManagedBy() bool {
93+
jobSpecManagedBy := j.Spec.ManagedBy
94+
return features.Enabled(features.MultiKueue) &&
95+
(jobSpecManagedBy == nil || *jobSpecManagedBy == batchv1.JobControllerName)
96+
}
97+
98+
func (j *testGenericJob) ManagedBy() *string {
99+
return j.Spec.ManagedBy
100+
}
101+
102+
func (j *testGenericJob) SetManagedBy(managedBy *string) {
103+
j.Spec.ManagedBy = managedBy
104+
}
105+
91106
func (t *testGenericJob) GVK() schema.GroupVersionKind {
92107
panic("not implemented")
93108
}
@@ -133,6 +148,7 @@ func TestBaseWebhookDefault(t *testing.T) {
133148
manageJobsWithoutQueueName bool
134149
localQueueDefaulting bool
135150
defaultLqExist bool
151+
multiQueue bool
136152
job *batchv1.Job
137153
want *batchv1.Job
138154
}{
@@ -198,11 +214,42 @@ func TestBaseWebhookDefault(t *testing.T) {
198214
want: utiljob.MakeJob("job", "default").
199215
Obj(),
200216
},
217+
"ManagedByDefaulting, targeting multikueue local queue": {
218+
job: utiljob.MakeJob("job", "default").
219+
Queue("multikueue").
220+
Obj(),
221+
want: utiljob.MakeJob("job", "default").
222+
Queue("multikueue").
223+
ManagedBy(kueue.MultiKueueControllerName).
224+
Obj(),
225+
multiQueue: true,
226+
},
227+
"ManagedByDefaulting, targeting multikueue local queue but already managaed by someone else": {
228+
job: utiljob.MakeJob("job", "default").
229+
Queue("multikueue").
230+
ManagedBy("someone-else").
231+
Obj(),
232+
want: utiljob.MakeJob("job", "default").
233+
Queue("multikueue").
234+
ManagedBy("someone-else").
235+
Obj(),
236+
multiQueue: true,
237+
},
238+
"ManagedByDefaulting, targeting non-multikueue local queue": {
239+
job: utiljob.MakeJob("job", "default").
240+
Queue("queue").
241+
Obj(),
242+
want: utiljob.MakeJob("job", "default").
243+
Queue("queue").
244+
Obj(),
245+
multiQueue: true,
246+
},
201247
}
202248
for name, tc := range testcases {
203249
t.Run(name, func(t *testing.T) {
204250
ctx, _ := utiltesting.ContextWithLog(t)
205251
features.SetFeatureGateDuringTest(t, features.LocalQueueDefaulting, tc.localQueueDefaulting)
252+
features.SetFeatureGateDuringTest(t, features.MultiKueue, tc.multiQueue)
206253
clientBuilder := utiltesting.NewClientBuilder().
207254
WithObjects(
208255
&corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "default"}},
@@ -216,13 +263,35 @@ func TestBaseWebhookDefault(t *testing.T) {
216263
t.Fatalf("failed to create default local queue: %s", err)
217264
}
218265
}
266+
if tc.multiQueue {
267+
if err := queueManager.AddLocalQueue(ctx, utiltesting.MakeLocalQueue("multikueue", "default").
268+
ClusterQueue("cluster-queue").Obj()); err != nil {
269+
t.Fatalf("failed to create default local queue: %s", err)
270+
}
271+
cq := *utiltesting.MakeClusterQueue("cluster-queue").
272+
AdmissionChecks("admission-check").
273+
Obj()
274+
if err := cqCache.AddClusterQueue(ctx, &cq); err != nil {
275+
t.Fatalf("Inserting clusterQueue %s in cache: %v", cq.Name, err)
276+
}
277+
ac := utiltesting.MakeAdmissionCheck("admission-check").
278+
ControllerName(kueue.MultiKueueControllerName).
279+
Active(metav1.ConditionTrue).
280+
Obj()
281+
cqCache.AddOrUpdateAdmissionCheck(ac)
282+
if err := queueManager.AddClusterQueue(ctx, &cq); err != nil {
283+
t.Fatalf("Inserting clusterQueue %s in manager: %v", cq.Name, err)
284+
}
285+
}
286+
219287
w := &jobframework.BaseWebhook{
220288
ManageJobsWithoutQueueName: tc.manageJobsWithoutQueueName,
221289
FromObject: makeTestGenericJob().fromObject,
222290
Queues: queueManager,
291+
Cache: cqCache,
223292
}
224293
if err := w.Default(context.Background(), tc.job); err != nil {
225-
t.Errorf("set defaults to a kubeflow/mpijob by a Defaulter")
294+
t.Errorf("set defaults by base webhook")
226295
}
227296
if diff := cmp.Diff(tc.want, tc.job); len(diff) != 0 {
228297
t.Errorf("Default() mismatch (-want,+got):\n%s", diff)

0 commit comments

Comments
 (0)