summaryrefslogtreecommitdiffstats
path: root/lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/util/AdjacencyMappingContextTestHelper.java
blob: f067552aa00b432796f3e9a46fff0045a9590a19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * Copyright (c) 2016 Cisco and/or its affiliates.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.fd.hc2vpp.lisp.util;

import static com.google.common.base.Preconditions.checkNotNull;
import static org.mockito.Mockito.doReturn;

import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import io.fd.honeycomb.translate.MappingContext;
import java.util.List;
import javax.annotation.Nonnull;
import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.AdjacenciesIdentificationCtxAugmentation;
import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.AdjacenciesIdentificationContexts;
import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.adjacencies.identification.contexts.AdjacenciesIdentification;
import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.adjacencies.identification.context.rev160801.adjacencies.identification.context.attributes.adjacencies.identification.contexts.AdjacenciesIdentificationKey;
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;
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;
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;
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;
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;
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;
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;
import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.Contexts;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170911.MappingId;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;

/**
 * Utility for mocking adjacency mappings
 */
public interface AdjacencyMappingContextTestHelper {

    /**
     * Creates {@link Mapping} for given data.
     *
     * @param pair to be mapped
     * @param id   to be mapped
     * @return eid to id mapping
     */
    default Optional<Mapping> mapping(@Nonnull final EidIdentificatorPair pair, final String id) {
        return Optional.of(new MappingBuilder().setEidIdentificatorPair(pair).setId(id).build());
    }

    /**
     * Creates {@link KeyedInstanceIdentifier} for {@link Mapping} in {@link AdjacenciesIdentificationContexts}.
     *
     * @param id                 identificator of the mapping
     * @param mappingContextName identificator of the mapping context
     * @return identifier for the mapping
     */
    static KeyedInstanceIdentifier<Mapping, MappingKey> mappingIid(@Nonnull final String id,
                                                                   @Nonnull final String mappingContextName) {
        return InstanceIdentifier.create(Contexts.class)
                .augmentation(AdjacenciesIdentificationCtxAugmentation.class)
                .child(AdjacenciesIdentificationContexts.class).child(AdjacenciesIdentification.class,
                new AdjacenciesIdentificationKey(mappingContextName)).child(Mappings.class)
                .child(Mapping.class, new MappingKey(id));
    }

    static EidIdentificatorPair pairOf(@Nonnull final String local, @Nonnull final String remote) {
        return new EidIdentificatorPairBuilder()
                .setLocalEidId(new MappingId(checkNotNull(local, "Local id cannot be null")))
                .setRemoteEidId(new MappingId(checkNotNull(remote, "Remote id cannot be null")))
                .build();
    }

    /**
     * Stubs {@link MappingContext#read} to include given mapping in {@link AdjacenciesIdentification}.
     *
     * @param mappingContext    mock instance of {@link MappingContext}
     * @param localEidId        local id for identification pair
     * @param remoteEidId       remote id for identification pair
     * @param mappingName       index to be mapped
     * @param namingContextName name of the naming context
     */
    default void defineAdjacencyMapping(@Nonnull final MappingContext mappingContext, @Nonnull final String localEidId,
                                        @Nonnull final String remoteEidId, @Nonnull final String mappingName,
                                        @Nonnull final String namingContextName) {
        final KeyedInstanceIdentifier<Mapping, MappingKey> mappingIid = mappingIid(mappingName, namingContextName);
        final InstanceIdentifier<Mappings> mappingsIid = mappingIid.firstIdentifierOf(Mappings.class);

        final Optional<Mapping> singleMapping = mapping(pairOf(localEidId, remoteEidId), mappingName);
        final List<Mapping> list = Common.getMappingList(mappingContext, mappingsIid);
        list.add(singleMapping.get());

        doReturn(Optional.of(new MappingsBuilder().setMapping(list).build())).when(mappingContext).read(mappingsIid);
        doReturn(singleMapping).when(mappingContext).read(mappingIid);
    }

    default void noAdjacencyMappingDefined(@Nonnull final MappingContext mappingContext, @Nonnull final String name,
                                           @Nonnull final String namingContextName) {
        final InstanceIdentifier<Mappings> iid =
                mappingIid(name, namingContextName).firstIdentifierOf(Mappings.class);
        final List<Mapping> list = Common.getMappingList(mappingContext, iid);

        doReturn(Optional.of(new MappingsBuilder().setMapping(list).build())).when(mappingContext).read(iid);
        doReturn(Optional.absent()).when(mappingContext).read(mappingIid(name, namingContextName));
    }

    final class Common {
        private static List<Mapping> getMappingList(@Nonnull final MappingContext mappingContext,
                                                    @Nonnull final InstanceIdentifier<Mappings> mappingsIid) {
            final Optional<Mappings> previousMappings = mappingContext.read(mappingsIid);
            final MappingsBuilder mappingsBuilder;
            if (previousMappings != null && previousMappings.isPresent()) {
                mappingsBuilder = new MappingsBuilder(previousMappings.get());
            } else {
                mappingsBuilder = new MappingsBuilder();
                mappingsBuilder.setMapping(Lists.newArrayList());
            }
            return mappingsBuilder.getMapping();
        }
    }

}