1414import org .elasticsearch .common .io .stream .BytesStreamOutput ;
1515import org .elasticsearch .test .ESTestCase ;
1616
17+ import java .io .IOException ;
1718import java .nio .ByteBuffer ;
1819import java .nio .file .Path ;
1920import java .util .ArrayList ;
2021import java .util .Collections ;
22+ import java .util .HashMap ;
2123import java .util .List ;
24+ import java .util .Map ;
2225
2326import static org .hamcrest .Matchers .contains ;
2427import static org .hamcrest .Matchers .containsString ;
2932
3033public 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
0 commit comments