Skip to content

Commit d86e6a0

Browse files
authored
Close URLClassLoaders to make Windows happy deleting the temp test jar files (#118083) (#118097)
1 parent f0b2a1f commit d86e6a0

File tree

1 file changed

+35
-32
lines changed

1 file changed

+35
-32
lines changed

server/src/test/java/org/elasticsearch/bootstrap/PluginsResolverTests.java

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -136,25 +136,28 @@ public void testResolveMultipleNonModularPlugins() throws IOException, ClassNotF
136136
Path jar1 = createNonModularPluginJar(home, "plugin1", "p", "A");
137137
Path jar2 = createNonModularPluginJar(home, "plugin2", "q", "B");
138138

139-
var loader1 = createClassLoader(jar1);
140-
var loader2 = createClassLoader(jar2);
141-
142-
PluginBundle bundle1 = createMockBundle("plugin1", null, "p.A");
143-
PluginBundle bundle2 = createMockBundle("plugin2", null, "q.B");
144-
PluginsLoader mockPluginsLoader = mock(PluginsLoader.class);
145-
146-
when(mockPluginsLoader.pluginLayers()).thenReturn(
147-
Stream.of(new TestPluginLayer(bundle1, loader1, ModuleLayer.boot()), new TestPluginLayer(bundle2, loader2, ModuleLayer.boot()))
148-
);
149-
PluginsResolver pluginsResolver = PluginsResolver.create(mockPluginsLoader);
150-
151-
var testClass1 = loader1.loadClass("p.A");
152-
var testClass2 = loader2.loadClass("q.B");
153-
var resolvedPluginName1 = pluginsResolver.resolveClassToPluginName(testClass1);
154-
var resolvedPluginName2 = pluginsResolver.resolveClassToPluginName(testClass2);
155-
156-
assertEquals("plugin1", resolvedPluginName1);
157-
assertEquals("plugin2", resolvedPluginName2);
139+
try (var loader1 = createClassLoader(jar1); var loader2 = createClassLoader(jar2)) {
140+
141+
PluginBundle bundle1 = createMockBundle("plugin1", null, "p.A");
142+
PluginBundle bundle2 = createMockBundle("plugin2", null, "q.B");
143+
PluginsLoader mockPluginsLoader = mock(PluginsLoader.class);
144+
145+
when(mockPluginsLoader.pluginLayers()).thenReturn(
146+
Stream.of(
147+
new TestPluginLayer(bundle1, loader1, ModuleLayer.boot()),
148+
new TestPluginLayer(bundle2, loader2, ModuleLayer.boot())
149+
)
150+
);
151+
PluginsResolver pluginsResolver = PluginsResolver.create(mockPluginsLoader);
152+
153+
var testClass1 = loader1.loadClass("p.A");
154+
var testClass2 = loader2.loadClass("q.B");
155+
var resolvedPluginName1 = pluginsResolver.resolveClassToPluginName(testClass1);
156+
var resolvedPluginName2 = pluginsResolver.resolveClassToPluginName(testClass2);
157+
158+
assertEquals("plugin1", resolvedPluginName1);
159+
assertEquals("plugin2", resolvedPluginName2);
160+
}
158161
}
159162

160163
public void testResolveNonModularPlugin() throws IOException, ClassNotFoundException {
@@ -164,22 +167,22 @@ public void testResolveNonModularPlugin() throws IOException, ClassNotFoundExcep
164167

165168
Path jar = createNonModularPluginJar(home, pluginName, "p", "A");
166169

167-
var loader = createClassLoader(jar);
168-
169-
PluginBundle bundle = createMockBundle(pluginName, null, "p.A");
170-
PluginsLoader mockPluginsLoader = mock(PluginsLoader.class);
170+
try (var loader = createClassLoader(jar)) {
171+
PluginBundle bundle = createMockBundle(pluginName, null, "p.A");
172+
PluginsLoader mockPluginsLoader = mock(PluginsLoader.class);
171173

172-
when(mockPluginsLoader.pluginLayers()).thenReturn(Stream.of(new TestPluginLayer(bundle, loader, ModuleLayer.boot())));
173-
PluginsResolver pluginsResolver = PluginsResolver.create(mockPluginsLoader);
174+
when(mockPluginsLoader.pluginLayers()).thenReturn(Stream.of(new TestPluginLayer(bundle, loader, ModuleLayer.boot())));
175+
PluginsResolver pluginsResolver = PluginsResolver.create(mockPluginsLoader);
174176

175-
var testClass = loader.loadClass("p.A");
176-
var resolvedPluginName = pluginsResolver.resolveClassToPluginName(testClass);
177-
var unresolvedPluginName1 = pluginsResolver.resolveClassToPluginName(PluginsResolver.class);
178-
var unresolvedPluginName2 = pluginsResolver.resolveClassToPluginName(String.class);
177+
var testClass = loader.loadClass("p.A");
178+
var resolvedPluginName = pluginsResolver.resolveClassToPluginName(testClass);
179+
var unresolvedPluginName1 = pluginsResolver.resolveClassToPluginName(PluginsResolver.class);
180+
var unresolvedPluginName2 = pluginsResolver.resolveClassToPluginName(String.class);
179181

180-
assertEquals(pluginName, resolvedPluginName);
181-
assertNull(unresolvedPluginName1);
182-
assertNull(unresolvedPluginName2);
182+
assertEquals(pluginName, resolvedPluginName);
183+
assertNull(unresolvedPluginName1);
184+
assertNull(unresolvedPluginName2);
185+
}
183186
}
184187

185188
private static URLClassLoader createClassLoader(Path jar) throws MalformedURLException {

0 commit comments

Comments
 (0)