1 package io.fd.honeycomb.v3po.translate.v3po.interfaces.ip;
3 import static org.junit.Assert.assertEquals;
4 import static org.mockito.Mockito.mock;
5 import static org.mockito.Mockito.times;
6 import static org.mockito.Mockito.verify;
7 import static org.mockito.Mockito.when;
9 import com.google.common.base.Optional;
10 import io.fd.honeycomb.v3po.translate.MappingContext;
11 import io.fd.honeycomb.v3po.translate.v3po.util.NamingContext;
12 import io.fd.honeycomb.v3po.translate.write.WriteContext;
13 import io.fd.honeycomb.v3po.translate.write.WriteFailedException;
14 import java.util.Arrays;
15 import java.util.List;
16 import java.util.concurrent.CompletableFuture;
17 import org.junit.Test;
18 import org.mockito.ArgumentCaptor;
19 import org.mockito.Mockito;
20 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.mappings.Mapping;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.Interface1;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.Ipv4;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.Ipv4Builder;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.Address;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.AddressBuilder;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.subnet.PrefixLength;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.subnet.PrefixLengthBuilder;
33 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
34 import org.openvpp.jvpp.dto.SwInterfaceAddDelAddress;
35 import org.openvpp.jvpp.dto.SwInterfaceAddDelAddressReply;
36 import org.openvpp.jvpp.future.FutureJVpp;
38 public class AddressCustomizerTest {
41 public void testWriteCurrentAttributes() throws WriteFailedException {
43 ArgumentCaptor<SwInterfaceAddDelAddress> requestCaptor = ArgumentCaptor.forClass(SwInterfaceAddDelAddress.class);
45 FutureJVpp jvpp = mock(FutureJVpp.class);
46 WriteContext context = mock(WriteContext.class);
47 MappingContext mappingContext = mock(MappingContext.class);
48 NamingContext namingContext = new NamingContext("prefix", "instance");
50 namingContext.addName(5, "parent", mappingContext);
52 InterfaceKey key = new InterfaceKey("local0");
54 InstanceIdentifier<Address> id = InstanceIdentifier.builder(Interfaces.class)
55 .child(Interface.class,key)
56 .augmentation(Interface1.class)
61 Mapping mapping = mock(Mapping.class);
63 Ipv4AddressNoZone noZoneIp = new Ipv4AddressNoZone(new Ipv4Address("192.168.2.1"));
65 PrefixLength length = new PrefixLengthBuilder().setPrefixLength(new Integer(24).shortValue()).build();
66 Address data = new AddressBuilder().setIp(noZoneIp).setSubnet(length).build();
68 CompletableFuture<SwInterfaceAddDelAddressReply> future = new CompletableFuture<>();
69 future.complete(new SwInterfaceAddDelAddressReply());
71 when(context.getMappingContext()).thenReturn(mappingContext);
72 when(mapping.getIndex()).thenReturn(5);
73 when(mapping.getName()).thenReturn("local0");
74 when(mappingContext.read(Mockito.any())).thenReturn(Optional.fromNullable(mapping));
75 when(jvpp.swInterfaceAddDelAddress(Mockito.any(SwInterfaceAddDelAddress.class))).thenReturn(future);
77 new AddressCustomizer(jvpp, namingContext).writeCurrentAttributes(id, data, context);
79 verify(jvpp, times(1)).swInterfaceAddDelAddress(requestCaptor.capture());
81 SwInterfaceAddDelAddress request = requestCaptor.getValue();
83 assertEquals(0, request.isIpv6);
84 assertEquals(1, request.isAdd);
85 assertEquals(0, request.delAll);
86 assertEquals(5, request.swIfIndex);
87 assertEquals(24, request.addressLength);
88 assertEquals(true,Arrays.equals(new byte[]{-64, -88, 2, 1}, request.address));
92 public void testDeleteCurrentAttributes() throws WriteFailedException {
93 ArgumentCaptor<SwInterfaceAddDelAddress> requestCaptor = ArgumentCaptor.forClass(SwInterfaceAddDelAddress.class);
95 FutureJVpp jvpp = mock(FutureJVpp.class);
96 WriteContext context = mock(WriteContext.class);
97 MappingContext mappingContext = mock(MappingContext.class);
98 NamingContext namingContext = new NamingContext("prefix", "instance");
100 namingContext.addName(5, "parent", mappingContext);
102 InterfaceKey key = new InterfaceKey("local0");
104 InstanceIdentifier<Address> id = InstanceIdentifier.builder(Interfaces.class)
105 .child(Interface.class,key)
106 .augmentation(Interface1.class)
108 .child(Address.class)
111 Mapping mapping = mock(Mapping.class);
113 Ipv4AddressNoZone noZoneIp = new Ipv4AddressNoZone(new Ipv4Address("192.168.2.1"));
115 PrefixLength length = new PrefixLengthBuilder().setPrefixLength(new Integer(24).shortValue()).build();
116 Address data = new AddressBuilder().setIp(noZoneIp).setSubnet(length).build();
118 CompletableFuture<SwInterfaceAddDelAddressReply> future = new CompletableFuture<>();
119 future.complete(new SwInterfaceAddDelAddressReply());
121 when(context.getMappingContext()).thenReturn(mappingContext);
122 when(mapping.getIndex()).thenReturn(5);
123 when(mapping.getName()).thenReturn("local0");
124 when(mappingContext.read(Mockito.any())).thenReturn(Optional.fromNullable(mapping));
125 when(jvpp.swInterfaceAddDelAddress(Mockito.any(SwInterfaceAddDelAddress.class))).thenReturn(future);
127 new AddressCustomizer(jvpp, namingContext).deleteCurrentAttributes(id, data, context);
129 verify(jvpp, times(1)).swInterfaceAddDelAddress(requestCaptor.capture());
131 SwInterfaceAddDelAddress request = requestCaptor.getValue();
133 assertEquals(0, request.isIpv6);
134 assertEquals(0, request.isAdd);
135 assertEquals(0, request.delAll);
136 assertEquals(5, request.swIfIndex);
137 assertEquals(24, request.addressLength);
138 assertEquals(true,Arrays.equals(new byte[]{-64, -88, 2, 1}, request.address));
142 public void testExtract() {
143 Address address = new AddressBuilder().build();
144 Ipv4 parentData = new Ipv4Builder().setAddress(Arrays.asList(address)).build();
146 Optional<List<Address>> addressesOptional = new AddressCustomizer(mock(FutureJVpp.class),null).extract(null, parentData);
148 assertEquals(true,addressesOptional.isPresent());
149 assertEquals(1,addressesOptional.get().size());
150 assertEquals(true,addressesOptional.get().contains(address));