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.hc2vpp.common.translate.util;
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;
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;
51 @RunWith(HoneycombTestRunner.class)
52 public class NamingContextTest implements InjectablesProcessor {
54 private static final String NAME_1 = "name-1";
55 private static final String NAME_2 = "name-2";
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;
63 private MappingContext mappingContext;
66 private ArgumentCaptor<InstanceIdentifier> instanceIdentifierArgumentCaptor;
69 private ArgumentCaptor<Mapping> mappingArgumentCaptor;
71 private NamingContext namingContext;
72 private KeyedInstanceIdentifier<org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.NamingContext, NamingContextKey>
75 @SchemaContextProvider
76 public ModuleInfoBackedContext schemaContext() {
77 return provideSchemaContextFor(Collections.singleton($YangModuleInfoImpl.getInstance()));
82 MockitoAnnotations.initMocks(this);
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"));
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)));
96 public void addNameNextIndex() throws Exception {
97 namingContext.addName("name-3", mappingContext);
98 verify(mappingContext, times(1))
99 .put(instanceIdentifierArgumentCaptor.capture(), mappingArgumentCaptor.capture());
101 assertEquals(instanceIdentifierArgumentCaptor.getValue(), parentKey("name-3"));
102 assertEquals(mappingArgumentCaptor.getValue(), new MappingBuilder()
108 @Test(expected = IllegalArgumentException.class)
109 public void getAndThrow() {
110 when(mappingContext.read(any())).thenReturn(Optional.absent());
112 .getIndex("non-existing", mappingContext, () -> new IllegalArgumentException("Non existing index"));
115 private Mapping filterForParent(final String parent) {
116 return mappings.getMapping().stream()
117 .filter(mapping -> mapping.getName().equals(parent))
118 .collect(RWUtils.singleItemCollector());
121 private KeyedInstanceIdentifier<Mapping, MappingKey> parentKey(final String parent) {
122 return namingContextIid.child(Mappings.class).child(Mapping.class, new MappingKey(parent));