1313import org .elasticsearch .common .Strings ;
1414import org .elasticsearch .core .CheckedRunnable ;
1515import org .elasticsearch .core .SuppressForbidden ;
16- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyBreakIteratorProvider ;
17- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyCalendarDataProvider ;
18- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyCalendarNameProvider ;
19- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyCollatorProvider ;
20- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyCurrencyNameProvider ;
21- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyDateFormatProvider ;
22- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyDateFormatSymbolsProvider ;
23- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyDecimalFormatSymbolsProvider ;
24- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyLocaleNameProvider ;
25- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyLocaleServiceProvider ;
26- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyNumberFormatProvider ;
27- import org .elasticsearch .entitlement .qa .test .DummyImplementations .DummyTimeZoneNameProvider ;
2816import org .elasticsearch .logging .LogManager ;
2917import org .elasticsearch .logging .Logger ;
3018import org .elasticsearch .rest .BaseRestHandler ;
5947import java .util .Map ;
6048import java .util .Map .Entry ;
6149import java .util .Set ;
50+ import java .util .function .Function ;
6251import java .util .stream .Collectors ;
6352import java .util .stream .Stream ;
6453
7564@ SuppressWarnings ("unused" )
7665public class RestEntitlementsCheckAction extends BaseRestHandler {
7766 private static final Logger logger = LogManager .getLogger (RestEntitlementsCheckAction .class );
78- public static final Thread NO_OP_SHUTDOWN_HOOK = new Thread (() -> {}, "Shutdown hook for testing" );
7967
8068 record CheckAction (CheckedRunnable <Exception > action , boolean isAlwaysDeniedToPlugins , Integer fromJavaVersion ) {
8169 /**
@@ -94,39 +82,19 @@ static CheckAction alwaysDenied(CheckedRunnable<Exception> action) {
9482 }
9583 }
9684
97- private static final Map <String , CheckAction > checkActions = Stream .concat (
85+ private static final Map <String , CheckAction > checkActions = Stream .of (
9886 Stream .<Entry <String , CheckAction >>of (
99- entry ("runtime_exit" , deniedToPlugins (RestEntitlementsCheckAction ::runtimeExit )),
100- entry ("runtime_halt" , deniedToPlugins (RestEntitlementsCheckAction ::runtimeHalt )),
101- entry ("system_exit" , deniedToPlugins (RestEntitlementsCheckAction ::systemExit )),
10287 entry ("create_classloader" , forPlugins (RestEntitlementsCheckAction ::createClassLoader )),
10388 entry ("processBuilder_start" , deniedToPlugins (RestEntitlementsCheckAction ::processBuilder_start )),
10489 entry ("processBuilder_startPipeline" , deniedToPlugins (RestEntitlementsCheckAction ::processBuilder_startPipeline )),
10590 entry ("set_https_connection_properties" , forPlugins (RestEntitlementsCheckAction ::setHttpsConnectionProperties )),
10691 entry ("set_default_ssl_socket_factory" , alwaysDenied (RestEntitlementsCheckAction ::setDefaultSSLSocketFactory )),
10792 entry ("set_default_hostname_verifier" , alwaysDenied (RestEntitlementsCheckAction ::setDefaultHostnameVerifier )),
10893 entry ("set_default_ssl_context" , alwaysDenied (RestEntitlementsCheckAction ::setDefaultSSLContext )),
109- entry ("system_setIn" , alwaysDenied (RestEntitlementsCheckAction ::system$$setIn )),
110- entry ("system_setOut" , alwaysDenied (RestEntitlementsCheckAction ::system$$setOut )),
111- entry ("system_setErr" , alwaysDenied (RestEntitlementsCheckAction ::system$$setErr )),
112- entry ("runtime_addShutdownHook" , alwaysDenied (RestEntitlementsCheckAction ::runtime$addShutdownHook )),
113- entry ("runtime_removeShutdownHook" , alwaysDenied (RestEntitlementsCheckAction ::runtime$$removeShutdownHook )),
11494 entry (
11595 "thread_setDefaultUncaughtExceptionHandler" ,
11696 alwaysDenied (RestEntitlementsCheckAction ::thread$$setDefaultUncaughtExceptionHandler )
11797 ),
118- entry ("localeServiceProvider" , alwaysDenied (RestEntitlementsCheckAction ::localeServiceProvider$ )),
119- entry ("breakIteratorProvider" , alwaysDenied (RestEntitlementsCheckAction ::breakIteratorProvider$ )),
120- entry ("collatorProvider" , alwaysDenied (RestEntitlementsCheckAction ::collatorProvider$ )),
121- entry ("dateFormatProvider" , alwaysDenied (RestEntitlementsCheckAction ::dateFormatProvider$ )),
122- entry ("dateFormatSymbolsProvider" , alwaysDenied (RestEntitlementsCheckAction ::dateFormatSymbolsProvider$ )),
123- entry ("decimalFormatSymbolsProvider" , alwaysDenied (RestEntitlementsCheckAction ::decimalFormatSymbolsProvider$ )),
124- entry ("numberFormatProvider" , alwaysDenied (RestEntitlementsCheckAction ::numberFormatProvider$ )),
125- entry ("calendarDataProvider" , alwaysDenied (RestEntitlementsCheckAction ::calendarDataProvider$ )),
126- entry ("calendarNameProvider" , alwaysDenied (RestEntitlementsCheckAction ::calendarNameProvider$ )),
127- entry ("currencyNameProvider" , alwaysDenied (RestEntitlementsCheckAction ::currencyNameProvider$ )),
128- entry ("localeNameProvider" , alwaysDenied (RestEntitlementsCheckAction ::localeNameProvider$ )),
129- entry ("timeZoneNameProvider" , alwaysDenied (RestEntitlementsCheckAction ::timeZoneNameProvider$ )),
13098 entry ("logManager" , alwaysDenied (RestEntitlementsCheckAction ::logManager$ )),
13199
132100 entry ("locale_setDefault" , alwaysDenied (WritePropertiesCheckActions ::setDefaultLocale )),
@@ -230,8 +198,11 @@ static CheckAction alwaysDenied(CheckedRunnable<Exception> action) {
230198 entry ("symbol_lookup_name" , new CheckAction (VersionSpecificNativeChecks ::symbolLookupWithName , false , 22 )),
231199 entry ("symbol_lookup_path" , new CheckAction (VersionSpecificNativeChecks ::symbolLookupWithPath , false , 22 ))
232200 ),
233- getTestEntries (FileCheckActions .class )
201+ getTestEntries (FileCheckActions .class ),
202+ getTestEntries (SpiActions .class ),
203+ getTestEntries (SystemActions .class )
234204 )
205+ .flatMap (Function .identity ())
235206 .filter (entry -> entry .getValue ().fromJavaVersion () == null || Runtime .version ().feature () >= entry .getValue ().fromJavaVersion ())
236207 .collect (Collectors .toUnmodifiableMap (Entry ::getKey , Entry ::getValue ));
237208
@@ -267,7 +238,7 @@ private static Stream<Entry<String, CheckAction>> getTestEntries(Class<?> action
267238 }
268239 }
269240 };
270- boolean deniedToPlugins = testAnnotation .expectedAccess () = = PLUGINS ;
241+ boolean deniedToPlugins = testAnnotation .expectedAccess () ! = PLUGINS ;
271242 Integer fromJavaVersion = testAnnotation .fromJavaVersion () == -1 ? null : testAnnotation .fromJavaVersion ();
272243 entries .add (entry (method .getName (), new CheckAction (runnable , deniedToPlugins , fromJavaVersion )));
273244 }
@@ -323,21 +294,6 @@ private static void setDefaultSSLSocketFactory() {
323294 HttpsURLConnection .setDefaultSSLSocketFactory (new DummyImplementations .DummySSLSocketFactory ());
324295 }
325296
326- @ SuppressForbidden (reason = "Specifically testing Runtime.exit" )
327- private static void runtimeExit () {
328- Runtime .getRuntime ().exit (123 );
329- }
330-
331- @ SuppressForbidden (reason = "Specifically testing Runtime.halt" )
332- private static void runtimeHalt () {
333- Runtime .getRuntime ().halt (123 );
334- }
335-
336- @ SuppressForbidden (reason = "Specifically testing System.exit" )
337- private static void systemExit () {
338- System .exit (123 );
339- }
340-
341297 private static void createClassLoader () throws IOException {
342298 try (var classLoader = new URLClassLoader ("test" , new URL [0 ], RestEntitlementsCheckAction .class .getClassLoader ())) {
343299 logger .info ("Created URLClassLoader [{}]" , classLoader .getName ());
@@ -356,80 +312,10 @@ private static void setHttpsConnectionProperties() {
356312 new DummyImplementations .DummyHttpsURLConnection ().setSSLSocketFactory (new DummyImplementations .DummySSLSocketFactory ());
357313 }
358314
359- private static void system$$setIn () {
360- System .setIn (System .in );
361- }
362-
363- @ SuppressForbidden (reason = "This should be a no-op so we don't interfere with system streams" )
364- private static void system$$setOut () {
365- System .setOut (System .out );
366- }
367-
368- @ SuppressForbidden (reason = "This should be a no-op so we don't interfere with system streams" )
369- private static void system$$setErr () {
370- System .setErr (System .err );
371- }
372-
373- private static void runtime$addShutdownHook () {
374- Runtime .getRuntime ().addShutdownHook (NO_OP_SHUTDOWN_HOOK );
375- }
376-
377- private static void runtime$$removeShutdownHook () {
378- Runtime .getRuntime ().removeShutdownHook (NO_OP_SHUTDOWN_HOOK );
379- }
380-
381315 private static void thread$$setDefaultUncaughtExceptionHandler () {
382316 Thread .setDefaultUncaughtExceptionHandler (Thread .getDefaultUncaughtExceptionHandler ());
383317 }
384318
385- private static void localeServiceProvider$ () {
386- new DummyLocaleServiceProvider ();
387- }
388-
389- private static void breakIteratorProvider$ () {
390- new DummyBreakIteratorProvider ();
391- }
392-
393- private static void collatorProvider$ () {
394- new DummyCollatorProvider ();
395- }
396-
397- private static void dateFormatProvider$ () {
398- new DummyDateFormatProvider ();
399- }
400-
401- private static void dateFormatSymbolsProvider$ () {
402- new DummyDateFormatSymbolsProvider ();
403- }
404-
405- private static void decimalFormatSymbolsProvider$ () {
406- new DummyDecimalFormatSymbolsProvider ();
407- }
408-
409- private static void numberFormatProvider$ () {
410- new DummyNumberFormatProvider ();
411- }
412-
413- private static void calendarDataProvider$ () {
414- new DummyCalendarDataProvider ();
415- }
416-
417- private static void calendarNameProvider$ () {
418- new DummyCalendarNameProvider ();
419- }
420-
421- private static void currencyNameProvider$ () {
422- new DummyCurrencyNameProvider ();
423- }
424-
425- private static void localeNameProvider$ () {
426- new DummyLocaleNameProvider ();
427- }
428-
429- private static void timeZoneNameProvider$ () {
430- new DummyTimeZoneNameProvider ();
431- }
432-
433319 private static void logManager$ () {
434320 new java .util .logging .LogManager () {
435321 };
0 commit comments