313f27dadbab85ebd20b220253020fa220b08bee
[honeycomb.git] / lisp / lisp2vpp / src / test / java / io / fd / honeycomb / lisp / translate / read / trait / MappingProducerTest.java
1 /*
2  * Copyright (c) 2016 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.read.trait;
18
19
20 import static org.junit.Assert.assertTrue;
21 import static org.junit.Assert.fail;
22
23 import io.fd.honeycomb.translate.write.WriteFailedException;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.LocalMappings;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.RemoteMappings;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.local.mappings.LocalMapping;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.local.mappings.LocalMappingBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.local.mappings.local.mapping.EidBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.RemoteMapping;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.RemoteMappingBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.eid.table.grouping.eid.table.vni.table.BridgeDomainSubtable;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.eid.table.grouping.eid.table.vni.table.VrfSubtable;
38 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
39
40 public class MappingProducerTest implements MappingProducer {
41
42     private InstanceIdentifier<LocalMapping> validVrfLocalMappingId;
43     private InstanceIdentifier<LocalMapping> validBridgeDomainLocalMappingId;
44     private InstanceIdentifier<RemoteMapping> validVrfRemoteMappingId;
45     private InstanceIdentifier<RemoteMapping> validBridgeDomainRemoteMappingId;
46
47     private LocalMapping ipv4LocalMapping;
48     private LocalMapping ipv6LocalMapping;
49     private LocalMapping macLocalMapping;
50
51     private RemoteMapping ipv4RemoteMapping;
52     private RemoteMapping ipv6RemoteMapping;
53     private RemoteMapping macRemoteMapping;
54
55     @Before
56     public void init() {
57         validVrfLocalMappingId = InstanceIdentifier.create(VrfSubtable.class)
58                 .child(LocalMappings.class)
59                 .child(LocalMapping.class);
60
61         validBridgeDomainLocalMappingId = InstanceIdentifier.create(BridgeDomainSubtable.class)
62                 .child(LocalMappings.class)
63                 .child(LocalMapping.class);
64
65         validVrfRemoteMappingId = InstanceIdentifier.create(VrfSubtable.class)
66                 .child(RemoteMappings.class)
67                 .child(RemoteMapping.class);
68
69         validBridgeDomainRemoteMappingId = InstanceIdentifier.create(BridgeDomainSubtable.class)
70                 .child(RemoteMappings.class)
71                 .child(RemoteMapping.class);
72
73         ipv4LocalMapping = new LocalMappingBuilder()
74                 .setEid(new EidBuilder()
75                         .setAddressType(Ipv4Afi.class)
76                         .build()).build();
77
78         ipv6LocalMapping = new LocalMappingBuilder()
79                 .setEid(new EidBuilder()
80                         .setAddressType(Ipv6Afi.class)
81                         .build()).build();
82         macLocalMapping = new LocalMappingBuilder()
83                 .setEid(new EidBuilder()
84                         .setAddressType(MacAfi.class)
85                         .build()).build();
86
87         ipv4RemoteMapping = new RemoteMappingBuilder()
88                 .setEid(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.remote.mapping.EidBuilder()
89                         .setAddressType(Ipv4Afi.class).build()).build();
90
91         ipv6RemoteMapping = new RemoteMappingBuilder()
92                 .setEid(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.remote.mapping.EidBuilder()
93                         .setAddressType(Ipv6Afi.class).build()).build();
94
95         macRemoteMapping = new RemoteMappingBuilder()
96                 .setEid(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.remote.mappings.remote.mapping.EidBuilder()
97                         .setAddressType(MacAfi.class).build()).build();
98     }
99
100     @Test
101     public void testValidVrfLocal() {
102         testPositiveCase(validVrfLocalMappingId, ipv4LocalMapping);
103         testPositiveCase(validVrfLocalMappingId, ipv6LocalMapping);
104     }
105
106     @Test
107     public void testValidBridgeDomainLocal() {
108         testPositiveCase(validBridgeDomainLocalMappingId, macLocalMapping);
109     }
110
111     @Test
112     public void testInvalidVrfLocal() {
113         testNegativeCase(validVrfLocalMappingId, macLocalMapping);
114     }
115
116     @Test
117     public void testInvalidBridgeDomainLocal() {
118         testNegativeCase(validBridgeDomainLocalMappingId, ipv4LocalMapping);
119         testNegativeCase(validBridgeDomainLocalMappingId, ipv6LocalMapping);
120     }
121
122
123     @Test
124     public void testValidVrfRemote() {
125         testPositiveCase(validVrfRemoteMappingId, ipv4RemoteMapping);
126         testPositiveCase(validVrfRemoteMappingId, ipv6RemoteMapping);
127     }
128
129     @Test
130     public void testValidBridgeDomainRemote() {
131         testPositiveCase(validBridgeDomainRemoteMappingId, macRemoteMapping);
132     }
133
134     @Test
135     public void testInvalidVrfRemote() {
136         testNegativeCase(validVrfRemoteMappingId, macRemoteMapping);
137     }
138
139     @Test
140     public void testInvalidBridgeDomainRemote() {
141         testNegativeCase(validBridgeDomainRemoteMappingId, ipv4RemoteMapping);
142         testNegativeCase(validBridgeDomainRemoteMappingId, ipv6RemoteMapping);
143     }
144
145     private void testNegativeCase(final InstanceIdentifier<LocalMapping> identifier, final LocalMapping data) {
146         try {
147             checkAllowedCombination(identifier, data);
148         } catch (WriteFailedException e) {
149             assertTrue(e instanceof WriteFailedException.CreateFailedException);
150             assertTrue(e.getCause() instanceof IllegalArgumentException);
151             return;
152         }
153
154         fail("Test should have failed");
155     }
156
157
158     private void testPositiveCase(final InstanceIdentifier<LocalMapping> identifier, final LocalMapping data) {
159         try {
160             checkAllowedCombination(identifier, data);
161         } catch (WriteFailedException e) {
162             fail("Test should have passed");
163         }
164     }
165
166     private void testNegativeCase(final InstanceIdentifier<RemoteMapping> identifier, final RemoteMapping data) {
167         try {
168             checkAllowedCombination(identifier, data);
169         } catch (WriteFailedException e) {
170             assertTrue(e instanceof WriteFailedException.CreateFailedException);
171             assertTrue(e.getCause() instanceof IllegalArgumentException);
172             return;
173         }
174
175         fail("Test should have failed");
176     }
177
178
179     private void testPositiveCase(final InstanceIdentifier<RemoteMapping> identifier, final RemoteMapping data) {
180         try {
181             checkAllowedCombination(identifier, data);
182         } catch (WriteFailedException e) {
183             fail("Test should have passed");
184         }
185     }
186 }