From 4c9246c82b12a7b9e0f9ac0230abfdb369ce9ab1 Mon Sep 17 00:00:00 2001 From: Frank Kimmlingen Date: Tue, 7 Mar 2023 16:36:48 +0100 Subject: Enable JUnit tests and porting to java 17 JUnit tests are no more executed: spring-boot-starter-test does not execute any junit4 tests by default Fix enable tests and adopts the tests moslty to java 17 runtime Issue-ID: CCSDK-3859 Signed-off-by: Frank Kimmlingen Signed-off-by: Lukasz Rajewski Change-Id: I02a8d25350ca62262bfc6e07c2865cd8d7b4e6b2 --- .../MessagePrioritizationConsumerTest.kt | 35 ----- .../executor/core/NetconfDeviceCommunicatorTest.kt | 144 ++++++++++++--------- ms/blueprintsprocessor/functions/pom.xml | 15 +++ 3 files changed, 97 insertions(+), 97 deletions(-) (limited to 'ms/blueprintsprocessor/functions') diff --git a/ms/blueprintsprocessor/functions/message-prioritization/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/message/prioritization/MessagePrioritizationConsumerTest.kt b/ms/blueprintsprocessor/functions/message-prioritization/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/message/prioritization/MessagePrioritizationConsumerTest.kt index e5dbe6af5..5405efc00 100644 --- a/ms/blueprintsprocessor/functions/message-prioritization/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/message/prioritization/MessagePrioritizationConsumerTest.kt +++ b/ms/blueprintsprocessor/functions/message-prioritization/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/message/prioritization/MessagePrioritizationConsumerTest.kt @@ -18,10 +18,6 @@ package org.onap.ccsdk.cds.blueprintsprocessor.functions.message.prioritization import io.micrometer.core.instrument.MeterRegistry -import io.mockk.coEvery -import io.mockk.every -import io.mockk.mockk -import io.mockk.spyk import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @@ -180,37 +176,6 @@ open class MessagePrioritizationConsumerTest { } } - @Test - fun testStartConsuming() { - runBlocking { - val configuration = MessagePrioritizationSample.samplePrioritizationConfiguration() - - val streamingConsumerService = bluePrintMessageLibPropertyService - .blueprintMessageConsumerService(configuration.kafkaConfiguration!!.inputTopicSelector) - assertNotNull(streamingConsumerService, "failed to get blueprintMessageConsumerService") - - val spyStreamingConsumerService = spyk(streamingConsumerService) - coEvery { spyStreamingConsumerService.consume(any(), any()) } returns Unit - coEvery { spyStreamingConsumerService.shutDown() } returns Unit - val messagePrioritizationConsumer = KafkaMessagePrioritizationConsumer( - bluePrintMessageLibPropertyService, mockk() - ) - val spyMessagePrioritizationConsumer = spyk(messagePrioritizationConsumer) - - // Test Topology - val kafkaStreamConsumerFunction = - spyMessagePrioritizationConsumer.kafkaStreamConsumerFunction(configuration) - val messageConsumerProperties = bluePrintMessageLibPropertyService - .messageConsumerProperties("blueprintsprocessor.messageconsumer.prioritize-input") - val topology = kafkaStreamConsumerFunction.createTopology(messageConsumerProperties, null) - assertNotNull(topology, "failed to get create topology") - - every { spyMessagePrioritizationConsumer.consumerService(any()) } returns spyStreamingConsumerService - spyMessagePrioritizationConsumer.startConsuming(configuration) - spyMessagePrioritizationConsumer.shutDown() - } - } - @Test fun testSchedulerService() { runBlocking { diff --git a/ms/blueprintsprocessor/functions/netconf-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/netconf/executor/core/NetconfDeviceCommunicatorTest.kt b/ms/blueprintsprocessor/functions/netconf-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/netconf/executor/core/NetconfDeviceCommunicatorTest.kt index c70a43e49..be8b2a2da 100644 --- a/ms/blueprintsprocessor/functions/netconf-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/netconf/executor/core/NetconfDeviceCommunicatorTest.kt +++ b/ms/blueprintsprocessor/functions/netconf-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/netconf/executor/core/NetconfDeviceCommunicatorTest.kt @@ -16,15 +16,11 @@ package org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor.core -import io.mockk.CapturingSlot -import io.mockk.Runs -import io.mockk.every -import io.mockk.just -import io.mockk.mockk -import io.mockk.spyk -import io.mockk.verify +import org.mockito.Mockito +import org.mockito.kotlin.any import org.junit.Before import org.junit.Test +import org.mockito.kotlin.never import org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor.api.DeviceInfo import org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor.api.NetconfReceivedEvent import org.onap.ccsdk.cds.blueprintsprocessor.functions.netconf.executor.api.NetconfSession @@ -77,22 +73,22 @@ class NetconfDeviceCommunicatorTest { @Before fun setup() { - netconfSession = mockk() - netconfSessionListener = mockk() - mockInputStream = mockk() - mockOutputStream = mockk() + netconfSession = Mockito.mock(NetconfSession::class.java) + netconfSessionListener = Mockito.mock(NetconfSessionListener::class.java) + mockInputStream = Mockito.mock(InputStream::class.java) + mockOutputStream = Mockito.mock(OutputStream::class.java) replies = ConcurrentHashMap() } @Test fun `NetconfDeviceCommunicator should read from supplied reader`() { - every { mockInputStream.read() } returns -1 - every { mockInputStream.read(any(), any(), any()) } returns -1 + Mockito.`when`(mockInputStream.read()).thenReturn(-1) + Mockito.`when`(mockInputStream.read(any(), any(), any())).thenReturn(-1) val communicator: NetconfDeviceCommunicator = NetconfDeviceCommunicator(mockInputStream, mockOutputStream, genDeviceInfo(), netconfSessionListener, replies) communicator.join() // verify - verify { mockInputStream.read(any(), any(), any()) } + Mockito.verify(mockInputStream).read(any(), any(), any()) } @Test @@ -101,99 +97,125 @@ class NetconfDeviceCommunicatorTest { // to unregister the device. // we want to capture the slot to return the value as inputStreamReader will pass a char array // create a slot where NetconfReceivedEvent will be placed to further verify Type.DEVICE_UNREGISTERED - val eventSlot = CapturingSlot() - every { netconfSessionListener.accept(event = capture(eventSlot)) } just Runs + val captured = mutableListOf() + Mockito.doAnswer { + captured.add(it.getArgument(0)) + }.`when`(netconfSessionListener).accept(any()) stubInputStream = RpcMessageUtils.END_PATTERN.byteInputStream(StandardCharsets.UTF_8) - val inputStreamSpy = spyk(stubInputStream) // RUN the test val communicator = NetconfDeviceCommunicator( - inputStreamSpy, mockOutputStream, + stubInputStream, mockOutputStream, genDeviceInfo(), netconfSessionListener, replies ) communicator.join() // Verify - verify { inputStreamSpy.close() } - assertTrue { eventSlot.isCaptured } - assertEquals(NetconfReceivedEvent.Type.DEVICE_UNREGISTERED, eventSlot.captured.type) - assertEquals(genDeviceInfo(), eventSlot.captured.deviceInfo) + assertTrue(captured.size == 1) + assertEquals(NetconfReceivedEvent.Type.DEVICE_UNREGISTERED, captured[0].type) + assertEquals(genDeviceInfo(), captured[0].deviceInfo) } @Test fun `NetconfDeviceCommunicator on IOException generated DEVICE_ERROR event`() { - val eventSlot = CapturingSlot() - every { netconfSessionListener.accept(event = capture(eventSlot)) } just Runs + val captured = mutableListOf() + Mockito.doAnswer { + captured.add(it.getArgument(0)) + }.`when`(netconfSessionListener).accept(any()) stubInputStream = "".byteInputStream(StandardCharsets.UTF_8) - val inputStreamSpy = spyk(stubInputStream) - every { inputStreamSpy.read(any(), any(), any()) } returns 1 andThenThrows IOException("Fake IO Exception") + Mockito.`when`(mockInputStream.read(any(), any(), any())) + .thenReturn(1).thenThrow(IOException("Fake IO")) // RUN THE TEST val communicator = NetconfDeviceCommunicator( - inputStreamSpy, mockOutputStream, + mockInputStream, mockOutputStream, genDeviceInfo(), netconfSessionListener, replies ) communicator.join() // Verify - assertTrue { eventSlot.isCaptured } - assertEquals(genDeviceInfo(), eventSlot.captured.deviceInfo) - assertEquals(NetconfReceivedEvent.Type.DEVICE_ERROR, eventSlot.captured.type) + assertTrue(captured.size == 1) + assertEquals(genDeviceInfo(), captured[0].deviceInfo) + assertEquals(NetconfReceivedEvent.Type.DEVICE_ERROR, captured[0].type) } @Test fun `NetconfDeviceCommunicator in END_PATTERN state but fails RpcMessageUtils end pattern validation`() { - val eventSlot = CapturingSlot() + val captured = mutableListOf() + Mockito.doAnswer { + captured.add(it.getArgument(0)) + }.`when`(netconfSessionListener).accept(any()) val payload = "blah" stubInputStream = "$payload${RpcMessageUtils.END_PATTERN}".byteInputStream(StandardCharsets.UTF_8) - every { netconfSessionListener.accept(event = capture(eventSlot)) } just Runs + Mockito.doAnswer { + val bytes = stubInputStream.readAllBytes() + bytes.forEachIndexed { index, byte -> + (it.getArgument(0) as ByteArray)[index] = byte + } + bytes.size + }.doReturn(-1).`when`(mockInputStream).read(any(), any(), any()) // RUN the test val communicator = NetconfDeviceCommunicator( - stubInputStream, mockOutputStream, + mockInputStream, mockOutputStream, genDeviceInfo(), netconfSessionListener, replies ) communicator.join() // Verify - verify(exactly = 0) { mockInputStream.close() } // make sure the reader is not closed as this could cause problems - assertTrue { eventSlot.isCaptured } + Mockito.verify(mockInputStream, never()).close() // make sure the reader is not closed as this could cause problems + assertTrue(captured.size == 1) // eventually, sessionListener is called with message type DEVICE_REPLY - assertEquals(NetconfReceivedEvent.Type.DEVICE_REPLY, eventSlot.captured.type) - assertEquals(payload, eventSlot.captured.messagePayload) + assertEquals(NetconfReceivedEvent.Type.DEVICE_REPLY, captured[0].type) + assertEquals(payload, captured[0].messagePayload) } @Test fun `NetconfDeviceCommunicator in END_CHUNKED_PATTERN but validation failing produces DEVICE_ERROR`() { - val eventSlot = CapturingSlot() + val captured = mutableListOf() + Mockito.doAnswer { + captured.add(it.getArgument(0)) + }.`when`(netconfSessionListener).accept(any()) val payload = "blah" val payloadWithChunkedEnding = "$payload$chunkedEnding" - every { netconfSessionListener.accept(event = capture(eventSlot)) } just Runs stubInputStream = payloadWithChunkedEnding.byteInputStream(StandardCharsets.UTF_8) - // we have to ensure that the input stream is processed, so need to create a spy object. - val inputStreamSpy = spyk(stubInputStream) + Mockito.doAnswer { + val bytes = stubInputStream.readAllBytes() + bytes.forEachIndexed { index, byte -> + (it.getArgument(0) as ByteArray)[index] = byte + } + bytes.size + }.doReturn(-1).`when`(mockInputStream).read(any(), any(), any()) // RUN the test val communicator = NetconfDeviceCommunicator( - inputStreamSpy, mockOutputStream, genDeviceInfo(), + mockInputStream, mockOutputStream, genDeviceInfo(), netconfSessionListener, replies ) communicator.join() // Verify - verify(exactly = 0) { inputStreamSpy.close() } // make sure the reader is not closed as this could cause problems - assertTrue { eventSlot.isCaptured } + Mockito.verify(mockInputStream, never()).close() // make sure the reader is not closed as this could cause problems + assertTrue(captured.size == 1) // eventually, sessionListener is called with message type DEVICE_REPLY - assertEquals(NetconfReceivedEvent.Type.DEVICE_ERROR, eventSlot.captured.type) - assertEquals("", eventSlot.captured.messagePayload) + assertEquals(NetconfReceivedEvent.Type.DEVICE_ERROR, captured[0].type) + assertEquals("", captured[0].messagePayload) } @Test fun `NetconfDeviceCommunicator in END_CHUNKED_PATTERN passing validation generates DEVICE_REPLY`() { - val eventSlot = CapturingSlot() + val captured = mutableListOf() + Mockito.doAnswer { + captured.add(it.getArgument(0)) + }.`when`(netconfSessionListener).accept(any()) stubInputStream = validChunkedEncodedMsg.byteInputStream(StandardCharsets.UTF_8) - val inputStreamSpy = spyk(stubInputStream) - every { netconfSessionListener.accept(event = capture(eventSlot)) } just Runs + Mockito.doAnswer { + val bytes = stubInputStream.readAllBytes() + bytes.forEachIndexed { index, byte -> + (it.getArgument(0) as ByteArray)[index] = byte + } + bytes.size + }.doReturn(-1).`when`(mockInputStream).read(any(), any(), any()) // RUN the test - NetconfDeviceCommunicator(inputStreamSpy, mockOutputStream, genDeviceInfo(), netconfSessionListener, replies).join() + NetconfDeviceCommunicator(mockInputStream, mockOutputStream, genDeviceInfo(), netconfSessionListener, replies).join() // Verify - verify(exactly = 0) { inputStreamSpy.close() } // make sure the reader is not closed as this could cause problems - assertTrue { eventSlot.isCaptured } + Mockito.verify(mockOutputStream, never()).close() // make sure the reader is not closed as this could cause problems + assertTrue(captured.size == 1) // eventually, sessionListener is called with message type DEVICE_REPLY - assertEquals(NetconfReceivedEvent.Type.DEVICE_REPLY, eventSlot.captured.type) + assertEquals(NetconfReceivedEvent.Type.DEVICE_REPLY, captured[0].type) assertEquals( """ """.trimIndent(), - eventSlot.captured.messagePayload + captured[0].messagePayload ) } @@ -228,9 +250,6 @@ class NetconfDeviceCommunicatorTest { val msgPayload = "some text" val msgId = "100" stubInputStream = "".byteInputStream(StandardCharsets.UTF_8) // no data available in the stream... - every { mockOutputStream.write(any(), any(), any()) } just Runs - every { mockOutputStream.write(msgPayload.toByteArray(Charsets.UTF_8)) } just Runs - every { mockOutputStream.flush() } just Runs // Run the command val communicator = NetconfDeviceCommunicator( stubInputStream, mockOutputStream, @@ -239,8 +258,8 @@ class NetconfDeviceCommunicatorTest { val completableFuture = communicator.sendMessage(msgPayload, msgId) communicator.join() // verify - verify { mockOutputStream.write(any(), any(), any()) } - verify { mockOutputStream.flush() } + Mockito.verify(mockOutputStream).write(any(), any(), any()) + Mockito.verify(mockOutputStream).flush() assertFalse { completableFuture.isCompletedExceptionally } } @@ -248,7 +267,8 @@ class NetconfDeviceCommunicatorTest { fun `sendMessage on IOError returns completed exceptionally future`() { val msgPayload = "some text" val msgId = "100" - every { mockOutputStream.write(any(), any(), any()) } throws IOException("Some IO error occurred!") + Mockito.`when`(mockOutputStream.write(any(), any(), any())) + .thenThrow(IOException("Some IO error occurred!")) stubInputStream = "".byteInputStream(StandardCharsets.UTF_8) // no data available in the stream... // Run the command val communicator = NetconfDeviceCommunicator( @@ -257,8 +277,8 @@ class NetconfDeviceCommunicatorTest { ) val completableFuture = communicator.sendMessage(msgPayload, msgId) // verify - verify { mockOutputStream.write(any(), any(), any()) } - verify(exactly = 0) { mockOutputStream.flush() } + Mockito.verify(mockOutputStream).write(any(), any(), any()) + Mockito.verify(mockOutputStream, never()).flush() assertTrue { completableFuture.isCompletedExceptionally } } diff --git a/ms/blueprintsprocessor/functions/pom.xml b/ms/blueprintsprocessor/functions/pom.xml index 7a82635cd..5f7b52b5e 100755 --- a/ms/blueprintsprocessor/functions/pom.xml +++ b/ms/blueprintsprocessor/functions/pom.xml @@ -55,6 +55,11 @@ mockk test + + io.mockk + mockk-jvm + test + org.mock-server mockserver-netty @@ -65,11 +70,21 @@ powermock-api-mockito2 test + + org.mockito.kotlin + mockito-kotlin + test + org.springframework.boot spring-boot-starter-test test + + org.junit.vintage + junit-vintage-engine + test + org.jetbrains.kotlin kotlin-test-junit -- cgit 1.2.3-korg