From 03770601e77b1610f38b2906ae08cb292c6ac7b8 Mon Sep 17 00:00:00 2001 From: yoloyyh <1764163852@qq.com> Date: Fri, 29 Nov 2024 16:04:41 +0800 Subject: [PATCH] add JVMProbe unittest --- rasp/jvm/JVMProbe/build.gradle | 24 +++++++ .../com/security/smith/SmithProbeTest.java | 68 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 rasp/jvm/JVMProbe/src/test/java/com/security/smith/SmithProbeTest.java diff --git a/rasp/jvm/JVMProbe/build.gradle b/rasp/jvm/JVMProbe/build.gradle index fff03e84d..eb27b5b3d 100644 --- a/rasp/jvm/JVMProbe/build.gradle +++ b/rasp/jvm/JVMProbe/build.gradle @@ -1,6 +1,7 @@ plugins { id 'java-library' id 'com.github.johnrengelman.shadow' version '6.0.0' + id 'jacoco' } group 'com.security' @@ -10,6 +11,29 @@ repositories { mavenCentral() } +jacoco { + toolVersion = "0.8.5" +} + +test { + useJUnitPlatform() + finalizedBy jacocoTestReport // report is always generated after tests run +} + +jacocoTestReport { + dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.8.2' + testImplementation 'org.mockito:mockito-core:4.11.0' + } + dependsOn test // tests are required to run before generating the report + reports { + xml.enabled true + csv.enabled false + html.destination file("${buildDir}/reports/jacoco") + } +} + + dependencies { implementation files('lib/nashorn.jar') testImplementation group: 'junit', name: 'junit', version: '4.13.1' diff --git a/rasp/jvm/JVMProbe/src/test/java/com/security/smith/SmithProbeTest.java b/rasp/jvm/JVMProbe/src/test/java/com/security/smith/SmithProbeTest.java new file mode 100644 index 000000000..c344ed637 --- /dev/null +++ b/rasp/jvm/JVMProbe/src/test/java/com/security/smith/SmithProbeTest.java @@ -0,0 +1,68 @@ +import java.io.InputStream; +import java.io.Reader; +import java.util.HashSet; +import java.util.Set; +import java.util.List; +import java.util.ArrayList; +import java.util.Arrays; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + + +import com.security.smith.log.AttachInfo; +import com.security.smith.log.SmithLogger; +import com.esotericsoftware.yamlbeans.YamlReader; +import com.security.smith.client.MessageSerializer; +import com.security.smith.client.MessageDeserializer; +import com.security.smith.client.MessageDecoder; +import com.security.smith.client.MessageEncoder; +import com.security.smith.type.SmithClass; +import com.security.smith.type.SmithMethod; +import com.security.smith.ruleengine.JsRuleEngine; +import com.security.smith.SmithProbe; +import com.security.smith.client.message.Heartbeat; +import com.lmax.disruptor.dsl.Disruptor; +import com.lmax.disruptor.EventFactory; +import com.security.smith.client.message.Trace; +import com.security.smith.SmithProbeProxy; +import com.security.smith.client.Client; +import com.security.smith.client.Rule_Config; +import com.security.smith.client.Rule_Mgr; + + +public class SmithProbeTest { + + @Test + void testInit() { + // Mock dependencies + AttachInfo attachInfoMock = mock(AttachInfo.class); + SmithLogger smithLoggerMock = mock(SmithLogger.class); + MessageSerializer messageSerializerMock = mock(MessageSerializer.class); + MessageEncoder messageEncoderMock = mock(MessageEncoder.class); + MessageDecoder messageDecoderMock = mock(MessageDecoder.class); + Heartbeat heartbeatMock = mock(Heartbeat.class); + Client clientMock = mock(Client.class); + Disruptor disruptorMock = mock(Disruptor.class); + Rule_Mgr ruleMgrMock = mock(Rule_Mgr.class); + Rule_Config ruleConfigMock = mock(Rule_Config.class); + SmithProbeProxy smithProbeProxyMock = mock(SmithProbeProxy.class); + JsRuleEngine jsRuleEngineMock = mock(JsRuleEngine.class); + + // Create instance of the class under test + SmithProbe yourClass = mock(SmithProbe.class); + + // Set up mocks + when(yourClass.getHeartbeat()).thenReturn(heartbeatMock); + when(yourClass.getClient()).thenReturn(clientMock); + when(yourClass.getDisruptor()).thenReturn(disruptorMock); + when(yourClass.getRuleMgr()).thenReturn(ruleMgrMock); + when(yourClass.getRuleConfig()).thenReturn(ruleConfigMock); + when(yourClass.getSmithProxy()).thenReturn(smithProbeProxyMock); + when(yourClass.getJsRuleEngine()).thenReturn(jsRuleEngineMock); + + doNothing().when(yourClass).init(); + + + } +}