HONEYCOMB-154: update revison of models that changed since 16.09
[honeycomb.git] / lisp / lisp2vpp / src / test / java / io / fd / honeycomb / lisp / translate / read / ItrRemoteLocatorSetCustomizerTest.java
1 package io.fd.honeycomb.lisp.translate.read;
2
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;
12
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.rev161214.itr.remote.locator.sets.grouping.ItrRemoteLocatorSet;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.itr.remote.locator.sets.grouping.ItrRemoteLocatorSetBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.lisp.feature.data.grouping.LispFeatureDataBuilder;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
30
31
32 public class ItrRemoteLocatorSetCustomizerTest
33         extends ReaderCustomizerTest<ItrRemoteLocatorSet, ItrRemoteLocatorSetBuilder> {
34
35     private static final String EXPECTED_LOCATOR_SET_NAME = "loc-set";
36
37     private InstanceIdentifier<ItrRemoteLocatorSet> validId;
38     private ItrRemoteLocatorSetBuilder builder;
39
40     public ItrRemoteLocatorSetCustomizerTest() {
41         super(ItrRemoteLocatorSet.class, LispFeatureDataBuilder.class);
42     }
43
44     @Before
45     public void setUp() throws Exception {
46         validId = InstanceIdentifier.create(ItrRemoteLocatorSet.class);
47         builder = new ItrRemoteLocatorSetBuilder();
48     }
49
50     @Override
51     protected ReaderCustomizer<ItrRemoteLocatorSet, ItrRemoteLocatorSetBuilder> initCustomizer() {
52         return new ItrRemoteLocatorSetCustomizer(api);
53     }
54
55     @Test
56     public void getBuilder() throws Exception {
57         final ItrRemoteLocatorSetBuilder itrRemoteLocatorSetBuilder = getCustomizer().getBuilder(validId);
58
59         assertNotNull(itrRemoteLocatorSetBuilder);
60         assertNull(itrRemoteLocatorSetBuilder.getRemoteLocatorSetName());
61     }
62
63     @Test
64     public void readCurrentAttributesSuccess() throws Exception {
65         doReturnValidDataOnDump();
66
67         getCustomizer().readCurrentAttributes(validId, builder, ctx);
68
69         assertNotNull(builder);
70         assertEquals(EXPECTED_LOCATOR_SET_NAME, builder.getRemoteLocatorSetName());
71         verifyLispGetMapRequestItrRlocsInvokedOnce();
72     }
73
74     @Test
75     public void readCurrentAttributesEmptyData() throws Exception {
76         doReturnEmptyDataOnDump();
77         getCustomizer().readCurrentAttributes(validId, builder, ctx);
78         verifyInvalidDataCase(builder);
79     }
80
81     @Test
82     public void readCurrentAttributesFailedCallHalted() {
83         doThrowExceptionOnDump();
84         try {
85             getCustomizer().readCurrentAttributes(validId, builder, ctx);
86         } catch (ReadFailedException e) {
87             assertTrue(e.getCause() instanceof VppCallbackException);
88             assertNotNull(builder);
89             assertNull(builder.getRemoteLocatorSetName());
90
91             verifyLispGetMapRequestItrRlocsInvokedOnce();
92             return;
93         }
94
95         fail("Test should have thrown exception");
96     }
97
98     @Test
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);
103
104         assertNotNull(builder);
105         assertEquals(set, builder.getItrRemoteLocatorSet());
106     }
107
108
109     private void doReturnValidDataOnDump() {
110         LispGetMapRequestItrRlocsReply reply = new LispGetMapRequestItrRlocsReply();
111         reply.locatorSetName = EXPECTED_LOCATOR_SET_NAME.getBytes(StandardCharsets.UTF_8);
112
113         when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class)))
114                 .thenReturn(CompletableFuture.completedFuture(reply));
115     }
116
117     private void doReturnNullDataOnDump() {
118         when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class)))
119                 .thenReturn(CompletableFuture.completedFuture(null));
120     }
121
122     private void doReturnEmptyDataOnDump() {
123         when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class)))
124                 .thenReturn(CompletableFuture.completedFuture(new LispGetMapRequestItrRlocsReply()));
125     }
126
127     private void doThrowExceptionOnDump() {
128         when(api.lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class))).
129                 thenReturn(new CompletableFuture<LispGetMapRequestItrRlocsReply>() {
130                     @Override
131                     public LispGetMapRequestItrRlocsReply get(final long l, final TimeUnit timeUnit)
132                             throws InterruptedException, ExecutionException, TimeoutException {
133                         throw new ExecutionException(new VppCallbackException("lispGetMapRequestItrRlocs", 1, -2));
134                     }
135                 });
136     }
137
138     private void verifyLispGetMapRequestItrRlocsInvokedOnce() {
139         verify(api, times(1)).lispGetMapRequestItrRlocs(any(LispGetMapRequestItrRlocs.class));
140     }
141
142     private void verifyInvalidDataCase(final ItrRemoteLocatorSetBuilder builder) {
143         assertNotNull(builder);
144         assertNull(builder.getRemoteLocatorSetName());
145
146         verifyLispGetMapRequestItrRlocsInvokedOnce();
147     }
148 }