9924e316dd2c50b74fc2c468fbe71c377657c8a4
[hc2vpp.git] /
1 package io.fd.honeycomb.v3po.translate.v3po.interfaces.ip;
2
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;
8
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;
37
38 public class AddressCustomizerTest {
39
40     @Test
41     public void testWriteCurrentAttributes() throws WriteFailedException {
42
43         ArgumentCaptor<SwInterfaceAddDelAddress> requestCaptor = ArgumentCaptor.forClass(SwInterfaceAddDelAddress.class);
44
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");
49
50         namingContext.addName(5, "parent", mappingContext);
51
52         InterfaceKey key = new InterfaceKey("local0");
53
54         InstanceIdentifier<Address> id = InstanceIdentifier.builder(Interfaces.class)
55                 .child(Interface.class,key)
56                 .augmentation(Interface1.class)
57                 .child(Ipv4.class)
58                 .child(Address.class)
59                 .build();
60
61         Mapping mapping = mock(Mapping.class);
62
63         Ipv4AddressNoZone noZoneIp = new Ipv4AddressNoZone(new Ipv4Address("192.168.2.1"));
64
65         PrefixLength length = new PrefixLengthBuilder().setPrefixLength(new Integer(24).shortValue()).build();
66         Address data = new AddressBuilder().setIp(noZoneIp).setSubnet(length).build();
67
68         CompletableFuture<SwInterfaceAddDelAddressReply> future = new CompletableFuture<>();
69         future.complete(new SwInterfaceAddDelAddressReply());
70
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);
76
77         new AddressCustomizer(jvpp, namingContext).writeCurrentAttributes(id, data, context);
78
79         verify(jvpp, times(1)).swInterfaceAddDelAddress(requestCaptor.capture());
80
81         SwInterfaceAddDelAddress request = requestCaptor.getValue();
82
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));
89     }
90
91     @Test
92     public void testDeleteCurrentAttributes() throws WriteFailedException {
93         ArgumentCaptor<SwInterfaceAddDelAddress> requestCaptor = ArgumentCaptor.forClass(SwInterfaceAddDelAddress.class);
94
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");
99
100         namingContext.addName(5, "parent", mappingContext);
101
102         InterfaceKey key = new InterfaceKey("local0");
103
104         InstanceIdentifier<Address> id = InstanceIdentifier.builder(Interfaces.class)
105                 .child(Interface.class,key)
106                 .augmentation(Interface1.class)
107                 .child(Ipv4.class)
108                 .child(Address.class)
109                 .build();
110
111         Mapping mapping = mock(Mapping.class);
112
113         Ipv4AddressNoZone noZoneIp = new Ipv4AddressNoZone(new Ipv4Address("192.168.2.1"));
114
115         PrefixLength length = new PrefixLengthBuilder().setPrefixLength(new Integer(24).shortValue()).build();
116         Address data = new AddressBuilder().setIp(noZoneIp).setSubnet(length).build();
117
118         CompletableFuture<SwInterfaceAddDelAddressReply> future = new CompletableFuture<>();
119         future.complete(new SwInterfaceAddDelAddressReply());
120
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);
126
127         new AddressCustomizer(jvpp, namingContext).deleteCurrentAttributes(id, data, context);
128
129         verify(jvpp, times(1)).swInterfaceAddDelAddress(requestCaptor.capture());
130
131         SwInterfaceAddDelAddress request = requestCaptor.getValue();
132
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));
139     }
140
141     @Test
142     public void testExtract() {
143         Address address = new AddressBuilder().build();
144         Ipv4 parentData = new Ipv4Builder().setAddress(Arrays.asList(address)).build();
145
146         Optional<List<Address>> addressesOptional = new AddressCustomizer(mock(FutureJVpp.class),null).extract(null, parentData);
147
148         assertEquals(true,addressesOptional.isPresent());
149         assertEquals(1,addressesOptional.get().size());
150         assertEquals(true,addressesOptional.get().contains(address));
151     }
152
153 }