This is an automated email from the ASF dual-hosted git repository.
gyfora pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/flink-kubernetes-operator.git
The following commit(s) were added to refs/heads/main by this push:
new 0a4d8412 [FLINK-39220] Add unit tests for ConditionsUtils (#1068)
0a4d8412 is described below
commit 0a4d84123cffe9fcb5e121bf28af950b2ec90f00
Author: Harshit Gupta <[email protected]>
AuthorDate: Thu Apr 9 09:39:20 2026 +0200
[FLINK-39220] Add unit tests for ConditionsUtils (#1068)
Signed-off-by: Harshit Gupta <[email protected]>
---
.../operator/api/utils/ConditionsUtilsTest.java | 216 +++++++++++++++++++++
1 file changed, 216 insertions(+)
diff --git
a/flink-kubernetes-operator-api/src/test/java/org/apache/flink/kubernetes/operator/api/utils/ConditionsUtilsTest.java
b/flink-kubernetes-operator-api/src/test/java/org/apache/flink/kubernetes/operator/api/utils/ConditionsUtilsTest.java
new file mode 100644
index 00000000..67d26f4f
--- /dev/null
+++
b/flink-kubernetes-operator-api/src/test/java/org/apache/flink/kubernetes/operator/api/utils/ConditionsUtilsTest.java
@@ -0,0 +1,216 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.kubernetes.operator.api.utils;
+
+import org.apache.flink.api.common.JobStatus;
+import org.apache.flink.kubernetes.operator.api.status.FlinkDeploymentStatus;
+import
org.apache.flink.kubernetes.operator.api.status.JobManagerDeploymentStatus;
+
+import io.fabric8.kubernetes.api.model.Condition;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import java.time.Instant;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Stream;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+/** Test for {@link ConditionsUtils}. */
+public class ConditionsUtilsTest {
+
+ private static Stream<Arguments> updateLastTransitionTimeParams() {
+ String existingConditionLastTransitionTime = Instant.now().toString();
+
+ return Stream.of(
+ // Test Empty Conditions
+ Arguments.of(
+ Collections.emptyList(),
+ new Condition(
+ "lastTransitionTime", "message", 0L, "reason",
"status", "type"),
+ new Condition(
+ "lastTransitionTime", "message", 0L, "reason",
"status", "type"),
+ false),
+
+ // Test Correct Update
+ Arguments.of(
+ List.of(
+ new Condition(
+ existingConditionLastTransitionTime,
+ "message",
+ 0L,
+ "reason",
+ "status",
+ "type")),
+ new Condition(
+ existingConditionLastTransitionTime,
+ "message",
+ 0L,
+ "reason",
+ "status",
+ "type"),
+ new Condition(
+ "lastTransitionTime", "message", 0L, "reason",
"status", "type"),
+ true),
+
+ // Test Status Unchanged
+ Arguments.of(
+ List.of(
+ new Condition(
+ existingConditionLastTransitionTime,
+ "message",
+ 0L,
+ "reason",
+ "status",
+ "type")),
+ new Condition(
+ existingConditionLastTransitionTime,
+ "message",
+ 0L,
+ "reason",
+ "status",
+ "type"),
+ new Condition(
+ existingConditionLastTransitionTime,
+ "message",
+ 0L,
+ "reason",
+ "status",
+ "type"),
+ true),
+
+ // Test Status Changed
+ Arguments.of(
+ List.of(
+ new Condition(
+ existingConditionLastTransitionTime,
+ "message",
+ 0L,
+ "reason",
+ "status1",
+ "type")),
+ new Condition(
+ existingConditionLastTransitionTime,
+ "message",
+ 0L,
+ "reason",
+ "status2",
+ "type"),
+ new Condition(
+ existingConditionLastTransitionTime,
+ "message",
+ 0L,
+ "reason",
+ "status2",
+ "type"),
+ false),
+
+ // Test Multiple Conditions with Multiple Types
+ Arguments.of(
+ List.of(
+ new Condition("time1", "message", 0L,
"reason", "status", "type1"),
+ new Condition("time2", "message", 0L,
"reason", "status", "type1"),
+ new Condition("time3", "message", 0L,
"reason", "status", "type2")),
+ new Condition("time1", "message", 0L, "reason",
"status", "type1"),
+ new Condition(
+ "lastTransitionTime", "message", 0L, "reason",
"status", "type1"),
+ true),
+
+ // Test No Matching Type
+ Arguments.of(
+ List.of(
+ new Condition(
+ existingConditionLastTransitionTime,
+ "message",
+ 0L,
+ "reason",
+ "status",
+ "type1")),
+ new Condition(
+ existingConditionLastTransitionTime,
+ "message",
+ 0L,
+ "reason",
+ "status",
+ "type2"),
+ new Condition(
+ "lastTransitionTime", "message", 0L, "reason",
"status", "type2"),
+ false));
+ }
+
+ @ParameterizedTest
+ @MethodSource("updateLastTransitionTimeParams")
+ void testUpdateLastTransitionTime(
+ List<Condition> conditions, Condition expected, Condition actual,
boolean equals) {
+ ConditionsUtils.updateLastTransitionTime(conditions, actual);
+
+ assertEquals(expected.getMessage(), actual.getMessage());
+ assertEquals(expected.getObservedGeneration(),
actual.getObservedGeneration());
+ assertEquals(expected.getReason(), actual.getReason());
+ assertEquals(expected.getStatus(), actual.getStatus());
+ assertEquals(expected.getType(), actual.getType());
+
+ if (equals) {
+ assertEquals(expected.getLastTransitionTime(),
actual.getLastTransitionTime());
+ } else {
+ assertNotEquals(expected.getLastTransitionTime(),
actual.getLastTransitionTime());
+ }
+ }
+
+ @Test
+ void testNullUpdateLastTransitionTime() {
+ List<Condition> conditions = null;
+ Condition condition = null;
+
+ assertDoesNotThrow(() ->
ConditionsUtils.updateLastTransitionTime(conditions, condition));
+
+ assertNull(condition);
+ }
+
+ @Test
+ void testCreateApplicationModeCondition() {
+ Condition condition =
ConditionsUtils.createApplicationModeCondition(JobStatus.RUNNING);
+
+ assertNotNull(condition);
+ assertEquals(FlinkDeploymentStatus.CONDITION_TYPE_RUNNING,
condition.getType());
+ assertEquals("True", condition.getStatus());
+ assertEquals("Running", condition.getReason());
+ assertEquals("Job status RUNNING", condition.getMessage());
+ }
+
+ @Test
+ void testCreateSessionModeCondition() {
+ Condition condition =
+
ConditionsUtils.createSessionModeCondition(JobManagerDeploymentStatus.READY);
+
+ assertNotNull(condition);
+ assertEquals(FlinkDeploymentStatus.CONDITION_TYPE_RUNNING,
condition.getType());
+ assertEquals("True", condition.getStatus());
+ assertEquals("JobManagerReady", condition.getReason());
+ assertEquals(
+ "JobManager is running and ready to receive REST API calls",
+ condition.getMessage());
+ }
+}