Skip to content

Commit efa1315

Browse files
authored
Merge branch 'main' into dev-ui-section-and-page
2 parents 2e531d9 + 8f7df2c commit efa1315

11 files changed

+104
-146
lines changed

_data/wg.yaml

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,33 @@
11
---
22
working-groups:
3+
- title: "Test classloading"
4+
board-url: "https://github.com/orgs/quarkusio/projects/30"
5+
short-description: The goal of this working group is to rewrite Quarkus's test classloading, so that tests are run in the same classloader as the application under tests, and Quarkus extensions can do "Quarkus-y" manipulations of test classes.
6+
readme: |
7+
<p>At the moment, Quarkus tests are invoked using one classloader, and then executed in a different classloader. This mostly works well, but means some use cases don't work: extensions cannot manipulate test classes in the same way that they do normal application classes. For example, anything run via a JUnit @TestTemplate test case will see the un-transformed class.</p>
8+
<p>It also means we have extra user-facing complexity, such as the QuarkusTest*Callbacks](https://quarkus.io/guides/getting-started-testing#enrichment-via-quarkustestcallback):</p>
9+
<blockquote>
10+
<p>While it is possible to use JUnit Jupiter callback interfaces like BeforeEachCallback, you might run into classloading issues because Quarkus has to run tests in a custom classloader which JUnit is not aware of.</p>
11+
</blockquote>
12+
<p>A final benefit is a reduction in the internal complexity of our code. Hopping between classloaders during test execution takes a lot of work, and adds a lot of code! It also is brittle in places. For example, because the hop between classloaders relies on serialization in some cases, it's becoming harder to do as the JVM tightens up security restrictions. We used to rely on xstream, but that stopped working in Java 17. In https://github.com/quarkusio/quarkus/pull/40601, @dmlloyd moved us to use the JBoss Serializer, which works better, but might still be affected by future restrictions on class access.</p>
13+
<p>The goal of this working group is to allow test classes to fully participate in the 'quarkification' of classes. The mechanism for this is probably just to load the test classes with the classloader we intend to run them with, so that JUnit sees the 'correct' version of the class.</p>
14+
<ul>
15+
<li>Point of contact: @holly-cummins (@<strong>Holly Cummins</strong> on Zulip)</li>
16+
<li>Proposal: https://github.com/quarkusio/quarkus/discussions/41867</li>
17+
<li>Discussion: <a href="https://quarkusio.zulipchat.com/#narrow/channel/187038-dev/topic/WG.20.2330.20Test.20Classloading.20chatter/">Zulip topic</a></li>
18+
</ul>
19+
status: on track
20+
completed: false
21+
last-activity: 2024-11-28
22+
last-update-date: 2024-11-25
23+
last-update: |
24+
Good progress in the past week. Latest CI run: https://github.com/holly-cummins/quarkus/actions/runs/11940609084
25+
Down to 8 failing jobs on CI, which is, admittedly, awful, but it’s better than the 10 that were failing before this week. Fixed a bunch of problems in my implementation, some dumb (like typing ’text’ instead of ’test’, some more significant.)
26+
27+
The next task/blocker is @Nested tests which have a test profile. That means sorting out the contradiction between “load tests using the classloader we will use to execute them,” and “@Nested inner classes always get loaded by the parent’s classloader, which is totally the wrong classloader if there’s a @TestProfile on them”. I fear the solution may involve putting back a bunch of code I thought I was going to be able to delete.
28+
point-of-contact: "@holly-cummins (@<strong>Holly Cummins</strong> on Zulip)"
29+
proposal: https://github.com/quarkusio/quarkus/discussions/41867
30+
discussion: https://quarkusio.zulipchat.com/#narrow/channel/187038-dev/topic/WG.20.2330.20Test.20Classloading.20chatter/
331
- title: "WebSocket Next"
432
board-url: "https://github.com/orgs/quarkusio/projects/26"
533
short-description: WebSocket-Next related tasks
@@ -76,34 +104,6 @@ working-groups:
76104
deliverable: <a rel="nofollow" href="https://www.youtube.com/watch?v=VP7c9ftFwrQ">Quarkus Insight</a>
77105
point-of-contact: "@cescoffier (@<strong>Clement Escoffier</strong> on Zulip)"
78106
proposal: https://github.com/quarkusio/quarkus/discussions/41024
79-
- title: "Test classloading"
80-
board-url: "https://github.com/orgs/quarkusio/projects/30"
81-
short-description: The goal of this working group is to rewrite Quarkus's test classloading, so that tests are run in the same classloader as the application under tests, and Quarkus extensions can do "Quarkus-y" manipulations of test classes.
82-
readme: |
83-
<p>At the moment, Quarkus tests are invoked using one classloader, and then executed in a different classloader. This mostly works well, but means some use cases don't work: extensions cannot manipulate test classes in the same way that they do normal application classes. For example, anything run via a JUnit @TestTemplate test case will see the un-transformed class.</p>
84-
<p>It also means we have extra user-facing complexity, such as the QuarkusTest*Callbacks](https://quarkus.io/guides/getting-started-testing#enrichment-via-quarkustestcallback):</p>
85-
<blockquote>
86-
<p>While it is possible to use JUnit Jupiter callback interfaces like BeforeEachCallback, you might run into classloading issues because Quarkus has to run tests in a custom classloader which JUnit is not aware of.</p>
87-
</blockquote>
88-
<p>A final benefit is a reduction in the internal complexity of our code. Hopping between classloaders during test execution takes a lot of work, and adds a lot of code! It also is brittle in places. For example, because the hop between classloaders relies on serialization in some cases, it's becoming harder to do as the JVM tightens up security restrictions. We used to rely on xstream, but that stopped working in Java 17. In https://github.com/quarkusio/quarkus/pull/40601, @dmlloyd moved us to use the JBoss Serializer, which works better, but might still be affected by future restrictions on class access.</p>
89-
<p>The goal of this working group is to allow test classes to fully participate in the 'quarkification' of classes. The mechanism for this is probably just to load the test classes with the classloader we intend to run them with, so that JUnit sees the 'correct' version of the class.</p>
90-
<ul>
91-
<li>Point of contact: @holly-cummins (@<strong>Holly Cummins</strong> on Zulip)</li>
92-
<li>Proposal: https://github.com/quarkusio/quarkus/discussions/41867</li>
93-
<li>Discussion: <a href="https://quarkusio.zulipchat.com/#narrow/channel/187038-dev/topic/WG.20.2330.20Test.20Classloading.20chatter/">Zulip topic</a></li>
94-
</ul>
95-
status: on track
96-
completed: false
97-
last-activity: 2024-11-19
98-
last-update-date: 2024-11-25
99-
last-update: |
100-
Good progress in the past week. Latest CI run: https://github.com/holly-cummins/quarkus/actions/runs/11940609084
101-
Down to 8 failing jobs on CI, which is, admittedly, awful, but it’s better than the 10 that were failing before this week. Fixed a bunch of problems in my implementation, some dumb (like typing ’text’ instead of ’test’, some more significant.)
102-
103-
The next task/blocker is @Nested tests which have a test profile. That means sorting out the contradiction between “load tests using the classloader we will use to execute them,” and “@Nested inner classes always get loaded by the parent’s classloader, which is totally the wrong classloader if there’s a @TestProfile on them”. I fear the solution may involve putting back a bunch of code I thought I was going to be able to delete.
104-
point-of-contact: "@holly-cummins (@<strong>Holly Cummins</strong> on Zulip)"
105-
proposal: https://github.com/quarkusio/quarkus/discussions/41867
106-
discussion: https://quarkusio.zulipchat.com/#narrow/channel/187038-dev/topic/WG.20.2330.20Test.20Classloading.20chatter/
107107
- title: "Quarkus 3.15 LTS"
108108
board-url: "https://github.com/orgs/quarkusio/projects/28"
109109
short-description: This WG focuses on defining the issues we would like to have in the next-to-be LTS (Quarkus 3.14/3.15)

_generated-doc/main/config/quarkus-all-config.adoc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14295,7 +14295,7 @@ endif::add-copy-button-to-config-props[]
1429514295

1429614296
[.description]
1429714297
--
14298-
Origins allowed for CORS Comma separated list of valid URLs, e.g.: http://www.quarkus.io,http://localhost:3000 In case an entry of the list is surrounded by forward slashes, it is interpreted as a regular expression.
14298+
The origins allowed for CORS. A comma-separated list of valid URLs, such as `http://www.quarkus.io,http://localhost:3000`. URLs enclosed in forward slashes are interpreted as regular expressions.
1429914299

1430014300

1430114301
ifdef::add-copy-button-to-env-var[]
@@ -14316,7 +14316,7 @@ endif::add-copy-button-to-config-props[]
1431614316

1431714317
[.description]
1431814318
--
14319-
HTTP methods allowed for CORS Comma separated list of valid methods. ex: GET,PUT,POST The filter allows any method if this is not set. default: returns any requested method as valid
14319+
The HTTP methods allowed for CORS requests. A comma-separated list of valid HTTP methods, such as `GET,PUT,POST`. If not set, the filter allows any HTTP method by default. Default: Any HTTP request method is allowed.
1432014320

1432114321

1432214322
ifdef::add-copy-button-to-env-var[]
@@ -14337,7 +14337,7 @@ endif::add-copy-button-to-config-props[]
1433714337

1433814338
[.description]
1433914339
--
14340-
HTTP headers allowed for CORS Comma separated list of valid headers. ex: X-Custom,Content-Disposition The filter allows any header if this is not set. default: returns any requested header as valid
14340+
The HTTP headers allowed for CORS requests. A comma-separated list of valid headers, such as `X-Custom,Content-Disposition`. If not set, the filter allows any header by default. Default: Any HTTP request header is allowed.
1434114341

1434214342

1434314343
ifdef::add-copy-button-to-env-var[]
@@ -14358,7 +14358,7 @@ endif::add-copy-button-to-config-props[]
1435814358

1435914359
[.description]
1436014360
--
14361-
HTTP headers exposed in CORS Comma separated list of valid headers. ex: X-Custom,Content-Disposition default: empty
14361+
The HTTP headers exposed in CORS responses. A comma-separated list of headers to expose, such as `X-Custom,Content-Disposition`. Default: No headers are exposed.
1436214362

1436314363

1436414364
ifdef::add-copy-button-to-env-var[]
@@ -14379,7 +14379,7 @@ endif::add-copy-button-to-config-props[]
1437914379

1438014380
[.description]
1438114381
--
14382-
The `Access-Control-Max-Age` response header value indicating how long the results of a pre-flight request can be cached.
14382+
The `Access-Control-Max-Age` response header value in `java.time.Duration` format. Informs the browser how long it can cache the results of a preflight request.
1438314383

1438414384

1438514385
ifdef::add-copy-button-to-env-var[]
@@ -14400,7 +14400,7 @@ endif::add-copy-button-to-config-props[]
1440014400

1440114401
[.description]
1440214402
--
14403-
The `Access-Control-Allow-Credentials` header is used to tell the browsers to expose the response to front-end JavaScript code when the requests credentials mode Request.credentials is include”. The value of this header will default to `true` if `quarkus.http.cors.origins` property is set and there is a match with the precise `Origin` header.
14403+
The `Access-Control-Allow-Credentials` response header. Tells browsers if front-end JavaScript can be allowed to access credentials when the request's credentials mode, `Request.credentials`, is set to `include`. Default: `true` if the `quarkus.http.cors.origins` property is set and matches the precise `Origin` header value.
1440414404

1440514405

1440614406
ifdef::add-copy-button-to-env-var[]

_generated-doc/main/config/quarkus-vertx-http_quarkus.http.adoc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2301,7 +2301,7 @@ endif::add-copy-button-to-config-props[]
23012301

23022302
[.description]
23032303
--
2304-
Origins allowed for CORS Comma separated list of valid URLs, e.g.: http://www.quarkus.io,http://localhost:3000 In case an entry of the list is surrounded by forward slashes, it is interpreted as a regular expression.
2304+
The origins allowed for CORS. A comma-separated list of valid URLs, such as `http://www.quarkus.io,http://localhost:3000`. URLs enclosed in forward slashes are interpreted as regular expressions.
23052305

23062306

23072307
ifdef::add-copy-button-to-env-var[]
@@ -2322,7 +2322,7 @@ endif::add-copy-button-to-config-props[]
23222322

23232323
[.description]
23242324
--
2325-
HTTP methods allowed for CORS Comma separated list of valid methods. ex: GET,PUT,POST The filter allows any method if this is not set. default: returns any requested method as valid
2325+
The HTTP methods allowed for CORS requests. A comma-separated list of valid HTTP methods, such as `GET,PUT,POST`. If not set, the filter allows any HTTP method by default. Default: Any HTTP request method is allowed.
23262326

23272327

23282328
ifdef::add-copy-button-to-env-var[]
@@ -2343,7 +2343,7 @@ endif::add-copy-button-to-config-props[]
23432343

23442344
[.description]
23452345
--
2346-
HTTP headers allowed for CORS Comma separated list of valid headers. ex: X-Custom,Content-Disposition The filter allows any header if this is not set. default: returns any requested header as valid
2346+
The HTTP headers allowed for CORS requests. A comma-separated list of valid headers, such as `X-Custom,Content-Disposition`. If not set, the filter allows any header by default. Default: Any HTTP request header is allowed.
23472347

23482348

23492349
ifdef::add-copy-button-to-env-var[]
@@ -2364,7 +2364,7 @@ endif::add-copy-button-to-config-props[]
23642364

23652365
[.description]
23662366
--
2367-
HTTP headers exposed in CORS Comma separated list of valid headers. ex: X-Custom,Content-Disposition default: empty
2367+
The HTTP headers exposed in CORS responses. A comma-separated list of headers to expose, such as `X-Custom,Content-Disposition`. Default: No headers are exposed.
23682368

23692369

23702370
ifdef::add-copy-button-to-env-var[]
@@ -2385,7 +2385,7 @@ endif::add-copy-button-to-config-props[]
23852385

23862386
[.description]
23872387
--
2388-
The `Access-Control-Max-Age` response header value indicating how long the results of a pre-flight request can be cached.
2388+
The `Access-Control-Max-Age` response header value in `java.time.Duration` format. Informs the browser how long it can cache the results of a preflight request.
23892389

23902390

23912391
ifdef::add-copy-button-to-env-var[]
@@ -2406,7 +2406,7 @@ endif::add-copy-button-to-config-props[]
24062406

24072407
[.description]
24082408
--
2409-
The `Access-Control-Allow-Credentials` header is used to tell the browsers to expose the response to front-end JavaScript code when the requests credentials mode Request.credentials is include”. The value of this header will default to `true` if `quarkus.http.cors.origins` property is set and there is a match with the precise `Origin` header.
2409+
The `Access-Control-Allow-Credentials` response header. Tells browsers if front-end JavaScript can be allowed to access credentials when the request's credentials mode, `Request.credentials`, is set to `include`. Default: `true` if the `quarkus.http.cors.origins` property is set and matches the precise `Origin` header value.
24102410

24112411

24122412
ifdef::add-copy-button-to-env-var[]

_generated-doc/main/config/quarkus-vertx-http_quarkus.http.cors.adoc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ endif::add-copy-button-to-config-props[]
1515

1616
[.description]
1717
--
18-
Origins allowed for CORS Comma separated list of valid URLs, e.g.: http://www.quarkus.io,http://localhost:3000 In case an entry of the list is surrounded by forward slashes, it is interpreted as a regular expression.
18+
The origins allowed for CORS. A comma-separated list of valid URLs, such as `http://www.quarkus.io,http://localhost:3000`. URLs enclosed in forward slashes are interpreted as regular expressions.
1919

2020

2121
ifdef::add-copy-button-to-env-var[]
@@ -36,7 +36,7 @@ endif::add-copy-button-to-config-props[]
3636

3737
[.description]
3838
--
39-
HTTP methods allowed for CORS Comma separated list of valid methods. ex: GET,PUT,POST The filter allows any method if this is not set. default: returns any requested method as valid
39+
The HTTP methods allowed for CORS requests. A comma-separated list of valid HTTP methods, such as `GET,PUT,POST`. If not set, the filter allows any HTTP method by default. Default: Any HTTP request method is allowed.
4040

4141

4242
ifdef::add-copy-button-to-env-var[]
@@ -57,7 +57,7 @@ endif::add-copy-button-to-config-props[]
5757

5858
[.description]
5959
--
60-
HTTP headers allowed for CORS Comma separated list of valid headers. ex: X-Custom,Content-Disposition The filter allows any header if this is not set. default: returns any requested header as valid
60+
The HTTP headers allowed for CORS requests. A comma-separated list of valid headers, such as `X-Custom,Content-Disposition`. If not set, the filter allows any header by default. Default: Any HTTP request header is allowed.
6161

6262

6363
ifdef::add-copy-button-to-env-var[]
@@ -78,7 +78,7 @@ endif::add-copy-button-to-config-props[]
7878

7979
[.description]
8080
--
81-
HTTP headers exposed in CORS Comma separated list of valid headers. ex: X-Custom,Content-Disposition default: empty
81+
The HTTP headers exposed in CORS responses. A comma-separated list of headers to expose, such as `X-Custom,Content-Disposition`. Default: No headers are exposed.
8282

8383

8484
ifdef::add-copy-button-to-env-var[]
@@ -99,7 +99,7 @@ endif::add-copy-button-to-config-props[]
9999

100100
[.description]
101101
--
102-
The `Access-Control-Max-Age` response header value indicating how long the results of a pre-flight request can be cached.
102+
The `Access-Control-Max-Age` response header value in `java.time.Duration` format. Informs the browser how long it can cache the results of a preflight request.
103103

104104

105105
ifdef::add-copy-button-to-env-var[]
@@ -120,7 +120,7 @@ endif::add-copy-button-to-config-props[]
120120

121121
[.description]
122122
--
123-
The `Access-Control-Allow-Credentials` header is used to tell the browsers to expose the response to front-end JavaScript code when the requests credentials mode Request.credentials is include”. The value of this header will default to `true` if `quarkus.http.cors.origins` property is set and there is a match with the precise `Origin` header.
123+
The `Access-Control-Allow-Credentials` response header. Tells browsers if front-end JavaScript can be allowed to access credentials when the request's credentials mode, `Request.credentials`, is set to `include`. Default: `true` if the `quarkus.http.cors.origins` property is set and matches the precise `Origin` header value.
124124

125125

126126
ifdef::add-copy-button-to-env-var[]

0 commit comments

Comments
 (0)