Bump versions by x.(y+1).z
[lispflowmapping.git] / mappingservice / lisp-proto / src / test / java / org / opendaylight / lispflowmapping / lisp / util / LispAddressStringifierTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.lispflowmapping.lisp.util;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNull;
12
13 import com.google.common.io.BaseEncoding;
14 import java.util.ArrayList;
15 import java.util.LinkedHashSet;
16 import java.util.List;
17 import java.util.Set;
18 import org.junit.Test;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathIdType;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AfiList;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AfiListBuilder;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ApplicationData;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ApplicationDataBuilder;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.AsNumberBuilder;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPath;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ExplicitLocatorPathBuilder;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.InstanceId;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.InstanceIdBuilder;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4PrefixBuilder;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6PrefixBuilder;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddressBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Mac;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.MacBuilder;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddress;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePath;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePathBuilder;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKey;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.SourceDestKeyBuilder;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.HopBuilder;
61 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.HopKey;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv6AddressBinary;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4Binary;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4BinaryBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4PrefixBinary;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv4PrefixBinaryBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6Binary;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6BinaryBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6PrefixBinary;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.augmented.lisp.address.address.Ipv6PrefixBinaryBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
75 import org.opendaylight.yangtools.yang.common.Empty;
76 import org.opendaylight.yangtools.yang.common.Uint16;
77 import org.opendaylight.yangtools.yang.common.Uint32;
78 import org.opendaylight.yangtools.yang.common.Uint8;
79
80 public class LispAddressStringifierTest {
81
82     private static final Uint32 VNI = Uint32.valueOf(100);
83     private static final Uint32 IID = Uint32.valueOf(200);
84
85     // Ipv4
86     private static final String IPV4_STRING = "192.168.0.1";
87     private static final Ipv4Address IPV4_ADDRESS = new Ipv4Address(IPV4_STRING);
88     private static final Ipv4 IPV4 = new Ipv4Builder().setIpv4(IPV4_ADDRESS).build();
89     private static final LispAddress LISP_IPV4 = new EidBuilder()
90             .setAddress(IPV4)
91             .setVirtualNetworkId(new InstanceIdType(VNI)).build();
92
93     // Ipv4Binary
94     private static final byte[] IPV4_BYTES = new byte[]{(byte) 192, (byte) 168, 0, 1};
95     private static final Ipv4AddressBinary IPV4_ADDRESS_BINARY = new Ipv4AddressBinary(IPV4_BYTES);
96     private static final Ipv4Binary IPV4_BINARY = new Ipv4BinaryBuilder().setIpv4Binary(IPV4_ADDRESS_BINARY).build();
97     private static final LispAddress LISP_IPV4_BINARY = new EidBuilder()
98             .setAddress(IPV4_BINARY)
99             .setVirtualNetworkId(new InstanceIdType(VNI)).build();
100
101     // Ipv6
102     private static final String IPV6_STRING = "1111:2222:3333:4444:5555:6666:7777:8888";
103     private static final Ipv6Address IPV6_ADDRESS = new Ipv6Address(IPV6_STRING);
104     private static final Ipv6 IPV6 = new Ipv6Builder().setIpv6(new Ipv6Address(IPV6_STRING)).build();
105     private static final LispAddress LISP_IPV6 = new EidBuilder().setAddress(IPV6).build();
106
107     // Ipv6Binary
108     private static final byte[] IPV6_BYTES = new byte[]
109         {17, 17, 34, 34, 51, 51, 68, 68, 85, 85, 102, 102, 119, 119, -120, -120};
110     private static final Ipv6AddressBinary IPV6_ADDRESS_BINARY = new Ipv6AddressBinary(IPV6_BYTES);
111     private static final Ipv6Binary IPV6_BINARY = new Ipv6BinaryBuilder().setIpv6Binary(IPV6_ADDRESS_BINARY).build();
112     private static final LispAddress LISP_IPV6_BINARY = new EidBuilder().setAddress(IPV6_BINARY).build();
113
114     // Ipv4Prefix
115     private static final String PREFIX = "/24";
116     private static final String PREFIX_URL = "%2f24";
117     private static final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
118             .lisp.address.address.Ipv4Prefix IPV4_PREFIX = new Ipv4PrefixBuilder()
119             .setIpv4Prefix(new Ipv4Prefix(IPV4_STRING + PREFIX)).build();
120     private static final LispAddress LISP_IPV4_PREFIX = new EidBuilder().setAddress(IPV4_PREFIX).build();
121
122     // Ipv6Prefix
123     private static final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105
124             .lisp.address.address.Ipv6Prefix IPV6_PREFIX = new Ipv6PrefixBuilder()
125             .setIpv6Prefix(new Ipv6Prefix(IPV6_STRING + PREFIX)).build();
126     private static final LispAddress LISP_IPV6_PREFIX = new EidBuilder().setAddress(IPV6_PREFIX).build();
127
128     // Ipv4PrefixBinary
129     private static final Ipv4PrefixBinary IPV4_PREFIX_BINARY = new Ipv4PrefixBinaryBuilder()
130             .setIpv4AddressBinary(IPV4_ADDRESS_BINARY)
131             .setIpv4MaskLength(Uint8.valueOf(24)).build();
132     private static final LispAddress LISP_IPV4_PREFIX_BINARY = new EidBuilder().setAddress(IPV4_PREFIX_BINARY).build();
133
134     // Ipv6PrefixBinary
135     private static final Ipv6PrefixBinary IPV6_PREFIX_BINARY = new Ipv6PrefixBinaryBuilder()
136             .setIpv6AddressBinary(IPV6_ADDRESS_BINARY)
137             .setIpv6MaskLength(Uint8.valueOf(24)).build();
138     private static final LispAddress LISP_IPV6_PREFIX_BINARY = new EidBuilder().setAddress(IPV6_PREFIX_BINARY).build();
139
140     // Mac
141     private static final MacAddress MAC_ADDRESS = new MacAddress("01:23:45:67:89:ab");
142     private static final Mac MAC = new MacBuilder().setMac(MAC_ADDRESS).build();
143     private static final LispAddress LISP_MAC = new EidBuilder().setAddress(MAC).build();
144
145     // DistinguishedNameType
146     private static final DistinguishedNameType DISTINGUISHED_NAME_TYPE =
147             new DistinguishedNameType("distinguished_name");
148     private static final DistinguishedName DISTINGUISHED_NAME = new DistinguishedNameBuilder()
149             .setDistinguishedName(DISTINGUISHED_NAME_TYPE).build();
150     private static final LispAddress LISP_DISTINGUISHED_NAME = new EidBuilder().setAddress(DISTINGUISHED_NAME).build();
151
152     // AsNumber
153     private static final AsNumber AS_NUMBER = new AsNumber(Uint32.valueOf(300));
154     private static final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp
155             .address.address.AsNumber AS_NUMBER_LISP_TYPE = new AsNumberBuilder().setAsNumber(AS_NUMBER).build();
156     private static final LispAddress LISP_AS_NUMBER = new EidBuilder().setAddress(AS_NUMBER_LISP_TYPE).build();
157
158     // NoAddress
159     private static final NoAddress NO_ADDRESS = new NoAddressBuilder().setNoAddress(Empty.value()).build();
160     private static final LispAddress LISP_NO_ADDRESS = new EidBuilder().setAddress(NO_ADDRESS).build();
161
162     // AfiList
163     private static final SimpleAddress SIMPLE_ADDRESS_1 = new SimpleAddress(new IpAddress(IPV4_ADDRESS));
164     private static final SimpleAddress SIMPLE_ADDRESS_2 = new SimpleAddress(new IpAddress(IPV6_ADDRESS));
165     // FIXME: this is ugly as hell, this Set should be immutable
166     private static final Set<SimpleAddress> ADDRESS_LIST = new LinkedHashSet<>();
167     private static final AfiList AFI_LIST = new AfiListBuilder().setAfiList(new org.opendaylight.yang.gen.v1.urn.ietf
168             .params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.afi.list.AfiListBuilder()
169             .setAddressList(ADDRESS_LIST).build()).build();
170
171     // ApplicationData
172     private static final LispAddress LISP_AFI_LIST = new EidBuilder().setAddress(AFI_LIST).build();
173     private static final ApplicationData APPLICATION_DATA = new ApplicationDataBuilder().setApplicationData(new org
174             .opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address
175             .application.data.ApplicationDataBuilder()
176             .setAddress(SIMPLE_ADDRESS_1)
177             .setIpTos(0)
178             .setLocalPortHigh(new PortNumber(Uint16.valueOf(1234)))
179             .setLocalPortLow(new PortNumber(Uint16.valueOf(1111)))
180             .setProtocol(Uint8.ONE)
181             .setRemotePortHigh(new PortNumber(Uint16.valueOf(9999)))
182             .setRemotePortLow(new PortNumber(Uint16.valueOf(1000))).build()).build();
183     private static final LispAddress LISP_APPLICATION_DATA = new EidBuilder().setAddress(APPLICATION_DATA).build();
184
185     // ExplicitLocatorPath
186     private static final Hop HOP_1 = new HopBuilder()
187             .setHopId("hop_1")
188             .setAddress(SIMPLE_ADDRESS_1)
189             .withKey(new HopKey("hop_1"))
190             .setLrsBits(new Hop.LrsBits(true, true, true)).build();
191     private static final Hop HOP_2 = new HopBuilder()
192             .setHopId("hop_2")
193             .setAddress(SIMPLE_ADDRESS_2)
194             .withKey(new HopKey("hop_2"))
195             .setLrsBits(new Hop.LrsBits(true, true, true)).build();
196     private static final List<Hop> HOP_LIST = new ArrayList<>();
197
198     // SourceDestKey
199     private static final SourceDestKey SOURCE_DEST_KEY = new SourceDestKeyBuilder().setSourceDestKey(new org
200             .opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address
201             .source.dest.key.SourceDestKeyBuilder().setSource(SIMPLE_ADDRESS_1)
202             .setDest(SIMPLE_ADDRESS_2).build()).build();
203     private static final LispAddress LISP_SOURCE_DEST_KEY = new EidBuilder().setAddress(SOURCE_DEST_KEY).build();
204
205     // KeyValueAddress
206     private static final KeyValueAddress KEY_VALUE_ADDRESS = new KeyValueAddressBuilder()
207             .setKeyValueAddress(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
208                     .rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder().setKey(SIMPLE_ADDRESS_1)
209                     .setValue(SIMPLE_ADDRESS_2).build()).build();
210     private static final LispAddress LISP_KEY_VALUE_ADDRESS = new EidBuilder().setAddress(KEY_VALUE_ADDRESS).build();
211
212     // ServicePath
213     private static final ServicePathIdType SERVICE_PATH_ID_TYPE = new ServicePathIdType(Uint32.valueOf(123));
214     private static final ServicePath SERVICE_PATH = new ServicePathBuilder().setServicePath(new org.opendaylight.yang
215             .gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.service.path
216             .ServicePathBuilder().setServiceIndex(Uint8.ONE)
217             .setServicePathId(SERVICE_PATH_ID_TYPE).build()).build();
218     private static final LispAddress LISP_SERVICE_PATH = new EidBuilder().setAddress(SERVICE_PATH).build();
219
220     // InstanceId with Ipv4
221     private static final InstanceIdType INSTANCE_ID_TYPE = new InstanceIdType(IID);
222     private static final InstanceId INSTANCE_ID_IPV4 = new InstanceIdBuilder().setInstanceId(new org.opendaylight.yang
223             .gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.instance.id
224             .InstanceIdBuilder().setAddress(new SimpleAddress(new IpAddress(IPV4_ADDRESS)))
225             .setIid(INSTANCE_ID_TYPE).build()).build();
226     private static final LispAddress LISP_IID_IPV4 = new EidBuilder().setAddress(INSTANCE_ID_IPV4).build();
227
228     // InstanceId with Ipv6
229     private static final InstanceId INSTANCE_ID_IPV6 = new InstanceIdBuilder().setInstanceId(new org.opendaylight.yang
230             .gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.instance.id
231             .InstanceIdBuilder().setAddress(new SimpleAddress(new IpAddress(IPV6_ADDRESS)))
232             .setIid(INSTANCE_ID_TYPE).build()).build();
233     private static final LispAddress LISP_IID_IPV6 = new EidBuilder().setAddress(INSTANCE_ID_IPV6).build();
234
235     // InstanceId with Ipv4Prefix
236     private static final InstanceId INSTANCE_ID_IPV4_PREFIX = new InstanceIdBuilder().setInstanceId(new org.opendaylight
237             .yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.instance.id
238             .InstanceIdBuilder().setAddress(new SimpleAddress(new IpPrefix(new Ipv4Prefix(IPV4_STRING + PREFIX))))
239             .setIid(INSTANCE_ID_TYPE).build()).build();
240     private static final LispAddress LISP_IID_IPV4_PREFIX = new EidBuilder().setAddress(INSTANCE_ID_IPV4_PREFIX)
241             .build();
242
243     // InstanceId with Ipv6Prefix
244     private static final InstanceId INSTANCE_ID_IPV6_PREFIX = new InstanceIdBuilder().setInstanceId(new org.opendaylight
245             .yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.instance.id
246             .InstanceIdBuilder().setAddress(new SimpleAddress(new IpPrefix(new Ipv6Prefix(IPV6_STRING + PREFIX))))
247             .setIid(INSTANCE_ID_TYPE).build()).build();
248     private static final LispAddress LISP_IID_IPV6_PREFIX = new EidBuilder().setAddress(INSTANCE_ID_IPV6_PREFIX)
249             .build();
250
251     // InstanceId with Mac
252     private static final InstanceId INSTANCE_ID_MAC = new InstanceIdBuilder().setInstanceId(new org.opendaylight
253             .yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.instance.id
254             .InstanceIdBuilder().setAddress(new SimpleAddress(MAC_ADDRESS))
255             .setIid(INSTANCE_ID_TYPE).build()).build();
256     private static final LispAddress LISP_IID_MAC = new EidBuilder().setAddress(INSTANCE_ID_MAC).build();
257
258     // InstanceId with DistinguishedNameType
259     private static final InstanceId INSTANCE_ID_DISTINGUISHED_NAME_TYPE = new InstanceIdBuilder().setInstanceId(new org
260             .opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address
261             .instance.id.InstanceIdBuilder().setAddress(new SimpleAddress(DISTINGUISHED_NAME_TYPE))
262             .setIid(INSTANCE_ID_TYPE).build()).build();
263     private static final LispAddress LISP_IID_DISTINGUISHED_NAME_TYPE = new EidBuilder()
264             .setAddress(INSTANCE_ID_DISTINGUISHED_NAME_TYPE).build();
265
266     // InstanceId with AsNumber
267     private static final InstanceId INSTANCE_ID_AS_NUMBER = new InstanceIdBuilder().setInstanceId(new org.opendaylight
268             .yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.instance.id
269             .InstanceIdBuilder().setAddress(new SimpleAddress(AS_NUMBER))
270             .setIid(INSTANCE_ID_TYPE).build()).build();
271     private static final LispAddress LISP_IID_AS_NUMBER = new EidBuilder().setAddress(INSTANCE_ID_AS_NUMBER).build();
272
273     private static final XtrId XTR_ID = new XtrId(new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15});
274
275     /**
276      * Tests {@link LispAddressStringifier#getString} with Ipv4 address type.
277      */
278     @Test
279     public void getStringTest_withIpv4() {
280         assertEquals("[" + VNI + "] " + IPV4_STRING, LispAddressStringifier.getString(LISP_IPV4));
281     }
282
283     /**
284      * Tests {@link LispAddressStringifier#getString} with Ipv4Binary address type.
285      */
286     @Test
287     public void getStringTest_withIpv4Binary() {
288         assertEquals("[" + VNI + "] " + IPV4_STRING, LispAddressStringifier.getString(LISP_IPV4_BINARY));
289     }
290
291     /**
292      * Tests {@link LispAddressStringifier#getString} with Ipv4Prefix address type.
293      */
294     @Test
295     public void getStringTest_withIpv4Prefix() {
296         assertEquals(IPV4_STRING + PREFIX, LispAddressStringifier.getString(LISP_IPV4_PREFIX));
297     }
298
299     /**
300      * Tests {@link LispAddressStringifier#getString} with Ipv4PrefixBinary address type.
301      */
302     @Test
303     public void getStringTest_withIpv4PrefixBinary() {
304         assertEquals(IPV4_STRING + PREFIX, LispAddressStringifier.getString(LISP_IPV4_PREFIX_BINARY));
305     }
306
307     /**
308      * Tests {@link LispAddressStringifier#getString} with Ipv6 address type.
309      */
310     @Test
311     public void getStringTest_withIpv6() {
312         assertEquals(IPV6_STRING, LispAddressStringifier.getString(LISP_IPV6));
313     }
314
315     /**
316      * Tests {@link LispAddressStringifier#getString} with Ipv6Binary address type.
317      */
318     @Test
319     public void getStringTest_withIpv6Binary() {
320         assertEquals(IPV6_STRING, LispAddressStringifier.getString(LISP_IPV6_BINARY));
321     }
322
323     /**
324      * Tests {@link LispAddressStringifier#getString} with Ipv6Prefix address type.
325      */
326     @Test
327     public void getStringTest_withIpv6Prefix() {
328         assertEquals(IPV6_STRING + PREFIX, LispAddressStringifier.getString(LISP_IPV6_PREFIX));
329     }
330
331     /**
332      * Tests {@link LispAddressStringifier#getString} with Ipv6PrefixBinary address type.
333      */
334     @Test
335     public void getStringTest_withIpv6PrefixBinary() {
336         assertEquals(IPV6_STRING + PREFIX, LispAddressStringifier.getString(LISP_IPV6_PREFIX_BINARY));
337     }
338
339     /**
340      * Tests {@link LispAddressStringifier#getString} with Mac address type.
341      */
342     @Test
343     public void getStringTest_withMac() {
344         assertEquals(MAC.getMac().getValue(), LispAddressStringifier.getString(LISP_MAC));
345     }
346
347     /**
348      * Tests {@link LispAddressStringifier#getString} with InstanceId address type.
349      */
350     @Test
351     public void getStringTest_withInstanceId() {
352         // with Ipv4
353         assertEquals("[" + IID + "] " + IPV4_STRING, LispAddressStringifier.getString(LISP_IID_IPV4));
354
355         // with Ipv6
356         assertEquals("[" + IID + "] " + IPV6_STRING, LispAddressStringifier.getString(LISP_IID_IPV6));
357
358         // with Ipv4Prefix
359         assertEquals("[" + IID + "] " + IPV4_STRING + PREFIX, LispAddressStringifier.getString(LISP_IID_IPV4_PREFIX));
360
361         // with Ipv6Prefix
362         assertEquals("[" + IID + "] " + IPV6_STRING + PREFIX, LispAddressStringifier.getString(LISP_IID_IPV6_PREFIX));
363
364         // with Mac
365         assertEquals("[" + IID + "] " + MAC.getMac().getValue(), LispAddressStringifier.getString(LISP_IID_MAC));
366
367         // with DistinguishedNameType
368         assertEquals("[" + IID + "] " + DISTINGUISHED_NAME_TYPE.getValue(), LispAddressStringifier
369                 .getString(LISP_IID_DISTINGUISHED_NAME_TYPE));
370
371         // with AsNumber
372         assertEquals("[" + IID + "] AS" + AS_NUMBER.getValue(), LispAddressStringifier.getString(LISP_IID_AS_NUMBER));
373     }
374
375     /**
376      * Tests {@link LispAddressStringifier#getString} with NoAddress address type.
377      */
378     @Test
379     public void getStringTest_withNoAddress() {
380         assertEquals("No Address Present", LispAddressStringifier.getString(LISP_NO_ADDRESS));
381     }
382
383     /**
384      * Tests {@link LispAddressStringifier#getString} with DistinguishedName address type.
385      */
386     @Test
387     public void getStringTest_withDistinguishedName() {
388         assertEquals(DISTINGUISHED_NAME_TYPE.getValue(), LispAddressStringifier.getString(LISP_DISTINGUISHED_NAME));
389     }
390
391     /**
392      * Tests {@link LispAddressStringifier#getString} with AsNumber address type.
393      */
394     @Test
395     public void getStringTest_withAsNumber() {
396         assertEquals("AS" + AS_NUMBER.getValue(), LispAddressStringifier.getString(LISP_AS_NUMBER));
397     }
398
399     /**
400      * Tests {@link LispAddressStringifier#getString} with AfiList address type.
401      */
402     @Test
403     public void getStringTest_withAfiList() {
404         ADDRESS_LIST.add(SIMPLE_ADDRESS_1);
405         ADDRESS_LIST.add(SIMPLE_ADDRESS_2);
406
407         assertEquals("{" + IPV4_STRING + "," + IPV6_STRING + "}", LispAddressStringifier.getString(LISP_AFI_LIST));
408     }
409
410     private static String getStringFromAppData(final ApplicationData appData) {
411         StringBuilder sb = new StringBuilder();
412         final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
413                 .address.application.data.ApplicationData applicationData = appData.getApplicationData();
414
415         sb.append(applicationData.getAddress().getIpAddress().getIpv4Address().getValue())
416         .append("!").append(applicationData.getIpTos())
417         .append("!").append(applicationData.getProtocol())
418         .append("!").append(applicationData.getLocalPortLow())
419         .append("-").append(applicationData.getLocalPortHigh())
420         .append("!").append(applicationData.getRemotePortLow())
421         .append("-").append(applicationData.getRemotePortHigh());
422
423         return sb.toString();
424     }
425
426     /**
427      * Tests {@link LispAddressStringifier#getString} with ApplicationData address type.
428      */
429     @Test
430     public void getStringTest_withApplicationData() {
431         assertEquals(getStringFromAppData((ApplicationData) LISP_APPLICATION_DATA.getAddress()), LispAddressStringifier
432                 .getString(LISP_APPLICATION_DATA));
433     }
434
435     private static String getStringFromExplicLocPath() {
436         StringBuilder sb = new StringBuilder();
437         sb.append("{")
438             .append(IPV4_STRING)
439             .append("|")
440             .append("l")
441             .append("p")
442             .append("s")
443
444             .append("->")
445
446             .append(IPV6_STRING)
447             .append("|")
448             .append("l")
449             .append("p")
450             .append("s")
451             .append("}");
452
453         return sb.toString();
454     }
455
456     /**
457      * Tests {@link LispAddressStringifier#getString} with ExplicitLocatorPath address type.
458      */
459     @Test
460     public void getStringTest_withExplicitLocatorPath() {
461         HOP_LIST.add(HOP_1);
462         HOP_LIST.add(HOP_2);
463
464         ExplicitLocatorPath elp = new ExplicitLocatorPathBuilder().setExplicitLocatorPath(
465                 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp
466                         .address.address.explicit.locator.path.ExplicitLocatorPathBuilder().setHop(HOP_LIST)
467                         .build()).build();
468         LispAddress lelp = new EidBuilder().setAddress(elp).build();
469         assertEquals(getStringFromExplicLocPath(), LispAddressStringifier.getString(lelp));
470     }
471
472     private static String getStringFromSrcDstKey() {
473         StringBuilder sb = new StringBuilder();
474         sb.append(IPV4_STRING)
475             .append("|")
476             .append(IPV6_STRING);
477
478         return sb.toString();
479     }
480
481     /**
482      * Tests {@link LispAddressStringifier#getString} with SourceDestKey address type.
483      */
484     @Test
485     public void getStringTest_withSourceDestKey() {
486         assertEquals(getStringFromSrcDstKey(), LispAddressStringifier.getString(LISP_SOURCE_DEST_KEY));
487     }
488
489     /**
490      * Tests {@link LispAddressStringifier#getString} with KeyValueAddress address type.
491      */
492     @Test
493     public void getStringTest_withKeyValueAddress() {
494         assertEquals(IPV4_STRING + "=>" + IPV6_STRING, LispAddressStringifier.getString(LISP_KEY_VALUE_ADDRESS));
495     }
496
497     /**
498      * Tests {@link LispAddressStringifier#getString} with ServicePath address type.
499      */
500     @Test
501     public void getStringTest_withServicePath() {
502         assertEquals(SERVICE_PATH_ID_TYPE.getValue() + "(" + SERVICE_PATH.getServicePath().getServiceIndex() + ")",
503                 LispAddressStringifier.getString(LISP_SERVICE_PATH));
504     }
505
506     /**
507      * Tests {@link LispAddressStringifier#getString} with no address type.
508      */
509     @Test
510     public void getStringTest_withoutAddress() {
511         assertNull(LispAddressStringifier.getString(new EidBuilder().build()));
512     }
513
514     /**
515      * Tests {@link LispAddressStringifier#getURIString} with Ipv4Prefix address type.
516      */
517     @Test
518     public void getURIStringTest_withIpv4Prefix() {
519         assertEquals("ipv4:" + IPV4_STRING + PREFIX, LispAddressStringifier.getURIString(LISP_IPV4_PREFIX));
520     }
521
522     /**
523      * Tests {@link LispAddressStringifier#getURLString} with Ipv4Prefix address type.
524      */
525     @Test
526     public void getURLStringTest_withIpv4Prefix() {
527         assertEquals("ipv4:" + IPV4_STRING + PREFIX_URL, LispAddressStringifier.getURLString(LISP_IPV4_PREFIX));
528     }
529
530     /**
531      * Tests {@link LispAddressStringifier#getURLString} with IID_Ipv4 address type.
532      */
533     @Test
534     public void getURLStringTest_withInstanceId() {
535         assertEquals("ipv4:" + IPV4_STRING, LispAddressStringifier.getURLString(LISP_IID_IPV4));
536     }
537
538     /**
539      * Tests {@link LispAddressStringifier#getString} with XtrId.
540      */
541     @Test
542     public void getStringTest_withXtrId() {
543         assertEquals(BaseEncoding.base16().encode(XTR_ID.getValue()), LispAddressStringifier.getString(XTR_ID));
544     }
545
546     /**
547      * Tests {@link LispAddressStringifier#getURIString} with XtrId.
548      */
549     @Test
550     public void getStringURITest_withXtrId() {
551         assertEquals(BaseEncoding.base16().encode(XTR_ID.getValue()), LispAddressStringifier.getURIString(XTR_ID));
552     }
553
554     /**
555      * Tests {@link LispAddressStringifier#getURLString} with XtrId.
556      */
557     @Test
558     public void getStringURLTest_withXtrId() {
559         assertEquals(BaseEncoding.base16().encode(XTR_ID.getValue()), LispAddressStringifier.getURLString(XTR_ID));
560     }
561
562 }