Skip to content

Commit aaef5ff

Browse files
committed
Move spi and system actions into separate classes
This commit moves methods used to test spi and system actions out of RestEntitlementsCheckAction into separate classes, to ease future merges.
1 parent 92d1d31 commit aaef5ff

File tree

4 files changed

+145
-117
lines changed

4 files changed

+145
-117
lines changed

libs/entitlement/qa/entitlement-test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/EntitlementTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
enum ExpectedAccess {
2121
PLUGINS,
2222
ES_MODULES_ONLY,
23+
SERVER_ONLY,
2324
ALWAYS_DENIED
2425
}
2526

libs/entitlement/qa/entitlement-test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/RestEntitlementsCheckAction.java

Lines changed: 1 addition & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,7 @@
1313
import org.elasticsearch.common.Strings;
1414
import org.elasticsearch.core.CheckedRunnable;
1515
import 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;
2516
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;
2817
import org.elasticsearch.logging.LogManager;
2918
import org.elasticsearch.logging.Logger;
3019
import org.elasticsearch.rest.BaseRestHandler;
@@ -75,7 +64,7 @@
7564
@SuppressWarnings("unused")
7665
public 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");
67+
7968

8069
record CheckAction(CheckedRunnable<Exception> action, boolean isAlwaysDeniedToPlugins, Integer fromJavaVersion) {
8170
/**
@@ -99,37 +88,17 @@ static CheckAction alwaysDenied(CheckedRunnable<Exception> action) {
9988
entry("static_reflection", deniedToPlugins(RestEntitlementsCheckAction::staticMethodNeverEntitledViaReflection)),
10089
entry("nonstatic_reflection", deniedToPlugins(RestEntitlementsCheckAction::nonstaticMethodNeverEntitledViaReflection)),
10190
entry("constructor_reflection", deniedToPlugins(RestEntitlementsCheckAction::constructorNeverEntitledViaReflection)),
102-
entry("runtime_exit", deniedToPlugins(RestEntitlementsCheckAction::runtimeExit)),
103-
entry("runtime_halt", deniedToPlugins(RestEntitlementsCheckAction::runtimeHalt)),
104-
entry("system_exit", deniedToPlugins(RestEntitlementsCheckAction::systemExit)),
10591
entry("create_classloader", forPlugins(RestEntitlementsCheckAction::createClassLoader)),
10692
entry("processBuilder_start", deniedToPlugins(RestEntitlementsCheckAction::processBuilder_start)),
10793
entry("processBuilder_startPipeline", deniedToPlugins(RestEntitlementsCheckAction::processBuilder_startPipeline)),
10894
entry("set_https_connection_properties", forPlugins(RestEntitlementsCheckAction::setHttpsConnectionProperties)),
10995
entry("set_default_ssl_socket_factory", alwaysDenied(RestEntitlementsCheckAction::setDefaultSSLSocketFactory)),
11096
entry("set_default_hostname_verifier", alwaysDenied(RestEntitlementsCheckAction::setDefaultHostnameVerifier)),
11197
entry("set_default_ssl_context", alwaysDenied(RestEntitlementsCheckAction::setDefaultSSLContext)),
112-
entry("system_setIn", alwaysDenied(RestEntitlementsCheckAction::system$$setIn)),
113-
entry("system_setOut", alwaysDenied(RestEntitlementsCheckAction::system$$setOut)),
114-
entry("system_setErr", alwaysDenied(RestEntitlementsCheckAction::system$$setErr)),
115-
entry("runtime_addShutdownHook", alwaysDenied(RestEntitlementsCheckAction::runtime$addShutdownHook)),
116-
entry("runtime_removeShutdownHook", alwaysDenied(RestEntitlementsCheckAction::runtime$$removeShutdownHook)),
11798
entry(
11899
"thread_setDefaultUncaughtExceptionHandler",
119100
alwaysDenied(RestEntitlementsCheckAction::thread$$setDefaultUncaughtExceptionHandler)
120101
),
121-
entry("localeServiceProvider", alwaysDenied(RestEntitlementsCheckAction::localeServiceProvider$)),
122-
entry("breakIteratorProvider", alwaysDenied(RestEntitlementsCheckAction::breakIteratorProvider$)),
123-
entry("collatorProvider", alwaysDenied(RestEntitlementsCheckAction::collatorProvider$)),
124-
entry("dateFormatProvider", alwaysDenied(RestEntitlementsCheckAction::dateFormatProvider$)),
125-
entry("dateFormatSymbolsProvider", alwaysDenied(RestEntitlementsCheckAction::dateFormatSymbolsProvider$)),
126-
entry("decimalFormatSymbolsProvider", alwaysDenied(RestEntitlementsCheckAction::decimalFormatSymbolsProvider$)),
127-
entry("numberFormatProvider", alwaysDenied(RestEntitlementsCheckAction::numberFormatProvider$)),
128-
entry("calendarDataProvider", alwaysDenied(RestEntitlementsCheckAction::calendarDataProvider$)),
129-
entry("calendarNameProvider", alwaysDenied(RestEntitlementsCheckAction::calendarNameProvider$)),
130-
entry("currencyNameProvider", alwaysDenied(RestEntitlementsCheckAction::currencyNameProvider$)),
131-
entry("localeNameProvider", alwaysDenied(RestEntitlementsCheckAction::localeNameProvider$)),
132-
entry("timeZoneNameProvider", alwaysDenied(RestEntitlementsCheckAction::timeZoneNameProvider$)),
133102
entry("logManager", alwaysDenied(RestEntitlementsCheckAction::logManager$)),
134103

135104
entry("locale_setDefault", alwaysDenied(WritePropertiesCheckActions::setDefaultLocale)),
@@ -326,21 +295,6 @@ private static void setDefaultSSLSocketFactory() {
326295
HttpsURLConnection.setDefaultSSLSocketFactory(new DummyImplementations.DummySSLSocketFactory());
327296
}
328297

329-
@SuppressForbidden(reason = "Specifically testing Runtime.exit")
330-
private static void runtimeExit() {
331-
Runtime.getRuntime().exit(123);
332-
}
333-
334-
@SuppressForbidden(reason = "Specifically testing Runtime.halt")
335-
private static void runtimeHalt() {
336-
Runtime.getRuntime().halt(123);
337-
}
338-
339-
@SuppressForbidden(reason = "Specifically testing System.exit")
340-
private static void systemExit() {
341-
System.exit(123);
342-
}
343-
344298
private static void staticMethodNeverEntitledViaReflection() throws Exception {
345299
Method systemExit = System.class.getMethod("exit", int.class);
346300
systemExit.invoke(null, 123);
@@ -369,84 +323,14 @@ private static void setHttpsConnectionProperties() {
369323
new DummyImplementations.DummyHttpsURLConnection().setSSLSocketFactory(new DummyImplementations.DummySSLSocketFactory());
370324
}
371325

372-
private static void system$$setIn() {
373-
System.setIn(System.in);
374-
}
375-
376-
@SuppressForbidden(reason = "This should be a no-op so we don't interfere with system streams")
377-
private static void system$$setOut() {
378-
System.setOut(System.out);
379-
}
380-
381-
@SuppressForbidden(reason = "This should be a no-op so we don't interfere with system streams")
382-
private static void system$$setErr() {
383-
System.setErr(System.err);
384-
}
385-
386-
private static void runtime$addShutdownHook() {
387-
Runtime.getRuntime().addShutdownHook(NO_OP_SHUTDOWN_HOOK);
388-
}
389-
390-
private static void runtime$$removeShutdownHook() {
391-
Runtime.getRuntime().removeShutdownHook(NO_OP_SHUTDOWN_HOOK);
392-
}
393-
394326
private static void thread$$setDefaultUncaughtExceptionHandler() {
395327
Thread.setDefaultUncaughtExceptionHandler(Thread.getDefaultUncaughtExceptionHandler());
396328
}
397329

398-
private static void localeServiceProvider$() {
399-
new DummyLocaleServiceProvider();
400-
}
401-
402330
private static void constructorNeverEntitledViaReflection() throws Exception {
403331
DummyLocaleServiceProvider.class.getConstructor().newInstance();
404332
}
405333

406-
private static void breakIteratorProvider$() {
407-
new DummyBreakIteratorProvider();
408-
}
409-
410-
private static void collatorProvider$() {
411-
new DummyCollatorProvider();
412-
}
413-
414-
private static void dateFormatProvider$() {
415-
new DummyDateFormatProvider();
416-
}
417-
418-
private static void dateFormatSymbolsProvider$() {
419-
new DummyDateFormatSymbolsProvider();
420-
}
421-
422-
private static void decimalFormatSymbolsProvider$() {
423-
new DummyDecimalFormatSymbolsProvider();
424-
}
425-
426-
private static void numberFormatProvider$() {
427-
new DummyNumberFormatProvider();
428-
}
429-
430-
private static void calendarDataProvider$() {
431-
new DummyCalendarDataProvider();
432-
}
433-
434-
private static void calendarNameProvider$() {
435-
new DummyCalendarNameProvider();
436-
}
437-
438-
private static void currencyNameProvider$() {
439-
new DummyCurrencyNameProvider();
440-
}
441-
442-
private static void localeNameProvider$() {
443-
new DummyLocaleNameProvider();
444-
}
445-
446-
private static void timeZoneNameProvider$() {
447-
new DummyTimeZoneNameProvider();
448-
}
449-
450334
private static void logManager$() {
451335
new java.util.logging.LogManager() {
452336
};
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.entitlement.qa.test;
11+
12+
import static org.elasticsearch.entitlement.qa.test.EntitlementTest.ExpectedAccess.ALWAYS_DENIED;
13+
14+
class SpiActions {
15+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
16+
static void createBreakIteratorProvider() {
17+
new DummyImplementations.DummyBreakIteratorProvider();
18+
}
19+
20+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
21+
static void createCollatorProvider() {
22+
new DummyImplementations.DummyCollatorProvider();
23+
}
24+
25+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
26+
static void createDateFormatProvider() {
27+
new DummyImplementations.DummyDateFormatProvider();
28+
}
29+
30+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
31+
static void createDateFormatSymbolsProvider() {
32+
new DummyImplementations.DummyDateFormatSymbolsProvider();
33+
}
34+
35+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
36+
static void createDecimalFormatSymbolsProvider() {
37+
new DummyImplementations.DummyDecimalFormatSymbolsProvider();
38+
}
39+
40+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
41+
static void createNumberFormatProvider() {
42+
new DummyImplementations.DummyNumberFormatProvider();
43+
}
44+
45+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
46+
static void createCalendarDataProvider() {
47+
new DummyImplementations.DummyCalendarDataProvider();
48+
}
49+
50+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
51+
static void createCalendarNameProvider() {
52+
new DummyImplementations.DummyCalendarNameProvider();
53+
}
54+
55+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
56+
static void createCurrencyNameProvider() {
57+
new DummyImplementations.DummyCurrencyNameProvider();
58+
}
59+
60+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
61+
static void createLocaleNameProvider() {
62+
new DummyImplementations.DummyLocaleNameProvider();
63+
}
64+
65+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
66+
static void createTimeZoneNameProvider() {
67+
new DummyImplementations.DummyTimeZoneNameProvider();
68+
}
69+
70+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
71+
static void createLocaleServiceProvider() {
72+
new DummyImplementations.DummyLocaleServiceProvider();
73+
}
74+
75+
private SpiActions() {}
76+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.entitlement.qa.test;
11+
12+
import org.elasticsearch.core.SuppressForbidden;
13+
14+
import static org.elasticsearch.entitlement.qa.test.EntitlementTest.ExpectedAccess.ALWAYS_DENIED;
15+
import static org.elasticsearch.entitlement.qa.test.EntitlementTest.ExpectedAccess.SERVER_ONLY;
16+
17+
class SystemActions {
18+
19+
@SuppressForbidden(reason = "Specifically testing Runtime.exit")
20+
@EntitlementTest(expectedAccess = SERVER_ONLY)
21+
static void runtimeExit() {
22+
Runtime.getRuntime().exit(123);
23+
}
24+
25+
@SuppressForbidden(reason = "Specifically testing Runtime.halt")
26+
@EntitlementTest(expectedAccess = SERVER_ONLY)
27+
static void runtimeHalt() {
28+
Runtime.getRuntime().halt(123);
29+
}
30+
31+
@SuppressForbidden(reason = "Specifically testing System.exit")
32+
@EntitlementTest(expectedAccess = SERVER_ONLY)
33+
static void systemExit() {
34+
System.exit(123);
35+
}
36+
37+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
38+
static void systemSetIn() {
39+
System.setIn(System.in);
40+
}
41+
42+
@SuppressForbidden(reason = "This should be a no-op so we don't interfere with system streams")
43+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
44+
static void systemSetOut() {
45+
System.setOut(System.out);
46+
}
47+
48+
@SuppressForbidden(reason = "This should be a no-op so we don't interfere with system streams")
49+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
50+
static void systemSetErr() {
51+
System.setErr(System.err);
52+
}
53+
54+
private static final Thread NO_OP_SHUTDOWN_HOOK = new Thread(() -> {}, "Shutdown hook for testing");
55+
56+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
57+
static void runtimeAddShutdownHook() {
58+
Runtime.getRuntime().addShutdownHook(NO_OP_SHUTDOWN_HOOK);
59+
}
60+
61+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
62+
static void runtimeRemoveShutdownHook() {
63+
Runtime.getRuntime().removeShutdownHook(NO_OP_SHUTDOWN_HOOK);
64+
}
65+
66+
private SystemActions() {}
67+
}

0 commit comments

Comments
 (0)