From aa92db3176feccf81748e06b04c6b91669e499a0 Mon Sep 17 00:00:00 2001 From: Teddy Date: Wed, 17 Jan 2024 11:23:36 +0100 Subject: [PATCH] fix: clear incident ID when testCase result is success (#14755) --- .../service/jdbi3/CollectionDAO.java | 8 ---- .../service/jdbi3/TestCaseRepository.java | 13 +++-- .../dqtests/TestCaseResourceTest.java | 47 ++++++++++++++++++- 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java index 2ac2b35df1f..f3d7f67cca0 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/CollectionDAO.java @@ -3708,14 +3708,6 @@ public interface CollectionDAO { return "data_quality_data_time_series"; } - @SqlUpdate( - value = - "UPDATE data_quality_data_time_series SET incidentId = NULL " - + "WHERE entityFQNHash = :testCaseFQNHash and incidentId = :incidentStateId") - void cleanTestCaseIncident( - @BindFQN("testCaseFQNHash") String testCaseFQNHash, - @Bind("incidentStateId") String incidentStateId); - @ConnectionAwareSqlUpdate( value = "INSERT INTO data_quality_data_time_series(entityFQNHash, extension, jsonSchema, json, incidentId) " diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestCaseRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestCaseRepository.java index 49b533db0b5..84ffeef9f41 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestCaseRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TestCaseRepository.java @@ -11,12 +11,12 @@ import static org.openmetadata.service.Entity.getEntityReferenceByName; import static org.openmetadata.service.util.RestUtil.ENTITY_NO_CHANGE; import static org.openmetadata.service.util.RestUtil.LOGICAL_TEST_CASES_ADDED; +import com.google.common.collect.ImmutableSet; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.UUID; import javax.json.JsonPatch; import javax.ws.rs.core.Response; @@ -258,6 +258,8 @@ public class TestCaseRepository extends EntityRepository { String updatedBy, UriInfo uriInfo, String fqn, TestCaseResult testCaseResult) { // Validate the request content TestCase testCase = findByName(fqn, Include.NON_DELETED); + ArrayList fields = new ArrayList<>(); + fields.add(TEST_SUITE_FIELD); // set the test case resolution status reference if test failed, by either // creating a new incident or returning the stateId of an unresolved incident @@ -269,6 +271,12 @@ public class TestCaseRepository extends EntityRepository { // plotting the UI // even after the incident has been closed. testCaseResult.setIncidentId(incidentStateId); + // if the test case failed, we'll add the incidentId field to update the testCase entity on ln + // 293 + fields.add(INCIDENTS_FIELD); + } else { + // If the test case passed, we'll remove the incidentId from the test case + testCase.setIncidentId(null); } // We add the incidentStateId in the DQ table to quickly link Test Case <> Incident @@ -282,8 +290,7 @@ public class TestCaseRepository extends EntityRepository { JsonUtils.pojoToJson(testCaseResult), incidentStateId != null ? incidentStateId.toString() : null); - setFieldsInternal( - testCase, new EntityUtil.Fields(allowedFields, Set.of(TEST_SUITE_FIELD, INCIDENTS_FIELD))); + setFieldsInternal(testCase, new EntityUtil.Fields(allowedFields, ImmutableSet.copyOf(fields))); setTestSuiteSummary( testCase, testCaseResult.getTimestamp(), testCaseResult.getTestCaseStatus(), false); setTestCaseResult(testCase, testCaseResult, false); diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/dqtests/TestCaseResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/dqtests/TestCaseResourceTest.java index 2106cbcb190..33febca4c89 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/dqtests/TestCaseResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/dqtests/TestCaseResourceTest.java @@ -1118,8 +1118,7 @@ public class TestCaseResourceTest extends EntityResourceTest testCaseResults = + getTestCaseResults( + testCaseEntity.getFullyQualifiedName(), + TestUtils.dateToTimestamp("2024-01-03"), + TestUtils.dateToTimestamp("2024-01-03"), + ADMIN_AUTH_HEADERS) + .getData(); + assertNull(testCaseResults.get(0).getIncidentId()); + assertNull(result.getIncidentId()); + + // Add a new testCase Result with status Failure at an older date. + // The incidentId should be the one from "2024-01-02" but the testCase incidentId should be null + // as it should reflect the latest testCaseResult + putTestCaseResult( + testCaseEntity.getFullyQualifiedName(), + new TestCaseResult() + .withResult("result") + .withTestCaseStatus(TestCaseStatus.Failed) + .withTimestamp(TestUtils.dateToTimestamp("2023-12-31")), + ADMIN_AUTH_HEADERS); + result = getTestCase(testCaseEntity.getFullyQualifiedName(), ADMIN_AUTH_HEADERS); + testCaseResults = + getTestCaseResults( + testCaseEntity.getFullyQualifiedName(), + TestUtils.dateToTimestamp("2023-12-31"), + TestUtils.dateToTimestamp("2023-12-31"), + ADMIN_AUTH_HEADERS) + .getData(); + assertEquals(newIncidentId, testCaseResults.get(0).getIncidentId()); + assertNull(result.getIncidentId()); } @Test