diff --git a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/AdvancedCronJob/testdata/aggregatestatus-test.yaml b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/AdvancedCronJob/testdata/aggregatestatus-test.yaml index 82ab8332534d..684c892d9209 100644 --- a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/AdvancedCronJob/testdata/aggregatestatus-test.yaml +++ b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/AdvancedCronJob/testdata/aggregatestatus-test.yaml @@ -1,14 +1,21 @@ -# test case for aggregating status of AdvancedCronJob -# case1. AdvancedCronJob with two status items +# Test cases for aggregating status of AdvancedCronJob + +# Case 1: Test AggregateStatus with empty statusItems list +# Case 2: Test AggregateStatus merging active jobs from multiple clusters +# Case 3: Test AggregateStatus when clusters have multiple active jobs per cluster +# Case 4: Test AggregateStatus when some clusters have nil active or status fields +# Case 5: Test AggregateStatus with status from single cluster + +# Case 1: + +name: "AdvancedCronJob with empty statusItems list" +description: "Test AggregateStatus with empty statusItems list" +operation: AggregateStatus -name: "AdvancedCronJob with two status items" -description: "Test aggregating status of AdvancedCronJob with two status items" desiredObj: apiVersion: apps.kruise.io/v1alpha1 kind: AdvancedCronJob metadata: - labels: - app: sample name: sample namespace: test-acj spec: @@ -17,57 +24,351 @@ desiredObj: broadcastJobTemplate: spec: template: - metadata: - labels: - app: sample spec: - restartPolicy: Never - volumes: - - name: configmap - configMap: - name: my-sample-config containers: - name: nginx image: nginx:alpine - env: - - name: logData - valueFrom: - configMapKeyRef: - name: mysql-config - key: log - - name: lowerData - valueFrom: - configMapKeyRef: - name: mysql-config - key: lower - completionPolicy: - type: Never +statusItems: [] + +output: + aggregatedStatus: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: nginx + image: nginx:alpine + status: + type: "" + +--- + +# Case 2: + +name: "AdvancedCronJob with multiple clusters" +description: "Test AggregateStatus merging active jobs from multiple clusters" +operation: AggregateStatus + +desiredObj: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: nginx + image: nginx:alpine + statusItems: - - applied: true - clusterName: member1 - health: Healthy + - clusterName: member1 status: active: - apiVersion: apps.kruise.io/v1alpha1 kind: BroadcastJob name: sample-1681378080 namespace: test-acj - resourceVersion: "3636404" uid: f96013ef-2869-49d7-adf3-8f7231cc5e2a + type: BroadcastJob lastScheduleTime: "2023-04-13T09:30:00Z" + - clusterName: member2 + status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + uid: d1f3c194-d650-4cce-b23d-307a445bb92e type: BroadcastJob - - applied: true - clusterName: member3 - health: Healthy + lastScheduleTime: "2023-04-13T09:30:00Z" + - clusterName: member3 status: active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378100 + namespace: test-acj + uid: a2b3c4d5-e6f7-8901-2345-6789abcdef01 + type: BroadcastJob + lastScheduleTime: "2023-04-13T09:31:00Z" + +output: + aggregatedStatus: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: nginx + image: nginx:alpine + status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + uid: f96013ef-2869-49d7-adf3-8f7231cc5e2a - apiVersion: apps.kruise.io/v1alpha1 kind: BroadcastJob name: sample-1681378080 namespace: test-acj - resourceVersion: "3635081" uid: d1f3c194-d650-4cce-b23d-307a445bb92e + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378100 + namespace: test-acj + uid: a2b3c4d5-e6f7-8901-2345-6789abcdef01 + type: BroadcastJob + lastScheduleTime: "2023-04-13T09:31:00Z" + +--- + +# Case 3: + +name: "AdvancedCronJob with multiple active jobs per cluster" +description: "Test AggregateStatus when clusters have multiple active jobs per cluster" +operation: AggregateStatus + +desiredObj: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: nginx + image: nginx:alpine + +statusItems: + - clusterName: member1 + status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378100 + namespace: test-acj + type: BroadcastJob lastScheduleTime: "2023-04-13T09:30:00Z" + - clusterName: member2 + status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378120 + namespace: test-acj + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378140 + namespace: test-acj + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378160 + namespace: test-acj type: BroadcastJob + lastScheduleTime: "2023-04-13T09:31:00Z" + +output: + aggregatedStatus: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: nginx + image: nginx:alpine + status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378100 + namespace: test-acj + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378120 + namespace: test-acj + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378140 + namespace: test-acj + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378160 + namespace: test-acj + type: BroadcastJob + lastScheduleTime: "2023-04-13T09:31:00Z" + +--- + +# Case 4: + +name: "AdvancedCronJob with partial data" +description: "Test AggregateStatus when some clusters have nil active or status fields" operation: AggregateStatus + +desiredObj: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: nginx + image: nginx:alpine + +statusItems: + - clusterName: member1 + status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + type: BroadcastJob + lastScheduleTime: "2023-04-13T09:30:00Z" + - clusterName: member2 + status: {} + - clusterName: member3 + status: + type: BroadcastJob + lastScheduleTime: "2023-04-13T09:30:00Z" + +output: + aggregatedStatus: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: nginx + image: nginx:alpine + status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + type: BroadcastJob + lastScheduleTime: "2023-04-13T09:30:00Z" + +--- + +# Case 5: + +name: "AdvancedCronJob with single cluster" +description: "Test AggregateStatus with status from single cluster" +operation: AggregateStatus + +desiredObj: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: nginx + image: nginx:alpine + +statusItems: + - clusterName: member1 + status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + type: BroadcastJob + lastScheduleTime: "2023-04-13T09:30:00Z" + output: + aggregatedStatus: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: nginx + image: nginx:alpine + status: + active: + - apiVersion: apps.kruise.io/v1alpha1 + kind: BroadcastJob + name: sample-1681378080 + namespace: test-acj + type: BroadcastJob + lastScheduleTime: "2023-04-13T09:30:00Z" diff --git a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/AdvancedCronJob/testdata/interpretdependency-test.yaml b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/AdvancedCronJob/testdata/interpretdependency-test.yaml index f0a22f9a3c52..9a6a653b81c3 100644 --- a/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/AdvancedCronJob/testdata/interpretdependency-test.yaml +++ b/pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/apps.kruise.io/v1alpha1/AdvancedCronJob/testdata/interpretdependency-test.yaml @@ -1,14 +1,64 @@ -# test case for interpreting dependency of AdvancedCronJob -# case1. AdvancedCronJob with configmap dependency +# Test cases for interpreting dependency of AdvancedCronJob + +# Case 1: Test GetDependencies with broadcastJobTemplate using ConfigMap in env +# Case 2: Test GetDependencies with broadcastJobTemplate using ConfigMap in volume +# Case 3: Test GetDependencies with broadcastJobTemplate using multiple ConfigMaps and Secrets +# Case 4: Test GetDependencies with jobTemplate (not broadcastJobTemplate) +# Case 5: Test GetDependencies with only Secret dependencies (no ConfigMaps) + +# Case 1: + +name: "AdvancedCronJob dependency: broadcastjob configmap env" +description: "Test GetDependencies with broadcastJobTemplate using ConfigMap in env" +operation: InterpretDependency + +desiredObj: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: app + image: myapp:latest + env: + - name: DB_HOST + valueFrom: + configMapKeyRef: + name: db-config + key: host + - name: DB_PORT + valueFrom: + configMapKeyRef: + name: db-config + key: port + +output: + dependencies: + - apiVersion: v1 + kind: ConfigMap + name: db-config + namespace: test-acj + +--- + +# Case 2: + +name: "AdvancedCronJob broadcastjob configmap volume" +description: "Test GetDependencies with broadcastJobTemplate using ConfigMap in volume" +operation: InterpretDependency -name: "AdvancedCronJob with configmap dependency" -description: "Test interpreting dependency of AdvancedCronJob with configmap dependency" desiredObj: apiVersion: apps.kruise.io/v1alpha1 kind: AdvancedCronJob metadata: - labels: - app: sample name: sample namespace: test-acj spec: @@ -17,30 +67,178 @@ desiredObj: broadcastJobTemplate: spec: template: - metadata: - labels: - app: sample spec: - restartPolicy: Never - volumes: - - name: configmap - configMap: - name: my-sample-config containers: - name: nginx image: nginx:alpine + volumes: + - name: config-volume + configMap: + name: my-config + +output: + dependencies: + - apiVersion: v1 + kind: ConfigMap + name: my-config + namespace: test-acj + +--- + +# Case 3: + +name: "AdvancedCronJob dependency broadcast job mixed" +description: "Test GetDependencies with broadcastJobTemplate using multiple ConfigMaps and Secrets" +operation: InterpretDependency + +desiredObj: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/2 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: app + image: myapp:latest env: - - name: logData + - name: DB_HOST valueFrom: configMapKeyRef: - name: mysql-config - key: log - - name: lowerData + name: db-config + key: host + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: db-secret + key: password + volumes: + - name: app-config + configMap: + name: app-config + - name: tls-certs + secret: + secretName: tls-secret + +output: + dependencies: + - apiVersion: v1 + kind: ConfigMap + name: app-config + namespace: test-acj + - apiVersion: v1 + kind: ConfigMap + name: db-config + namespace: test-acj + - apiVersion: v1 + kind: Secret + name: db-secret + namespace: test-acj + - apiVersion: v1 + kind: Secret + name: tls-secret + namespace: test-acj + +--- + +# Case 4: + +name: "AdvancedCronJob dependency: jobtemplate configmap" +description: "Test GetDependencies with jobTemplate (not broadcastJobTemplate)" +operation: InterpretDependency + +desiredObj: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/5 * * * *" + template: + jobTemplate: + spec: + template: + spec: + restartPolicy: OnFailure + containers: + - name: worker + image: worker:v1 + env: + - name: CONFIG_PATH valueFrom: configMapKeyRef: - name: mysql-config - key: lower - completionPolicy: - type: Never + name: worker-config + key: path + volumes: + - name: shared-data + configMap: + name: shared-config + +output: + dependencies: + - apiVersion: v1 + kind: ConfigMap + name: shared-config + namespace: test-acj + - apiVersion: v1 + kind: ConfigMap + name: worker-config + namespace: test-acj + +--- + +# Case 5: + +name: "AdvancedCronJob dependency: secret only" +description: "Test GetDependencies with only Secret dependencies (no ConfigMaps)" operation: InterpretDependency + +desiredObj: + apiVersion: apps.kruise.io/v1alpha1 + kind: AdvancedCronJob + metadata: + name: sample + namespace: test-acj + spec: + schedule: "*/10 * * * *" + template: + broadcastJobTemplate: + spec: + template: + spec: + containers: + - name: secure-app + image: secure:v1 + env: + - name: API_KEY + valueFrom: + secretKeyRef: + name: api-credentials + key: key + - name: API_SECRET + valueFrom: + secretKeyRef: + name: api-credentials + key: secret + volumes: + - name: tls + secret: + secretName: tls-certs + output: + dependencies: + - apiVersion: v1 + kind: Secret + name: api-credentials + namespace: test-acj + - apiVersion: v1 + kind: Secret + name: tls-certs + namespace: test-acj