From 31996a6707d75a5f87f7d8c89f563af74e32fe70 Mon Sep 17 00:00:00 2001 From: Marek Gradzki Date: Thu, 24 Aug 2017 13:08:49 +0200 Subject: NamingContext.getNameIfPresent should not fail if name is missing Also makes InterfaceChangeNotificationProducer notification translation code more defensive. The issue was revealed by HC2VPP-216 and HC2VPP-220. Change-Id: I20792a51743ae621d86c1b9066d680bc2303ed82 Signed-off-by: Marek Gradzki --- .../common/translate/util/NamingContextTest.java | 33 +++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'vpp-common/vpp-translate-utils/src/test') diff --git a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/NamingContextTest.java b/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/NamingContextTest.java index c3c753376..1fe4da50a 100644 --- a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/NamingContextTest.java +++ b/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/NamingContextTest.java @@ -18,11 +18,13 @@ package io.fd.hc2vpp.common.translate.util; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import com.google.common.base.Optional; +import com.google.common.collect.Lists; import io.fd.honeycomb.test.tools.HoneycombTestRunner; import io.fd.honeycomb.test.tools.annotations.InjectTestData; import io.fd.honeycomb.test.tools.annotations.InjectablesProcessor; @@ -37,14 +39,15 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.$YangModuleInfoImpl; import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.Contexts; import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.NamingContextKey; import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.Mappings; +import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.MappingsBuilder; import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.mappings.Mapping; import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.mappings.MappingBuilder; import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.mappings.MappingKey; -import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; @@ -112,6 +115,34 @@ public class NamingContextTest implements InjectablesProcessor { .getIndex("non-existing", mappingContext, () -> new IllegalArgumentException("Non existing index")); } + @Test(expected = IllegalStateException.class) + public void getNameIfPresentFails() { + final Mapping mapping1 = mock(Mapping.class); + final Mapping mapping2 = mock(Mapping.class); + final Mappings mappings = new MappingsBuilder().setMapping(Lists.newArrayList(mapping1, mapping2)).build(); + when(mappingContext.read(namingContextIid.child(Mappings.class))).thenReturn(Optional.of(mappings)); + + namingContext.getNameIfPresent(0, mappingContext); + } + + @Test + public void getNameIfPresentReturnsAbsent() { + final Mapping mapping1 = new MappingBuilder().setIndex(1).setName(NAME_1).build(); + final Mappings mappings = new MappingsBuilder().setMapping(Lists.newArrayList(mapping1)).build(); + when(mappingContext.read(namingContextIid.child(Mappings.class))).thenReturn(Optional.of(mappings)); + + assertEquals(Optional.absent(), namingContext.getNameIfPresent(0, mappingContext)); + } + + @Test + public void getNameIfPresent() { + final Mapping mapping1 = new MappingBuilder().setIndex(1).setName(NAME_1).build(); + final Mappings mappings = new MappingsBuilder().setMapping(Lists.newArrayList(mapping1)).build(); + when(mappingContext.read(namingContextIid.child(Mappings.class))).thenReturn(Optional.of(mappings)); + + assertEquals(Optional.of(NAME_1), namingContext.getNameIfPresent(1, mappingContext)); + } + private Mapping filterForParent(final String parent) { return mappings.getMapping().stream() .filter(mapping -> mapping.getName().equals(parent)) -- cgit 1.2.3-korg