Refactor AbstractDataBrokerTestCustomizer 81/92981/3
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 7 Oct 2020 20:41:32 +0000 (22:41 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 7 Oct 2020 20:57:11 +0000 (22:57 +0200)
Since we are dealing with binding classes and their translation,
make sure we operate on BindingRuntimeContext as the primary
entrypoint for tests and other harness.

This allows us to eliminate a few testing-only classes, which
were dealing with EffectiveModelContext -> BindingRuntimeContext
translation.

JIRA: MDSAL-578
Change-Id: I2539ea427cdc6d8a76699bb59fcad1f9e02f60dd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingNormalizedCodecTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializerTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractBaseDataBrokerTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractDataBrokerTestCustomizer.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractNotificationBrokerTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractSchemaAwareTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/BindingTestContext.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/MockAdapterContext.java [deleted file]
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/MockSchemaService.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/TestingModuleInfoSnapshot.java [deleted file]
binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/BindingRuntimeHelpers.java

index b74c659ac73f785e204bee3ab530c12c8563de17..9f15382a759f1a708d975d9c6ffd51dc384d7678 100644 (file)
@@ -21,7 +21,8 @@ import java.util.Set;
 import java.util.stream.Collectors;
 import org.junit.Test;
 import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractSchemaAwareTest;
-import org.opendaylight.mdsal.binding.dom.adapter.test.util.MockAdapterContext;
+import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.bi.ba.rpcservice.rev140701.OpendaylightTestRpcServiceService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeComplexUsesAugment;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.TreeLeafOnlyAugment;
@@ -53,27 +54,22 @@ public class BindingNormalizedCodecTest extends AbstractSchemaAwareTest {
     private static final YangInstanceIdentifier BI_TOP_LEVEL_LIST = YangInstanceIdentifier.builder().node(Top.QNAME)
         .node(TopLevelList.QNAME).nodeWithKey(TopLevelList.QNAME, NAME_QNAME, TOP_FOO_KEY.getName()).build();
 
-    private MockAdapterContext codec;
-    private EffectiveModelContext context;
+    private CurrentAdapterSerializer serializer;
 
     @Override
-    protected void setupWithSchema(final EffectiveModelContext schemaContext) {
-        this.context = schemaContext;
-        this.codec = new MockAdapterContext();
+    protected void setupWithRuntimeContext(final BindingRuntimeContext runtimeContext) {
+        serializer = new CurrentAdapterSerializer(new BindingCodecContext(runtimeContext));
     }
 
     @Test
     public void testComplexAugmentationSerialization() {
-        codec.onModelContextUpdated(context);
-        final PathArgument lastArg = codec.currentSerializer().toYangInstanceIdentifier(BA_TREE_COMPLEX_USES)
-                .getLastPathArgument();
+        final PathArgument lastArg = serializer.toYangInstanceIdentifier(BA_TREE_COMPLEX_USES).getLastPathArgument();
         assertTrue(lastArg instanceof AugmentationIdentifier);
     }
 
     @Test
     public void testLeafOnlyAugmentationSerialization() {
-        codec.onModelContextUpdated(context);
-        final PathArgument leafOnlyLastArg = codec.currentSerializer().toYangInstanceIdentifier(BA_TREE_LEAF_ONLY)
+        final PathArgument leafOnlyLastArg = serializer.toYangInstanceIdentifier(BA_TREE_LEAF_ONLY)
             .getLastPathArgument();
         assertTrue(leafOnlyLastArg instanceof AugmentationIdentifier);
         assertTrue(((AugmentationIdentifier) leafOnlyLastArg).getPossibleChildNames().contains(SIMPLE_VALUE_QNAME));
@@ -81,8 +77,7 @@ public class BindingNormalizedCodecTest extends AbstractSchemaAwareTest {
 
     @Test
     public void testGetRpcMethodToQName() {
-        codec.onModelContextUpdated(context);
-        final List<String> retMap = codec.currentSerializer()
+        final List<String> retMap = serializer
                 .getRpcMethodToQName(OpendaylightTestRpcServiceService.class).keySet().stream()
                 .map(Method::getName)
                 .collect(Collectors.toList());
index e0cd4a0ad7d0decd8fe2ada7e35f54f7ab7d078e..1c4467710dc8012ff35d589cb56c9596da54a338 100644 (file)
@@ -13,15 +13,16 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThrows;
 
+import com.google.common.util.concurrent.ListenableFuture;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Map.Entry;
 import org.junit.Test;
-import org.opendaylight.mdsal.binding.dom.adapter.test.util.TestingModuleInfoSnapshot;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
 import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
 import org.opendaylight.mdsal.binding.runtime.api.DefaultBindingRuntimeContext;
+import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -35,6 +36,8 @@ import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
+import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class CurrentAdapterSerializerTest {
@@ -118,4 +121,28 @@ public class CurrentAdapterSerializerTest {
             "urn:test", "2017-01-01", "cont")));
         return codec.fromNormalizedNode(path, data);
     }
+
+    private static final class TestingModuleInfoSnapshot implements ModuleInfoSnapshot {
+        static final TestingModuleInfoSnapshot INSTANCE = new TestingModuleInfoSnapshot();
+
+        private TestingModuleInfoSnapshot() {
+            // Hidden on purpose
+        }
+
+        @Override
+        public EffectiveModelContext getEffectiveModelContext() {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public ListenableFuture<? extends YangTextSchemaSource> getSource(SourceIdentifier sourceIdentifier) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        @SuppressWarnings("unchecked")
+        public <T> Class<T> loadClass(String fullyQualifiedName) throws ClassNotFoundException {
+            return (Class<T>) Class.forName(fullyQualifiedName);
+        }
+    }
 }
index ea4c2ef27ccffaaa3470c7c2a1050f4080bee711..81270a9bb89fc37bdca27b15838a3a1f351ba4c7 100644 (file)
@@ -12,8 +12,8 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public abstract class AbstractBaseDataBrokerTest extends AbstractSchemaAwareTest {
     private static final int ASSERT_COMMIT_DEFAULT_TIMEOUT = 5000;
@@ -32,11 +32,12 @@ public abstract class AbstractBaseDataBrokerTest extends AbstractSchemaAwareTest
     }
 
     @Override
-    protected void setupWithSchema(final EffectiveModelContext context) {
+    protected void setupWithRuntimeContext(final BindingRuntimeContext runtimeContext) {
         testCustomizer = createDataBrokerTestCustomizer();
         dataBroker = testCustomizer.createDataBroker();
         domBroker = testCustomizer.getDOMDataBroker();
-        testCustomizer.updateSchema(context);
+        testCustomizer.updateSchema(runtimeContext);
+        super.setupWithRuntimeContext(runtimeContext);
     }
 
     public DataBroker getDataBroker() {
index af5611921d37bd7a1c28d348536e72a17fb1145d..162ad9625cc436644f3a7571bcda919054c01ebd 100644 (file)
@@ -17,8 +17,8 @@ import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
 import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMDataBrokerAdapter;
 import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMNotificationPublishServiceAdapter;
 import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMNotificationServiceAdapter;
-import org.opendaylight.mdsal.binding.dom.adapter.test.util.MockAdapterContext;
 import org.opendaylight.mdsal.binding.dom.adapter.test.util.MockSchemaService;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
@@ -26,15 +26,13 @@ import org.opendaylight.mdsal.dom.broker.DOMNotificationRouter;
 import org.opendaylight.mdsal.dom.broker.SerializedDOMDataBroker;
 import org.opendaylight.mdsal.dom.spi.store.DOMStore;
 import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStore;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public abstract class AbstractDataBrokerTestCustomizer {
+    private final DOMNotificationRouter domNotificationRouter = DOMNotificationRouter.create(16);
+    private final MockSchemaService schemaService = new MockSchemaService();
 
     private DOMDataBroker domDataBroker;
-    private final DOMNotificationRouter domNotificationRouter;
-    private final MockSchemaService schemaService;
     private ImmutableMap<LogicalDatastoreType, DOMStore> datastores;
-    private final MockAdapterContext adapterContext;
 
     public ImmutableMap<LogicalDatastoreType, DOMStore> createDatastores() {
         return ImmutableMap.<LogicalDatastoreType, DOMStore>builder()
@@ -43,13 +41,6 @@ public abstract class AbstractDataBrokerTestCustomizer {
                 .build();
     }
 
-    public AbstractDataBrokerTestCustomizer() {
-        schemaService = new MockSchemaService();
-        adapterContext = new MockAdapterContext();
-        schemaService.registerSchemaContextListener(adapterContext);
-        domNotificationRouter = DOMNotificationRouter.create(16);
-    }
-
     public DOMStore createConfigurationDatastore() {
         final InMemoryDOMDataStore store = new InMemoryDOMDataStore("CFG", getDataTreeChangeListenerExecutor());
         schemaService.registerSchemaContextListener(store);
@@ -67,11 +58,11 @@ public abstract class AbstractDataBrokerTestCustomizer {
     }
 
     public NotificationService createNotificationService() {
-        return new BindingDOMNotificationServiceAdapter(adapterContext, domNotificationRouter);
+        return new BindingDOMNotificationServiceAdapter(schemaService, domNotificationRouter);
     }
 
     public NotificationPublishService createNotificationPublishService() {
-        return new BindingDOMNotificationPublishServiceAdapter(adapterContext, domNotificationRouter);
+        return new BindingDOMNotificationPublishServiceAdapter(schemaService, domNotificationRouter);
     }
 
     public abstract ListeningExecutorService getCommitCoordinatorExecutor();
@@ -81,11 +72,11 @@ public abstract class AbstractDataBrokerTestCustomizer {
     }
 
     public DataBroker createDataBroker() {
-        return new BindingDOMDataBrokerAdapter(adapterContext, getDOMDataBroker());
+        return new BindingDOMDataBrokerAdapter(schemaService, getDOMDataBroker());
     }
 
     public AdapterContext getAdapterContext() {
-        return adapterContext;
+        return schemaService;
     }
 
     public DOMSchemaService getSchemaService() {
@@ -106,7 +97,7 @@ public abstract class AbstractDataBrokerTestCustomizer {
         return datastores;
     }
 
-    public void updateSchema(final EffectiveModelContext ctx) {
+    public void updateSchema(final BindingRuntimeContext ctx) {
         schemaService.changeSchema(ctx);
     }
 
index 8500a87212a84d879355afbe2711f19024bb7538..47376dcfe15fdac488a74208c092d882e92cf54f 100644 (file)
@@ -10,8 +10,8 @@ package org.opendaylight.mdsal.binding.dom.adapter.test;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.dom.broker.DOMNotificationRouter;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class AbstractNotificationBrokerTest extends AbstractSchemaAwareTest {
     private AdapterContext bindingToNormalizedNodeCodec;
@@ -21,13 +21,14 @@ public class AbstractNotificationBrokerTest extends AbstractSchemaAwareTest {
 
 
     @Override
-    protected void setupWithSchema(final EffectiveModelContext context) {
+    protected void setupWithRuntimeContext(final BindingRuntimeContext runtimeContext) {
         final DataBrokerTestCustomizer testCustomizer = createDataBrokerTestCustomizer();
         domNotificationRouter = testCustomizer.getDomNotificationRouter();
         notificationService = testCustomizer.createNotificationService();
         notificationPublishService = testCustomizer.createNotificationPublishService();
         bindingToNormalizedNodeCodec = testCustomizer.getAdapterContext();
-        testCustomizer.updateSchema(context);
+        testCustomizer.updateSchema(runtimeContext);
+        super.setupWithRuntimeContext(runtimeContext);
     }
 
     protected DataBrokerTestCustomizer createDataBrokerTestCustomizer() {
index 1f9ba590278a8d9b9f4ab6158806de0ec8502140..e8341d46e66fb50841f0a323727f6c35da0a9767 100644 (file)
@@ -12,38 +12,49 @@ import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import java.util.Set;
 import org.junit.Before;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public abstract class AbstractSchemaAwareTest {
-    private static final LoadingCache<Set<YangModuleInfo>, EffectiveModelContext> SCHEMA_CONTEXT_CACHE =
+    private static final LoadingCache<Set<YangModuleInfo>, BindingRuntimeContext> RUNTIME_CONTEXT_CACHE =
             CacheBuilder.newBuilder().weakValues().build(
-                new CacheLoader<Set<YangModuleInfo>, EffectiveModelContext>() {
+                new CacheLoader<Set<YangModuleInfo>, BindingRuntimeContext>() {
                     @Override
-                    public EffectiveModelContext load(final Set<YangModuleInfo> key) {
-                        return BindingRuntimeHelpers.createEffectiveModel(key);
+                    public BindingRuntimeContext load(final Set<YangModuleInfo> key) {
+                        return BindingRuntimeHelpers.createRuntimeContext(key);
                     }
                 });
 
     @Before
     public final void setup() throws Exception {
-        setupWithSchema(getSchemaContext());
+        setupWithRuntimeContext(getRuntimeContext());
     }
 
     protected Set<YangModuleInfo> getModuleInfos() throws Exception {
         return BindingReflections.cacheModuleInfos(Thread.currentThread().getContextClassLoader());
     }
 
+    protected BindingRuntimeContext getRuntimeContext() throws Exception {
+        return RUNTIME_CONTEXT_CACHE.getUnchecked(getModuleInfos());
+    }
+
     protected EffectiveModelContext getSchemaContext() throws Exception {
-        return SCHEMA_CONTEXT_CACHE.getUnchecked(getModuleInfos());
+        return getRuntimeContext().getEffectiveModelContext();
+    }
+
+    protected void setupWithRuntimeContext(final BindingRuntimeContext runtimeContext) {
+        setupWithSchema(runtimeContext.getEffectiveModelContext());
     }
 
     /**
-     * Setups test with Schema context.
+     * Setups test with EffectiveModelContext.
      *
      * @param context schema context
      */
-    protected abstract void setupWithSchema(EffectiveModelContext context);
+    protected void setupWithSchema(final EffectiveModelContext context) {
+        // No-op
+    }
 }
index c0c0085dd5d183069c8170ed54dbdb8ee205e1f2..dd06d7e63ff56d9d1def584ac178c3c5f837ce67 100644 (file)
@@ -48,8 +48,6 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 @Beta
 public class BindingTestContext implements AutoCloseable {
-    private MockAdapterContext codec;
-
     private final ListeningExecutorService executor;
 
     private final boolean startWithSchema;
@@ -84,7 +82,7 @@ public class BindingTestContext implements AutoCloseable {
     }
 
     public AdapterContext getCodec() {
-        return codec;
+        return mockSchemaService;
     }
 
     protected BindingTestContext(final ListeningExecutorService executor, final boolean startWithSchema) {
@@ -98,7 +96,7 @@ public class BindingTestContext implements AutoCloseable {
     public void startNewDataBroker() {
         checkState(executor != null, "Executor needs to be set");
         checkState(newDOMDataBroker != null, "DOM Data Broker must be set");
-        dataBroker = new BindingDOMDataBrokerAdapter(codec, newDOMDataBroker);
+        dataBroker = new BindingDOMDataBrokerAdapter(mockSchemaService, newDOMDataBroker);
     }
 
     public void startNewDomDataBroker() {
@@ -125,9 +123,9 @@ public class BindingTestContext implements AutoCloseable {
     public void startBindingBroker() {
         checkState(executor != null, "Executor needs to be set");
 
-        baConsumerRpc = new BindingDOMRpcServiceAdapter(codec, getDomRpcInvoker());
-        baProviderRpc = new BindingDOMRpcProviderServiceAdapter(codec, getDomRpcRegistry());
-        final MountPointService mountService = new BindingDOMMountPointServiceAdapter(codec, biMountImpl);
+        baConsumerRpc = new BindingDOMRpcServiceAdapter(mockSchemaService, getDomRpcInvoker());
+        baProviderRpc = new BindingDOMRpcProviderServiceAdapter(mockSchemaService, getDomRpcRegistry());
+        final MountPointService mountService = new BindingDOMMountPointServiceAdapter(mockSchemaService, biMountImpl);
     }
 
     public void startForwarding() {
@@ -135,12 +133,11 @@ public class BindingTestContext implements AutoCloseable {
     }
 
     public void startBindingToDomMappingService() {
-        codec = new MockAdapterContext();
-        mockSchemaService.registerSchemaContextListener(codec);
+        // No-op, really
     }
 
     private void updateYangSchema(final Set<YangModuleInfo> moduleInfos) {
-        mockSchemaService.changeSchema(BindingRuntimeHelpers.createEffectiveModel(moduleInfos));
+        mockSchemaService.changeSchema(BindingRuntimeHelpers.createRuntimeContext(moduleInfos));
     }
 
     public EffectiveModelContext getContext() {
@@ -181,8 +178,8 @@ public class BindingTestContext implements AutoCloseable {
         final DOMNotificationRouter router = DOMNotificationRouter.create(16);
         domPublishService = router;
         domListenService = router;
-        publishService = new BindingDOMNotificationPublishServiceAdapter(codec, domPublishService);
-        listenService = new BindingDOMNotificationServiceAdapter(codec, domListenService);
+        publishService = new BindingDOMNotificationPublishServiceAdapter(mockSchemaService, domPublishService);
+        listenService = new BindingDOMNotificationServiceAdapter(mockSchemaService, domListenService);
 
     }
 
diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/MockAdapterContext.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/MockAdapterContext.java
deleted file mode 100644 (file)
index c0152ae..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2020 PANTHEON.tech, 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.dom.adapter.test.util;
-
-import static com.google.common.base.Verify.verifyNotNull;
-
-import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
-import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer;
-import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
-import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
-import org.opendaylight.mdsal.binding.runtime.api.DefaultBindingRuntimeContext;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
-
-public final class MockAdapterContext implements AdapterContext, EffectiveModelContextListener {
-    private volatile CurrentAdapterSerializer serializer = null;
-
-    @Override
-    public CurrentAdapterSerializer currentSerializer() {
-        return verifyNotNull(serializer);
-    }
-
-    @Override
-    public void onModelContextUpdated(final EffectiveModelContext newModelContext) {
-        serializer = new CurrentAdapterSerializer(new BindingCodecContext(new DefaultBindingRuntimeContext(
-            new DefaultBindingRuntimeGenerator().generateTypeMapping(newModelContext),
-                TestingModuleInfoSnapshot.INSTANCE)));
-    }
-}
index 32545a185476aff520e5808a6b9e101797916c53..4e69e938050e82f8c89cff1c555e1ad9795747bf 100644 (file)
@@ -7,8 +7,14 @@
  */
 package org.opendaylight.mdsal.binding.dom.adapter.test.util;
 
+import static com.google.common.base.Verify.verifyNotNull;
+
 import com.google.common.collect.ClassToInstanceMap;
 import com.google.common.collect.ImmutableClassToInstanceMap;
+import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
+import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer;
+import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaServiceExtension;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
@@ -17,9 +23,9 @@ import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextProvider;
 
-public final class MockSchemaService implements DOMSchemaService, EffectiveModelContextProvider {
-
+public final class MockSchemaService implements DOMSchemaService, EffectiveModelContextProvider, AdapterContext {
     private EffectiveModelContext schemaContext;
+    private CurrentAdapterSerializer serializer;
 
     final ListenerRegistry<EffectiveModelContextListener> listeners = ListenerRegistry.create();
 
@@ -44,8 +50,14 @@ public final class MockSchemaService implements DOMSchemaService, EffectiveModel
         return ImmutableClassToInstanceMap.of();
     }
 
-    public synchronized void changeSchema(final EffectiveModelContext newContext) {
-        schemaContext = newContext;
+    public synchronized void changeSchema(final BindingRuntimeContext newContext) {
+        serializer = new CurrentAdapterSerializer(new BindingCodecContext(newContext));
+        schemaContext = newContext.getEffectiveModelContext();
         listeners.streamListeners().forEach(listener -> listener.onModelContextUpdated(schemaContext));
     }
+
+    @Override
+    public synchronized CurrentAdapterSerializer currentSerializer() {
+        return verifyNotNull(serializer);
+    }
 }
diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/TestingModuleInfoSnapshot.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/TestingModuleInfoSnapshot.java
deleted file mode 100644 (file)
index 159f350..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2020 PANTHEON.tech, 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.dom.adapter.test.util;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import org.opendaylight.mdsal.binding.runtime.api.ModuleInfoSnapshot;
-import org.opendaylight.yangtools.util.ClassLoaderUtils;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
-import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
-
-public final class TestingModuleInfoSnapshot implements ModuleInfoSnapshot {
-    public static final TestingModuleInfoSnapshot INSTANCE = new TestingModuleInfoSnapshot();
-
-    private TestingModuleInfoSnapshot() {
-        // Hidden on purpose
-    }
-
-    @Override
-    public EffectiveModelContext getEffectiveModelContext() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ListenableFuture<? extends YangTextSchemaSource> getSource(SourceIdentifier sourceIdentifier) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public <T> Class<T> loadClass(String fullyQualifiedName) throws ClassNotFoundException {
-        return (Class<T>) ClassLoaderUtils.loadClassWithTCCL(fullyQualifiedName);
-    }
-}
index 62c36378ab99b3318aab5b605beedef12923267d..5d62c8e5bc799c845a76148a5f525579f4f24b3a 100644 (file)
@@ -75,6 +75,20 @@ public final class BindingRuntimeHelpers {
         }
     }
 
+    public static @NonNull BindingRuntimeContext createRuntimeContext(
+            final Collection<? extends YangModuleInfo> infos) {
+        final ModuleInfoSnapshot snapshot;
+
+        try {
+            snapshot = prepareContext(ServiceLoaderState.ParserFactory.INSTANCE, infos);
+        } catch (YangParserException e) {
+            throw new IllegalStateException("Failed to parse models", e);
+        }
+
+        return new DefaultBindingRuntimeContext(
+            ServiceLoaderState.Generator.INSTANCE.generateTypeMapping(snapshot.getEffectiveModelContext()), snapshot);
+    }
+
     public static @NonNull BindingRuntimeContext createRuntimeContext(final YangParserFactory parserFactory,
             final BindingRuntimeGenerator generator, final Class<?>... classes) throws YangParserException {
         return createRuntimeContext(parserFactory, generator, Arrays.asList(classes));