diff --git a/gradle.properties b/gradle.properties index 1926729f..9be62a1f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,4 +38,4 @@ kotlin.native.ignoreDisabledTargets = true kotlin.native.cacheKind = none kotlin.mpp.stability.nowarn = true kotlin.mpp.enableCInteropCommonization = true -kotlin.mpp.applyDefaultHierarchyTemplate=false \ No newline at end of file +kotlin.mpp.applyDefaultHierarchyTemplate=false diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/AppArchiveScannerCli.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/AppArchiveScannerCli.kt index cf085a58..4cacdf49 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/AppArchiveScannerCli.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/AppArchiveScannerCli.kt @@ -16,9 +16,9 @@ package com.epam.drill.agent import com.epam.drill.agent.common.configuration.AgentConfiguration +import com.epam.drill.agent.common.configuration.AgentMetadata import com.epam.drill.agent.common.configuration.AgentParameterDefinitionCollection import com.epam.drill.agent.common.configuration.BaseAgentParameterDefinition -import com.epam.drill.agent.common.transport.AgentMessage import com.epam.drill.agent.common.transport.AgentMessageDestination import com.epam.drill.agent.configuration.AgentParameterValidationError import com.epam.drill.agent.configuration.AgentParametersValidator @@ -83,7 +83,7 @@ fun main(args: Array) { sslTruststorePass = configuration.parameters[ParameterDefinitions.SSL_TRUSTSTORE_PASSWORD] ?: "", gzipCompression = configuration.parameters[ParameterDefinitions.USE_GZIP_COMPRESSION], ) - val serializer = JsonAgentMessageSerializer() + val serializer = JsonAgentMessageSerializer() val mapper = HttpAgentMessageDestinationMapper() val sender = SimpleAgentMessageSender(transport, serializer, mapper) val test2Code = Test2Code( @@ -92,7 +92,7 @@ fun main(args: Array) { sender = sender, configuration = configuration ) - sender.send(AgentMessageDestination("PUT", "builds"), configuration.agentMetadata) + sender.send(AgentMessageDestination("PUT", "builds"), configuration.agentMetadata, AgentMetadata.serializer()) test2Code.scanAndSendMetadataClasses() } diff --git a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/transport/JvmModuleMessageSender.kt b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/transport/JvmModuleMessageSender.kt index 5ca24f7b..4b0790e9 100644 --- a/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/transport/JvmModuleMessageSender.kt +++ b/java-agent/src/jvmMain/kotlin/com/epam/drill/agent/transport/JvmModuleMessageSender.kt @@ -15,6 +15,7 @@ */ package com.epam.drill.agent.transport +import com.epam.drill.agent.common.configuration.AgentMetadata import java.io.File import io.aesy.datasize.ByteUnit import io.aesy.datasize.DataSize @@ -26,26 +27,29 @@ import com.epam.drill.agent.transport.http.HttpAgentMessageTransport import com.epam.drill.agent.common.transport.AgentMessage import com.epam.drill.agent.common.transport.AgentMessageDestination import com.epam.drill.agent.common.transport.AgentMessageSender +import kotlinx.serialization.InternalSerializationApi +import kotlinx.serialization.KSerializer -actual object JvmModuleMessageSender : AgentMessageSender { +actual object JvmModuleMessageSender : AgentMessageSender { private const val QUEUE_DEFAULT_SIZE: Long = 512L * 1024 * 1024 private val logger = KotlinLogging.logger {} private val messageSender = messageSender() - override fun send(destination: AgentMessageDestination, message: AgentMessage) = - messageSender.send(destination, message) + override fun send(destination: AgentMessageDestination, message: T, serializer: KSerializer) = + messageSender.send(destination, message, serializer) actual fun sendAgentMetadata() { - messageSender.send(AgentMessageDestination("PUT", "instances"), Configuration.agentMetadata) + messageSender.send(AgentMessageDestination("PUT", "instances"), Configuration.agentMetadata, AgentMetadata.serializer()) } override fun shutdown() { messageSender.shutdown() } - private fun messageSender(): QueuedAgentMessageSender { + @OptIn(InternalSerializationApi::class) + private fun messageSender(): QueuedAgentMessageSender { val transport = HttpAgentMessageTransport( serverAddress = Configuration.parameters[ParameterDefinitions.API_URL], apiKey = Configuration.parameters[ParameterDefinitions.API_KEY] ?: "", @@ -55,8 +59,8 @@ actual object JvmModuleMessageSender : AgentMessageSender { gzipCompression = Configuration.parameters[ParameterDefinitions.USE_GZIP_COMPRESSION], ) val serializer = takeIf { Configuration.parameters[ParameterDefinitions.USE_PROTOBUF_SERIALIZER] }?.let { - ProtoBufAgentMessageSerializer() - } ?: JsonAgentMessageSerializer() + ProtoBufAgentMessageSerializer() + } ?: JsonAgentMessageSerializer() val mapper = HttpAgentMessageDestinationMapper() val queue = InMemoryAgentMessageQueue( capacity = Configuration.parameters[ParameterDefinitions.MESSAGE_QUEUE_LIMIT].let(::parseBytes), diff --git a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/GenericAgentModule.kt b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/GenericAgentModule.kt index c9945984..ccf35180 100644 --- a/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/GenericAgentModule.kt +++ b/java-agent/src/nativeMain/kotlin/com/epam/drill/agent/module/GenericAgentModule.kt @@ -27,6 +27,7 @@ import com.epam.drill.agent.jvmapi.gen.GetMethodID import com.epam.drill.agent.jvmapi.gen.jclass import com.epam.drill.agent.jvmapi.gen.jobject import kotlinx.cinterop.ExperimentalForeignApi +import kotlinx.serialization.KSerializer @OptIn(ExperimentalForeignApi::class) open class GenericAgentModule( @@ -58,8 +59,8 @@ open class GenericAgentModule( override fun invoke() = throw NotImplementedError() } - private class NopMessageSender : AgentMessageSender { - override fun send(destination: AgentMessageDestination, message: AgentMessage) = throw NotImplementedError() + private class NopMessageSender : AgentMessageSender { + override fun send(destination: AgentMessageDestination, message: T, serializer: KSerializer) = throw NotImplementedError() } private class NopConfiguration : AgentConfiguration { diff --git a/test2code/src/main/kotlin/com/epam/drill/agent/test2code/Test2Code.kt b/test2code/src/main/kotlin/com/epam/drill/agent/test2code/Test2Code.kt index db279ef9..6cd8c4f2 100644 --- a/test2code/src/main/kotlin/com/epam/drill/agent/test2code/Test2Code.kt +++ b/test2code/src/main/kotlin/com/epam/drill/agent/test2code/Test2Code.kt @@ -25,7 +25,6 @@ import com.epam.drill.agent.common.configuration.AgentConfiguration import com.epam.drill.agent.common.module.AgentModule import com.epam.drill.agent.common.module.Instrumenter import com.epam.drill.agent.common.request.RequestProcessor -import com.epam.drill.agent.common.transport.AgentMessage import com.epam.drill.agent.common.transport.AgentMessageDestination import com.epam.drill.agent.common.transport.AgentMessageSender import com.epam.drill.agent.common.classloading.EntitySource @@ -48,7 +47,7 @@ private const val DRILL_TEST_ID_HEADER = "drill-test-id" class Test2Code( id: String, agentContext: AgentContext, - sender: AgentMessageSender, + sender: AgentMessageSender, configuration: AgentConfiguration ) : AgentModule(id, agentContext, sender, configuration), Instrumenter, ClassScanner, RequestProcessor { @@ -169,7 +168,7 @@ class Test2Code( methods = methods ) logger.debug { "sendClassMetadata: Sending methods: $message" } - sender.send(classMetadataDestination, message) + sender.send(classMetadataDestination, message, ClassMetadata.serializer()) } } diff --git a/test2code/src/main/kotlin/com/epam/drill/agent/test2code/coverage/CoverageSender.kt b/test2code/src/main/kotlin/com/epam/drill/agent/test2code/coverage/CoverageSender.kt index cc60dd88..2715a4a0 100644 --- a/test2code/src/main/kotlin/com/epam/drill/agent/test2code/coverage/CoverageSender.kt +++ b/test2code/src/main/kotlin/com/epam/drill/agent/test2code/coverage/CoverageSender.kt @@ -23,6 +23,7 @@ import com.epam.drill.agent.common.transport.AgentMessageSender import com.epam.drill.agent.test2code.common.api.ClassCoverage import com.epam.drill.agent.test2code.common.api.toBitSet import com.epam.drill.agent.test2code.common.transport.CoveragePayload +import kotlinx.serialization.KSerializer interface CoverageSender { fun startSendingCoverage() @@ -35,7 +36,7 @@ class IntervalCoverageSender( private val instanceId: String, private val intervalMs: Long, private val pageSize: Int, - private val sender: AgentMessageSender = StubSender(), + private val sender: AgentMessageSender = StubSender(), private val collectProbes: () -> Sequence = { emptySequence() } ) : CoverageSender { private val scheduledThreadPool = Executors.newSingleThreadScheduledExecutor() @@ -76,11 +77,11 @@ class IntervalCoverageSender( testSessionId = it.sessionId, probes = it.probes.values.toBitSet()) } .chunked(pageSize) - .forEach { sender.send(destination, CoveragePayload(groupId, appId, instanceId, it)) } + .forEach { sender.send(destination, CoveragePayload(groupId, appId, instanceId, it), CoveragePayload.serializer()) } } } -private class StubSender : AgentMessageSender { - override fun send(destination: AgentMessageDestination, message: CoveragePayload) {} +private class StubSender : AgentMessageSender { + override fun send(destination: AgentMessageDestination, message: T, serializer: KSerializer) {} }