From 556b783cd4d083d234649ca52bb820af5d1fbcde Mon Sep 17 00:00:00 2001 From: Jakub Dudycz Date: Tue, 22 Jan 2019 18:26:20 +0100 Subject: Write WTP and Protobuf encoders stubs - Make slight architecture changes - Write encoders stubs - Add some util test classes - Write unit tests Change-Id: Ida49d42c89f3bb607aa4562d5a22f1a56ffc094a Signed-off-by: Jakub Dudycz Issue-ID: DCAEGEN2-1113 --- services/hv-ves-client/producer/ct/pom.xml | 2 + services/hv-ves-client/producer/impl/pom.xml | 15 ++++ .../producer/impl/HvVesProducerFactoryImpl.java | 8 ++- .../client/producer/impl/HvVesProducerImpl.java | 31 +++----- .../hvves/client/producer/impl/ProducerCore.java | 50 +++++++++++++ .../producer/impl/encoders/EncodersFactory.java | 33 +++++++++ .../producer/impl/encoders/ProtobufEncoder.java | 44 ++++++++++++ .../producer/impl/encoders/WireFrameEncoder.java | 43 +++++++++++ .../client/producer/impl/ProducerCoreTest.java | 83 ++++++++++++++++++++++ .../impl/encoders/EncodersFactoryTest.java | 44 ++++++++++++ .../impl/encoders/ProtobufEncoderTest.java | 45 ++++++++++++ .../impl/encoders/WireFrameEncoderTest.java | 45 ++++++++++++ .../client/producer/impl/utils/VesEventDomain.java | 45 ++++++++++++ .../client/producer/impl/utils/VesEvents.java | 74 +++++++++++++++++++ 14 files changed, 539 insertions(+), 23 deletions(-) create mode 100644 services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/ProducerCore.java create mode 100644 services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/EncodersFactory.java create mode 100644 services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/ProtobufEncoder.java create mode 100644 services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/WireFrameEncoder.java create mode 100644 services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/ProducerCoreTest.java create mode 100644 services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/EncodersFactoryTest.java create mode 100644 services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/ProtobufEncoderTest.java create mode 100644 services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/WireFrameEncoderTest.java create mode 100644 services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/utils/VesEventDomain.java create mode 100644 services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/utils/VesEvents.java diff --git a/services/hv-ves-client/producer/ct/pom.xml b/services/hv-ves-client/producer/ct/pom.xml index ba8861c9..237f0f57 100644 --- a/services/hv-ves-client/producer/ct/pom.xml +++ b/services/hv-ves-client/producer/ct/pom.xml @@ -62,10 +62,12 @@ org.junit.jupiter junit-jupiter-engine + test org.assertj assertj-core + test io.projectreactor diff --git a/services/hv-ves-client/producer/impl/pom.xml b/services/hv-ves-client/producer/impl/pom.xml index a5d6b90a..b099b316 100644 --- a/services/hv-ves-client/producer/impl/pom.xml +++ b/services/hv-ves-client/producer/impl/pom.xml @@ -47,5 +47,20 @@ io.projectreactor.netty reactor-netty + + org.junit.jupiter + junit-jupiter-engine + test + + + org.assertj + assertj-core + test + + + org.mockito + mockito-core + test + diff --git a/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/HvVesProducerFactoryImpl.java b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/HvVesProducerFactoryImpl.java index ad402f93..cf656adf 100644 --- a/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/HvVesProducerFactoryImpl.java +++ b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/HvVesProducerFactoryImpl.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.NotNull; import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.api.HvVesProducer; import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.api.HvVesProducerFactory; import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.api.options.ProducerOptions; +import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders.EncodersFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.netty.tcp.TcpClient; @@ -39,16 +40,17 @@ public class HvVesProducerFactoryImpl extends HvVesProducerFactory { @Override protected @NotNull HvVesProducer createProducer(ProducerOptions options) { TcpClient tcpClient = TcpClient.create() - .addressSupplier(() -> options.collectorAddresses().head()); + .addressSupplier(() -> options.collectorAddresses().head()); + ProducerCore producerCore = new ProducerCore(new EncodersFactory()); if (options.securityKeys() == null) { LOGGER.warn("Using insecure connection"); } else { LOGGER.info("Using secure tunnel"); final SslContext ctx = sslFactory.createSecureContext(options.securityKeys()).get(); - tcpClient = tcpClient.secure(ssl-> ssl.sslContext(ctx)); + tcpClient = tcpClient.secure(ssl -> ssl.sslContext(ctx)); } - return new HvVesProducerImpl(tcpClient); + return new HvVesProducerImpl(tcpClient, producerCore); } } diff --git a/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/HvVesProducerImpl.java b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/HvVesProducerImpl.java index 15038c3a..05873f6f 100644 --- a/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/HvVesProducerImpl.java +++ b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/HvVesProducerImpl.java @@ -19,15 +19,10 @@ */ package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl; -import io.netty.buffer.ByteBuf; -import java.nio.charset.StandardCharsets; import org.jetbrains.annotations.NotNull; import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.api.HvVesProducer; import org.onap.ves.VesEventOuterClass.VesEvent; import org.reactivestreams.Publisher; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.netty.NettyOutbound; import reactor.netty.tcp.TcpClient; @@ -38,30 +33,26 @@ import reactor.netty.tcp.TcpClient; */ public class HvVesProducerImpl implements HvVesProducer { - private static final Logger LOGGER = LoggerFactory.getLogger(HvVesProducerImpl.class); private final TcpClient tcpClient; + private final ProducerCore producerCore; - HvVesProducerImpl(TcpClient tcpClient) { + + HvVesProducerImpl(TcpClient tcpClient, ProducerCore producerCore) { this.tcpClient = tcpClient; + this.producerCore = producerCore; } @Override public @NotNull Mono send(Publisher messages) { return tcpClient - .handle((inbound, outbound) -> handle(outbound, messages)) - .connect().then(); + .handle((in, out) -> handle(messages, out)) + .connect() + .then(); } - private Publisher handle(NettyOutbound outbound, Publisher messages) { - final Flux encodedMessages = Flux.from(messages) - .map(msg -> { - LOGGER.debug("Encoding VesEvent '{}'", msg); - final ByteBuf encodedMessage = outbound.alloc().buffer(); - encodedMessage.writeCharSequence(msg.getCommonEventHeader().getDomain(), StandardCharsets.UTF_8); - encodedMessage.writeByte(0x0a); - return encodedMessage; - }); - - return outbound.send(encodedMessages).then(); + private Publisher handle(Publisher messages, NettyOutbound outbound) { + return outbound + .send(producerCore.encode(messages, outbound.alloc())) + .then(); } } diff --git a/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/ProducerCore.java b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/ProducerCore.java new file mode 100644 index 00000000..baa6d6b3 --- /dev/null +++ b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/ProducerCore.java @@ -0,0 +1,50 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders.EncodersFactory; +import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders.ProtobufEncoder; +import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders.WireFrameEncoder; +import org.onap.ves.VesEventOuterClass.VesEvent; +import org.reactivestreams.Publisher; +import reactor.core.publisher.Flux; + + +/** + * @author Jakub Dudycz + */ +public class ProducerCore { + + private final EncodersFactory encodersFactory; + + public ProducerCore(EncodersFactory encodersFactory) { + this.encodersFactory = encodersFactory; + } + + public Flux encode(Publisher messages, ByteBufAllocator allocator) { + final WireFrameEncoder wireFrameEncoder = encodersFactory.createWireFrameEncoder(allocator); + final ProtobufEncoder protobufEncoder = encodersFactory.createProtobufEncoder(allocator); + return Flux.from(messages) + .map(protobufEncoder::encode) + .map(wireFrameEncoder::encode); + } +} diff --git a/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/EncodersFactory.java b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/EncodersFactory.java new file mode 100644 index 00000000..1d7b8b62 --- /dev/null +++ b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/EncodersFactory.java @@ -0,0 +1,33 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders; + +import io.netty.buffer.ByteBufAllocator; + +public class EncodersFactory { + + public ProtobufEncoder createProtobufEncoder(ByteBufAllocator allocator) { + return new ProtobufEncoder(allocator); + } + + public WireFrameEncoder createWireFrameEncoder(ByteBufAllocator allocator) { + return new WireFrameEncoder(allocator); + } +} diff --git a/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/ProtobufEncoder.java b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/ProtobufEncoder.java new file mode 100644 index 00000000..bb861c28 --- /dev/null +++ b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/ProtobufEncoder.java @@ -0,0 +1,44 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import org.onap.ves.VesEventOuterClass.VesEvent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Jakub Dudycz + */ +public class ProtobufEncoder { + + private static final Logger LOGGER = LoggerFactory.getLogger(ProtobufEncoder.class); + private final ByteBufAllocator allocator; + + public ProtobufEncoder(ByteBufAllocator allocator) { + this.allocator = allocator; + } + + public ByteBuf encode(VesEvent event) { + LOGGER.debug("Encoding VesEvent '{}'", event); + return allocator.buffer().writeBytes(event.toByteArray()); + } +} diff --git a/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/WireFrameEncoder.java b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/WireFrameEncoder.java new file mode 100644 index 00000000..a0807c68 --- /dev/null +++ b/services/hv-ves-client/producer/impl/src/main/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/WireFrameEncoder.java @@ -0,0 +1,43 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; + +/** + * @author Jakub Dudycz + */ +public class WireFrameEncoder { + + private final ByteBufAllocator allocator; + + public WireFrameEncoder(ByteBufAllocator allocator) { + this.allocator = allocator; + } + + public ByteBuf encode(ByteBuf payload) { + final ByteBuf encodedMessage = allocator.buffer(); + encodedMessage.writeByte(0xAA); + encodedMessage.writeBytes(payload); + encodedMessage.writeByte(0x0a); + return encodedMessage; + } +} diff --git a/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/ProducerCoreTest.java b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/ProducerCoreTest.java new file mode 100644 index 00000000..c4211ff4 --- /dev/null +++ b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/ProducerCoreTest.java @@ -0,0 +1,83 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.utils.VesEvents.defaultVesEvent; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.Unpooled; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders.EncodersFactory; +import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders.ProtobufEncoder; +import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders.WireFrameEncoder; +import org.onap.ves.VesEventOuterClass.VesEvent; +import reactor.core.publisher.Flux; + +/** + * @author Jakub Dudycz + */ +public class ProducerCoreTest { + + private ProducerCore producerCore; + private EncodersFactory encodersFactoryMock; + + @BeforeEach + public void setUp() { + encodersFactoryMock = mock(EncodersFactory.class); + producerCore = new ProducerCore(encodersFactoryMock); + } + + @Test + public void encode_should_encode_message_stream_to_wire_frame() { + final WireFrameEncoder wireFrameEncoder = mock(WireFrameEncoder.class); + final ProtobufEncoder protobufEncoder = mock(ProtobufEncoder.class); + final ByteBuf protoBuffer = Unpooled.copiedBuffer(new byte[3]); + final ByteBuf wireFrameBuffer = Unpooled.copiedBuffer(new byte[5]); + + when(protobufEncoder.encode(any(VesEvent.class))).thenReturn(protoBuffer); + when(wireFrameEncoder.encode(protoBuffer)).thenReturn(wireFrameBuffer); + when(encodersFactoryMock.createProtobufEncoder(ByteBufAllocator.DEFAULT)).thenReturn(protobufEncoder); + when(encodersFactoryMock.createWireFrameEncoder(ByteBufAllocator.DEFAULT)).thenReturn(wireFrameEncoder); + + // given + final int messageStreamSize = 2; + final Flux messages = Flux.just(defaultVesEvent()).repeat(messageStreamSize - 1); + + // when + final ByteBuf lastMessage = producerCore.encode(messages, ByteBufAllocator.DEFAULT).blockLast(); + + // then + verify(encodersFactoryMock).createProtobufEncoder(ByteBufAllocator.DEFAULT); + verify(encodersFactoryMock).createWireFrameEncoder(ByteBufAllocator.DEFAULT); + verify(protobufEncoder, times(messageStreamSize)).encode(any(VesEvent.class)); + verify(wireFrameEncoder, times(messageStreamSize)).encode(protoBuffer); + + assertThat(lastMessage).isNotNull(); + assertThat(lastMessage).isEqualTo(wireFrameBuffer); + } +} diff --git a/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/EncodersFactoryTest.java b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/EncodersFactoryTest.java new file mode 100644 index 00000000..c7439ced --- /dev/null +++ b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/EncodersFactoryTest.java @@ -0,0 +1,44 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.netty.buffer.ByteBufAllocator; +import org.junit.jupiter.api.Test; + +/** + * @author Jakub Dudycz + */ +public class EncodersFactoryTest { + + private final EncodersFactory encodersFactory = new EncodersFactory(); + + @Test + public void factory_methods_should_create_non_null_encoders_objects() { + // when + final ProtobufEncoder protobufEncoder = encodersFactory.createProtobufEncoder(ByteBufAllocator.DEFAULT); + final WireFrameEncoder wireFrameEncoder = encodersFactory.createWireFrameEncoder(ByteBufAllocator.DEFAULT); + + // then + assertThat(protobufEncoder).isNotNull(); + assertThat(wireFrameEncoder).isNotNull(); + } +} diff --git a/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/ProtobufEncoderTest.java b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/ProtobufEncoderTest.java new file mode 100644 index 00000000..042874c4 --- /dev/null +++ b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/ProtobufEncoderTest.java @@ -0,0 +1,45 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import org.junit.jupiter.api.Test; +import org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.utils.VesEvents; +import org.onap.ves.VesEventOuterClass.VesEvent; + +public class ProtobufEncoderTest { + + private final ProtobufEncoder protobufEncoder = new ProtobufEncoder(ByteBufAllocator.DEFAULT); + + @Test + void todo() { + // given + final VesEvent message = VesEvents.defaultVesEvent(); + + // when + final ByteBuf encodedMessage = protobufEncoder.encode(message); + + // then + assertThat(encodedMessage.readableBytes()).isGreaterThan(0); + } +} diff --git a/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/WireFrameEncoderTest.java b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/WireFrameEncoderTest.java new file mode 100644 index 00000000..97c38cf2 --- /dev/null +++ b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/encoders/WireFrameEncoderTest.java @@ -0,0 +1,45 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.encoders; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.Unpooled; +import org.junit.jupiter.api.Test; + +public class WireFrameEncoderTest { + + private final WireFrameEncoder wireFrameEncoder = new WireFrameEncoder(ByteBufAllocator.DEFAULT); + + @Test + void todo() { + // given + final ByteBuf buffer = Unpooled.buffer(0); + + // when + final ByteBuf encodedBuffer = wireFrameEncoder.encode(buffer); + + // then + assertThat(encodedBuffer.readableBytes()).isGreaterThan(0); + } + +} diff --git a/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/utils/VesEventDomain.java b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/utils/VesEventDomain.java new file mode 100644 index 00000000..7d5b1872 --- /dev/null +++ b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/utils/VesEventDomain.java @@ -0,0 +1,45 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.utils; + +public enum VesEventDomain { + FAULT("fault"), + HEARTBEAT("heartbeat"), + MEASUREMENT("measurement"), + MOBILE_FLOW("mobileFlow"), + OTHER("other"), + PNF_REGISTRATION("pnfRegistration"), + SIP_SIGNALING("sipSignaling"), + STATE_CHANGE("stateChange"), + SYSLOG("syslog"), + THRESHOLD_CROSSING_ALERT("thresholdCrossingAlert"), + VOICE_QUALITY("voiceQuality"), + PERF3GPP("perf3gpp"); + + private String name; + + VesEventDomain(String name) { + this.name = name; + } + + public String domainName() { + return name; + } +} diff --git a/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/utils/VesEvents.java b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/utils/VesEvents.java new file mode 100644 index 00000000..0b9ae376 --- /dev/null +++ b/services/hv-ves-client/producer/impl/src/test/java/org/onap/dcaegen2/services/sdk/services/hvves/client/producer/impl/utils/VesEvents.java @@ -0,0 +1,74 @@ +/* + * ============LICENSE_START======================================================= + * DCAEGEN2-SERVICES-SDK + * ================================================================================ + * Copyright (C) 2019 Nokia. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcaegen2.services.sdk.services.hvves.client.producer.impl.utils; + +import com.google.protobuf.ByteString; +import java.util.UUID; +import org.onap.ves.VesEventOuterClass.CommonEventHeader; +import org.onap.ves.VesEventOuterClass.CommonEventHeader.Priority; +import org.onap.ves.VesEventOuterClass.VesEvent; + +public final class VesEvents { + + private VesEvents() { + } + + public static VesEvent defaultVesEvent() { + return vesEvent(VesEventDomain.PERF3GPP, UUID.randomUUID().toString(), ByteString.EMPTY); + } + + public static VesEvent vesEvent(VesEventDomain domain, String id, ByteString eventFields) { + return vesEvent(commonEventHeader(domain, id), eventFields); + } + + private static VesEvent vesEvent(CommonEventHeader commonEventHeader, ByteString eventFields) { + return VesEvent + .newBuilder() + .setCommonEventHeader(commonEventHeader) + .setEventFields(eventFields) + .build(); + } + + private static CommonEventHeader commonEventHeader( + VesEventDomain domain, + String id + ) { + return CommonEventHeader.newBuilder() + .setVersion("sample-version") + .setDomain(domain.domainName()) + .setSequence(1) + .setPriority(Priority.NORMAL) + .setEventId(id) + .setEventName("sample-event-name") + .setEventType("sample-event-type") + .setStartEpochMicrosec(100000000) + .setLastEpochMicrosec(100000005) + .setNfNamingCode("sample-nf-naming-code") + .setNfcNamingCode("sample-nfc-naming-code") + .setNfVendorName("sample-vendor-name") + .setReportingEntityId(ByteString.copyFromUtf8("sample-reporting-entity-id")) + .setReportingEntityName("sample-reporting-entity-name") + .setSourceId(ByteString.copyFromUtf8("sample-source-id")) + .setSourceName("sample-source-name") + .setTimeZoneOffset("+1") + .setVesEventListenerVersion("7.0.2") + .build(); + } +} -- cgit 1.2.3-korg