HONEYCOMB-335 - Initialization test support 62/5062/6
authorJan Srnicek <jsrnicek@cisco.com>
Fri, 10 Feb 2017 09:43:31 +0000 (10:43 +0100)
committerMarek Gradzki <mgradzki@cisco.com>
Fri, 10 Feb 2017 12:21:36 +0000 (12:21 +0000)
- initialization test support for container and list customizers
- test samples

Change-Id: If3fe4faf82a86c43fafdfab694a4388d50f61de4
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/read/LispStateCustomizerTest.java
lisp/lisp2vpp/src/test/java/io/fd/hc2vpp/lisp/translate/read/LocatorSetCustomizerTest.java
lisp/lisp2vpp/src/test/resources/lisp-config.json [new file with mode: 0644]
lisp/lisp2vpp/src/test/resources/lisp-operational.json [new file with mode: 0644]
lisp/lisp2vpp/src/test/resources/locator-set.json [new file with mode: 0644]
vpp-common/vpp-translate-test/src/main/java/io/fd/hc2vpp/common/test/read/InitializationTest.java [new file with mode: 0644]
vpp-common/vpp-translate-test/src/main/java/io/fd/hc2vpp/common/test/read/InitializingListReaderCustomizerTest.java
vpp-common/vpp-translate-test/src/main/java/io/fd/hc2vpp/common/test/read/InitializingReaderCustomizerTest.java

index 3df3f35..06eda22 100644 (file)
 
 package io.fd.hc2vpp.lisp.translate.read;
 
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.when;
-
+import com.google.common.collect.ImmutableSet;
+import io.fd.hc2vpp.common.test.read.InitializingReaderCustomizerTest;
+import io.fd.honeycomb.test.tools.HoneycombTestRunner;
+import io.fd.honeycomb.test.tools.annotations.InjectTestData;
+import io.fd.honeycomb.test.tools.annotations.InjectablesProcessor;
+import io.fd.honeycomb.test.tools.annotations.SchemaContextProvider;
 import io.fd.honeycomb.translate.read.ReadFailedException;
 import io.fd.honeycomb.translate.spi.read.ReaderCustomizer;
-import io.fd.hc2vpp.common.test.read.ReaderCustomizerTest;
+import io.fd.vpp.jvpp.core.dto.ShowLispStatusReply;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.Mockito;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.Lisp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.LispState;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.LispStateBuilder;
+import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import io.fd.vpp.jvpp.core.dto.ShowLispStatusReply;
 
