HONEYCOMB-145 - Utility Class Refactoring
[honeycomb.git] / lisp / lisp2vpp / src / test / java / io / fd / honeycomb / lisp / translate / write / LocalMappingCustomizerTest.java
1 /*
2  * Copyright (c) 2015 Cisco and/or its affiliates.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package io.fd.honeycomb.lisp.translate.write;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertNotNull;
21 import static org.mockito.Matchers.any;
22 import static org.mockito.Mockito.mock;
23 import static org.mockito.Mockito.times;
24 import static org.mockito.Mockito.verify;
25 import static org.mockito.Mockito.when;
26
27 import io.fd.honeycomb.lisp.context.util.EidMappingContext;
28 import io.fd.honeycomb.translate.v3po.util.ByteDataTranslator;
29 import io.fd.honeycomb.translate.v3po.util.Ipv4Translator;
30 import io.fd.honeycomb.translate.write.WriteFailedException;
31 import io.fd.honeycomb.vpp.test.write.WriterCustomizerTest;
32 import java.util.concurrent.ExecutionException;
33 import org.junit.Test;
34 import org.mockito.ArgumentCaptor;
35 import org.mockito.Captor;
36 import org.mockito.Mockito;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.Lisp;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.MappingId;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.EidTable;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.VniTable;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.VniTableKey;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.LocalMappings;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.local.mappings.LocalMapping;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.local.mappings.LocalMappingBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.local.mappings.LocalMappingKey;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.local.mappings.local.mapping.Eid;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.local.mappings.local.mapping.EidBuilder;
50 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
51 import org.openvpp.jvpp.core.dto.LispAddDelLocalEid;
52 import org.openvpp.jvpp.core.dto.LispAddDelLocalEidReply;
53 import org.openvpp.jvpp.core.future.FutureJVppCore;
54
55
56 public class LocalMappingCustomizerTest extends WriterCustomizerTest implements ByteDataTranslator, Ipv4Translator {
57
58     @Captor
59     private ArgumentCaptor<LispAddDelLocalEid> mappingCaptor;
60
61     private MappingId mappingId;
62     private InstanceIdentifier<LocalMapping> id;
63     private LocalMapping mapping;
64     private LocalMappingCustomizer customizer;
65     private EidMappingContext localMappingContext;
66
67     @Override
68     public void setUp() {
69         final Eid
70                 eid = new EidBuilder().setAddress(
71                 new Ipv4Builder().setIpv4(
72                         new Ipv4Address("192.168.2.1"))
73                         .build())
74                 .build();
75
76
77         mappingId = new MappingId("REMOTE");
78         final LocalMappingKey key = new LocalMappingKey(mappingId);
79         localMappingContext = new EidMappingContext("local");
80
81         mapping = new LocalMappingBuilder()
82                 .setEid(eid)
83                 .setLocatorSet("Locator")
84                 .build();
85
86         id = InstanceIdentifier.builder(Lisp.class)
87                 .child(EidTable.class)
88                 .child(VniTable.class, new VniTableKey(25L))
89                 .child(LocalMappings.class)
90                 .child(LocalMapping.class, new LocalMappingKey(new MappingId("local")))
91                 .build();
92
93         customizer = new LocalMappingCustomizer(api, localMappingContext);
94
95         when(api.lispAddDelLocalEid(any(LispAddDelLocalEid.class))).thenReturn(future(new LispAddDelLocalEidReply()));
96         when(mappingContext.read(Mockito.any())).thenReturn(com.google.common.base.Optional
97                 .of(new LocalMappingBuilder().setKey(key).setId(mappingId).setEid(eid).build()));
98     }
99
100
101     @Test(expected = NullPointerException.class)
102     public void testWriteCurrentAttributesNullData() throws WriteFailedException {
103         customizer.writeCurrentAttributes(null, null, writeContext);
104     }
105
106     @Test(expected = NullPointerException.class)
107     public void testWriteCurrentAttributesNullEid() throws WriteFailedException {
108
109         LocalMapping mapping = mock(LocalMapping.class);
110         when(mapping.getEid()).thenReturn(null);
111         when(mapping.getLocatorSet()).thenReturn("Locator");
112
113         new LocalMappingCustomizer(mock(FutureJVppCore.class), localMappingContext)
114                 .writeCurrentAttributes(null, mapping, writeContext);
115     }
116
117     @Test(expected = NullPointerException.class)
118     public void testWriteCurrentAttributesNullLocator() throws WriteFailedException {
119
120         LocalMapping mapping = mock(LocalMapping.class);
121         when(mapping.getEid()).thenReturn(mock(Eid.class));
122         when(mapping.getLocatorSet()).thenReturn(null);
123
124         customizer.writeCurrentAttributes(null, mapping, writeContext);
125     }
126
127
128     @Test
129     public void testWriteCurrentAttributes() throws WriteFailedException, InterruptedException, ExecutionException {
130         //to simulate no mapping
131         when(mappingContext.read(Mockito.any())).thenReturn(com.google.common.base.Optional.absent());
132
133         customizer.writeCurrentAttributes(id, mapping, writeContext);
134
135         verify(api, times(1)).lispAddDelLocalEid(mappingCaptor.capture());
136
137         LispAddDelLocalEid request = mappingCaptor.getValue();
138
139         assertNotNull(request);
140         assertEquals("Locator", new String(request.locatorSetName));
141         assertEquals("1.2.168.192", arrayToIpv4AddressNoZone(request.eid).getValue());
142         assertEquals(0, request.eidType);
143         assertEquals(1, request.isAdd);
144         assertEquals(25, request.vni);
145         assertEquals("Locator", toString(request.locatorSetName));
146     }
147
148     @Test(expected = UnsupportedOperationException.class)
149     public void testUpdateCurrentAttributes() throws WriteFailedException {
150         new LocalMappingCustomizer(mock(FutureJVppCore.class), localMappingContext)
151                 .updateCurrentAttributes(null, null, null, writeContext);
152     }
153
154     @Test
155     public void testDeleteCurrentAttributes() throws WriteFailedException, InterruptedException, ExecutionException {
156         customizer.deleteCurrentAttributes(id, mapping, writeContext);
157
158         verify(api, times(1)).lispAddDelLocalEid(mappingCaptor.capture());
159
160         LispAddDelLocalEid request = mappingCaptor.getValue();
161
162         assertNotNull(request);
163         assertEquals("Locator", new String(request.locatorSetName));
164         assertEquals("1.2.168.192", arrayToIpv4AddressNoZone(request.eid).getValue());
165         assertEquals(0, request.eidType);
166         assertEquals(0, request.isAdd);
167         assertEquals(25, request.vni);
168         assertEquals("Locator", toString(request.locatorSetName));
169     }
170 }