5ab8e5996618b1a3dd77faef07e3a699d9e63507
[honeycomb.git] / lisp / lisp2vpp / src / test / java / io / fd / honeycomb / lisp / translate / read / RemoteMappingCustomizerTest.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.assertTrue;
6 import static org.mockito.Matchers.any;
7 import static org.mockito.Mockito.when;
8
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.rev160520.MapReplyAction;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.MappingId;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.RemoteMappings;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.RemoteMappingsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.RemoteMapping;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.RemoteMappingBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.RemoteMappingKey;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.remote.mapping.Eid;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.remote.mapping.locator.list.NegativeMapping;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.remote.mapping.locator.list.PositiveMapping;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.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.rev160520.eid.table.grouping.EidTable;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.VniTable;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.VniTableKey;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.VrfSubtable;
43 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
44
45 public class RemoteMappingCustomizerTest
46         extends ListReaderCustomizerTest<RemoteMapping, RemoteMappingKey, RemoteMappingBuilder>
47         implements EidTranslator {
48
49     private static final Ipv4
50             EID_ADDRESS = new Ipv4Builder().setIpv4(new Ipv4Address("192.168.2.1")).build();
51
52     @Mock
53     private EidMappingContext eidMappingContext;
54
55     private InstanceIdentifier<RemoteMapping> validId;
56
57     public RemoteMappingCustomizerTest() {
58         super(RemoteMapping.class, RemoteMappingsBuilder.class);
59     }
60
61     @Before
62     public void init() {
63
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")));
69         mockMappings();
70     }
71
72
73     private void mockDumpDataActionZero() {
74         LispEidTableDetailsReplyDump replyDump = new LispEidTableDetailsReplyDump();
75         LispEidTableDetails detail = new LispEidTableDetails();
76         detail.action = 0;
77         detail.authoritative = 1;
78         detail.context = 4;
79         detail.eid = new byte[]{-64, -88, 2, 1};
80         detail.eidPrefixLen = 32;
81         detail.isLocal = 0;
82         detail.locatorSetIndex = 1;
83         detail.ttl = 7;
84         detail.vni = 12;
85
86         replyDump.lispEidTableDetails = ImmutableList.of(detail);
87
88         when(api.lispEidTableDump(any())).thenReturn(future(replyDump));
89
90         LispLocatorDetailsReplyDump rlocs = new LispLocatorDetailsReplyDump();
91         rlocs.lispLocatorDetails = Collections.emptyList();
92         when(api.lispLocatorDump(any())).thenReturn(future(rlocs));
93     }
94
95     private void mockDumpDataActionOne() {
96         LispEidTableDetailsReplyDump replyDump = new LispEidTableDetailsReplyDump();
97         LispEidTableDetails detail = new LispEidTableDetails();
98         detail.action = 1;
99         detail.authoritative = 1;
100         detail.context = 4;
101         detail.eid = new byte[]{-64, -88, 2, 1};
102         detail.eidPrefixLen = 32;
103         detail.isLocal = 0;
104         detail.locatorSetIndex = 1;
105         detail.ttl = 7;
106         detail.vni = 12;
107
108         replyDump.lispEidTableDetails = ImmutableList.of(detail);
109
110         when(api.lispEidTableDump(any())).thenReturn(future(replyDump));
111     }
112
113     private void mockDumpDataActionZeroWithRemotes() {
114         LispEidTableDetailsReplyDump replyDump = new LispEidTableDetailsReplyDump();
115         LispEidTableDetails detail = new LispEidTableDetails();
116         detail.action = 0;
117         detail.authoritative = 1;
118         detail.context = 4;
119         detail.eid = new byte[]{-64, -88, 2, 1};
120         detail.eidPrefixLen = 32;
121         detail.isLocal = 0;
122         detail.locatorSetIndex = 1;
123         detail.ttl = 7;
124         detail.vni = 12;
125
126         replyDump.lispEidTableDetails = ImmutableList.of(detail);
127
128         when(api.lispEidTableDump(any())).thenReturn(future(replyDump));
129
130         LispLocatorDetailsReplyDump rlocs = new LispLocatorDetailsReplyDump();
131         LispLocatorDetails rloc = new LispLocatorDetails();
132         rloc.ipAddress = new byte[]{-64, -88, 2, 1};
133         rloc.isIpv6 = 0;
134         rloc.priority = 1;
135         rloc.weight = 2;
136
137         rlocs.lispLocatorDetails = ImmutableList.of(rloc);
138
139         when(api.lispLocatorDump(any())).thenReturn(future(rlocs));
140     }
141
142
143     private void mockMappings() {
144
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());
150     }
151
152     @Test
153     public void readCurrentAttributesNegativeMappingOne() throws Exception {
154         mockDumpDataActionOne();
155         RemoteMappingBuilder builder = new RemoteMappingBuilder();
156         getCustomizer().readCurrentAttributes(validId, builder, ctx);
157
158         RemoteMapping mapping = builder.build();
159
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());
167     }
168
169     @Test
170     public void readCurrentAttributesNegativeMappingZero() throws Exception {
171         mockDumpDataActionZero();
172         RemoteMappingBuilder builder = new RemoteMappingBuilder();
173         getCustomizer().readCurrentAttributes(validId, builder, ctx);
174
175         RemoteMapping mapping = builder.build();
176
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());
183     }
184
185     @Test
186     public void readCurrentAttributesPositiveMapping() throws Exception {
187         mockDumpDataActionZeroWithRemotes();
188         RemoteMappingBuilder builder = new RemoteMappingBuilder();
189         getCustomizer().readCurrentAttributes(validId, builder, ctx);
190
191         RemoteMapping mapping = builder.build();
192
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);
198
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());
205     }
206
207
208     @Test
209     public void getAllIds() throws Exception {
210         mockDumpDataActionOne();
211         final List<RemoteMappingKey> keys = getCustomizer().getAllIds(validId, ctx);
212
213         assertNotNull(keys);
214         assertEquals(1, keys.size());
215         assertEquals("remote-mapping", keys.get(0).getId().getValue());
216     }
217
218     @Override
219     protected ReaderCustomizer<RemoteMapping, RemoteMappingBuilder> initCustomizer() {
220         return new RemoteMappingCustomizer(api, eidMappingContext);
221     }
222 }