From 30149540a89b87506da30d25004f9c1181dcee2d Mon Sep 17 00:00:00 2001 From: Jakub Toth Date: Fri, 9 Jun 2017 10:22:01 +0200 Subject: [PATCH] Binding2 runtime - Codecs impl - tests Change-Id: Id6f1fc05bcdc7c156eb66b6c50f483b93d772bf7 Signed-off-by: Jakub Toth --- .../codec/impl/value/EnumerationCodec.java | 16 ++--- .../javav2/dom/codec/NonCachingCodecTest.java | 32 +++++++++ .../impl/AbstractBindingRuntimeTest.java | 37 ++++++++++ .../context/UnionValueOptionContextTest.java | 72 +++++++++++++++++++ .../impl/value/EnumerationCodecTest.java | 37 ++++++++++ 5 files changed, 186 insertions(+), 8 deletions(-) create mode 100644 binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/NonCachingCodecTest.java create mode 100644 binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/AbstractBindingRuntimeTest.java create mode 100644 binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/context/UnionValueOptionContextTest.java create mode 100644 binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/value/EnumerationCodecTest.java diff --git a/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/value/EnumerationCodec.java b/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/value/EnumerationCodec.java index 3c88f3623a..3918ea8c3c 100644 --- a/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/value/EnumerationCodec.java +++ b/binding2/mdsal-binding2-dom-codec/src/main/java/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/value/EnumerationCodec.java @@ -35,14 +35,14 @@ final class EnumerationCodec extends ReflectionBasedCodec implements SchemaUnawa @SuppressWarnings({ "rawtypes", "unchecked" }) final Class> enumType = (Class) returnType; return () -> { - Map> nameToValue = new HashMap<>(); - for (Enum enumValue : enumType.getEnumConstants()) { + final Map> nameToValue = new HashMap<>(); + for (final Enum enumValue : enumType.getEnumConstants()) { nameToValue.put(enumValue.toString(), enumValue); } - Map> yangNameToBinding = new HashMap<>(); - for (EnumPair yangValue : enumSchema.getValues()) { + final Map> yangNameToBinding = new HashMap<>(); + for (final EnumPair yangValue : enumSchema.getValues()) { final String bindingName = JavaIdentifierNormalizer.normalizeSpecificIdentifier(yangValue.getName(), - JavaIdentifier.CLASS); + JavaIdentifier.ENUM_VALUE); final Enum bindingVal = nameToValue.get(bindingName); yangNameToBinding.put(yangValue.getName(), bindingVal); } @@ -51,15 +51,15 @@ final class EnumerationCodec extends ReflectionBasedCodec implements SchemaUnawa } @Override - public Object deserialize(Object input) { - Enum value = yangValueToBinding.get(input); + public Object deserialize(final Object input) { + final Enum value = yangValueToBinding.get(input); Preconditions.checkArgument(value != null, "Invalid enumeration value %s. Valid values are %s", input, yangValueToBinding.keySet()); return value; } @Override - public Object serialize(Object input) { + public Object serialize(final Object input) { Preconditions.checkArgument(getTypeClass().isInstance(input), "Input must be instance of %s", getTypeClass()); return yangValueToBinding.inverse().get(input); } diff --git a/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/NonCachingCodecTest.java b/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/NonCachingCodecTest.java new file mode 100644 index 0000000000..b73b3024b2 --- /dev/null +++ b/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/NonCachingCodecTest.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.dom.codec; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import org.junit.Test; +import org.opendaylight.mdsal.binding.javav2.dom.codec.api.BindingNormalizedNodeCodec; +import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.NonCachingCodec; + +public class NonCachingCodecTest { + + @SuppressWarnings({ "rawtypes", "unchecked", "resource" }) + @Test + public void basicTest() throws Exception { + final BindingNormalizedNodeCodec codec = mock(BindingNormalizedNodeCodec.class); + doReturn(null).when(codec).serialize(null); + doReturn(null).when(codec).deserialize(null); + final NonCachingCodec nonCachingCodec = new NonCachingCodec<>(codec); + nonCachingCodec.serialize(null); + verify(codec).serialize(null); + nonCachingCodec.deserialize(null); + verify(codec).deserialize(null); + } +} diff --git a/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/AbstractBindingRuntimeTest.java b/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/AbstractBindingRuntimeTest.java new file mode 100644 index 0000000000..dc94e5b6c1 --- /dev/null +++ b/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/AbstractBindingRuntimeTest.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.dom.codec.impl; + +import org.junit.Before; +import org.opendaylight.mdsal.binding.javav2.runtime.context.BindingRuntimeContext; +import org.opendaylight.mdsal.binding.javav2.runtime.context.ModuleInfoBackedContext; +import org.opendaylight.mdsal.binding.javav2.runtime.reflection.BindingReflections; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; + +public abstract class AbstractBindingRuntimeTest { + + private SchemaContext schemaContext; + private BindingRuntimeContext runtimeContext; + + @Before + public void setup() { + final ModuleInfoBackedContext ctx = ModuleInfoBackedContext.create(); + ctx.addModuleInfos(BindingReflections.loadModuleInfos()); + schemaContext = ctx.tryToCreateSchemaContext().get(); + runtimeContext = BindingRuntimeContext.create(ctx, schemaContext); + + } + + public SchemaContext getSchemaContext() { + return schemaContext; + } + + public BindingRuntimeContext getRuntimeContext() { + return runtimeContext; + } +} diff --git a/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/context/UnionValueOptionContextTest.java b/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/context/UnionValueOptionContextTest.java new file mode 100644 index 0000000000..b0f6ebb98f --- /dev/null +++ b/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/context/UnionValueOptionContextTest.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.dom.codec.impl.context; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; + +import java.lang.reflect.Method; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.value.ValueTypeCodec; + +public class UnionValueOptionContextTest { + + private static UnionValueOptionContext TEST_UVOC_1; + private static UnionValueOptionContext TEST_UVOC_2; + + @Before + public void setUp() throws Exception { + final Method methodFoo1 = TestDataObject1.class.getMethod("foo"); + final Method methodFoo2 = TestDataObject2.class.getMethod("foo"); + TEST_UVOC_1 = new UnionValueOptionContext(TestUnion.class, TestDataObject1.class, methodFoo1, + ValueTypeCodec.EMPTY_CODEC); + TEST_UVOC_2 = new UnionValueOptionContext(TestUnion.class, TestDataObject2.class, methodFoo2, + ValueTypeCodec.EMPTY_CODEC); + } + + @Test + public void hashCodeTest() throws Exception { + final Method methodFoo1 = TestDataObject1.class.getMethod("foo"); + final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(TestUnion.class, TestDataObject1.class, + methodFoo1, ValueTypeCodec.EMPTY_CODEC); + + assertEquals("HashCode", test_uvoc.hashCode(), TEST_UVOC_1.hashCode()); + assertNotEquals("HashCode", TEST_UVOC_1.hashCode(), TEST_UVOC_2.hashCode()); + } + + @Test + public void equalsTest() throws Exception { + final Method methodFoo1 = TestDataObject1.class.getMethod("foo"); + final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(TestUnion.class, TestDataObject1.class, + methodFoo1, ValueTypeCodec.EMPTY_CODEC); + + assertTrue("Equals", TEST_UVOC_1.equals(test_uvoc)); + assertFalse("Not equals", TEST_UVOC_1.equals(TEST_UVOC_2)); + } + + protected static final class TestDataObject1 { + public void foo() { + } + } + + protected static final class TestDataObject2 { + public void foo() { + } + } + + public static final class TestUnion { + public TestUnion(final TestDataObject1 arg) { + } + + public TestUnion(final TestDataObject2 arg) { + } + } +} diff --git a/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/value/EnumerationCodecTest.java b/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/value/EnumerationCodecTest.java new file mode 100644 index 0000000000..0b77111cf9 --- /dev/null +++ b/binding2/mdsal-binding2-dom-codec/src/main/test/org/opendaylight/mdsal/binding/javav2/dom/codec/impl/value/EnumerationCodecTest.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.dom.codec.impl.value; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import com.google.common.collect.ImmutableList; +import org.junit.Test; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; + +public class EnumerationCodecTest { + + private enum TestEnum { + TEST + } + + @Test + public void basicTest() throws Exception { + final EnumPair pair = mock(EnumPair.class); + doReturn(TestEnum.TEST.name()).when(pair).getName(); + doReturn(0).when(pair).getValue(); + final EnumTypeDefinition definition = mock(EnumTypeDefinition.class); + doReturn(ImmutableList.of(pair)).when(definition).getValues(); + + final EnumerationCodec codec = EnumerationCodec.loader(TestEnum.class, definition).call(); + assertEquals(codec.deserialize(codec.serialize(TestEnum.TEST)), TestEnum.TEST); + assertEquals(codec.serialize(codec.deserialize(TestEnum.TEST.name())), TestEnum.TEST.name()); + } +} -- 2.36.6