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.translate.util.read.cache.exceptions.execution.i.DumpCallFailedException;
16 import io.fd.honeycomb.vpp.test.read.ReaderCustomizerTest;
17 import io.fd.vpp.jvpp.VppCallbackException;
18 import io.fd.vpp.jvpp.core.dto.LispGetMapRequestItrRlocs;
19 import io.fd.vpp.jvpp.core.dto.LispGetMapRequestItrRlocsReply;
20 import java.nio.charset.StandardCharsets;
21 import java.util.concurrent.CompletableFuture;
22 import java.util.concurrent.ExecutionException;
23 import java.util.concurrent.TimeUnit;
24 import java.util.concurrent.TimeoutException;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.itr.remote.locator.sets.grouping.ItrRemoteLocatorSet;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.itr.remote.locator.sets.grouping.ItrRemoteLocatorSetBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.lisp.feature.data.grouping.LispFeatureDataBuilder;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
33 public class ItrRemoteLocatorSetCustomizerTest
34 extends ReaderCustomizerTest<ItrRemoteLocatorSet, ItrRemoteLocatorSetBuilder> {
36 private static final String EXPECTED_LOCATOR_SET_NAME = "loc-set";
38 private InstanceIdentifier<ItrRemoteLocatorSet> validId;
39 private ItrRemoteLocatorSetBuilder builder;
41 public ItrRemoteLocatorSetCustomizerTest() {
42 super(ItrRemoteLocatorSet.class, LispFeatureDataBuilder.class);
46 public void setUp() throws Exception {
47 validId = InstanceIdentifier.create(ItrRemoteLocatorSet.class);
48 builder = new ItrRemoteLocatorSetBuilder();
52 protected ReaderCustomizer<ItrRemoteLocatorSet, ItrRemoteLocatorSetBuilder> initCustomizer() {
53 return new ItrRemoteLocatorSetCustomizer(api);
57 public void getBuilder() throws Exception {
58 final ItrRemoteLocatorSetBuilder itrRemoteLocatorSetBuilder = getCustomizer().getBuilder(validId);
60 assertNotNull(itrRemoteLocatorSetBuilder);
61 assertNull(itrRemoteLocatorSetBuilder.getRemoteLocatorSetName());
65 public void readCurrentAttributesSuccess() throws Exception {
66 doReturnValidDataOnDump();
68 getCustomizer().readCurrentAttributes(validId, builder, ctx);
70 assertNotNull(builder);
71 assertEquals(EXPECTED_LOCATOR_SET_NAME, builder.getRemoteLocatorSetName());
72 verifyLispGetMapRequestItrRlocsInvokedOnce();
76 public void readCurrentAttributesEmptyData() throws Exception {
77 doReturnEmptyDataOnDump();
78 getCustomizer().readCurrentAttributes(validId, builder, ctx);
79 verifyInvalidDataCase(builder);
83 public void readCurrentAttributesFailedCallHalted() {
84 doThrowExceptionOnDump();
86 getCustomizer().readCurrentAttributes(validId, builder, ctx);
87 } catch (ReadFailedException e) {
88 assertTrue(e.getCause() instanceof DumpCallFailedException);
89 assertTrue(e.getCause().getCause() instanceof VppCallbackException);
90 assertNotNull(builder);
91 assertNull(builder.getRemoteLocatorSetName());
93 verifyLispGetMapRequestItrRlocsInvokedOnce();
97 fail("Test should have thrown exception");
101 public void merge() throws Exception {
102 LispFeatureDataBuilder builder = new LispFeatureDataBuilder();
103 ItrRemoteLocatorSet set = new ItrRemoteLocatorSetBuilder().setRemoteLocatorSetName("loc-set").build();
104 getCustomizer().merge(builder, set);
106 assertNotNull(builder);
107 assertEquals(set, builder.getItrRemoteLocatorSet());
111 private void doReturnValidDataOnDump() {
112 LispGetMapRequestItrRlocsReply reply = new LispGetMapRequestItrRlocsReply();
113 reply.locatorSetName = EXPECTED_LOCATOR_SET_NAME.getBytes(StandardCharsets.UTF_8);
115 when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class)))
116 .thenReturn(CompletableFuture.completedFuture(reply));
119 private void doReturnNullDataOnDump() {
120 when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class)))
121 .thenReturn(CompletableFuture.completedFuture(null));
124 private void doReturnEmptyDataOnDump() {
125 when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class)))
126 .thenReturn(CompletableFuture.completedFuture(new LispGetMapRequestItrRlocsReply()));
129 private void doThrowExceptionOnDump() {
130 when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class))).
131 thenReturn(new CompletableFuture<LispGetMapRequestItrRlocsReply>() {
133 public LispGetMapRequestItrRlocsReply get(final long l, final TimeUnit timeUnit)
134 throws InterruptedException, ExecutionException, TimeoutException {
135 throw new ExecutionException(new VppCallbackException("lispGetMapRequestItrRlocs", 1, -2));
140 private void verifyLispGetMapRequestItrRlocsInvokedOnce() {
141 verify(api, times(1)).lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class));
144 private void verifyInvalidDataCase(final ItrRemoteLocatorSetBuilder builder) {
145 assertNotNull(builder);
146 assertNull(builder.getRemoteLocatorSetName());
148 verifyLispGetMapRequestItrRlocsInvokedOnce();