X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Ftest%2FAbstractSchemaAwareTest.java;h=db77bc5799fe494b1a1bc9f091c55569f4b6e813;hp=78febb50f7d8fbdb1f25bc108a18dbf26c0d83d9;hb=97f90cb2c7865665e6f152bec1f82f4ad784b389;hpb=cbe83ca3074fa0182d4f079f528bb710a997ced7 diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/AbstractSchemaAwareTest.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/AbstractSchemaAwareTest.java index 78febb50f7..db77bc5799 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/AbstractSchemaAwareTest.java +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/test/AbstractSchemaAwareTest.java @@ -7,37 +7,52 @@ */ package org.opendaylight.controller.md.sal.binding.test; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableSet; +import java.util.Set; import org.junit.Before; -import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext; +import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; +import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.yangtools.yang.binding.YangModuleInfo; -import org.opendaylight.yangtools.yang.binding.util.BindingReflections; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -public abstract class AbstractSchemaAwareTest { - - private Iterable moduleInfos; - private SchemaContext schemaContext; - - - protected Iterable getModuleInfos() { - return BindingReflections.loadModuleInfos(); +public abstract class AbstractSchemaAwareTest { + private static final LoadingCache> MODULE_INFO_CACHE = CacheBuilder.newBuilder() + .weakKeys().weakValues().build(new CacheLoader>() { + @Override + public Set load(final ClassLoader key) { + return BindingReflections.loadModuleInfos(key); + } + }); + private static final LoadingCache, SchemaContext> SCHEMA_CONTEXT_CACHE = + CacheBuilder.newBuilder().weakValues().build(new CacheLoader, SchemaContext>() { + @Override + public SchemaContext load(final Set key) { + final ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create(); + moduleContext.addModuleInfos(key); + return moduleContext.tryToCreateSchemaContext().get(); + } + }); + + protected Set getModuleInfos() throws Exception { + return MODULE_INFO_CACHE.getUnchecked(Thread.currentThread().getContextClassLoader()); } + protected SchemaContext getSchemaContext() throws Exception { + // ImmutableSet guarantees non-null + return SCHEMA_CONTEXT_CACHE.getUnchecked(ImmutableSet.copyOf(getModuleInfos())); + } @Before - public final void setup() { - moduleInfos = getModuleInfos(); - ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create(); - moduleContext.addModuleInfos(moduleInfos); - schemaContext = moduleContext.tryToCreateSchemaContext().get(); - setupWithSchema(schemaContext); + public final void setup() throws Exception { + setupWithSchema(getSchemaContext()); } /** * Setups test with Schema context. * This method is called before {@link #setupWithSchemaService(SchemaService)} - * - * @param context */ protected abstract void setupWithSchema(SchemaContext context);