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.assertTrue;
6 import static org.mockito.Matchers.any;
7 import static org.mockito.Mockito.when;
9 import com.google.common.collect.ImmutableList;
10 import io.fd.honeycomb.lisp.context.util.EidMappingContext;
11 import io.fd.honeycomb.lisp.translate.util.EidTranslator;
12 import io.fd.honeycomb.translate.MappingContext;
13 import io.fd.honeycomb.translate.spi.read.ReaderCustomizer;
14 import io.fd.honeycomb.vpp.test.read.ListReaderCustomizerTest;
15 import io.fd.vpp.jvpp.core.dto.LispEidTableDetails;
16 import io.fd.vpp.jvpp.core.dto.LispEidTableDetailsReplyDump;
17 import io.fd.vpp.jvpp.core.dto.LispLocatorDetails;
18 import io.fd.vpp.jvpp.core.dto.LispLocatorDetailsReplyDump;
19 import java.util.Collections;
20 import java.util.List;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.mockito.Mock;
24 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.eid.mapping.context.rev160801.contexts.eid.mapping.context.mappings.mapping.EidBuilder;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.MapReplyAction;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.MappingId;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.RemoteMappings;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.RemoteMappingsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.RemoteMapping;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.RemoteMappingBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.RemoteMappingKey;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.remote.mapping.Eid;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.remote.mapping.locator.list.NegativeMapping;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.remote.mapping.locator.list.PositiveMapping;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.remote.mapping.locator.list.positive.mapping.rlocs.Locator;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.eid.table.grouping.EidTable;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.eid.table.grouping.eid.table.VniTable;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.eid.table.grouping.eid.table.VniTableKey;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.eid.table.grouping.eid.table.vni.table.VrfSubtable;
43 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
45 public class RemoteMappingCustomizerTest
46 extends ListReaderCustomizerTest<RemoteMapping, RemoteMappingKey, RemoteMappingBuilder>
47 implements EidTranslator {
49 private static final Ipv4
50 EID_ADDRESS = new Ipv4Builder().setIpv4(new Ipv4Address("192.168.2.1")).build();
53 private EidMappingContext eidMappingContext;
55 private InstanceIdentifier<RemoteMapping> validId;
57 public RemoteMappingCustomizerTest() {
58 super(RemoteMapping.class, RemoteMappingsBuilder.class);
64 validId = InstanceIdentifier.create(EidTable.class)
65 .child(VniTable.class, new VniTableKey(12L))
66 .child(VrfSubtable.class)
67 .child(RemoteMappings.class)
68 .child(RemoteMapping.class, new RemoteMappingKey(new MappingId("remote-mapping")));
73 private void mockDumpDataActionZero() {
74 LispEidTableDetailsReplyDump replyDump = new LispEidTableDetailsReplyDump();
75 LispEidTableDetails detail = new LispEidTableDetails();
77 detail.authoritative = 1;
79 detail.eid = new byte[]{-64, -88, 2, 1};
80 detail.eidPrefixLen = 32;
82 detail.locatorSetIndex = 1;
86 replyDump.lispEidTableDetails = ImmutableList.of(detail);
88 when(api.lispEidTableDump(any())).thenReturn(future(replyDump));
90 LispLocatorDetailsReplyDump rlocs = new LispLocatorDetailsReplyDump();
91 rlocs.lispLocatorDetails = Collections.emptyList();
92 when(api.lispLocatorDump(any())).thenReturn(future(rlocs));
95 private void mockDumpDataActionOne() {
96 LispEidTableDetailsReplyDump replyDump = new LispEidTableDetailsReplyDump();
97 LispEidTableDetails detail = new LispEidTableDetails();
99 detail.authoritative = 1;
101 detail.eid = new byte[]{-64, -88, 2, 1};
102 detail.eidPrefixLen = 32;
104 detail.locatorSetIndex = 1;
108 replyDump.lispEidTableDetails = ImmutableList.of(detail);
110 when(api.lispEidTableDump(any())).thenReturn(future(replyDump));
113 private void mockDumpDataActionZeroWithRemotes() {
114 LispEidTableDetailsReplyDump replyDump = new LispEidTableDetailsReplyDump();
115 LispEidTableDetails detail = new LispEidTableDetails();
117 detail.authoritative = 1;
119 detail.eid = new byte[]{-64, -88, 2, 1};
120 detail.eidPrefixLen = 32;
122 detail.locatorSetIndex = 1;
126 replyDump.lispEidTableDetails = ImmutableList.of(detail);
128 when(api.lispEidTableDump(any())).thenReturn(future(replyDump));
130 LispLocatorDetailsReplyDump rlocs = new LispLocatorDetailsReplyDump();
131 LispLocatorDetails rloc = new LispLocatorDetails();
132 rloc.ipAddress = new byte[]{-64, -88, 2, 1};
137 rlocs.lispLocatorDetails = ImmutableList.of(rloc);
139 when(api.lispLocatorDump(any())).thenReturn(future(rlocs));
143 private void mockMappings() {
145 when(eidMappingContext.getId(any(Eid.class), any(MappingContext.class)))
146 .thenReturn(new MappingId("remote-mapping"));
147 when(eidMappingContext.containsEid(new MappingId("remote-mapping"), mappingContext)).thenReturn(true);
148 when(eidMappingContext.getEid(new MappingId("remote-mapping"), mappingContext))
149 .thenReturn(new EidBuilder().setAddress(EID_ADDRESS).build());
153 public void readCurrentAttributesNegativeMappingOne() throws Exception {
154 mockDumpDataActionOne();
155 RemoteMappingBuilder builder = new RemoteMappingBuilder();
156 getCustomizer().readCurrentAttributes(validId, builder, ctx);
158 RemoteMapping mapping = builder.build();
160 assertNotNull(mapping);
161 assertEquals(true, compareAddresses(EID_ADDRESS, mapping.getEid().getAddress()));
162 assertEquals(true, mapping.getAuthoritative().isA());
163 assertEquals(7L, mapping.getTtl().longValue());
164 assertTrue(mapping.getLocatorList() instanceof NegativeMapping);
165 assertEquals(MapReplyAction.NativelyForward,
166 ((NegativeMapping) mapping.getLocatorList()).getMapReply().getMapReplyAction());
170 public void readCurrentAttributesNegativeMappingZero() throws Exception {
171 mockDumpDataActionZero();
172 RemoteMappingBuilder builder = new RemoteMappingBuilder();
173 getCustomizer().readCurrentAttributes(validId, builder, ctx);
175 RemoteMapping mapping = builder.build();
177 assertNotNull(mapping);
178 assertEquals(true, compareAddresses(EID_ADDRESS, mapping.getEid().getAddress()));
179 assertEquals(true, mapping.getAuthoritative().isA());
180 assertEquals(7L, mapping.getTtl().longValue());
181 assertEquals(MapReplyAction.NoAction,
182 ((NegativeMapping) mapping.getLocatorList()).getMapReply().getMapReplyAction());
186 public void readCurrentAttributesPositiveMapping() throws Exception {
187 mockDumpDataActionZeroWithRemotes();
188 RemoteMappingBuilder builder = new RemoteMappingBuilder();
189 getCustomizer().readCurrentAttributes(validId, builder, ctx);
191 RemoteMapping mapping = builder.build();
193 assertNotNull(mapping);
194 assertEquals(true, compareAddresses(EID_ADDRESS, mapping.getEid().getAddress()));
195 assertEquals(true, mapping.getAuthoritative().isA());
196 assertEquals(7L, mapping.getTtl().longValue());
197 assertTrue(mapping.getLocatorList() instanceof PositiveMapping);
199 final List<Locator> locators = ((PositiveMapping) mapping.getLocatorList()).getRlocs().getLocator();
200 assertEquals(1, locators.size());
201 final Locator locator = locators.get(0);
202 assertEquals("192.168.2.1", locator.getAddress().getIpv4Address().getValue());
203 assertEquals(1, locator.getPriority().shortValue());
204 assertEquals(2, locator.getWeight().shortValue());
209 public void getAllIds() throws Exception {
210 mockDumpDataActionOne();
211 final List<RemoteMappingKey> keys = getCustomizer().getAllIds(validId, ctx);
214 assertEquals(1, keys.size());
215 assertEquals("remote-mapping", keys.get(0).getId().getValue());
219 protected ReaderCustomizer<RemoteMapping, RemoteMappingBuilder> initCustomizer() {
220 return new RemoteMappingCustomizer(api, eidMappingContext);