|
@@ -18,6 +18,7 @@ import org.elasticsearch.env.TestEnvironment;
|
|
|
import org.elasticsearch.index.IndexModule;
|
|
|
import org.elasticsearch.plugins.spi.TestService;
|
|
|
import org.elasticsearch.test.ESTestCase;
|
|
|
+import org.elasticsearch.test.PrivilegedOperations;
|
|
|
import org.elasticsearch.test.compiler.InMemoryJavaCompiler;
|
|
|
import org.elasticsearch.test.jar.JarUtils;
|
|
|
|
|
@@ -622,7 +623,7 @@ public class PluginsServiceTests extends ESTestCase {
|
|
|
assertThat(e.getCause().getCause(), hasToString(containsString("test constructor failure")));
|
|
|
}
|
|
|
|
|
|
- private ClassLoader buildTestProviderPlugin(String name) throws Exception {
|
|
|
+ private URLClassLoader buildTestProviderPlugin(String name) throws Exception {
|
|
|
Map<String, CharSequence> sources = Map.of("r.FooPlugin", """
|
|
|
package r;
|
|
|
import org.elasticsearch.plugins.ActionPlugin;
|
|
@@ -656,34 +657,38 @@ public class PluginsServiceTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testLoadServiceProviders() throws Exception {
|
|
|
- ClassLoader fakeClassLoader = buildTestProviderPlugin("integer");
|
|
|
- @SuppressWarnings("unchecked")
|
|
|
- Class<? extends Plugin> fakePluginClass = (Class<? extends Plugin>) fakeClassLoader.loadClass("r.FooPlugin");
|
|
|
+ URLClassLoader fakeClassLoader = buildTestProviderPlugin("integer");
|
|
|
+ URLClassLoader fakeClassLoader1 = buildTestProviderPlugin("string");
|
|
|
+ try {
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ Class<? extends Plugin> fakePluginClass = (Class<? extends Plugin>) fakeClassLoader.loadClass("r.FooPlugin");
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ Class<? extends Plugin> fakePluginClass1 = (Class<? extends Plugin>) fakeClassLoader1.loadClass("r.FooPlugin");
|
|
|
|
|
|
- ClassLoader fakeClassLoader1 = buildTestProviderPlugin("string");
|
|
|
- @SuppressWarnings("unchecked")
|
|
|
- Class<? extends Plugin> fakePluginClass1 = (Class<? extends Plugin>) fakeClassLoader1.loadClass("r.FooPlugin");
|
|
|
+ assertFalse(fakePluginClass.getClassLoader().equals(fakePluginClass1.getClassLoader()));
|
|
|
|
|
|
- assertFalse(fakePluginClass.getClassLoader().equals(fakePluginClass1.getClassLoader()));
|
|
|
+ getClass().getModule().addUses(TestService.class);
|
|
|
|
|
|
- getClass().getModule().addUses(TestService.class);
|
|
|
+ PluginsService service = newMockPluginsService(List.of(fakePluginClass, fakePluginClass1));
|
|
|
|
|
|
- PluginsService service = newMockPluginsService(List.of(fakePluginClass, fakePluginClass1));
|
|
|
+ List<? extends TestService> providers = service.loadServiceProviders(TestService.class);
|
|
|
+ assertEquals(2, providers.size());
|
|
|
+ assertThat(providers.stream().map(p -> p.name()).toList(), containsInAnyOrder("string", "integer"));
|
|
|
|
|
|
- List<? extends TestService> providers = service.loadServiceProviders(TestService.class);
|
|
|
- assertEquals(2, providers.size());
|
|
|
- assertThat(providers.stream().map(p -> p.name()).toList(), containsInAnyOrder("string", "integer"));
|
|
|
+ service = newMockPluginsService(List.of(fakePluginClass));
|
|
|
+ providers = service.loadServiceProviders(TestService.class);
|
|
|
|
|
|
- service = newMockPluginsService(List.of(fakePluginClass));
|
|
|
- providers = service.loadServiceProviders(TestService.class);
|
|
|
+ assertEquals(1, providers.size());
|
|
|
+ assertThat(providers.stream().map(p -> p.name()).toList(), containsInAnyOrder("integer"));
|
|
|
|
|
|
- assertEquals(1, providers.size());
|
|
|
- assertThat(providers.stream().map(p -> p.name()).toList(), containsInAnyOrder("integer"));
|
|
|
+ service = newMockPluginsService(new ArrayList<>());
|
|
|
+ providers = service.loadServiceProviders(TestService.class);
|
|
|
|
|
|
- service = newMockPluginsService(new ArrayList<>());
|
|
|
- providers = service.loadServiceProviders(TestService.class);
|
|
|
-
|
|
|
- assertEquals(0, providers.size());
|
|
|
+ assertEquals(0, providers.size());
|
|
|
+ } finally {
|
|
|
+ PrivilegedOperations.closeURLClassLoader(fakeClassLoader);
|
|
|
+ PrivilegedOperations.closeURLClassLoader(fakeClassLoader1);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private static class TestExtensiblePlugin extends Plugin implements ExtensiblePlugin {
|