c85a874c31b2700fa9cea2d56c01ea9d4d2708e5
[hc2vpp.git] /
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.hc2vpp.common.translate.util;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.mockito.ArgumentMatchers.any;
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 io.fd.honeycomb.test.tools.HoneycombTestRunner;
27 import io.fd.honeycomb.test.tools.annotations.InjectTestData;
28 import io.fd.honeycomb.test.tools.annotations.InjectablesProcessor;
29 import io.fd.honeycomb.test.tools.annotations.SchemaContextProvider;
30 import io.fd.honeycomb.translate.MappingContext;
31 import io.fd.honeycomb.translate.util.RWUtils;
32 import java.util.Collections;
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.naming.context.rev160513.$YangModuleInfoImpl;
41 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.Contexts;
42 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.NamingContextKey;
43 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.Mappings;
44 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.mappings.Mapping;
45 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.mappings.MappingBuilder;
46 import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.mappings.MappingKey;
47 import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext;
48 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
49 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
50
51 @RunWith(HoneycombTestRunner.class)
52 public class NamingContextTest implements InjectablesProcessor {
53
54     private static final String NAME_1 = "name-1";
55     private static final String NAME_2 = "name-2";
56
57     @InjectTestData(resourcePath = "/naming.json", id = "/naming-context:contexts" +
58             "/naming-context:naming-context[naming-context:name='context']" +
59             "/naming-context:mappings")
60     private Mappings mappings;
61
62     @Mock
63     private MappingContext mappingContext;
64
65     @Captor
66     private ArgumentCaptor<InstanceIdentifier> instanceIdentifierArgumentCaptor;
67
68     @Captor
69     private ArgumentCaptor<Mapping> mappingArgumentCaptor;
70
71     private NamingContext namingContext;
72     private KeyedInstanceIdentifier<org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.NamingContext, NamingContextKey>
73             namingContextIid;
74
75     @SchemaContextProvider
76     public ModuleInfoBackedContext schemaContext() {
77         return provideSchemaContextFor(Collections.singleton($YangModuleInfoImpl.getInstance()));
78     }
79
80     @Before
81     public void init() {
82         MockitoAnnotations.initMocks(this);
83
84         this.namingContext = new NamingContext("prefix", "context");
85         this.namingContextIid = InstanceIdentifier.create(Contexts.class).child(
86                 org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.NamingContext.class,
87                 new NamingContextKey("context"));
88
89         when(mappingContext.read(namingContextIid.child(Mappings.class))).thenReturn(Optional.of(mappings));
90         when(mappingContext.read(parentKey(NAME_1))).thenReturn(Optional.of(filterForParent(NAME_1)));
91         when(mappingContext.read(parentKey(NAME_2))).thenReturn(Optional.of(filterForParent(NAME_2)));
92
93     }
94
95     @Test
96     public void addNameNextIndex() throws Exception {
97         namingContext.addName("name-3", mappingContext);
98         verify(mappingContext, times(1))
99                 .put(instanceIdentifierArgumentCaptor.capture(), mappingArgumentCaptor.capture());
100
101         assertEquals(instanceIdentifierArgumentCaptor.getValue(), parentKey("name-3"));
102         assertEquals(mappingArgumentCaptor.getValue(), new MappingBuilder()
103                 .setIndex(3)
104                 .setName("name-3")
105                 .build());
106     }
107
108     @Test(expected = IllegalArgumentException.class)
109     public void getAndThrow() {
110         when(mappingContext.read(any())).thenReturn(Optional.absent());
111         namingContext
112                 .getIndex("non-existing", mappingContext, () -> new IllegalArgumentException("Non existing index"));
113     }
114
115     private Mapping filterForParent(final String parent) {
116         return mappings.getMapping().stream()
117                 .filter(mapping -> mapping.getName().equals(parent))
118                 .collect(RWUtils.singleItemCollector());
119     }
120
121     private KeyedInstanceIdentifier<Mapping, MappingKey> parentKey(final String parent) {
122         return namingContextIid.child(Mappings.class).child(Mapping.class, new MappingKey(parent));
123     }
124 }