Skip to content

Commit b56ed93

Browse files
authored
Simplify plugin descriptor tests (#88659)
The plugin descriptor tests are extremely verbose, always specifying all of the plugin properties to write to a descriptor file. Yet most of the time only one property needs to be tested. This commit simplifies these tests by having a set of template descriptor properties, and a helper method to write and read those properties, allowing additional properties to override those in the template.
1 parent 343637d commit b56ed93

File tree

2 files changed

+60
-220
lines changed

2 files changed

+60
-220
lines changed

server/src/test/java/org/elasticsearch/plugins/PluginDescriptorTests.java

Lines changed: 56 additions & 219 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@
1414
import org.elasticsearch.common.io.stream.BytesStreamOutput;
1515
import org.elasticsearch.test.ESTestCase;
1616

17+
import java.io.IOException;
1718
import java.nio.ByteBuffer;
1819
import java.nio.file.Path;
1920
import java.util.ArrayList;
2021
import java.util.Collections;
22+
import java.util.HashMap;
2123
import java.util.List;
24+
import java.util.Map;
2225

2326
import static org.hamcrest.Matchers.contains;
2427
import static org.hamcrest.Matchers.containsString;
@@ -29,26 +32,44 @@
2932

3033
public class PluginDescriptorTests extends ESTestCase {
3134

32-
public void testReadFromProperties() throws Exception {
35+
private static final Map<String, String> DESCRIPTOR_TEMPLATE = Map.of(
36+
"name",
37+
"my_plugin",
38+
"description",
39+
"fake desc",
40+
"version",
41+
"1.0",
42+
"elasticsearch.version",
43+
Version.CURRENT.toString(),
44+
"java.version",
45+
System.getProperty("java.specification.version"),
46+
"classname",
47+
"FakePlugin",
48+
"modulename",
49+
"org.mymodule"
50+
);
51+
52+
PluginDescriptor mockDescriptor(String... additionalProps) throws IOException {
53+
assert additionalProps.length % 2 == 0;
54+
Map<String, String> propsMap = new HashMap<>(DESCRIPTOR_TEMPLATE);
55+
for (int i = 0; i < additionalProps.length; i += 2) {
56+
propsMap.put(additionalProps[i], additionalProps[i + 1]);
57+
}
58+
String[] props = new String[propsMap.size() * 2];
59+
int i = 0;
60+
for (var e : propsMap.entrySet()) {
61+
props[i] = e.getKey();
62+
props[i + 1] = e.getValue();
63+
i += 2;
64+
}
65+
3366
Path pluginDir = createTempDir().resolve("fake-plugin");
34-
PluginTestUtil.writePluginProperties(
35-
pluginDir,
36-
"description",
37-
"fake desc",
38-
"name",
39-
"my_plugin",
40-
"version",
41-
"1.0",
42-
"elasticsearch.version",
43-
Version.CURRENT.toString(),
44-
"java.version",
45-
System.getProperty("java.specification.version"),
46-
"classname",
47-
"FakePlugin",
48-
"modulename",
49-
"org.mymodule"
50-
);
51-
PluginDescriptor info = PluginDescriptor.readFromProperties(pluginDir);
67+
PluginTestUtil.writePluginProperties(pluginDir, props);
68+
return PluginDescriptor.readFromProperties(pluginDir);
69+
}
70+
71+
public void testReadFromProperties() throws Exception {
72+
PluginDescriptor info = mockDescriptor();
5273
assertEquals("my_plugin", info.getName());
5374
assertEquals("fake desc", info.getDescription());
5475
assertEquals("1.0", info.getVersion());
@@ -58,241 +79,77 @@ public void testReadFromProperties() throws Exception {
5879
}
5980

6081
public void testReadFromPropertiesNameMissing() throws Exception {
61-
Path pluginDir = createTempDir().resolve("fake-plugin");
62-
PluginTestUtil.writePluginProperties(pluginDir);
63-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
82+
var e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("name", null));
6483
assertThat(e.getMessage(), containsString("property [name] is missing in"));
6584

66-
PluginTestUtil.writePluginProperties(pluginDir, "name", "");
67-
e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
85+
e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("name", ""));
6886
assertThat(e.getMessage(), containsString("property [name] is missing in"));
6987
}
7088

7189
public void testReadFromPropertiesDescriptionMissing() throws Exception {
72-
Path pluginDir = createTempDir().resolve("fake-plugin");
73-
PluginTestUtil.writePluginProperties(pluginDir, "name", "fake-plugin");
74-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
90+
var e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("description", null));
7591
assertThat(e.getMessage(), containsString("[description] is missing"));
7692
}
7793

7894
public void testReadFromPropertiesVersionMissing() throws Exception {
79-
Path pluginDir = createTempDir().resolve("fake-plugin");
80-
PluginTestUtil.writePluginProperties(pluginDir, "description", "fake desc", "name", "fake-plugin");
81-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
95+
var e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("version", null));
8296
assertThat(e.getMessage(), containsString("[version] is missing"));
8397
}
8498

