X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Ffactoriesresolver%2FHardcodedModuleFactoriesResolver.java;h=b313049d7d405156df4aa74dd99ad2afd8ed1308;hp=e489a2256b82b9f1c0be7db970bf6b26c07da7e7;hb=cbcc2b61265e903959f11d44c292771e76b3926e;hpb=9fb64948564e252018f9b1e13e7cea2c92f991aa diff --git a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/factoriesresolver/HardcodedModuleFactoriesResolver.java b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/factoriesresolver/HardcodedModuleFactoriesResolver.java index e489a2256b..b313049d7d 100644 --- a/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/factoriesresolver/HardcodedModuleFactoriesResolver.java +++ b/opendaylight/config/config-manager/src/test/java/org/opendaylight/controller/config/manager/impl/factoriesresolver/HardcodedModuleFactoriesResolver.java @@ -7,22 +7,71 @@ */ package org.opendaylight.controller.config.manager.impl.factoriesresolver; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import java.io.Closeable; +import java.util.AbstractMap; import java.util.Arrays; +import java.util.Dictionary; +import java.util.HashMap; import java.util.List; - +import java.util.Map; +import org.mockito.Matchers; +import org.mockito.Mockito; import org.opendaylight.controller.config.spi.ModuleFactory; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; + +public class HardcodedModuleFactoriesResolver implements ModuleFactoriesResolver { + private Map> factories; -public class HardcodedModuleFactoriesResolver implements - ModuleFactoriesResolver { - private final List list; + public HardcodedModuleFactoriesResolver(final BundleContext bundleContext, final ModuleFactory... list) { + List factoryList = Arrays.asList(list); + this.factories = new HashMap<>(factoryList.size()); + for (ModuleFactory moduleFactory : list) { + StringBuffer errors = new StringBuffer(); + String moduleName = moduleFactory.getImplementationName(); + if (moduleName == null || moduleName.isEmpty()) { + throw new IllegalStateException( + "Invalid implementation name for " + moduleFactory); + } + String error = null; + Map.Entry conflicting = factories.get(moduleName); + if (conflicting != null) { + error = String + .format("Module name is not unique. Found two conflicting factories with same name '%s': " + + "\n\t%s\n\t%s\n", moduleName, conflicting.getKey(), moduleFactory); + + } + + if (error == null) { + factories.put(moduleName, new AbstractMap.SimpleEntry<>(moduleFactory, + bundleContext)); + } else { + errors.append(error); + } + if (errors.length() > 0) { + throw new IllegalArgumentException(errors.toString()); + } + } + } - public HardcodedModuleFactoriesResolver(ModuleFactory... list) { - this.list = Arrays.asList(list); + private static BundleContext mockBundleContext() { + BundleContext bundleContext = Mockito.mock(BundleContext.class); + ServiceRegistration serviceRegistration = mock(ServiceRegistration.class); + doNothing().when(serviceRegistration).unregister(); + doReturn(serviceRegistration).when(bundleContext).registerService( + Matchers.any(String[].class), any(Closeable.class), + any(Dictionary.class)); + return bundleContext; } @Override - public List getAllFactories() { - return list; + public Map> getAllFactories() { + return factories; } }