2 * Copyright (c) 2016 Cisco and/or its affiliates.
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:
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package io.fd.honeycomb.lisp.context.util;
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;
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;
52 @RunWith(HoneycombTestRunner.class)
53 public class AdjacenciesMappingContextTest implements InjectablesProcessor {
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";
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";
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";
69 private MappingContext mappingContext;
72 private ArgumentCaptor<Mapping> mappingArgumentCaptor;
75 private ArgumentCaptor<KeyedInstanceIdentifier<Mapping, MappingKey>> keyedInstanceIdentifierArgumentCaptor;
77 private AdjacenciesMappingContext adjacenciesMappingContext;
78 private KeyedInstanceIdentifier<AdjacenciesIdentification, AdjacenciesIdentificationKey>
79 adjacenciesMappingContextId;
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
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;
96 MockitoAnnotations.initMocks(this);
98 adjacenciesMappingContext = new AdjacenciesMappingContext("context");
99 adjacenciesMappingContextId = InstanceIdentifier.create(AdjacenciesIdentificationContexts.class).child(
100 AdjacenciesIdentification.class, new AdjacenciesIdentificationKey("context"));
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)));
108 private Mapping filterForParent(final String parent) {
109 return mappings.getMapping().stream()
110 .filter(mapping -> mapping.getId().equals(parent))
111 .collect(RWUtils.singleItemCollector());
114 private KeyedInstanceIdentifier<Mapping, MappingKey> parentKey(final String parent) {
115 return adjacenciesMappingContextId.child(Mappings.class).child(Mapping.class, new MappingKey(parent));
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));
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));
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());
141 final KeyedInstanceIdentifier<Mapping, MappingKey> key = keyedInstanceIdentifierArgumentCaptor.getValue();
142 final Mapping mapping = mappingArgumentCaptor.getValue();
144 assertEquals(PARENT_4, key.getKey().getId());
145 assertEquals(PARENT_4, mapping.getId());
146 assertEquals(PARENT_4, mapping.getKey().getId());
148 final EidIdentificatorPair pair = mapping.getEidIdentificatorPair();
149 assertEquals(LOCAL_EID_ID_1, pair.getLocalEidId().getValue());
150 assertEquals(REMOTE_EID_ID_3, pair.getRemoteEidId().getValue());
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));
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);
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());
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));