/* * 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 org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.junit.rules.ExpectedException.none; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.mule.runtime.container.api.MuleModule; import org.mule.runtime.module.artifact.classloader.EnumerationAdapter; import org.mule.tck.junit4.AbstractMuleTestCase; import org.mule.tck.size.SmallTest; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @SmallTest public class ClasspathModuleDiscovererTestCase extends AbstractMuleTestCase { private final ClassLoader classLoader = mock(ClassLoader.class); private final ClasspathModuleDiscoverer moduleDiscoverer = new ClasspathModuleDiscoverer(classLoader); @Rule public ExpectedException expectedException = none(); @Test public void discoversModule() throws Exception { List<URL> moduleProperties = new ArrayList(); moduleProperties.add(getClass().getClassLoader().getResource("invalidModule.properties")); when(classLoader.getResources(ClasspathModuleDiscoverer.MODULE_PROPERTIES)) .thenReturn(new EnumerationAdapter(moduleProperties)); expectedException.expect(IllegalArgumentException.class); moduleDiscoverer.discover(); } @Test public void discoversModuleWithExportedJavaPackages() throws Exception { List<URL> moduleProperties = new ArrayList(); moduleProperties.add(getClass().getClassLoader().getResource("moduleJavaPackages.properties")); when(classLoader.getResources(ClasspathModuleDiscoverer.MODULE_PROPERTIES)) .thenReturn(new EnumerationAdapter(moduleProperties)); List<MuleModule> muleModules = moduleDiscoverer.discover(); assertThat(muleModules, hasSize(1)); MuleModule muleModule = muleModules.get(0); assertThat(muleModule.getName(), is("moduleJavaPackages")); assertThat(muleModule.getExportedPackages(), contains("org.foo", "org.bar")); assertThat(muleModule.getExportedPaths(), is(empty())); assertThat(muleModule.getPrivilegedExportedPackages(), is(empty())); assertThat(muleModule.getPrivilegedArtifacts(), is(empty())); assertThat(muleModule.getExportedServices(), is(empty())); } @Test public void discoversModuleWithExportedResourcePackages() throws Exception { List<URL> moduleProperties = new ArrayList(); moduleProperties.add(getClass().getClassLoader().getResource("moduleResourcePackages.properties")); when(classLoader.getResources(ClasspathModuleDiscoverer.MODULE_PROPERTIES)) .thenReturn(new EnumerationAdapter(moduleProperties)); List<MuleModule> muleModules = moduleDiscoverer.discover(); assertThat(muleModules, hasSize(1)); MuleModule muleModule = muleModules.get(0); assertThat(muleModule.getName(), is("moduleResourcePackages")); assertThat(muleModule.getExportedPackages(), is(empty())); assertThat(muleModule.getExportedPaths(), containsInAnyOrder("META-INF/module.xsd", "README.txt")); assertThat(muleModule.getPrivilegedExportedPackages(), is(empty())); assertThat(muleModule.getPrivilegedArtifacts(), is(empty())); assertThat(muleModule.getExportedServices(), is(empty())); } @Test public void discoversModuleWithExportedPrivilegedApi() throws Exception { List<URL> moduleProperties = new ArrayList(); moduleProperties.add(getClass().getClassLoader().getResource("moduleJavaPrivilegedApi.properties")); when(classLoader.getResources(ClasspathModuleDiscoverer.MODULE_PROPERTIES)) .thenReturn(new EnumerationAdapter(moduleProperties)); List<MuleModule> muleModules = moduleDiscoverer.discover(); assertThat(muleModules, hasSize(1)); MuleModule muleModule = muleModules.get(0); assertThat(muleModule.getName(), is("moduleJavaPrivilegedApi")); assertThat(muleModule.getExportedPackages(), is(empty())); assertThat(muleModule.getExportedPaths(), is(empty())); assertThat(muleModule.getPrivilegedExportedPackages(), contains("org.foo", "org.bar")); assertThat(muleModule.getPrivilegedArtifacts(), contains("privilegedArtifact1", "privilegedArtifact2")); assertThat(muleModule.getExportedServices(), is(empty())); } @Test public void discoversModuleWithExportedServices() throws Exception { List<URL> moduleProperties = new ArrayList(); moduleProperties.add(getClass().getClassLoader().getResource("moduleExportedServices.properties")); when(classLoader.getResources(ClasspathModuleDiscoverer.MODULE_PROPERTIES)) .thenReturn(new EnumerationAdapter(moduleProperties)); List<MuleModule> muleModules = moduleDiscoverer.discover(); assertThat(muleModules, hasSize(1)); MuleModule muleModule = muleModules.get(0); assertThat(muleModule.getName(), is("moduleExportedServices")); assertThat(muleModule.getExportedPackages(), is(empty())); assertThat(muleModule.getExportedPaths(), is(empty())); assertThat(muleModule.getPrivilegedExportedPackages(), is(empty())); assertThat(muleModule.getPrivilegedArtifacts(), is(empty())); assertThat(muleModule.getExportedServices().size(), equalTo(3)); assertThat(muleModule.getExportedServices().get(0).getServiceInterface(), equalTo("org.foo.ServiceInterface")); assertThat(muleModule.getExportedServices().get(1).getServiceInterface(), equalTo("org.foo.ServiceInterface")); assertThat(muleModule.getExportedServices().get(2).getServiceInterface(), equalTo("org.bar.ServiceInterface")); } @Test public void discoversInvalidModuleWithExportedPrivilegedPackages() throws Exception { List<URL> moduleProperties = new ArrayList(); moduleProperties.add(getClass().getClassLoader().getResource("moduleJavaPrivilegedPackages.properties")); when(classLoader.getResources(ClasspathModuleDiscoverer.MODULE_PROPERTIES)) .thenReturn(new EnumerationAdapter(moduleProperties)); expectedException.expect(IllegalArgumentException.class); moduleDiscoverer.discover(); } }