8599
public void testReadFromPropertiesElasticsearchVersionMissing() throws Exception {
86-
Path pluginDir = createTempDir().resolve("fake-plugin");
87-
PluginTestUtil.writePluginProperties(pluginDir, "description", "fake desc", "name", "my_plugin", "version", "1.0");
88-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
100+
var e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("elasticsearch.version", null));
89101
assertThat(e.getMessage(), containsString("[elasticsearch.version] is missing"));
90102
}
91103

92104
public void testReadFromPropertiesElasticsearchVersionEmpty() throws Exception {
93-
Path pluginDir = createTempDir().resolve("fake-plugin");
94-
PluginTestUtil.writePluginProperties(
95-
pluginDir,
96-
"description",
97-
"fake desc",
98-
"name",
99-
"my_plugin",
100-
"version",
101-
"1.0",
102-
"elasticsearch.version",
103-
" "
104-
);
105-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
105+
var e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("elasticsearch.version", " "));
106106
assertThat(e.getMessage(), containsString("[elasticsearch.version] is missing"));
107107
}
108108

109109
public void testReadFromPropertiesJavaVersionMissing() throws Exception {
110-
Path pluginDir = createTempDir().resolve("fake-plugin");
111-
PluginTestUtil.writePluginProperties(
112-
pluginDir,
113-
"description",
114-
"fake desc",
115-
"name",
116-
"my_plugin",
117-
"elasticsearch.version",
118-
Version.CURRENT.toString(),
119-
"version",
120-
"1.0"
121-
);
122-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
110+
var e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("java.version", null));
123111
assertThat(e.getMessage(), containsString("[java.version] is missing"));
124112
}
125113

126114
public void testReadFromPropertiesBadJavaVersionFormat() throws Exception {
127-
String pluginName = "fake-plugin";
128-
Path pluginDir = createTempDir().resolve(pluginName);
129-
PluginTestUtil.writePluginProperties(
130-
pluginDir,
131-
"description",
132-
"fake desc",
133-
"name",
134-
pluginName,
135-
"elasticsearch.version",
136-
Version.CURRENT.toString(),
137-
"java.version",
138-
"1.7.0_80",
139-
"classname",
140-
"FakePlugin",
141-
"version",
142-
"1.0"
143-
);
144-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
115+
var e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("java.version", "1.7.0_80"));
145116
assertThat(e.getMessage(), equalTo("Invalid version string: '1.7.0_80'"));
146117
}
147118

148119
public void testReadFromPropertiesBogusElasticsearchVersion() throws Exception {
149-
Path pluginDir = createTempDir().resolve("fake-plugin");
150-
PluginTestUtil.writePluginProperties(
151-
pluginDir,
152-
"description",
153-
"fake desc",
154-
"version",
155-
"1.0",
156-
"name",
157-
"my_plugin",
158-
"elasticsearch.version",
159-
"bogus"
160-
);
161-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
120+
var e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("elasticsearch.version", "bogus"));
162121
assertThat(e.getMessage(), containsString("version needs to contain major, minor, and revision"));
163122
}
164123

165124
public void testReadFromPropertiesJvmMissingClassname() throws Exception {
166-
Path pluginDir = createTempDir().resolve("fake-plugin");
167-
PluginTestUtil.writePluginProperties(
168-
pluginDir,
169-
"description",
170-
"fake desc",
171-
"name",
172-
"my_plugin",
173-
"version",
174-
"1.0",
175-
"elasticsearch.version",
176-
Version.CURRENT.toString(),
177-
"java.version",
178-
System.getProperty("java.specification.version")
179-
);
180-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
125+
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("classname", null));
181126
assertThat(e.getMessage(), containsString("property [classname] is missing"));
182127
}
183128

184129
public void testReadFromPropertiesModulenameFallback() throws Exception {
185-
Path pluginDir = createTempDir().resolve("fake-plugin");
186-
PluginTestUtil.writePluginProperties(
187-
pluginDir,
188-
"description",
189-
"fake desc",
190-
"name",
191-
"my_plugin",
192-
"version",
193-
"1.0",
194-
"elasticsearch.version",
195-
Version.CURRENT.toString(),
196-
"java.version",
197-
System.getProperty("java.specification.version"),
198-
"classname",
199-
"FakePlugin"
200-
);
201-
PluginDescriptor info = PluginDescriptor.readFromProperties(pluginDir);
130+
PluginDescriptor info = mockDescriptor("modulename", null);
202131
assertThat(info.getModuleName().isPresent(), is(false));
203132
assertThat(info.getExtendedPlugins(), empty());
204133
}
205134

