1d66154726076a2454621fc1041e588525a2ebc3
[honeycomb.git] / lisp / lisp2vpp / src / test / java / io / fd / honeycomb / lisp / util / AdjacencyMappingContextTestHelper.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.util;
18
19 import static com.google.common.base.Preconditions.checkNotNull;
20 import static org.mockito.Mockito.doReturn;
21
22 import com.google.common.base.Optional;
23 import com.google.common.collect.Lists;
24 import io.fd.honeycomb.translate.MappingContext;
25 import java.util.List;
26 import javax.annotation.Nonnull;
27 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.AdjacenciesIdentificationContexts;
28 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.adjacencies.identification.contexts.AdjacenciesIdentification;
29 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.adjacencies.identification.contexts.AdjacenciesIdentificationKey;
30 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;
31 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.MappingsBuilder;
32 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;
33 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.MappingBuilder;
34 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;
35 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;
36 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.EidIdentificatorPairBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.MappingId;
38 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
39 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
40
41 /**
42  * Utility for mocking adjacency mappings
43  */
44 public interface AdjacencyMappingContextTestHelper {
45
46     /**
47      * Creates {@link Mapping} for given data.
48      *
49      * @param pair to be mapped
50      * @param id   to be mapped
51      * @return eid to id mapping
52      */
53     default Optional<Mapping> mapping(@Nonnull final EidIdentificatorPair pair, final String id) {
54         return Optional.of(new MappingBuilder().setEidIdentificatorPair(pair).setId(id).build());
55     }
56
57     /**
58      * Creates {@link KeyedInstanceIdentifier} for {@link Mapping} in {@link AdjacenciesIdentificationContexts}.
59      *
60      * @param id                 identificator of the mapping
61      * @param mappingContextName identificator of the mapping context
62      * @return identifier for the mapping
63      */
64     static KeyedInstanceIdentifier<Mapping, MappingKey> mappingIid(@Nonnull final String id,
65                                                                    @Nonnull final String mappingContextName) {
66         return InstanceIdentifier.create(AdjacenciesIdentificationContexts.class).child(AdjacenciesIdentification.class,
67                 new AdjacenciesIdentificationKey(mappingContextName)).child(Mappings.class)
68                 .child(Mapping.class, new MappingKey(id));
69     }
70
71     static EidIdentificatorPair pairOf(@Nonnull final String local, @Nonnull final String remote) {
72         return new EidIdentificatorPairBuilder()
73                 .setLocalEidId(new MappingId(checkNotNull(local, "Local id cannot be null")))
74                 .setRemoteEidId(new MappingId(checkNotNull(remote, "Remote id cannot be null")))
75                 .build();
76     }
77
78     /**
79      * Stubs {@link MappingContext#read} to include given mapping in {@link AdjacenciesIdentification}.
80      *
81      * @param mappingContext    mock instance of {@link MappingContext}
82      * @param localEidId        local id for identification pair
83      * @param remoteEidId       remote id for identification pair
84      * @param mappingName       index to be mapped
85      * @param namingContextName name of the naming context
86      */
87     default void defineAdjacencyMapping(@Nonnull final MappingContext mappingContext, @Nonnull final String localEidId,
88                                         @Nonnull final String remoteEidId, @Nonnull final String mappingName,
89                                         @Nonnull final String namingContextName) {
90         final KeyedInstanceIdentifier<Mapping, MappingKey> mappingIid = mappingIid(mappingName, namingContextName);
91         final InstanceIdentifier<Mappings> mappingsIid = mappingIid.firstIdentifierOf(Mappings.class);
92
93         final Optional<Mapping> singleMapping = mapping(pairOf(localEidId, remoteEidId), mappingName);
94         final List<Mapping> list = Common.getMappingList(mappingContext, mappingsIid);
95         list.add(singleMapping.get());
96
97         doReturn(Optional.of(new MappingsBuilder().setMapping(list).build())).when(mappingContext).read(mappingsIid);
98         doReturn(singleMapping).when(mappingContext).read(mappingIid);
99     }
100
101     default void noAdjacencyMappingDefined(@Nonnull final MappingContext mappingContext, @Nonnull final String name,
102                                            @Nonnull final String namingContextName) {
103         final InstanceIdentifier<Mappings> iid =
104                 mappingIid(name, namingContextName).firstIdentifierOf(Mappings.class);
105         final List<Mapping> list = Common.getMappingList(mappingContext, iid);
106
107         doReturn(Optional.of(new MappingsBuilder().setMapping(list).build())).when(mappingContext).read(iid);
108         doReturn(Optional.absent()).when(mappingContext).read(mappingIid(name, namingContextName));
109     }
110
111     final class Common {
112         private static List<Mapping> getMappingList(@Nonnull final MappingContext mappingContext,
113                                                     @Nonnull final InstanceIdentifier<Mappings> mappingsIid) {
114             final Optional<Mappings> previousMappings = mappingContext.read(mappingsIid);
115             final MappingsBuilder mappingsBuilder;
116             if (previousMappings != null && previousMappings.isPresent()) {
117                 mappingsBuilder = new MappingsBuilder(previousMappings.get());
118             } else {
119                 mappingsBuilder = new MappingsBuilder();
120                 mappingsBuilder.setMapping(Lists.newArrayList());
121             }
122             return mappingsBuilder.getMapping();
123         }
124     }
125
126 }