From 13923ec5ac1d07bd4e0bf49d3f43d4d906ecf661 Mon Sep 17 00:00:00 2001 From: kameshsr Date: Mon, 5 Jan 2026 12:11:35 +0530 Subject: [PATCH 1/2] MOSIP-44120 Fixed code coverage Signed-off-by: kameshsr --- .../packet/test/util/PacketValidatorTest.java | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 commons-packet/commons-packet-manager/src/test/java/io/mosip/commons/packet/test/util/PacketValidatorTest.java diff --git a/commons-packet/commons-packet-manager/src/test/java/io/mosip/commons/packet/test/util/PacketValidatorTest.java b/commons-packet/commons-packet-manager/src/test/java/io/mosip/commons/packet/test/util/PacketValidatorTest.java new file mode 100644 index 0000000000..565809046a --- /dev/null +++ b/commons-packet/commons-packet-manager/src/test/java/io/mosip/commons/packet/test/util/PacketValidatorTest.java @@ -0,0 +1,114 @@ +package io.mosip.commons.packet.test.util; + +import io.mosip.commons.packet.audit.AuditLogEntry; +import io.mosip.commons.packet.facade.PacketReader; +import io.mosip.commons.packet.keeper.PacketKeeper; +import io.mosip.commons.packet.util.IdSchemaUtils; +import io.mosip.commons.packet.util.PacketValidator; +import io.mosip.kernel.core.idobjectvalidator.spi.IdObjectValidator; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.core.env.Environment; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public class PacketValidatorTest { + + @InjectMocks + private PacketValidator packetValidator; + + @Mock + private PacketReader reader; + + @Mock + private Environment env; + + @Mock + private ObjectMapper mapper; + + @Mock + private PacketKeeper packetKeeper; + + @Mock + private IdObjectValidator idObjectValidator; + + @Mock + private IdSchemaUtils idSchemaUtils; + + @Mock + private AuditLogEntry auditLogEntry; + + private PacketValidator spyValidator; + + @Before + public void setup() { + spyValidator = Mockito.spy(packetValidator); + } + + @Test + public void validateReturnsFalseWhenSchemaValidationFails() throws Exception { + // Arrange + doReturn(false) + .when(spyValidator) + .validateSchema(anyString(), anyString(), anyString()); + + // Act + boolean result = spyValidator.validate("123", "source", "process"); + + // Assert + assertFalse(result); + verify(auditLogEntry) + .addAudit(contains("failed"), any(), any(), any(), any(), any(), eq("123")); + verify(spyValidator, never()) + .fileAndChecksumValidation(any(), any(), any()); + } + + @Test + public void validateReturnsTrueWhenSchemaAndFileValidationPass() throws Exception { + // Arrange + doReturn(true) + .when(spyValidator) + .validateSchema(anyString(), anyString(), anyString()); + + doReturn(true) + .when(spyValidator) + .fileAndChecksumValidation(anyString(), anyString(), anyString()); + + // Act + boolean result = spyValidator.validate("123", "source", "process"); + + // Assert + assertTrue(result); + verify(auditLogEntry) + .addAudit(contains("successful"), any(), any(), any(), any(), any(), eq("123")); + } + + @Test + public void validateReturnsFalseWhenFileValidationFails() throws Exception { + // Arrange + doReturn(true) + .when(spyValidator) + .validateSchema(anyString(), anyString(), anyString()); + + doReturn(false) + .when(spyValidator) + .fileAndChecksumValidation(anyString(), anyString(), anyString()); + + // Act + boolean result = spyValidator.validate("123", "source", "process"); + + // Assert + assertFalse(result); + verify(auditLogEntry) + .addAudit(contains("successful"), any(), any(), any(), any(), any(), eq("123")); + } +} From 3d996f10556155eb6a70ed3c4682602c949d34ba Mon Sep 17 00:00:00 2001 From: kameshsr Date: Mon, 5 Jan 2026 12:40:45 +0530 Subject: [PATCH 2/2] MOSIP-44120 Written test case for Packet validator test Signed-off-by: kameshsr --- .../packet/test/util/PacketValidatorTest.java | 94 +++++++++++++------ 1 file changed, 64 insertions(+), 30 deletions(-) diff --git a/commons-packet/commons-packet-manager/src/test/java/io/mosip/commons/packet/test/util/PacketValidatorTest.java b/commons-packet/commons-packet-manager/src/test/java/io/mosip/commons/packet/test/util/PacketValidatorTest.java index 565809046a..cdc4d2d663 100644 --- a/commons-packet/commons-packet-manager/src/test/java/io/mosip/commons/packet/test/util/PacketValidatorTest.java +++ b/commons-packet/commons-packet-manager/src/test/java/io/mosip/commons/packet/test/util/PacketValidatorTest.java @@ -1,6 +1,7 @@ package io.mosip.commons.packet.test.util; import io.mosip.commons.packet.audit.AuditLogEntry; +import io.mosip.commons.packet.constants.PacketManagerConstants; import io.mosip.commons.packet.facade.PacketReader; import io.mosip.commons.packet.keeper.PacketKeeper; import io.mosip.commons.packet.util.IdSchemaUtils; @@ -11,12 +12,15 @@ import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.core.env.Environment; import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + import static org.junit.Assert.*; import static org.mockito.Mockito.*; @@ -47,68 +51,98 @@ public class PacketValidatorTest { @Mock private AuditLogEntry auditLogEntry; - private PacketValidator spyValidator; - @Before public void setup() { - spyValidator = Mockito.spy(packetValidator); + // env.getProperty(...) returns null + // → validateSchema() returns false + when(env.getProperty(anyString())).thenReturn(null); } @Test public void validateReturnsFalseWhenSchemaValidationFails() throws Exception { - // Arrange - doReturn(false) - .when(spyValidator) - .validateSchema(anyString(), anyString(), anyString()); + // Arrange: prevent NPE + when(idSchemaUtils.getIdschemaVersionFromMappingJson()).thenReturn("schemaVersion"); + when(reader.getField(any(), any(), any(), any(), anyBoolean())).thenReturn("1.0"); + + // env property null -> schema validation returns false + when(env.getProperty(anyString())).thenReturn(null); // Act - boolean result = spyValidator.validate("123", "source", "process"); + boolean result = packetValidator.validate("123", "source", "process"); // Assert assertFalse(result); + verify(auditLogEntry) .addAudit(contains("failed"), any(), any(), any(), any(), any(), eq("123")); - verify(spyValidator, never()) - .fileAndChecksumValidation(any(), any(), any()); + + verify(packetKeeper, never()).getPacket(any()); } @Test - public void validateReturnsTrueWhenSchemaAndFileValidationPass() throws Exception { - // Arrange - doReturn(true) - .when(spyValidator) - .validateSchema(anyString(), anyString(), anyString()); + public void validateReturnsTrueWhenSchemaPassesAndFileValidationPasses() throws Exception { + // ---- prevent earlier NPEs ---- + when(idSchemaUtils.getIdschemaVersionFromMappingJson()).thenReturn("schemaVersion"); + when(reader.getField(any(), any(), any(), any(), anyBoolean())).thenReturn("1.0"); + + Map fieldsMap = new HashMap<>(); + fieldsMap.put(PacketManagerConstants.IDSCHEMA_VERSION, "1.0"); + when(idSchemaUtils.getDefaultFields(anyDouble())).thenReturn(new ArrayList<>()); + when(reader.getFields(any(), any(), any(), any(), anyBoolean())).thenReturn(fieldsMap); + + when(env.getProperty(anyString())).thenReturn("field1,field2"); + when(idObjectValidator.validateIdObject(any(), any(), any())).thenReturn(true); + + // ---- spy only public method ---- + PacketValidator spyValidator = spy(packetValidator); doReturn(true) .when(spyValidator) - .fileAndChecksumValidation(anyString(), anyString(), anyString()); + .fileAndChecksumValidation(any(), any(), any()); - // Act + // ---- act ---- boolean result = spyValidator.validate("123", "source", "process"); - // Assert + // ---- assert ---- assertTrue(result); - verify(auditLogEntry) - .addAudit(contains("successful"), any(), any(), any(), any(), any(), eq("123")); } @Test public void validateReturnsFalseWhenFileValidationFails() throws Exception { - // Arrange - doReturn(true) - .when(spyValidator) - .validateSchema(anyString(), anyString(), anyString()); + // ---- Schema validation MUST pass ---- + when(idSchemaUtils.getIdschemaVersionFromMappingJson()) + .thenReturn(PacketManagerConstants.IDSCHEMA_VERSION); + + when(reader.getField(any(), any(), any(), any(), anyBoolean())) + .thenReturn("1.0"); + + Map fieldsMap = new HashMap<>(); + fieldsMap.put(PacketManagerConstants.IDSCHEMA_VERSION, "1.0"); + + when(idSchemaUtils.getDefaultFields(anyDouble())) + .thenReturn(new ArrayList<>()); + + when(reader.getFields(any(), any(), any(), any(), anyBoolean())) + .thenReturn(fieldsMap); + + when(env.getProperty(anyString())) + .thenReturn("field1,field2"); + + when(idObjectValidator.validateIdObject(any(), any(), any())) + .thenReturn(true); + + // ---- Force file validation to fail ---- + PacketValidator spyValidator = spy(packetValidator); doReturn(false) .when(spyValidator) - .fileAndChecksumValidation(anyString(), anyString(), anyString()); + .fileAndChecksumValidation(any(), any(), any()); - // Act + // ---- Act ---- boolean result = spyValidator.validate("123", "source", "process"); - // Assert + // ---- Assert ---- assertFalse(result); - verify(auditLogEntry) - .addAudit(contains("successful"), any(), any(), any(), any(), any(), eq("123")); } + }