@Override public List<MuleModule> discover() { DefaultModuleRepository containerModuleDiscoverer = new DefaultModuleRepository(delegateModuleDiscoverer); List<MuleModule> discoveredModules = containerModuleDiscoverer.getModules(); List<MuleModule> updateModules = new ArrayList<>(discoveredModules.size()); for (MuleModule discoveredModule : discoveredModules) { if (!discoveredModule.getPrivilegedExportedPackages().isEmpty()) { discoveredModule = updateModuleForTests(discoveredModule); } updateModules.add(discoveredModule); } return updateModules; }
private MuleModule updateModuleForTests(MuleModule discoveredModule) { Set<String> privilegedArtifacts = new HashSet<>(discoveredModule.getPrivilegedArtifacts()); privilegedArtifacts.addAll(privilegedArtifactIds); return new MuleModule(discoveredModule.getName(), discoveredModule.getExportedPackages(), discoveredModule.getExportedPaths(), discoveredModule.getPrivilegedExportedPackages(), privilegedArtifacts, discoveredModule.getExportedServices()); } }
private ClassLoaderLookupPolicy extendLookupPolicyForPrivilegedAccess(ClassLoaderLookupPolicy childClassLoaderLookupPolicy, ModuleRepository moduleRepository, TestContainerClassLoaderFactory testContainerClassLoaderFactory, PluginUrlClassification pluginUrlClassification) { ContainerOnlyLookupStrategy containerOnlyLookupStrategy = new ContainerOnlyLookupStrategy(testContainerClassLoaderFactory.getContainerClassLoader().getClassLoader()); Map<String, LookupStrategy> privilegedLookupStrategies = new HashMap<>(); for (MuleModule module : moduleRepository.getModules()) { if (hasPrivilegedApiAccess(pluginUrlClassification, module)) { for (String packageName : module.getPrivilegedExportedPackages()) { privilegedLookupStrategies.put(packageName, containerOnlyLookupStrategy); } } } if (privilegedLookupStrategies.isEmpty()) { return childClassLoaderLookupPolicy; } else { return childClassLoaderLookupPolicy.extend(privilegedLookupStrategies); } }
@Test public void createsPluginWithPrivilegedContainerAccess() throws Exception { MuleModule privilegedModule = mock(MuleModule.class); when(privilegedModule.getPrivilegedArtifacts()).thenReturn(singleton(PLUGIN_ARTIFACT_ID1)); when(privilegedModule.getPrivilegedExportedPackages()).thenReturn(singleton(PRIVILEGED_PACKAGE)); when(moduleRepository.getModules()).thenReturn(singletonList(privilegedModule)); List<ArtifactPluginDescriptor> artifactPluginDescriptors = singletonList(plugin1Descriptor); ArgumentCaptor<Map> mapArgumentCaptor = forClass(Map.class); when(regionOwnerLookupPolicy.extend(mapArgumentCaptor.capture())).thenReturn(pluginLookupPolicy); List<ArtifactClassLoader> pluginClassLoaders = factory.createPluginClassLoaders(regionClassLoader, artifactPluginDescriptors, regionOwnerLookupPolicy); assertThat(pluginClassLoaders, contains(pluginClassLoader1)); Map<String, LookupStrategy> value = mapArgumentCaptor.getValue(); assertThat(value, hasEntry(equalTo(PRIVILEGED_PACKAGE), instanceOf(ContainerOnlyLookupStrategy.class))); }
@Test public void discoversModuleWithExportedPrivilegedApi() throws Exception { runTest(moduleDiscoverer -> { 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 discoversModuleWithExportedResourcePackages() throws Exception { runTest(moduleDiscoverer -> { 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 discoversModuleWithExportedJavaPackages() throws Exception { runTest(moduleDiscoverer -> { 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 discoversModuleWithExportedServices() throws Exception { runTest(moduleDiscoverer -> { 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")); }); }
if (module.getPrivilegedArtifacts() .contains(descriptor.getBundleDescriptor().getGroupId() + ":" + descriptor.getBundleDescriptor().getArtifactId())) { for (String packageName : module.getPrivilegedExportedPackages()) { pluginsLookupPolicies.put(packageName, containerOnlyLookupStrategy);
@Override public List<MuleModule> discover() { DefaultModuleRepository containerModuleDiscoverer = new DefaultModuleRepository(delegateModuleDiscoverer); List<MuleModule> discoveredModules = containerModuleDiscoverer.getModules(); List<MuleModule> updateModules = new ArrayList<>(discoveredModules.size()); for (MuleModule discoveredModule : discoveredModules) { if (!discoveredModule.getPrivilegedExportedPackages().isEmpty()) { discoveredModule = updateModuleForTests(discoveredModule); } updateModules.add(discoveredModule); } return updateModules; }
private MuleModule updateModuleForTests(MuleModule discoveredModule) { Set<String> privilegedArtifacts = new HashSet<>(discoveredModule.getPrivilegedArtifacts()); privilegedArtifacts.addAll(privilegedArtifactIds); return new MuleModule(discoveredModule.getName(), discoveredModule.getExportedPackages(), discoveredModule.getExportedPaths(), discoveredModule.getPrivilegedExportedPackages(), privilegedArtifacts, discoveredModule.getExportedServices()); } }
private ClassLoaderLookupPolicy extendLookupPolicyForPrivilegedAccess(ClassLoaderLookupPolicy childClassLoaderLookupPolicy, ModuleRepository moduleRepository, TestContainerClassLoaderFactory testContainerClassLoaderFactory, PluginUrlClassification pluginUrlClassification) { ContainerOnlyLookupStrategy containerOnlyLookupStrategy = new ContainerOnlyLookupStrategy(testContainerClassLoaderFactory.getContainerClassLoader().getClassLoader()); Map<String, LookupStrategy> privilegedLookupStrategies = new HashMap<>(); for (MuleModule module : moduleRepository.getModules()) { if (hasPrivilegedApiAccess(pluginUrlClassification, module)) { for (String packageName : module.getPrivilegedExportedPackages()) { privilegedLookupStrategies.put(packageName, containerOnlyLookupStrategy); } } } if (privilegedLookupStrategies.isEmpty()) { return childClassLoaderLookupPolicy; } else { return childClassLoaderLookupPolicy.extend(privilegedLookupStrategies); } }
@Test public void createsPluginWithPrivilegedContainerAccess() throws Exception { MuleModule privilegedModule = mock(MuleModule.class); when(privilegedModule.getPrivilegedArtifacts()).thenReturn(singleton(PLUGIN_ARTIFACT_ID1)); when(privilegedModule.getPrivilegedExportedPackages()).thenReturn(singleton(PRIVILEGED_PACKAGE)); when(moduleRepository.getModules()).thenReturn(singletonList(privilegedModule)); List<ArtifactPluginDescriptor> artifactPluginDescriptors = singletonList(plugin1Descriptor); ArgumentCaptor<Map> mapArgumentCaptor = forClass(Map.class); when(regionOwnerLookupPolicy.extend(mapArgumentCaptor.capture())).thenReturn(pluginLookupPolicy); List<ArtifactClassLoader> pluginClassLoaders = factory.createPluginClassLoaders(regionClassLoader, artifactPluginDescriptors, regionOwnerLookupPolicy); assertThat(pluginClassLoaders, contains(pluginClassLoader1)); Map<String, LookupStrategy> value = mapArgumentCaptor.getValue(); assertThat(value, hasEntry(equalTo(PRIVILEGED_PACKAGE), instanceOf(ContainerOnlyLookupStrategy.class))); }