1 package io.fd.honeycomb.lisp.translate.read;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
5 import static org.junit.Assert.assertNull;
6 import static org.junit.Assert.assertTrue;
7 import static org.junit.Assert.fail;
8 import static org.mockito.Matchers.any;
9 import static org.mockito.Mockito.times;
10 import static org.mockito.Mockito.verify;
11 import static org.mockito.Mockito.when;
13 import io.fd.honeycomb.translate.read.ReadFailedException;
14 import io.fd.honeycomb.translate.spi.read.ReaderCustomizer;
15 import io.fd.honeycomb.vpp.test.read.ReaderCustomizerTest;
16 import io.fd.vpp.jvpp.VppCallbackException;
17 import io.fd.vpp.jvpp.core.dto.LispGetMapRequestItrRlocs;
18 import io.fd.vpp.jvpp.core.dto.LispGetMapRequestItrRlocsReply;
19 import java.nio.charset.StandardCharsets;
20 import java.util.concurrent.CompletableFuture;
21 import java.util.concurrent.ExecutionException;
22 import java.util.concurrent.TimeUnit;
23 import java.util.concurrent.TimeoutException;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.itr.remote.locator.sets.grouping.ItrRemoteLocatorSet;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.itr.remote.locator.sets.grouping.ItrRemoteLocatorSetBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.lisp.feature.data.grouping.LispFeatureDataBuilder;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
32 public class ItrRemoteLocatorSetCustomizerTest
33 extends ReaderCustomizerTest<ItrRemoteLocatorSet, ItrRemoteLocatorSetBuilder> {
35 private static final String EXPECTED_LOCATOR_SET_NAME = "loc-set";
37 private InstanceIdentifier<ItrRemoteLocatorSet> validId;
38 private ItrRemoteLocatorSetBuilder builder;
40 public ItrRemoteLocatorSetCustomizerTest() {
41 super(ItrRemoteLocatorSet.class, LispFeatureDataBuilder.class);
45 public void setUp() throws Exception {
46 validId = InstanceIdentifier.create(ItrRemoteLocatorSet.class);
47 builder = new ItrRemoteLocatorSetBuilder();
51 protected ReaderCustomizer<ItrRemoteLocatorSet, ItrRemoteLocatorSetBuilder> initCustomizer() {
52 return new ItrRemoteLocatorSetCustomizer(api);
56 public void getBuilder() throws Exception {
57 final ItrRemoteLocatorSetBuilder itrRemoteLocatorSetBuilder = getCustomizer().getBuilder(validId);
59 assertNotNull(itrRemoteLocatorSetBuilder);
60 assertNull(itrRemoteLocatorSetBuilder.getRemoteLocatorSetName());
64 public void readCurrentAttributesSuccess() throws Exception {
65 doReturnValidDataOnDump();
67 getCustomizer().readCurrentAttributes(validId, builder, ctx);
69 assertNotNull(builder);
70 assertEquals(EXPECTED_LOCATOR_SET_NAME, builder.getRemoteLocatorSetName());
71 verifyLispGetMapRequestItrRlocsInvokedOnce();
75 public void readCurrentAttributesEmptyData() throws Exception {
76 doReturnEmptyDataOnDump();
77 getCustomizer().readCurrentAttributes(validId, builder, ctx);
78 verifyInvalidDataCase(builder);
82 public void readCurrentAttributesFailedCallHalted() {
83 doThrowExceptionOnDump();
85 getCustomizer().readCurrentAttributes(validId, builder, ctx);
86 } catch (ReadFailedException e) {
87 assertTrue(e.getCause() instanceof VppCallbackException);
88 assertNotNull(builder);
89 assertNull(builder.getRemoteLocatorSetName());
91 verifyLispGetMapRequestItrRlocsInvokedOnce();
95 fail("Test should have thrown exception");
99 public void merge() throws Exception {
100 LispFeatureDataBuilder builder = new LispFeatureDataBuilder();
101 ItrRemoteLocatorSet set = new ItrRemoteLocatorSetBuilder().setRemoteLocatorSetName("loc-set").build();
102 getCustomizer().merge(builder, set);
104 assertNotNull(builder);
105 assertEquals(set, builder.getItrRemoteLocatorSet());
109 private void doReturnValidDataOnDump() {
110 LispGetMapRequestItrRlocsReply reply = new LispGetMapRequestItrRlocsReply();
111 reply.locatorSetName = EXPECTED_LOCATOR_SET_NAME.getBytes(StandardCharsets.UTF_8);
113 when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class)))
114 .thenReturn(CompletableFuture.completedFuture(reply));
117 private void doReturnNullDataOnDump() {
118 when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class)))
119 .thenReturn(CompletableFuture.completedFuture(null));
122 private void doReturnEmptyDataOnDump() {
123 when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class)))
124 .thenReturn(CompletableFuture.completedFuture(new LispGetMapRequestItrRlocsReply()));
127 private void doThrowExceptionOnDump() {
128 when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class))).
129 thenReturn(new CompletableFuture<LispGetMapRequestItrRlocsReply>() {
131 public LispGetMapRequestItrRlocsReply get(final long l, final TimeUnit timeUnit)
132 throws InterruptedException, ExecutionException, TimeoutException {
133 throw new ExecutionException(new VppCallbackException("lispGetMapRequestItrRlocs", 1, -2));
138 private void verifyLispGetMapRequestItrRlocsInvokedOnce() {
139 verify(api, times(1)).lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class));
142 private void verifyInvalidDataCase(final ItrRemoteLocatorSetBuilder builder) {
143 assertNotNull(builder);
144 assertNull(builder.getRemoteLocatorSetName());
146 verifyLispGetMapRequestItrRlocsInvokedOnce();