f25099bafb50f751d503a9ccf0e5844765da37e8
[honeycomb.git] / lisp / lisp2vpp / src / test / java / io / fd / honeycomb / lisp / translate / read / dump / executor / MappingsDumpExecutorTest.java
1 package io.fd.honeycomb.lisp.translate.read.dump.executor;
2
3 import static io.fd.honeycomb.lisp.translate.read.dump.executor.params.MappingsDumpParams.EidType;
4 import static io.fd.honeycomb.lisp.translate.read.dump.executor.params.MappingsDumpParams.FilterType;
5 import static io.fd.honeycomb.lisp.translate.read.dump.executor.params.MappingsDumpParams.MappingsDumpParamsBuilder;
6 import static io.fd.honeycomb.lisp.translate.read.dump.executor.params.MappingsDumpParams.QuantityType;
7 import static org.junit.Assert.assertArrayEquals;
8 import static org.junit.Assert.assertEquals;
9 import static org.junit.Assert.assertNotNull;
10 import static org.junit.Assert.assertTrue;
11 import static org.junit.Assert.fail;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Mockito.times;
14 import static org.mockito.Mockito.verify;
15
16 import com.google.common.collect.ImmutableList;
17 import io.fd.honeycomb.lisp.translate.read.dump.executor.params.MappingsDumpParams;
18 import io.fd.honeycomb.translate.read.ReadFailedException;
19 import io.fd.honeycomb.vpp.test.read.JvppDumpExecutorTest;
20 import io.fd.vpp.jvpp.VppCallbackException;
21 import io.fd.vpp.jvpp.core.dto.LispEidTableDetails;
22 import io.fd.vpp.jvpp.core.dto.LispEidTableDetailsReplyDump;
23 import io.fd.vpp.jvpp.core.dto.LispEidTableDump;
24 import java.util.concurrent.TimeoutException;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.ArgumentCaptor;
28 import org.mockito.Captor;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.local.mappings.LocalMapping;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31
32 public class MappingsDumpExecutorTest extends JvppDumpExecutorTest<MappingsDumpExecutor> {
33
34     private static final byte[] EID = {-64, -88, 2, 1};
35
36     @Captor
37     private ArgumentCaptor<LispEidTableDump> requestCaptor;
38
39     private InstanceIdentifier identifier;
40
41     private LispEidTableDetailsReplyDump validDump;
42     private MappingsDumpParams emptyParams;
43     private MappingsDumpParams validParams;
44
45     @Before
46     public void init() {
47         identifier = InstanceIdentifier.create(LocalMapping.class);
48         validDump = new LispEidTableDetailsReplyDump();
49
50         LispEidTableDetails detail = new LispEidTableDetails();
51         detail.action = 0;
52         detail.authoritative = 1;
53         detail.context = 4;
54         detail.eid = new byte[]{-64, -88, 2, 1};
55         detail.eidPrefixLen = 32;
56         detail.isLocal = 1;
57         detail.locatorSetIndex = 2;
58         detail.ttl = 7;
59         detail.vni = 2;
60
61         validDump.lispEidTableDetails = ImmutableList.of(detail);
62
63         emptyParams = MappingsDumpParamsBuilder.newInstance().build();
64         validParams =
65                 MappingsDumpParamsBuilder.newInstance().setVni(2).setPrefixLength((byte) 32).setEidSet(QuantityType.ALL)
66                         .setEid(EID)
67                         .setEidType(EidType.IPV4).setFilter(FilterType.LOCAL).build();
68     }
69
70     @Test
71     public void testExecuteDumpTimeout() throws Exception {
72         doThrowTimeoutExceptionWhen().lispEidTableDump(any());
73         try {
74             getExecutor().executeDump(identifier, emptyParams);
75         } catch (Exception e) {
76             assertTrue(e instanceof ReadFailedException);
77             assertTrue(e.getCause() instanceof TimeoutException);
78             assertEquals(identifier, ((ReadFailedException) e).getFailedId());
79             return;
80         }
81         fail("Test should have thrown exception");
82     }
83
84     @Test
85     public void testExecuteDumpHalted() throws Exception {
86         doThrowFailExceptionWhen().lispEidTableDump(any());
87         try {
88             getExecutor().executeDump(identifier, emptyParams);
89         } catch (ReadFailedException e) {
90             assertTrue(e.getCause() instanceof VppCallbackException);
91             assertEquals(identifier, ((ReadFailedException) e).getFailedId());
92             return;
93         }
94         fail("Test should have thrown ReadFailedException");
95     }
96
97     @Test
98     public void testExecuteDump() throws ReadFailedException {
99         doReturnResponseWhen(validDump).lispEidTableDump(any());
100         final LispEidTableDetailsReplyDump reply = getExecutor().executeDump(identifier, validParams);
101         verify(api, times(1)).lispEidTableDump(requestCaptor.capture());
102
103         final LispEidTableDump request = requestCaptor.getValue();
104         assertNotNull(request);
105         assertEquals(2, request.vni);
106         assertEquals(QuantityType.ALL.getValue(), request.eidSet);
107         assertArrayEquals(EID, request.eid);
108         assertEquals(EidType.IPV4.getValue(), request.eidType);
109         assertEquals(FilterType.LOCAL.getValue(), request.filter);
110         assertEquals(32, request.prefixLength);
111
112         assertNotNull(reply);
113         assertEquals(1, reply.lispEidTableDetails.size());
114
115         final LispEidTableDetails detail = reply.lispEidTableDetails.get(0);
116
117         assertNotNull(detail);
118         assertEquals(0, detail.action);
119         assertEquals(1, detail.authoritative);
120         assertEquals(4, detail.context);
121         assertArrayEquals(EID, detail.eid);
122         assertEquals(32, detail.eidPrefixLen);
123         assertEquals(1, detail.isLocal);
124         assertEquals(2, detail.locatorSetIndex);
125         assertEquals(7, detail.ttl);
126         assertEquals(2, detail.vni);
127     }
128
129     @Override
130     protected MappingsDumpExecutor initExecutor() {
131         return new MappingsDumpExecutor(api);
132     }
133 }