From 7ac5e680fac61b4a18d8da785d9f9e9a23603260 Mon Sep 17 00:00:00 2001 From: Miroslav Toth Date: Tue, 24 May 2016 16:16:41 +0200 Subject: [PATCH] JUnit Test - LispSouthboundRpcTest Change-Id: Ia27cdd3c144c8fa6a3d5c03039ee4533c1dc6713 Signed-off-by: Miroslav Toth --- .../southbound/LispSouthboundRpcTest.java | 313 ++++++++++++++++++ 1 file changed, 313 insertions(+) create mode 100644 mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/LispSouthboundRpcTest.java diff --git a/mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/LispSouthboundRpcTest.java b/mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/LispSouthboundRpcTest.java new file mode 100644 index 000000000..0f1ce81cd --- /dev/null +++ b/mappingservice/southbound/src/test/java/org/opendaylight/lispflowmapping/southbound/LispSouthboundRpcTest.java @@ -0,0 +1,313 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.lispflowmapping.southbound; + +import static org.junit.Assert.assertEquals; + +import com.google.common.collect.Lists; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.opendaylight.lispflowmapping.lisp.serializer.MapNotifySerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.MapReplySerializer; +import org.opendaylight.lispflowmapping.lisp.serializer.MapRequestSerializer; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MessageType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotify; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotifyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container + .MappingRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list + .MappingRecordItemBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregistermessage.MapRegister; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregistermessage.MapRegisterBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapreplymessage.MapReply; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapreplymessage.MapReplyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestmessage.MapRequest; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestmessage.MapRequestBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.transport.address.TransportAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.transport.address.TransportAddressBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.GetStatsOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapNotifyInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapRegisterInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapReplyInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapRequestInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.get.stats.output.ControlMessageStats; +import org.opendaylight.yangtools.yang.common.RpcError; +import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.RpcResultBuilder; + +@RunWith(MockitoJUnitRunner.class) +public class LispSouthboundRpcTest { + + @Mock LispSouthboundPlugin lispSouthboundPlugin; + @InjectMocks LispSouthboundRPC lispSouthboundRPC; + + private static final RpcResult RPC_RESULT_FAILURE = RpcResultBuilder.failed().build(); + private static final RpcResult RPC_RESULT_SUCCESS = RpcResultBuilder.success().build(); + private static final RpcResult RPC_RESULT_ERROR = RpcResultBuilder.failed() + .withError(RpcError.ErrorType.APPLICATION, "data-missing", "No stats found").build(); + + /** + * Tests {@link LispSouthboundRPC#sendMapNotify} method. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void sendMapNotifyTest_inputNotNull() throws ExecutionException, InterruptedException { + + final MapNotify mapNotify = getDefaultMapNotifyBuilder().build(); + final TransportAddress transportAddress = new TransportAddressBuilder().build(); + final SendMapNotifyInput sendMapNotifyInputMock = Mockito.mock(SendMapNotifyInput.class); + + Mockito.when(sendMapNotifyInputMock.getTransportAddress()).thenReturn(transportAddress); + Mockito.when(sendMapNotifyInputMock.getMapNotify()).thenReturn(mapNotify); + assertEquals(RPC_RESULT_SUCCESS.isSuccessful(), + lispSouthboundRPC.sendMapNotify(sendMapNotifyInputMock).get().isSuccessful()); + + Mockito.verify(lispSouthboundPlugin).handleSerializedLispBuffer(transportAddress, + MapNotifySerializer.getInstance().serialize(mapNotify), MessageType.MapNotify); + } + + /** + * Tests {@link LispSouthboundRPC#sendMapNotify} method with null input. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void sendMapNotifyTest_nullInput() throws ExecutionException, InterruptedException { + assertEquals(RPC_RESULT_FAILURE.isSuccessful(), + lispSouthboundRPC.sendMapNotify(null).get().isSuccessful()); + + Mockito.verifyZeroInteractions(lispSouthboundPlugin); + } + + /** + * Tests {@link LispSouthboundRPC#sendMapReply} method. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void sendMapReplyTest_inputNotNull() throws ExecutionException, InterruptedException { + + final MapReply mapReply = getDefaultMapReplyBuilder().build(); + final TransportAddress transportAddress = new TransportAddressBuilder().build(); + final SendMapReplyInput sendMapReplyInputMock = Mockito.mock(SendMapReplyInput.class); + + Mockito.when(sendMapReplyInputMock.getTransportAddress()).thenReturn(transportAddress); + Mockito.when(sendMapReplyInputMock.getMapReply()).thenReturn(mapReply); + assertEquals(RPC_RESULT_SUCCESS.isSuccessful(), + lispSouthboundRPC.sendMapReply(sendMapReplyInputMock).get().isSuccessful()); + + Mockito.verify(lispSouthboundPlugin).handleSerializedLispBuffer(transportAddress, + MapReplySerializer.getInstance().serialize(mapReply), MessageType.MapReply); + } + + /** + * Tests {@link LispSouthboundRPC#sendMapReply} method with null input. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void sendMapReplyTest_nullInput() throws ExecutionException, InterruptedException { + assertEquals(RPC_RESULT_FAILURE.isSuccessful(), + lispSouthboundRPC.sendMapReply(null).get().isSuccessful()); + + Mockito.verifyZeroInteractions(lispSouthboundPlugin); + } + + /** + * Tests {@link LispSouthboundRPC#sendMapRequest} method. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void sendMapRequestTest_inputNotNull() throws ExecutionException, InterruptedException { + + final MapRequest mapRequest = new MapRequestBuilder().build(); + final TransportAddress transportAddress = new TransportAddressBuilder().build(); + final SendMapRequestInput sendMapRequestInputMock = Mockito.mock(SendMapRequestInput.class); + + Mockito.when(sendMapRequestInputMock.getTransportAddress()).thenReturn(transportAddress); + Mockito.when(sendMapRequestInputMock.getMapRequest()).thenReturn(mapRequest); + assertEquals(RPC_RESULT_SUCCESS.isSuccessful(), + lispSouthboundRPC.sendMapRequest(sendMapRequestInputMock).get().isSuccessful()); + + Mockito.verify(lispSouthboundPlugin).handleSerializedLispBuffer(transportAddress, + MapRequestSerializer.getInstance().serialize(mapRequest), MessageType.MapRequest); + } + + /** + * Tests {@link LispSouthboundRPC#sendMapRequest} method with null input. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void sendMapRequestTest_nullInput() throws ExecutionException, InterruptedException { + assertEquals(RPC_RESULT_FAILURE.isSuccessful(), + lispSouthboundRPC.sendMapRequest(null).get().isSuccessful()); + + Mockito.verifyZeroInteractions(lispSouthboundPlugin); + } + + /** + * Tests {@link LispSouthboundRPC#sendMapRegister} method. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void sendMapRegisterTest_inputNotNull() throws ExecutionException, InterruptedException { + + final MapRegister mapRegister = getDefaultMapRegisterBuilder().build(); + final TransportAddress transportAddress = new TransportAddressBuilder().build(); + final SendMapRegisterInput sendMapRegisterInputMock = Mockito.mock(SendMapRegisterInput.class); + + Mockito.when(sendMapRegisterInputMock.getTransportAddress()).thenReturn(transportAddress); + Mockito.when(sendMapRegisterInputMock.getMapRegister()).thenReturn(mapRegister); + assertEquals(RPC_RESULT_SUCCESS.isSuccessful(), + lispSouthboundRPC.sendMapRegister(sendMapRegisterInputMock).get().isSuccessful()); + + Mockito.verify(lispSouthboundPlugin).handleSerializedLispBuffer(transportAddress, + MapRegisterSerializer.getInstance().serialize(mapRegister), MessageType.MapRegister); + } + + /** + * Tests {@link LispSouthboundRPC#sendMapRegister} method with null input. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void sendMapRegisterTest_nullInput() throws ExecutionException, InterruptedException { + assertEquals(RPC_RESULT_FAILURE.isSuccessful(), + lispSouthboundRPC.sendMapRegister(null).get().isSuccessful()); + + Mockito.verifyZeroInteractions(lispSouthboundPlugin); + } + + /** + * Tests {@link LispSouthboundRPC#getStats} method. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void getStatsTest() throws ExecutionException, InterruptedException { + final LispSouthboundStats stats = new LispSouthboundStats(); + incrementAll(stats); + Mockito.when(lispSouthboundPlugin.getStats()).thenReturn(stats); + + // result + final ControlMessageStats resultStats = lispSouthboundRPC.getStats().get().getResult().getControlMessageStats(); + + assertEquals(stats.getRx()[0], (long) resultStats.getControlMessage().get(0).getRxCount()); + assertEquals(stats.getRx()[1], (long) resultStats.getControlMessage().get(1).getRxCount()); + assertEquals(stats.getRx()[2], (long) resultStats.getControlMessage().get(2).getRxCount()); + assertEquals(stats.getRx()[3], (long) resultStats.getControlMessage().get(3).getRxCount()); + assertEquals(stats.getRx()[4], (long) resultStats.getControlMessage().get(4).getRxCount()); + assertEquals(stats.getRx()[6], (long) resultStats.getControlMessage().get(5).getRxCount()); + assertEquals(stats.getRx()[7], (long) resultStats.getControlMessage().get(6).getRxCount()); + assertEquals(stats.getRx()[8], (long) resultStats.getControlMessage().get(7).getRxCount()); + } + + /** + * Tests {@link LispSouthboundRPC#getStats} method with null stats. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void getStatsTest_withNullStats() throws ExecutionException, InterruptedException { + final String expectedMsg = ((RpcError) RPC_RESULT_ERROR.getErrors().iterator().next()).getMessage(); + + Mockito.when(lispSouthboundPlugin.getStats()).thenReturn(null); + + final Future> resultFuture = lispSouthboundRPC.getStats(); + final RpcResult rpcResult = resultFuture.get(); + + assertEquals(RPC_RESULT_ERROR.isSuccessful(), rpcResult.isSuccessful()); + assertEquals(expectedMsg, rpcResult.getErrors().iterator().next().getMessage()); + } + + /** + * Tests {@link LispSouthboundRPC#resetStats} method. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void resetStatsTest() throws ExecutionException, InterruptedException { + final LispSouthboundStats stats = new LispSouthboundStats(); + incrementAll(stats); + Mockito.when(lispSouthboundPlugin.getStats()).thenReturn(stats); + + assertEquals(RPC_RESULT_SUCCESS.isSuccessful(), lispSouthboundRPC.resetStats().get().isSuccessful()); + + for (long rx : stats.getRx()) { + assertEquals(0, rx); + } + } + + /** + * Tests {@link LispSouthboundRPC#resetStats} method with null stats. + * + * @throws ExecutionException + * @throws InterruptedException + */ + @Test + public void resetStatsTest_withNullStats() throws ExecutionException, InterruptedException { + final String expectedMsg = ((RpcError) RPC_RESULT_ERROR.getErrors().iterator().next()).getMessage(); + + Mockito.when(lispSouthboundPlugin.getStats()).thenReturn(null); + + final Future> resultFuture = lispSouthboundRPC.resetStats(); + final RpcResult rpcResult = resultFuture.get(); + + assertEquals(RPC_RESULT_ERROR.isSuccessful(), rpcResult.isSuccessful()); + assertEquals(expectedMsg, rpcResult.getErrors().iterator().next().getMessage()); + } + + private static MappingRecordItem getDefaultMappingRecordItem() { + return new MappingRecordItemBuilder() + .setMappingRecord(new MappingRecordBuilder().build()).build(); + } + + private static MapNotifyBuilder getDefaultMapNotifyBuilder() { + return new MapNotifyBuilder() + .setMappingRecordItem(Lists.newArrayList(getDefaultMappingRecordItem())); + } + + private static MapReplyBuilder getDefaultMapReplyBuilder() { + return new MapReplyBuilder() + .setMappingRecordItem(Lists.newArrayList(getDefaultMappingRecordItem())); + } + + private static MapRegisterBuilder getDefaultMapRegisterBuilder() { + return new MapRegisterBuilder() + .setMappingRecordItem(Lists.newArrayList(getDefaultMappingRecordItem())); + } + + private static void incrementAll(LispSouthboundStats stats) { + for (MessageType type : MessageType.values()) { + stats.incrementRx(type.getIntValue()); + } + } +} -- 2.36.6