/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.functional.junit4;
import static java.util.Collections.emptyList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.core.IsNull.nullValue;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mule.runtime.core.config.bootstrap.ClassLoaderRegistryBootstrapDiscoverer.BOOTSTRAP_PROPERTIES;
import org.mule.runtime.core.api.config.ConfigurationBuilder;
import org.mule.runtime.module.artifact.classloader.ArtifactClassLoader;
import org.mule.runtime.module.artifact.classloader.ClassLoaderFilter;
import org.mule.runtime.module.artifact.classloader.EnumerationAdapter;
import org.mule.runtime.module.artifact.classloader.FilteringArtifactClassLoader;
import org.mule.tck.junit4.AbstractMuleContextTestCase;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
public class TestBootstrapServiceDiscovererConfigurationBuilderTestCase extends AbstractMuleContextTestCase {
public TestBootstrapServiceDiscovererConfigurationBuilderTestCase() {
setStartContext(false);
}
@Test
public void usesAllPluginBootstrapFiles() throws Exception {
assertThat(muleContext.getRegistry().lookupObject("testObject1"), is(not(nullValue())));
assertThat(muleContext.getRegistry().lookupObject("testObject2"), is(not(nullValue())));
}
@Override
protected void addBuilders(List<ConfigurationBuilder> builders) {
builders.add(0, createBootstrapServiceDiscovererContextBuilder());
super.addBuilders(builders);
}
private TestBootstrapServiceDiscovererConfigurationBuilder createBootstrapServiceDiscovererContextBuilder() {
try {
final ClassLoaderFilter filter = mock(ClassLoaderFilter.class);
when(filter.exportsClass(anyString())).thenReturn(true);
final ArtifactClassLoader pluginClassLoader1 = mock(ArtifactClassLoader.class);
when(pluginClassLoader1.getClassLoader()).thenReturn(this.getClass().getClassLoader());
final List<ArtifactClassLoader> artifactClassLoaders = new ArrayList<>();
artifactClassLoaders.add(new FilteringArtifactClassLoader(pluginClassLoader1, filter, Collections.emptyList()));
final List<URL> urls = new ArrayList<>();
urls.add(this.getClass().getResource("/plugin1-bootstrap.properties"));
urls.add(this.getClass().getResource("/plugin2-bootstrap.properties"));
when(pluginClassLoader1.findResources(BOOTSTRAP_PROPERTIES)).thenReturn(new EnumerationAdapter<>(urls));
final ArtifactClassLoader appClassLoader = mock(ArtifactClassLoader.class);
when(appClassLoader.getClassLoader()).thenReturn(this.getClass().getClassLoader());
when(appClassLoader.findResources(BOOTSTRAP_PROPERTIES)).thenReturn(new EnumerationAdapter<>(emptyList()));
final ClassLoader executionClassLoader = new FilteringArtifactClassLoader(appClassLoader, filter, Collections.emptyList());
return new TestBootstrapServiceDiscovererConfigurationBuilder(getClass().getClassLoader(), executionClassLoader,
artifactClassLoaders);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}