HONEYCOMB-58 - Routing Api
[honeycomb.git] / lisp / lisp2vpp / src / test / java / io / fd / honeycomb / lisp / context / util / AdjacenciesMappingContextTest.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.context.util;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertTrue;
21 import static org.mockito.Mockito.times;
22 import static org.mockito.Mockito.verify;
23 import static org.mockito.Mockito.when;
24
25 import com.google.common.base.Optional;
26 import com.google.common.collect.ImmutableSet;
27 import io.fd.honeycomb.test.tools.HoneycombTestRunner;
28 import io.fd.honeycomb.test.tools.annotations.InjectTestData;
29 import io.fd.honeycomb.test.tools.annotations.InjectablesProcessor;
30 import io.fd.honeycomb.test.tools.annotations.SchemaContextProvider;
31 import io.fd.honeycomb.translate.MappingContext;
32 import io.fd.honeycomb.translate.util.RWUtils;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 import org.mockito.ArgumentCaptor;
37 import org.mockito.Captor;
38 import org.mockito.Mock;
39 import org.mockito.MockitoAnnotations;
40 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.$YangModuleInfoImpl;
41 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.AdjacenciesIdentificationContexts;
42 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.adjacencies.identification.contexts.AdjacenciesIdentification;
43 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.adjacencies.identification.contexts.AdjacenciesIdentificationKey;
44 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.adjacencies.identification.contexts.adjacencies.identification.Mappings;
45 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.adjacencies.identification.contexts.adjacencies.identification.mappings.Mapping;
46 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.adjacencies.identification.contexts.adjacencies.identification.mappings.MappingKey;
47 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.adjacencies.identification.contexts.adjacencies.identification.mappings.mapping.EidIdentificatorPair;
48 import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext;
49 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
50 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
51
52 @RunWith(HoneycombTestRunner.class)
53 public class AdjacenciesMappingContextTest implements InjectablesProcessor {
54
55     private static final String PARENT_1 = "first";
56     private static final String PARENT_2 = "second";
57     private static final String PARENT_3 = "third";
58     private static final String PARENT_4 = "fourth";
59
60     private static final String LOCAL_EID_ID_1 = "local-eid-1";
61     private static final String LOCAL_EID_ID_2 = "local-eid-2";
62     private static final String LOCAL_EID_ID_3 = "local-eid-3";
63
64     private static final String REMOTE_EID_ID_1 = "remote-eid-1";
65     private static final String REMOTE_EID_ID_2 = "remote-eid-2";
66     private static final String REMOTE_EID_ID_3 = "remote-eid-3";
67
68     @Mock
69     private MappingContext mappingContext;
70
71     @Captor
72     private ArgumentCaptor<Mapping> mappingArgumentCaptor;
73
74     @Captor
75     private ArgumentCaptor<KeyedInstanceIdentifier<Mapping, MappingKey>> keyedInstanceIdentifierArgumentCaptor;
76
77     private AdjacenciesMappingContext adjacenciesMappingContext;
78     private KeyedInstanceIdentifier<AdjacenciesIdentification, AdjacenciesIdentificationKey>
79             adjacenciesMappingContextId;
80
81     @SchemaContextProvider
82     public ModuleInfoBackedContext schemaContext() {
83         return provideSchemaContextFor(ImmutableSet.of($YangModuleInfoImpl.getInstance(),
84                 org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.$YangModuleInfoImpl
85                         .getInstance()));
86     }
87
88     @InjectTestData(resourcePath = "/adjacencies-identification-context.json", id = "/naming-context:contexts" +
89             "/adjacencies-identification-context:adjacencies-identification-contexts" +
90             "/adjacencies-identification-context:adjacencies-identification[adjacencies-identification-context:name='context']" +
91             "/adjacencies-identification-context:mappings")
92     private Mappings mappings;
93
94     @Before
95     public void init() {
96         MockitoAnnotations.initMocks(this);
97
98         adjacenciesMappingContext = new AdjacenciesMappingContext("context");
99         adjacenciesMappingContextId = InstanceIdentifier.create(AdjacenciesIdentificationContexts.class).child(
100                 AdjacenciesIdentification.class, new AdjacenciesIdentificationKey("context"));
101
102         when(mappingContext.read(adjacenciesMappingContextId.child(Mappings.class))).thenReturn(Optional.of(mappings));
103         when(mappingContext.read(parentKey(PARENT_1))).thenReturn(Optional.of(filterForParent(PARENT_1)));
104         when(mappingContext.read(parentKey(PARENT_2))).thenReturn(Optional.of(filterForParent(PARENT_2)));
105         when(mappingContext.read(parentKey(PARENT_3))).thenReturn(Optional.of(filterForParent(PARENT_3)));
106     }
107
108     private Mapping filterForParent(final String parent) {
109         return mappings.getMapping().stream()
110                 .filter(mapping -> mapping.getId().equals(parent))
111                 .collect(RWUtils.singleItemCollector());
112     }
113
114     private KeyedInstanceIdentifier<Mapping, MappingKey> parentKey(final String parent) {
115         return adjacenciesMappingContextId.child(Mappings.class).child(Mapping.class, new MappingKey(parent));
116     }
117
118     @Test
119     public void getAdjacencyId() throws Exception {
120         assertEquals(PARENT_1,
121                 adjacenciesMappingContext.getAdjacencyId(LOCAL_EID_ID_1, REMOTE_EID_ID_1, mappingContext));
122         assertEquals(PARENT_2,
123                 adjacenciesMappingContext.getAdjacencyId(LOCAL_EID_ID_2, REMOTE_EID_ID_2, mappingContext));
124         assertEquals(PARENT_3,
125                 adjacenciesMappingContext.getAdjacencyId(LOCAL_EID_ID_3, REMOTE_EID_ID_3, mappingContext));
126     }
127
128     @Test
129     public void containsId() throws Exception {
130         assertTrue(adjacenciesMappingContext.containsId(LOCAL_EID_ID_1, REMOTE_EID_ID_1, mappingContext));
131         assertTrue(adjacenciesMappingContext.containsId(LOCAL_EID_ID_2, REMOTE_EID_ID_2, mappingContext));
132         assertTrue(adjacenciesMappingContext.containsId(LOCAL_EID_ID_3, REMOTE_EID_ID_3, mappingContext));
133     }
134
135     @Test
136     public void addEidPair() throws Exception {
137         adjacenciesMappingContext.addEidPair(PARENT_4, LOCAL_EID_ID_1, REMOTE_EID_ID_3, mappingContext);
138         verify(mappingContext, times(1))
139                 .put(keyedInstanceIdentifierArgumentCaptor.capture(), mappingArgumentCaptor.capture());
140
141         final KeyedInstanceIdentifier<Mapping, MappingKey> key = keyedInstanceIdentifierArgumentCaptor.getValue();
142         final Mapping mapping = mappingArgumentCaptor.getValue();
143
144         assertEquals(PARENT_4, key.getKey().getId());
145         assertEquals(PARENT_4, mapping.getId());
146         assertEquals(PARENT_4, mapping.getKey().getId());
147
148         final EidIdentificatorPair pair = mapping.getEidIdentificatorPair();
149         assertEquals(LOCAL_EID_ID_1, pair.getLocalEidId().getValue());
150         assertEquals(REMOTE_EID_ID_3, pair.getRemoteEidId().getValue());
151     }
152
153     @Test
154     public void removeForIndex() throws Exception {
155         adjacenciesMappingContext.removeForIndex(PARENT_1, mappingContext);
156         adjacenciesMappingContext.removeForIndex(PARENT_2, mappingContext);
157         adjacenciesMappingContext.removeForIndex(PARENT_3, mappingContext);
158         verify(mappingContext, times(1)).delete(parentKey(PARENT_1));
159         verify(mappingContext, times(1)).delete(parentKey(PARENT_2));
160         verify(mappingContext, times(1)).delete(parentKey(PARENT_3));
161     }
162
163     @Test
164     public void getEidPair() throws Exception {
165         final EidIdentificatorPair pair1 = adjacenciesMappingContext.getEidPair(PARENT_1, mappingContext);
166         final EidIdentificatorPair pair2 = adjacenciesMappingContext.getEidPair(PARENT_2, mappingContext);
167         final EidIdentificatorPair pair3 = adjacenciesMappingContext.getEidPair(PARENT_3, mappingContext);
168
169         assertEquals(LOCAL_EID_ID_1, pair1.getLocalEidId().getValue());
170         assertEquals(REMOTE_EID_ID_1, pair1.getRemoteEidId().getValue());
171         assertEquals(LOCAL_EID_ID_2, pair2.getLocalEidId().getValue());
172         assertEquals(REMOTE_EID_ID_2, pair2.getRemoteEidId().getValue());
173         assertEquals(LOCAL_EID_ID_3, pair3.getLocalEidId().getValue());
174         assertEquals(REMOTE_EID_ID_3, pair3.getRemoteEidId().getValue());
175     }
176
177     @Test
178     public void containsEidPairForIndex() throws Exception {
179         assertTrue(adjacenciesMappingContext.containsEidPairForIndex(PARENT_1, mappingContext));
180         assertTrue(adjacenciesMappingContext.containsEidPairForIndex(PARENT_2, mappingContext));
181         assertTrue(adjacenciesMappingContext.containsEidPairForIndex(PARENT_3, mappingContext));
182     }
183
184 }