206135
public void testReadFromPropertiesModulenameEmpty() throws Exception {
207-
Path pluginDir = createTempDir().resolve("fake-plugin");
208-
PluginTestUtil.writePluginProperties(
209-
pluginDir,
210-
"description",
211-
"fake desc",
212-
"name",
213-
"my_plugin",
214-
"version",
215-
"1.0",
216-
"elasticsearch.version",
217-
Version.CURRENT.toString(),
218-
"java.version",
219-
System.getProperty("java.specification.version"),
220-
"classname",
221-
"FakePlugin",
222-
"modulename",
223-
" "
224-
);
225-
PluginDescriptor info = PluginDescriptor.readFromProperties(pluginDir);
136+
PluginDescriptor info = mockDescriptor("modulename", " ");
226137
assertThat(info.getModuleName().isPresent(), is(false));
227138
assertThat(info.getExtendedPlugins(), empty());
228139
}
229140

230141
public void testExtendedPluginsSingleExtension() throws Exception {
231-
Path pluginDir = createTempDir().resolve("fake-plugin");
232-
PluginTestUtil.writePluginProperties(
233-
pluginDir,
234-
"description",
235-
"fake desc",
236-
"name",
237-
"my_plugin",
238-
"version",
239-
"1.0",
240-
"elasticsearch.version",
241-
Version.CURRENT.toString(),
242-
"java.version",
243-
System.getProperty("java.specification.version"),
244-
"classname",
245-
"FakePlugin",
246-
"extended.plugins",
247-
"foo"
248-
);
249-
PluginDescriptor info = PluginDescriptor.readFromProperties(pluginDir);
142+
PluginDescriptor info = mockDescriptor("extended.plugins", "foo");
250143
assertThat(info.getExtendedPlugins(), contains("foo"));
251144
}
252145

253146
public void testExtendedPluginsMultipleExtensions() throws Exception {
254-
Path pluginDir = createTempDir().resolve("fake-plugin");
255-
PluginTestUtil.writePluginProperties(
256-
pluginDir,
257-
"description",
258-
"fake desc",
259-
"name",
260-
"my_plugin",
261-
"version",
262-
"1.0",
263-
"elasticsearch.version",
264-
Version.CURRENT.toString(),
265-
"java.version",
266-
System.getProperty("java.specification.version"),
267-
"classname",
268-
"FakePlugin",
269-
"extended.plugins",
270-
"foo,bar,baz"
271-
);
272-
PluginDescriptor info = PluginDescriptor.readFromProperties(pluginDir);
147+
PluginDescriptor info = mockDescriptor("extended.plugins", "foo,bar,baz");
273148
assertThat(info.getExtendedPlugins(), contains("foo", "bar", "baz"));
274149
}
275150

276151
public void testExtendedPluginsEmpty() throws Exception {
277-
Path pluginDir = createTempDir().resolve("fake-plugin");
278-
PluginTestUtil.writePluginProperties(
279-
pluginDir,
280-
"description",
281-
"fake desc",
282-
"name",
283-
"my_plugin",
284-
"version",
285-
"1.0",
286-
"elasticsearch.version",
287-
Version.CURRENT.toString(),
288-
"java.version",
289-
System.getProperty("java.specification.version"),
290-
"classname",
291-
"FakePlugin",
292-
"extended.plugins",
293-
""
294-
);
295-
PluginDescriptor info = PluginDescriptor.readFromProperties(pluginDir);
152+
PluginDescriptor info = mockDescriptor("extended.plugins", "");
296153
assertThat(info.getExtendedPlugins(), empty());
297154
}
298155

@@ -368,27 +225,7 @@ public void testPluginListSorted() {
368225
}
369226

370227
public void testUnknownProperties() throws Exception {
371-
Path pluginDir = createTempDir().resolve("fake-plugin");
372-
PluginTestUtil.writePluginProperties(
373-
pluginDir,
374-
"extra",
375-
"property",
376-
"unknown",
377-
"property",
378-
"description",
379-
"fake desc",
380-
"classname",
381-
"Foo",
382-
"name",
383-
"my_plugin",
384-
"version",
385-
"1.0",
386-
"elasticsearch.version",
387-
Version.CURRENT.toString(),
388-
"java.version",
389-
System.getProperty("java.specification.version")
390-
);
391-
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> PluginDescriptor.readFromProperties(pluginDir));
228+
IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> mockDescriptor("extra", "property"));
392229
assertThat(e.getMessage(), containsString("Unknown properties for plugin [my_plugin] in plugin descriptor"));
393230
}
394231

test/framework/src/main/java/org/elasticsearch/plugins/PluginTestUtil.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ private static void writeProperties(Path propertiesFile, String... stringProps)
2727
Files.createDirectories(propertiesFile.getParent());
2828
Properties properties = new Properties();
2929
for (int i = 0; i < stringProps.length; i += 2) {
30-
properties.put(stringProps[i], stringProps[i + 1]);
30+
String value = stringProps[i + 1];
31+
if (value != null) {
32+
properties.put(stringProps[i], stringProps[i + 1]);
33+
}
3134
}
3235
try (OutputStream out = Files.newOutputStream(propertiesFile)) {
3336
properties.store(out, "");

0 commit comments

Comments
 (0)