/*
* 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.runtime.container.internal;
import static java.util.Collections.singleton;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import org.mule.runtime.container.api.MuleModule;
import org.mule.runtime.module.artifact.classloader.ClassLoaderFilter;
import org.mule.tck.junit4.AbstractMuleTestCase;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.junit.Test;
public class ContainerClassLoaderFilterFactoryTestCase extends AbstractMuleTestCase {
private ContainerClassLoaderFilterFactory factory = new ContainerClassLoaderFilterFactory();
@Test
public void acceptsExportedModulePackages() throws Exception {
final List<MuleModule> muleModules = new ArrayList<>();
muleModules.add(new TestModuleBuilder("module1").exportingPackages("org.foo1", "org.foo1.bar.")
.exportingResources("META-INF/foo.txt", "META-INF/docs1/foo.txt").build());
muleModules.add(new TestModuleBuilder("module2").exportingPackages("org.foo2")
.exportingResources("META-INF/", "/META-INF/docs2").build());
final ClassLoaderFilter classLoaderFilter = factory.create(Collections.emptySet(), muleModules);
assertThat(classLoaderFilter.exportsClass("org.foo1.Foo"), is(true));
assertThat(classLoaderFilter.exportsClass("org.foo1.bar.Bar"), is(true));
assertThat(classLoaderFilter.exportsClass("org.foo2.Foo"), is(true));
assertThat(classLoaderFilter.exportsClass("org.bar.Bar"), is(false));
assertThat(classLoaderFilter.exportsClass("org.foo2.bar.Bar"), is(false));
assertThat(classLoaderFilter.exportsResource("META-INF/foo.txt"), is(true));
assertThat(classLoaderFilter.exportsResource("META-INF/docs1/foo.txt"), is(true));
assertThat(classLoaderFilter.exportsResource("META-INF/docs2/foo.txt"), is(true));
assertThat(classLoaderFilter.exportsResource("/META-INF/docs2/foo.txt"), is(true));
assertThat(classLoaderFilter.exportsResource("/foo.txt"), is(false));
}
@Test
public void acceptsExportedSystemPackages() throws Exception {
final List<MuleModule> muleModules = new ArrayList<>();
final Set<String> bootPackages = singleton("org.foo1");
final ClassLoaderFilter classLoaderFilter = factory.create(bootPackages, muleModules);
assertThat(classLoaderFilter.exportsClass("org.foo1.Foo"), is(true));
assertThat(classLoaderFilter.exportsClass("org.foo1.bar.Bar"), is(true));
assertThat(classLoaderFilter.exportsClass("org.bar.Bar"), is(false));
}
}