-public class LispStateCustomizerTest extends ReaderCustomizerTest<LispState, LispStateBuilder> {
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.when;
+
+@RunWith(HoneycombTestRunner.class)
+public class LispStateCustomizerTest extends InitializingReaderCustomizerTest<LispState, LispStateBuilder>
+    implements InjectablesProcessor{
 
     private InstanceIdentifier<LispState> identifier;
 
@@ -56,6 +67,21 @@ public class LispStateCustomizerTest extends ReaderCustomizerTest<LispState, Lis
         assertEquals(true, builder.build().isEnable());
     }
 
+    @SchemaContextProvider
+    public ModuleInfoBackedContext schemaContext() {
+        return provideSchemaContextFor(ImmutableSet.of($YangModuleInfoImpl.getInstance()));
+    }
+
+
+    @Test
+    public void testInit(@InjectTestData(resourcePath = "/lisp-config.json") Lisp config,
+                         @InjectTestData(resourcePath = "/lisp-operational.json") LispState operational) {
+        final InstanceIdentifier<LispState> operationalPath = InstanceIdentifier.create(LispState.class);
+        final InstanceIdentifier<Lisp> configPath = InstanceIdentifier.create(Lisp.class);
+
+        invokeInitTest(operationalPath, operational, configPath, config);
+    }
+
     @Override
     protected ReaderCustomizer<LispState, LispStateBuilder> initCustomizer() {
         return new LispStateCustomizer(api);
index 7c57e6b..744c575 100644 (file)
 
 package io.fd.hc2vpp.lisp.translate.read;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.when;
-
 import com.google.common.collect.ImmutableList;
-import io.fd.honeycomb.translate.spi.read.ReaderCustomizer;
+import com.google.common.collect.ImmutableSet;
+import io.fd.hc2vpp.common.test.read.InitializingListReaderCustomizerTest;
 import io.fd.hc2vpp.common.translate.util.NamingContext;
-import io.fd.hc2vpp.common.test.read.ListReaderCustomizerTest;
-import java.nio.charset.StandardCharsets;
-import java.util.List;
+import io.fd.honeycomb.test.tools.HoneycombTestRunner;
+import io.fd.honeycomb.test.tools.annotations.InjectTestData;
+import io.fd.honeycomb.test.tools.annotations.InjectablesProcessor;
+import io.fd.honeycomb.test.tools.annotations.SchemaContextProvider;
+import io.fd.honeycomb.translate.spi.read.ReaderCustomizer;
+import io.fd.vpp.jvpp.core.dto.LispLocatorSetDetails;
+import io.fd.vpp.jvpp.core.dto.LispLocatorSetDetailsReplyDump;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.$YangModuleInfoImpl;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.Lisp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.LispState;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.lisp.feature.data.grouping.LispFeatureData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.locator.sets.grouping.LocatorSets;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.locator.sets.grouping.LocatorSetsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.locator.sets.grouping.locator.sets.LocatorSet;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.locator.sets.grouping.locator.sets.LocatorSetBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.locator.sets.grouping.locator.sets.LocatorSetKey;
+import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import io.fd.vpp.jvpp.core.dto.LispLocatorSetDetails;
-import io.fd.vpp.jvpp.core.dto.LispLocatorSetDetailsReplyDump;
+import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.when;
 
+@RunWith(HoneycombTestRunner.class)
 public class LocatorSetCustomizerTest
-        extends ListReaderCustomizerTest<LocatorSet, LocatorSetKey, LocatorSetBuilder> {
+        extends InitializingListReaderCustomizerTest<LocatorSet, LocatorSetKey, LocatorSetBuilder>
+        implements InjectablesProcessor {
 
+    private static final String LOC_1_PATH = "/lisp:lisp-state" +
+            "/lisp:lisp-feature-data" +
+            "/lisp:locator-sets" +
+            "/lisp:locator-set[lisp:name='loc1']";
     private InstanceIdentifier<LocatorSet> emptyId;
     private InstanceIdentifier<LocatorSet> validId;
 
@@ -89,6 +107,27 @@ public class LocatorSetCustomizerTest
         assertEquals("loc-set", keys.get(0).getName());
     }
 
+    @SchemaContextProvider
+    public ModuleInfoBackedContext schemaContext() {
+        return provideSchemaContextFor(ImmutableSet.of($YangModuleInfoImpl.getInstance()));
+    }
+
+    @Test
+    public void testInit(@InjectTestData(resourcePath = "/locator-set.json", id = LOC_1_PATH) LocatorSet locatorSet) {
+        final LocatorSetKey loc1Key = new LocatorSetKey("loc1");
+        final KeyedInstanceIdentifier<LocatorSet, LocatorSetKey> operationalPath = InstanceIdentifier.create(LispState.class)
+                .child(LispFeatureData.class)
+                .child(LocatorSets.class)
+                .child(LocatorSet.class, loc1Key);
+
+        final KeyedInstanceIdentifier<LocatorSet, LocatorSetKey> configPath = InstanceIdentifier.create(Lisp.class)
+                .child(LispFeatureData.class)
+                .child(LocatorSets.class)
+                .child(LocatorSet.class, loc1Key);
+
+        invokeInitTest(operationalPath, locatorSet, configPath, locatorSet);
+    }
+
     @Override
     protected ReaderCustomizer<LocatorSet, LocatorSetBuilder> initCustomizer() {
         return new LocatorSetCustomizer(api, new NamingContext("loc", "locator-set-context"));
diff --git a/lisp/lisp2vpp/src/test/resources/lisp-config.json b/lisp/lisp2vpp/src/test/resources/lisp-config.json
new file mode 100644 (file)
index 0000000..27a92db
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "lisp": {
+    "enable": true,
+    "lisp-feature-data": {
+    }
+  }
+}
\ No newline at end of file
diff --git a/lisp/lisp2vpp/src/test/resources/lisp-operational.json b/lisp/lisp2vpp/src/test/resources/lisp-operational.json
new file mode 100644 (file)
index 0000000..436b712
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "lisp-state": {
+    "enable":true,
+    "lisp-feature-data": {
+    }
+  }
+}
\ No newline at end of file
diff --git a/lisp/lisp2vpp/src/test/resources/locator-set.json b/lisp/lisp2vpp/src/test/resources/locator-set.json
new file mode 100644 (file)
index 0000000..446ba11
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "locator-set": {
+    "name": "loc1"
+  }
+}
\ No newline at end of file
diff --git a/vpp-common/vpp-translate-test/src/main/java/io/fd/hc2vpp/common/test/read/InitializationTest.java b/vpp-common/vpp-translate-test/src/main/java/io/fd/hc2vpp/common/test/read/InitializationTest.java
new file mode 100644 (file)
index 0000000..5ea1257
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2017 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.common.test.read;
+
+
+import io.fd.honeycomb.translate.read.ReadContext;
+import io.fd.honeycomb.translate.spi.read.Initialized;
+import io.fd.honeycomb.translate.spi.read.InitializingCustomizer;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import javax.annotation.Nonnull;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+interface InitializationTest<D extends DataObject> {
+
+    /**
+     * Invokes initialization test
+     *
+     * @param customizer      initialization capable customizer
+     * @param ctx             read context
+     * @param operationalPath paths passed to initialization
+     * @param operationalData data passed to initialization
+     * @param configPath      expected data path
+     * @param configData      expected data
+     */
+    default void invokeInit(@Nonnull final InitializingCustomizer<D> customizer,
+                            @Nonnull final ReadContext ctx,
+                            @Nonnull final InstanceIdentifier<D> operationalPath,
+                            @Nonnull final D operationalData,
+                            @Nonnull final InstanceIdentifier<?> configPath,
+                            @Nonnull final Object configData) {
+        final Initialized<? extends DataObject> init = customizer.init(operationalPath, operationalData, ctx);
+        assertNotNull(init);
+        assertEquals(configPath, init.getId());
+        assertEquals(configData, init.getData());
+    }
+}
index b6089c4..7ad2055 100644 (file)
@@ -21,6 +21,9 @@ import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.Identifiable;
 import org.opendaylight.yangtools.yang.binding.Identifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import javax.annotation.Nonnull;
 
 /**
  * Generic test for classes implementing {@link InitializingListReaderCustomizer} interface.
@@ -30,11 +33,12 @@ import org.opendaylight.yangtools.yang.binding.Identifier;
  * @param <B> Specific Builder for handled type (D)
  */
 public abstract class InitializingListReaderCustomizerTest<D extends DataObject & Identifiable<K>, K extends Identifier<D>, B extends Builder<D>> extends
-    ListReaderCustomizerTest<D, K, B> {
+        ListReaderCustomizerTest<D, K, B> implements InitializationTest<D> {
+
 
     protected InitializingListReaderCustomizerTest(
-        final Class<D> dataObjectClass,
-        final Class<? extends Builder<? extends DataObject>> parentBuilderClass) {
+            final Class<D> dataObjectClass,
+            final Class<? extends Builder<? extends DataObject>> parentBuilderClass) {
         super(dataObjectClass, parentBuilderClass);
     }
 
@@ -42,4 +46,11 @@ public abstract class InitializingListReaderCustomizerTest<D extends DataObject
     protected InitializingListReaderCustomizer<D, K, B> getCustomizer() {
         return InitializingListReaderCustomizer.class.cast(super.getCustomizer());
     }
+
+    protected void invokeInitTest(@Nonnull InstanceIdentifier<D> operationalPath,
+                               @Nonnull D operationalData,
+                               @Nonnull InstanceIdentifier<?> configPath,
+                               @Nonnull Object configData) {
+        invokeInit(getCustomizer(), ctx, operationalPath, operationalData, configPath, configData);
+    }
 }
index e102ef8..69fd6ab 100644 (file)
@@ -19,6 +19,9 @@ package io.fd.hc2vpp.common.test.read;
 import io.fd.honeycomb.translate.spi.read.InitializingReaderCustomizer;
 import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import javax.annotation.Nonnull;
 
 /**
  * Generic test for classes implementing {@link InitializingReaderCustomizer} interface.
@@ -27,7 +30,7 @@ import org.opendaylight.yangtools.yang.binding.DataObject;
  * @param <B> Specific Builder for handled type (D)
  */
 public abstract class InitializingReaderCustomizerTest<D extends DataObject, B extends Builder<D>> extends
-    ReaderCustomizerTest<D, B> {
+        ReaderCustomizerTest<D, B> implements InitializationTest<D> {
 
     protected InitializingReaderCustomizerTest(
         final Class<D> dataObjectClass,
@@ -39,4 +42,11 @@ public abstract class InitializingReaderCustomizerTest<D extends DataObject, B e
     protected InitializingReaderCustomizer<D, B> getCustomizer() {
         return InitializingReaderCustomizer.class.cast(super.getCustomizer());
     }
+
+    protected void invokeInitTest(@Nonnull InstanceIdentifier<D> operationalPath,
+                               @Nonnull D operationalData,
+                               @Nonnull InstanceIdentifier<?> configPath,
+                               @Nonnull Object configData) {
+        invokeInit(getCustomizer(), ctx, operationalPath, operationalData, configPath, configData);
+    }
 }