This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 6bf6091e97 test: SonarCloud phase-6 test-quality cleanup
(S8714/S5778/S2699 fixes + by-design suppressions); harden PetstoreJetty
cold-start (flaky CI timeout); fix Web:S6827 empty Javadoc anchors
6bf6091e97 is described below
commit 6bf6091e9748361a267522e7da9d6c7a00d2929e
Author: James Bognar <[email protected]>
AuthorDate: Thu Jun 11 14:43:35 2026 -0400
test: SonarCloud phase-6 test-quality cleanup (S8714/S5778/S2699 fixes +
by-design suppressions); harden PetstoreJetty cold-start (flaky CI timeout);
fix Web:S6827 empty Javadoc anchors
---
.../java/org/apache/juneau/bean/atom/package.html | 18 ++++--------
.../org/apache/juneau/bean/html5/package2.html | 12 +++-----
.../juneau/assertions/ListAssertion_Test.java | 6 +++-
.../juneau/commons/bean/BeanMap_Coverage_Test.java | 18 ++++++++----
.../commons/bean/BeanMeta_Coverage_Test.java | 3 ++
.../bean/BeanPropertyMeta_Coverage_Test.java | 3 ++
.../apache/juneau/commons/lang/Version_Test.java | 11 ++------
.../commons/utils/ResourceBundleUtils_Test.java | 6 ++--
.../juneau/commons/utils/StringUtils_Test.java | 24 ++++++----------
.../juneau/collections/MarshalledList_Test.java | 10 ++++---
.../juneau/collections/MarshalledMap_Test.java | 3 +-
.../juneau/http/remote/RrpcInterface_Test.java | 13 ++-------
.../rest/server/auth/oauth/OAuthFilter_Test.java | 14 ++++------
.../convention/BasicConvention_Builders_Test.java | 6 +---
...iDocs_Springboot_MultiOpenApiProvider_Test.java | 9 ++----
.../rest/server/mcp/McpHandlerDefaults_Test.java | 12 +++-----
.../rest/server/rrpc/RrpcRestOpSession_Test.java | 12 +++-----
.../resources/LogsResource_Action_Test.java | 6 ++--
.../juneau/petstore/service/PetStore_Test.java | 4 +--
.../juneau/petstore/jetty/PetstoreJetty_Test.java | 32 ++++++++++++++++++++++
.../apache/juneau/http/classic/BasicPart_Test.java | 6 +++-
.../http/classic/resource/BasicResource_Test.java | 6 ++--
.../juneau/rest/mock/MockRestClient_Test.java | 10 +++----
.../rest/server/auth/oauth/OAuthFilter_Test.java | 14 ++++------
.../rest/server/mcp/McpHandlerDefaults_Test.java | 12 +++-----
...iDocs_Springboot_MultiOpenApiProvider_Test.java | 9 ++----
.../juneau/rest/server/view/jsp/JspView_Test.java | 28 ++++++++++++-------
27 files changed, 152 insertions(+), 155 deletions(-)
diff --git
a/juneau-bean/juneau-bean-atom/src/main/java/org/apache/juneau/bean/atom/package.html
b/juneau-bean/juneau-bean-atom/src/main/java/org/apache/juneau/bean/atom/package.html
index 2dad90251f..8c09559652 100644
---
a/juneau-bean/juneau-bean-atom/src/main/java/org/apache/juneau/bean/atom/package.html
+++
b/juneau-bean/juneau-bean-atom/src/main/java/org/apache/juneau/bean/atom/package.html
@@ -33,8 +33,7 @@
<p>ATOM Data Transfer Objects</p>
<!--
========================================================================================================
-->
-<a id="Overview"></a>
-<h2 class='topic'>1 - Overview</h2>
+<h2 id="Overview" class='topic'>1 - Overview</h2>
<div class='topic'>
<p>
Juneau supports generation and consumption of ATOM feeds
through the use of DTOs (Data Transfer Objects).
@@ -47,8 +46,7 @@
<!--
========================================================================================================
-->
- <a id="Serialize"></a>
- <h3 class='topic'>1.1 - Serializing ATOM feeds</h3>
+ <h3 id="Serialize" class='topic'>1.1 - Serializing ATOM feeds</h3>
<div class='topic'>
<p>
The Juneau ATOM feed DTOs are simply beans with
fluent-style setters.
@@ -270,8 +268,7 @@
<!--
========================================================================================================
-->
- <a id="AtomJson"></a>
- <h4 class='topic'>1.1.1 - ATOM/JSON</h4>
+ <h4 id="AtomJson" class='topic'>1.1.1 - ATOM/JSON</h4>
<div class='topic'>
<p>
The {@link
org.apache.juneau.marshall.json.JsonSerializer} class can also be used to
produce ATOM in JSON format.
@@ -368,8 +365,7 @@
<!--
========================================================================================================
-->
- <a id="AtomRdfXml"></a>
- <h4 class='topic'>1.1.2 - ATOM/RDF/XML</h4>
+ <h4 id="AtomRdfXml" class='topic'>1.1.2 - ATOM/RDF/XML</h4>
<div class='topic'>
<p>
The {@link
org.apache.juneau.marshall.jena.RdfSerializer} class and subclasses can also be
used to produce ATOM
@@ -489,8 +485,7 @@
<!--
========================================================================================================
-->
- <a id="AtomHtml"></a>
- <h4 class='topic'>1.1.3 - ATOM/HTML</h4>
+ <h4 id="AtomHtml" class='topic'>1.1.3 - ATOM/HTML</h4>
<div class='topic'>
<p>
The {@link
org.apache.juneau.marshall.html.HtmlSerializer} class can be used to produce
ATOM in HTML format.
@@ -506,8 +501,7 @@
<!--
========================================================================================================
-->
- <a id="Parse"></a>
- <h3 class='topic'>1.2 - Parsing ATOM feeds</h3>
+ <h3 id="Parse" class='topic'>1.2 - Parsing ATOM feeds</h3>
<div class='topic'>
<p>
Use the {@link
org.apache.juneau.marshall.xml.XmlParser} to convert ATOM/XML feeds back into
their original POJOs:
diff --git
a/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/package2.html
b/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/package2.html
index b02ac98a00..6b77966249 100644
---
a/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/package2.html
+++
b/juneau-bean/juneau-bean-html5/src/main/java/org/apache/juneau/bean/html5/package2.html
@@ -33,8 +33,7 @@
<p>HTML5 Data Transfer Objects</p>
<!--
========================================================================================================
-->
-<a id="Overview"></a>
-<h2 class='topic'>1 - Overview</h2>
+<h2 id="Overview" class='topic'>1 - Overview</h2>
<div class='topic'>
<p>
Juneau supports generation and consumption of HTML5 documents
and fragments through the use of DTOs (Data
@@ -44,8 +43,7 @@
<!--
========================================================================================================
-->
- <a id="Serialize"></a>
- <h3 class='topic'>1.1 - Generating HTML5</h3>
+ <h3 id="Serialize" class='topic'>1.1 - Generating HTML5</h3>
<div class='topic'>
<p>
The Juneau HTML5 DTOs are simply beans with
fluent-style setters that allow you to quickly construct HTML
@@ -185,8 +183,7 @@
</div>
<!--
========================================================================================================
-->
- <a id="Parse"></a>
- <h3 class='topic'>1.2 - Parsing HTML5</h3>
+ <h3 id="Parse" class='topic'>1.2 - Parsing HTML5</h3>
<div class='topic'>
<p>
Use the {@link
org.apache.juneau.marshall.html.HtmlParser} to convert HTML5 documents back
into their original POJOs:
@@ -204,8 +201,7 @@
</div>
<!--
========================================================================================================
-->
- <a id="Templates"></a>
- <h3 class='topic'>1.3 - HTML5 templates</h3>
+ <h3 id="Templates" class='topic'>1.3 - HTML5 templates</h3>
<div class='topic'>
<p>
If you're finding yourself reusing the same HTML5 DTO
objects over and over that only differ slightly,
diff --git
a/juneau-core/juneau-assertions/src/test/java/org/apache/juneau/assertions/ListAssertion_Test.java
b/juneau-core/juneau-assertions/src/test/java/org/apache/juneau/assertions/ListAssertion_Test.java
index a2b7dc907e..b0f5b4d94e 100644
---
a/juneau-core/juneau-assertions/src/test/java/org/apache/juneau/assertions/ListAssertion_Test.java
+++
b/juneau-core/juneau-assertions/src/test/java/org/apache/juneau/assertions/ListAssertion_Test.java
@@ -198,7 +198,11 @@ class ListAssertion_Test extends TestBase {
test(nil).asSublist(1,3).isNull();
}
- @Test void bd01_create_wStream() {
+ @Test
+ @SuppressWarnings({
+ "java:S2699" // Uses Juneau's custom fluent assertions
(isHas/isNull), which Sonar doesn't recognize as assertions.
+ })
+ void bd01_create_wStream() {
ListAssertion.create(Stream.of("a","b")).setSilent().isHas("a","b");
ListAssertion.create((Stream<String>)null).setSilent().isNull();
}
diff --git
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanMap_Coverage_Test.java
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanMap_Coverage_Test.java
index f22702f8ff..0dc71160ad 100644
---
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanMap_Coverage_Test.java
+++
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanMap_Coverage_Test.java
@@ -257,12 +257,15 @@ class BeanMap_Coverage_Test extends TestBase {
var c = new C_DynaPojo();
var bm = BeanMap.of(c);
// "unknownProp" is not a declared field. If WithDynaField
recognizes the dyna property, this should
- // route to the dyna setter. If not, it throws. Either way,
exercise that code path.
- try {
- bm.put("unknownDynaKey", "value");
- } catch (BeanRuntimeException expected) {
- // Either the dyna property is not recognized on the
commons path (throws) or it is (no throw).
- }
+ // route to the dyna setter. If not, it throws
BeanRuntimeException. Either outcome is acceptable;
+ // assert that no other exception type escapes the put() dyna
branch.
+ assertDoesNotThrow(() -> {
+ try {
+ bm.put("unknownDynaKey", "value");
+ } catch (BeanRuntimeException expected) {
+ // Either the dyna property is not recognized
on the commons path (throws) or it is (no throw).
+ }
+ });
}
@Test
@@ -415,6 +418,9 @@ class BeanMap_Coverage_Test extends TestBase {
}
@Test
+ @SuppressWarnings({
+ "java:S3415" // Argument order is intentional: this test
exercises BeanMap.equals() with a non-matching type, so the bean must be the
receiver (first arg of assertNotEquals).
+ })
void h03_equals_nonMap_returnsFalse() {
var bm = BeanMap.of(new A_Pojo());
assertNotEquals(bm, "not-a-map");
diff --git
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanMeta_Coverage_Test.java
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanMeta_Coverage_Test.java
index 09f366b526..8d4ab2c933 100644
---
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanMeta_Coverage_Test.java
+++
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanMeta_Coverage_Test.java
@@ -140,6 +140,9 @@ class BeanMeta_Coverage_Test extends TestBase {
}
@Test
+ @SuppressWarnings({
+ "java:S3415" // Argument order is intentional: this test
exercises BeanMeta.equals() with a non-matching type, so the bean must be the
receiver (first arg of assertNotEquals).
+ })
void a03_equals_nonBeanMeta_returnsFalse() {
var b = BeanMeta.of(Plain.class);
assertNotEquals(b, "not-a-bean-meta");
diff --git
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanPropertyMeta_Coverage_Test.java
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanPropertyMeta_Coverage_Test.java
index 16ffde2730..47d9fcc92c 100644
---
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanPropertyMeta_Coverage_Test.java
+++
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/bean/BeanPropertyMeta_Coverage_Test.java
@@ -242,6 +242,9 @@ class BeanPropertyMeta_Coverage_Test extends TestBase {
}
@Test
+ @SuppressWarnings({
+ "java:S3415" // Argument order is intentional: this test
exercises BeanPropertyMeta.equals() with a non-matching type, so the bean must
be the receiver (first arg of assertNotEquals).
+ })
void b03_equals_nonPropertyMeta_returnsFalse() {
var bm = BeanMeta.of(Plain.class);
var pm = bm.getPropertyMeta("x");
diff --git
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/lang/Version_Test.java
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/lang/Version_Test.java
index 63eaf5865a..bc17df6db0 100644
---
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/lang/Version_Test.java
+++
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/lang/Version_Test.java
@@ -131,15 +131,8 @@ class Version_Test extends TestBase {
void b02_equalsObject(String version1, String version2, boolean
expectedEqual, boolean checkNull) {
var v1 = of(version1);
if (checkNull) {
- // equals(Object) should return false for null
- // The instanceof check should prevent any null access
- try {
- assertNotEquals(v1, (Object)null);
- } catch (NullPointerException e) {
- // If there's a bug in the implementation,
we'll catch it here
- // But ideally this should not throw
- fail("equals(Object) should handle null without
throwing NullPointerException");
- }
+ // equals(Object) should return false for null without
throwing.
+ assertDoesNotThrow(() -> assertNotEquals(v1,
(Object)null));
} else {
var v2 = of(version2);
if (expectedEqual) {
diff --git
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/ResourceBundleUtils_Test.java
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/ResourceBundleUtils_Test.java
index f643ca388b..7b66efb3a3 100644
---
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/ResourceBundleUtils_Test.java
+++
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/ResourceBundleUtils_Test.java
@@ -218,15 +218,13 @@ class ResourceBundleUtils_Test extends TestBase {
void a19_findBundle_comparesWithDirectCall() {
var loader = getClass().getClassLoader();
// Compare behavior with direct ResourceBundle.getBundle call
- try {
+ assertDoesNotThrow(() -> {
var direct =
ResourceBundle.getBundle("org.apache.juneau.rest.server.NlsTest",
Locale.getDefault(), loader);
var utils =
ResourceBundleUtils.findBundle("org.apache.juneau.rest.server.NlsTest",
Locale.getDefault(), loader);
assertNotNull(direct);
assertNotNull(utils);
assertEquals(direct.getString("key1"),
utils.getString("key1"));
- } catch (@SuppressWarnings("unused") MissingResourceException
e) {
- fail("Direct call should not throw for existing
bundle");
- }
+ });
}
@Test
diff --git
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/StringUtils_Test.java
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/StringUtils_Test.java
index 7da50a4473..470691a035 100755
---
a/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/StringUtils_Test.java
+++
b/juneau-core/juneau-commons/src/test/java/org/apache/juneau/commons/utils/StringUtils_Test.java
@@ -4987,38 +4987,32 @@ class StringUtils_Test extends TestBase {
assertTrue(classStr.contains("String"));
// Test Executable (Method) - triggers code path
- try {
+ assertDoesNotThrow(() -> {
var method = String.class.getMethod("length");
var methodStr = readable(method);
assertNotNull(methodStr);
assertTrue(methodStr.contains("length"));
assertTrue(methodStr.contains("()"));
- } catch (NoSuchMethodException e) {
- fail("Method not found");
- }
+ });
// Test Executable (Constructor) - triggers code path
- try {
+ assertDoesNotThrow(() -> {
var constructor =
String.class.getConstructor(String.class);
var constructorStr = readable(constructor);
assertNotNull(constructorStr);
assertTrue(constructorStr.contains("String"));
assertTrue(constructorStr.contains("("));
- } catch (NoSuchMethodException e) {
- fail("Constructor not found");
- }
+ });
// Test Executable with parameters - triggers code path
- try {
+ assertDoesNotThrow(() -> {
var method = String.class.getMethod("substring",
int.class, int.class);
var methodStr = readable(method);
assertNotNull(methodStr);
assertTrue(methodStr.contains("substring"));
assertTrue(methodStr.contains("int"));
assertTrue(methodStr.contains(",")); // Multiple
parameters
- } catch (NoSuchMethodException e) {
- fail("Method not found");
- }
+ });
// Test ClassInfo - triggers new ClassInfo case
var classInfo =
org.apache.juneau.commons.reflect.ClassInfo.of(String.class);
@@ -5073,7 +5067,7 @@ class StringUtils_Test extends TestBase {
}
// Test Parameter (java.lang.reflect.Parameter) - triggers new
Parameter case
- try {
+ assertDoesNotThrow(() -> {
var method = String.class.getMethod("substring",
int.class, int.class);
var parameters = method.getParameters();
if (parameters.length > 0) {
@@ -5083,9 +5077,7 @@ class StringUtils_Test extends TestBase {
// Just verify it's not empty and contains a
bracket
assertFalse(paramStr.isEmpty());
}
- } catch (NoSuchMethodException e) {
- fail("Method not found");
- }
+ });
}
//====================================================================================================
diff --git
a/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/collections/MarshalledList_Test.java
b/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/collections/MarshalledList_Test.java
index 668cb776ec..5473ecc23d 100644
---
a/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/collections/MarshalledList_Test.java
+++
b/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/collections/MarshalledList_Test.java
@@ -131,15 +131,17 @@ class MarshalledList_Test extends TestBase {
@Test void a11_unmodifiable() {
var l = MarshalledList.of("a", "b", "c").unmodifiable();
assertTrue(l.isUnmodifiable());
+ var listX = List.of("x");
+ var listA = List.of("a");
assertThrows(UnsupportedOperationException.class, () ->
l.add(0, "x"));
assertThrows(UnsupportedOperationException.class, () ->
l.add("x"));
assertThrows(UnsupportedOperationException.class, () ->
l.remove(0));
assertThrows(UnsupportedOperationException.class, () ->
l.remove("a"));
assertThrows(UnsupportedOperationException.class, () ->
l.set(0, "x"));
- assertThrows(UnsupportedOperationException.class, () ->
l.addAll(List.of("x")));
- assertThrows(UnsupportedOperationException.class, () ->
l.addAll(0, List.of("x")));
- assertThrows(UnsupportedOperationException.class, () ->
l.removeAll(List.of("a")));
- assertThrows(UnsupportedOperationException.class, () ->
l.retainAll(List.of("a")));
+ assertThrows(UnsupportedOperationException.class, () ->
l.addAll(listX));
+ assertThrows(UnsupportedOperationException.class, () ->
l.addAll(0, listX));
+ assertThrows(UnsupportedOperationException.class, () ->
l.removeAll(listA));
+ assertThrows(UnsupportedOperationException.class, () ->
l.retainAll(listA));
assertThrows(UnsupportedOperationException.class, l::clear);
assertThrows(UnsupportedOperationException.class, () ->
l.addFirst("x"));
assertThrows(UnsupportedOperationException.class, () ->
l.addLast("x"));
diff --git
a/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/collections/MarshalledMap_Test.java
b/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/collections/MarshalledMap_Test.java
index d7158e299a..4409bb099f 100644
---
a/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/collections/MarshalledMap_Test.java
+++
b/juneau-core/juneau-marshall/src/test/java/org/apache/juneau/collections/MarshalledMap_Test.java
@@ -164,9 +164,10 @@ class MarshalledMap_Test extends TestBase {
@Test void a14_unmodifiable() {
var m = MarshalledMap.of("a", 1).unmodifiable();
assertTrue(m.isUnmodifiable());
+ var mapB = Map.of("b", 2);
assertThrows(UnsupportedOperationException.class, () ->
m.put("b", 2));
assertThrows(UnsupportedOperationException.class, () ->
m.remove("a"));
- assertThrows(UnsupportedOperationException.class, () ->
m.putAll(Map.of("b", 2)));
+ assertThrows(UnsupportedOperationException.class, () ->
m.putAll(mapB));
assertThrows(UnsupportedOperationException.class, m::clear);
assertThrows(UnsupportedOperationException.class, () ->
m.putIfAbsent("b", 2));
assertThrows(UnsupportedOperationException.class, () ->
m.remove("a", 1));
diff --git
a/juneau-integration-tests/src/test/java/org/apache/juneau/http/remote/RrpcInterface_Test.java
b/juneau-integration-tests/src/test/java/org/apache/juneau/http/remote/RrpcInterface_Test.java
index a809543a83..8dcda1f036 100644
---
a/juneau-integration-tests/src/test/java/org/apache/juneau/http/remote/RrpcInterface_Test.java
+++
b/juneau-integration-tests/src/test/java/org/apache/juneau/http/remote/RrpcInterface_Test.java
@@ -1324,21 +1324,14 @@ class RrpcInterface_Test extends TestBase {
@ParameterizedTest
@MethodSource("input")
void g01_throwException1(Input input) {
- try {
- input.proxy.throwException1();
- fail();
- } catch (InterfaceProxy.InterfaceProxyException1 e) {
- assertEquals("foo",e.getMessage());
- }
+ var e =
assertThrows(InterfaceProxy.InterfaceProxyException1.class, () ->
input.proxy.throwException1());
+ assertEquals("foo",e.getMessage());
}
@ParameterizedTest
@MethodSource("input")
void g02_throwException2(Input input) {
- try {
- input.proxy.throwException2();
- fail();
- } catch (InterfaceProxy.InterfaceProxyException2 e) {/*no-op*/}
+ assertThrows(InterfaceProxy.InterfaceProxyException2.class, ()
-> input.proxy.throwException2());
}
//-----------------------------------------------------------------------------------------------------------------
diff --git
a/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/auth/oauth/OAuthFilter_Test.java
b/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/auth/oauth/OAuthFilter_Test.java
index 3c9937b592..70d21c59ab 100644
---
a/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/auth/oauth/OAuthFilter_Test.java
+++
b/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/auth/oauth/OAuthFilter_Test.java
@@ -117,14 +117,10 @@ class OAuthFilter_Test extends TestBase {
@Test void d02_builder_realmCustomization() throws Exception {
TokenValidator v = token -> { throw new
AuthenticationException("bad"); };
var f = OAuthFilter.create().validator(v).realm("api2").build();
- try {
- f.authenticate(req("Bearer x"));
- fail();
- } catch (AuthenticationException e) {
- var hdr = e.getHeaders().stream()
- .filter(h ->
"WWW-Authenticate".equalsIgnoreCase(h.getName()))
- .findFirst().orElseThrow();
- assertTrue(hdr.getValue().contains("api2"));
- }
+ var e = assertThrows(AuthenticationException.class, () ->
f.authenticate(req("Bearer x")));
+ var hdr = e.getHeaders().stream()
+ .filter(h ->
"WWW-Authenticate".equalsIgnoreCase(h.getName()))
+ .findFirst().orElseThrow();
+ assertTrue(hdr.getValue().contains("api2"));
}
}
diff --git
a/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/convention/BasicConvention_Builders_Test.java
b/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/convention/BasicConvention_Builders_Test.java
index 49fc009eeb..d2becd62a9 100644
---
a/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/convention/BasicConvention_Builders_Test.java
+++
b/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/convention/BasicConvention_Builders_Test.java
@@ -114,11 +114,7 @@ class BasicConvention_Builders_Test extends TestBase {
"daily",
1.0);
var sw = new java.io.StringWriter();
- try {
- e.write(sw);
- } catch (IOException ex) {
- fail(ex);
- }
+ assertDoesNotThrow(() -> e.write(sw));
var xml = sw.toString();
assertTrue(xml.contains("<lastmod>"), "lastmod present");
assertTrue(xml.contains("<changefreq>daily</changefreq>"),
"changefreq present");
diff --git
a/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/docs/BasicApiDocs_Springboot_MultiOpenApiProvider_Test.java
b/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/docs/BasicApiDocs_Springboot_MultiOpenApiProvider_Test.java
index 5713be3ac9..84907f9192 100644
---
a/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/docs/BasicApiDocs_Springboot_MultiOpenApiProvider_Test.java
+++
b/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/docs/BasicApiDocs_Springboot_MultiOpenApiProvider_Test.java
@@ -151,16 +151,13 @@ class BasicApiDocs_Springboot_MultiOpenApiProvider_Test {
@Test
void
a02_collidingProvidersFailContextLoadWithBeanDefinitionOverrideException() {
- var ex = assertThrows(BeanDefinitionOverrideException.class, ()
-> {
- try (var ctx = new
SpringApplicationBuilder(CollidingApp.class)
+ var ex = assertThrows(BeanDefinitionOverrideException.class, ()
->
+ new SpringApplicationBuilder(CollidingApp.class)
.web(WebApplicationType.NONE)
.run(
"--spring.main.banner-mode=off",
"--spring.main.allow-bean-definition-overriding=false"
- )) {
- fail("Expected context load to fail with
BeanDefinitionOverrideException, but it loaded: " + ctx);
- }
- });
+ ).close());
// Spring's exact message text drifts across versions, so we
only assert the bean id appears
// in the message — enough to confirm Spring caught the
collision on the expected bean.
diff --git
a/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/mcp/McpHandlerDefaults_Test.java
b/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/mcp/McpHandlerDefaults_Test.java
index 52c8d3c8b0..8941baa327 100644
---
a/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/mcp/McpHandlerDefaults_Test.java
+++
b/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/mcp/McpHandlerDefaults_Test.java
@@ -69,24 +69,20 @@ class McpHandlerDefaults_Test {
void typedHandlers_constructor_isPrivate() {
// Sanity: the static façade class should not be instantiable.
Reflection trick used to bump coverage on the
// implicit private no-arg constructor.
- try {
+ assertDoesNotThrow(() -> {
var ctor =
McpTypedHandlers.class.getDeclaredConstructor();
ctor.setAccessible(true);
assertNotNull(ctor.newInstance());
- } catch (Exception e) {
- fail(e);
- }
+ });
}
@Test
void mcp_facade_constructor_isPrivate() {
- try {
+ assertDoesNotThrow(() -> {
var ctor = Mcp.class.getDeclaredConstructor();
ctor.setAccessible(true);
assertNotNull(ctor.newInstance());
- } catch (Exception e) {
- fail(e);
- }
+ });
}
@Test
diff --git
a/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/rrpc/RrpcRestOpSession_Test.java
b/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/rrpc/RrpcRestOpSession_Test.java
index 6bda7fcf9a..86e4cfe66b 100644
---
a/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/rrpc/RrpcRestOpSession_Test.java
+++
b/juneau-integration-tests/src/test/java/org/apache/juneau/rest/server/rrpc/RrpcRestOpSession_Test.java
@@ -31,22 +31,18 @@ class RrpcRestOpSession_Test extends TestBase {
// The actual functionality is tested through integration tests.
// Verify the method exists with correct return type via
reflection
- try {
+ assertDoesNotThrow(() -> {
var method =
RrpcRestOpSession.class.getMethod("status", HttpStatusLine.class);
assertEquals(RrpcRestOpSession.class,
method.getReturnType());
- } catch (Exception e) {
- fail("Method status(HttpStatusLine) should exist and
return RrpcRestOpSession");
- }
+ });
}
@Test void a02_finish_fluentChaining() {
// Test that finish() returns RrpcRestOpSession for fluent
chaining
// Verify the method exists with correct return type via
reflection
- try {
+ assertDoesNotThrow(() -> {
var method =
RrpcRestOpSession.class.getMethod("finish");
assertEquals(RrpcRestOpSession.class,
method.getReturnType());
- } catch (Exception e) {
- fail("Method finish() should exist and return
RrpcRestOpSession");
- }
+ });
}
}
\ No newline at end of file
diff --git
a/juneau-microservice/juneau-microservice/src/test/java/org/apache/juneau/microservice/resources/LogsResource_Action_Test.java
b/juneau-microservice/juneau-microservice/src/test/java/org/apache/juneau/microservice/resources/LogsResource_Action_Test.java
index a1fa8ec16f..07fbff68b0 100644
---
a/juneau-microservice/juneau-microservice/src/test/java/org/apache/juneau/microservice/resources/LogsResource_Action_Test.java
+++
b/juneau-microservice/juneau-microservice/src/test/java/org/apache/juneau/microservice/resources/LogsResource_Action_Test.java
@@ -71,16 +71,14 @@ class LogsResource_Action_Test extends TestBase {
// Test setUri(java.net.URI) returns correct type
var x = new Action("view", "/logs/test.log");
- try {
+ assertDoesNotThrow(() -> {
Action result = x.setUri(new
java.net.URI("http://example.com/logs/test.log"));
// Verify fluent chaining
assertSame(x, result);
assertInstanceOf(Action.class, result);
assertTrue(x.getUri().toString().contains("example.com"));
- } catch (Exception e) {
- fail("URI creation failed: " + e.getMessage());
- }
+ });
}
@Test void a06_setUri_withArgs() {
diff --git
a/juneau-petstore/juneau-petstore-core/src/test/java/org/apache/juneau/petstore/service/PetStore_Test.java
b/juneau-petstore/juneau-petstore-core/src/test/java/org/apache/juneau/petstore/service/PetStore_Test.java
index f4f2c89aa0..0672d1e1a9 100644
---
a/juneau-petstore/juneau-petstore-core/src/test/java/org/apache/juneau/petstore/service/PetStore_Test.java
+++
b/juneau-petstore/juneau-petstore-core/src/test/java/org/apache/juneau/petstore/service/PetStore_Test.java
@@ -132,8 +132,8 @@ class PetStore_Test extends TestBase {
@Test void d02_createUser_duplicate_throws() {
var s = new PetStore();
- assertThrows(IllegalArgumentException.class,
- () -> s.createUser(new
User().setUsername("mwatson").setUserStatus(UserStatus.ACTIVE)));
+ var u = new
User().setUsername("mwatson").setUserStatus(UserStatus.ACTIVE);
+ assertThrows(IllegalArgumentException.class, () ->
s.createUser(u));
}
@Test void d03_updateUser_replacesContent() {
diff --git
a/juneau-petstore/juneau-petstore-jetty/src/test/java/org/apache/juneau/petstore/jetty/PetstoreJetty_Test.java
b/juneau-petstore/juneau-petstore-jetty/src/test/java/org/apache/juneau/petstore/jetty/PetstoreJetty_Test.java
index 905bcab0d2..583439a9f7 100644
---
a/juneau-petstore/juneau-petstore-jetty/src/test/java/org/apache/juneau/petstore/jetty/PetstoreJetty_Test.java
+++
b/juneau-petstore/juneau-petstore-jetty/src/test/java/org/apache/juneau/petstore/jetty/PetstoreJetty_Test.java
@@ -49,6 +49,38 @@ class PetstoreJetty_Test extends TestBase {
.followRedirects(HttpClient.Redirect.NEVER)
.build();
+ /**
+ * Primes the root endpoint before the timed test methods run.
+ *
+ * <p>
+ * The fixture's {@code beforeAll} only waits for the Jetty connector
to bind — not for the REST servlet to
+ * initialize. The first request to a Juneau REST resource triggers
one-time {@code RestContext} setup
+ * (serializer/parser metadata, {@code HtmlDocSerializer} construction)
which, under a loaded CI agent, can
+ * exceed the tight 10s per-request timeout the test methods use.
Absorbing that cold-start here (with a
+ * generous budget + retry) removes the startup race from {@code a01}
while keeping the per-test timeouts tight.
+ */
+ @BeforeAll
+ static void warmUpServer() throws Exception {
+ var deadline = Instant.now().plusSeconds(30);
+ Exception last = null;
+ while (Instant.now().isBefore(deadline)) {
+ try {
+ var req = HttpRequest.newBuilder()
+ .uri(URI.create(fixture.getRootUrl() +
"/"))
+ .timeout(Duration.ofSeconds(20))
+ .header("Accept", "text/html")
+ .GET()
+ .build();
+ if (HTTP.send(req,
BodyHandlers.ofString()).statusCode() == 200)
+ return;
+ } catch (HttpTimeoutException | ConnectException e) {
+ last = e;
+ }
+ Thread.sleep(250);
+ }
+ throw new IllegalStateException("Petstore Jetty server did not
become ready within 30s", last);
+ }
+
private static HttpResponse<String> get(String path, String accept)
throws Exception {
var req = HttpRequest.newBuilder()
.uri(URI.create(fixture.getRootUrl() + path))
diff --git
a/juneau-rest/juneau-rest-common-classic/src/test/java/org/apache/juneau/http/classic/BasicPart_Test.java
b/juneau-rest/juneau-rest-common-classic/src/test/java/org/apache/juneau/http/classic/BasicPart_Test.java
index 5464be927c..fdcdf9a10d 100644
---
a/juneau-rest/juneau-rest-common-classic/src/test/java/org/apache/juneau/http/classic/BasicPart_Test.java
+++
b/juneau-rest/juneau-rest-common-classic/src/test/java/org/apache/juneau/http/classic/BasicPart_Test.java
@@ -124,7 +124,11 @@ class BasicPart_Test extends TestBase {
assertEquals("inner", x4.getValue());
}
- @Test void a07_equals() {
+ @Test
+ @SuppressWarnings({
+ "java:S3415" // Argument order is intentional:
assertNotEquals(x1, ...) exercises BasicPart.equals() with a non-matching
arg/null, so x1 must be the receiver.
+ })
+ void a07_equals() {
var x1 = part("Foo","bar");
var x2 = part("Foo","bar");
var x3 = part("Foo","baz");
diff --git
a/juneau-rest/juneau-rest-common-classic/src/test/java/org/apache/juneau/http/classic/resource/BasicResource_Test.java
b/juneau-rest/juneau-rest-common-classic/src/test/java/org/apache/juneau/http/classic/resource/BasicResource_Test.java
index f7d595a1b5..147924f70c 100644
---
a/juneau-rest/juneau-rest-common-classic/src/test/java/org/apache/juneau/http/classic/resource/BasicResource_Test.java
+++
b/juneau-rest/juneau-rest-common-classic/src/test/java/org/apache/juneau/http/classic/resource/BasicResource_Test.java
@@ -225,10 +225,10 @@ class BasicResource_Test extends TestBase {
assertEquals("writeMe", out.toString("UTF-8"));
}
- @Test void d06_consumeContent() throws Exception {
+ @Test void d06_consumeContent() {
var x = new BasicResource(new StringEntity(null, "foo"));
- // No-op
- x.consumeContent();
+ // consumeContent() is a no-op that must complete without
throwing.
+ assertDoesNotThrow(x::consumeContent);
}
//------------------------------------------------------------------------------------------------------------------
diff --git
a/juneau-rest/juneau-rest-mock/src/test/java/org/apache/juneau/rest/mock/MockRestClient_Test.java
b/juneau-rest/juneau-rest-mock/src/test/java/org/apache/juneau/rest/mock/MockRestClient_Test.java
index edcec766a1..edc1cebb8c 100644
---
a/juneau-rest/juneau-rest-mock/src/test/java/org/apache/juneau/rest/mock/MockRestClient_Test.java
+++
b/juneau-rest/juneau-rest-mock/src/test/java/org/apache/juneau/rest/mock/MockRestClient_Test.java
@@ -228,11 +228,11 @@ class MockRestClient_Test {
@Test
void c04_getClient_returnsNgRestClient() {
- try (var client = MockRestClient.create(RootResource.class)) {
- assertNotNull(client.getClient());
- } catch (IOException e) {
- fail("Unexpected exception: " + e.getMessage());
- }
+ assertDoesNotThrow(() -> {
+ try (var client =
MockRestClient.create(RootResource.class)) {
+ assertNotNull(client.getClient());
+ }
+ });
}
//
=================================================================================================================
diff --git
a/juneau-rest/juneau-rest-server-auth-oauth/src/test/java/org/apache/juneau/rest/server/auth/oauth/OAuthFilter_Test.java
b/juneau-rest/juneau-rest-server-auth-oauth/src/test/java/org/apache/juneau/rest/server/auth/oauth/OAuthFilter_Test.java
index 3c9937b592..70d21c59ab 100644
---
a/juneau-rest/juneau-rest-server-auth-oauth/src/test/java/org/apache/juneau/rest/server/auth/oauth/OAuthFilter_Test.java
+++
b/juneau-rest/juneau-rest-server-auth-oauth/src/test/java/org/apache/juneau/rest/server/auth/oauth/OAuthFilter_Test.java
@@ -117,14 +117,10 @@ class OAuthFilter_Test extends TestBase {
@Test void d02_builder_realmCustomization() throws Exception {
TokenValidator v = token -> { throw new
AuthenticationException("bad"); };
var f = OAuthFilter.create().validator(v).realm("api2").build();
- try {
- f.authenticate(req("Bearer x"));
- fail();
- } catch (AuthenticationException e) {
- var hdr = e.getHeaders().stream()
- .filter(h ->
"WWW-Authenticate".equalsIgnoreCase(h.getName()))
- .findFirst().orElseThrow();
- assertTrue(hdr.getValue().contains("api2"));
- }
+ var e = assertThrows(AuthenticationException.class, () ->
f.authenticate(req("Bearer x")));
+ var hdr = e.getHeaders().stream()
+ .filter(h ->
"WWW-Authenticate".equalsIgnoreCase(h.getName()))
+ .findFirst().orElseThrow();
+ assertTrue(hdr.getValue().contains("api2"));
}
}
diff --git
a/juneau-rest/juneau-rest-server-mcp/src/test/java/org/apache/juneau/rest/server/mcp/McpHandlerDefaults_Test.java
b/juneau-rest/juneau-rest-server-mcp/src/test/java/org/apache/juneau/rest/server/mcp/McpHandlerDefaults_Test.java
index 52c8d3c8b0..8941baa327 100644
---
a/juneau-rest/juneau-rest-server-mcp/src/test/java/org/apache/juneau/rest/server/mcp/McpHandlerDefaults_Test.java
+++
b/juneau-rest/juneau-rest-server-mcp/src/test/java/org/apache/juneau/rest/server/mcp/McpHandlerDefaults_Test.java
@@ -69,24 +69,20 @@ class McpHandlerDefaults_Test {
void typedHandlers_constructor_isPrivate() {
// Sanity: the static façade class should not be instantiable.
Reflection trick used to bump coverage on the
// implicit private no-arg constructor.
- try {
+ assertDoesNotThrow(() -> {
var ctor =
McpTypedHandlers.class.getDeclaredConstructor();
ctor.setAccessible(true);
assertNotNull(ctor.newInstance());
- } catch (Exception e) {
- fail(e);
- }
+ });
}
@Test
void mcp_facade_constructor_isPrivate() {
- try {
+ assertDoesNotThrow(() -> {
var ctor = Mcp.class.getDeclaredConstructor();
ctor.setAccessible(true);
assertNotNull(ctor.newInstance());
- } catch (Exception e) {
- fail(e);
- }
+ });
}
@Test
diff --git
a/juneau-rest/juneau-rest-server-springboot/src/test/java/org/apache/juneau/rest/server/docs/BasicApiDocs_Springboot_MultiOpenApiProvider_Test.java
b/juneau-rest/juneau-rest-server-springboot/src/test/java/org/apache/juneau/rest/server/docs/BasicApiDocs_Springboot_MultiOpenApiProvider_Test.java
index e8edb22ba6..c8c1e83307 100644
---
a/juneau-rest/juneau-rest-server-springboot/src/test/java/org/apache/juneau/rest/server/docs/BasicApiDocs_Springboot_MultiOpenApiProvider_Test.java
+++
b/juneau-rest/juneau-rest-server-springboot/src/test/java/org/apache/juneau/rest/server/docs/BasicApiDocs_Springboot_MultiOpenApiProvider_Test.java
@@ -152,16 +152,13 @@ class BasicApiDocs_Springboot_MultiOpenApiProvider_Test {
@Test
void
a02_collidingProvidersFailContextLoadWithBeanDefinitionOverrideException() {
- var ex = assertThrows(BeanDefinitionOverrideException.class, ()
-> {
- try (var ctx = new
SpringApplicationBuilder(CollidingApp.class)
+ var ex = assertThrows(BeanDefinitionOverrideException.class, ()
->
+ new SpringApplicationBuilder(CollidingApp.class)
.web(WebApplicationType.NONE)
.run(
"--spring.main.banner-mode=off",
"--spring.main.allow-bean-definition-overriding=false"
- )) {
- fail("Expected context load to fail with
BeanDefinitionOverrideException, but it loaded: " + ctx);
- }
- });
+ ).close());
// Spring's exact message text drifts across versions, so we
only assert the bean id appears
// in the message — enough to confirm Spring caught the
collision on the expected bean.
diff --git
a/juneau-rest/juneau-rest-server-view-jsp/src/test/java/org/apache/juneau/rest/server/view/jsp/JspView_Test.java
b/juneau-rest/juneau-rest-server-view-jsp/src/test/java/org/apache/juneau/rest/server/view/jsp/JspView_Test.java
index 01a30a1ee2..b6074b27d6 100644
---
a/juneau-rest/juneau-rest-server-view-jsp/src/test/java/org/apache/juneau/rest/server/view/jsp/JspView_Test.java
+++
b/juneau-rest/juneau-rest-server-view-jsp/src/test/java/org/apache/juneau/rest/server/view/jsp/JspView_Test.java
@@ -101,26 +101,30 @@ class JspView_Test extends TestBase {
// Servlet spec: setAttribute(name, null) removes the binding.
JspView mirrors that at
// build-time so the renderer never has to short-circuit a
request-attribute write at
// dispatch time.
+ var v = JspView.of("hello.jsp");
assertThrows(IllegalArgumentException.class,
- () -> JspView.of("hello.jsp").attr("missing", null));
+ () -> v.attr("missing", null));
}
@Test void b05_attrRejectsNullKey() {
+ var v = JspView.of("hello.jsp");
assertThrows(IllegalArgumentException.class,
- () -> JspView.of("hello.jsp").attr(null, "v"));
+ () -> v.attr(null, "v"));
}
@Test void b06_attrRejectsBlankKey() {
+ var v = JspView.of("hello.jsp");
assertThrows(IllegalArgumentException.class,
- () -> JspView.of("hello.jsp").attr("", "v"));
+ () -> v.attr("", "v"));
assertThrows(IllegalArgumentException.class,
- () -> JspView.of("hello.jsp").attr(" ", "v"));
+ () -> v.attr(" ", "v"));
}
@Test void b07_attributesMapIsImmutable() {
var v = JspView.of("hello.jsp").attr("name", "Bob");
+ var attrs = v.getAttributes();
assertThrows(UnsupportedOperationException.class,
- () -> v.getAttributes().put("name", "Alice"));
+ () -> attrs.put("name", "Alice"));
}
/*
----------------------------------------------------------------------------------------
*
@@ -150,8 +154,9 @@ class JspView_Test extends TestBase {
var m = new LinkedHashMap<String, Object>();
m.put("ok", 1);
m.put("", 2);
+ var v = JspView.of("hello.jsp");
assertThrows(IllegalArgumentException.class,
- () -> JspView.of("hello.jsp").attrs(m));
+ () -> v.attrs(m));
}
@Test void c05_attrsOverridesExistingBindings() {
@@ -180,16 +185,18 @@ class JspView_Test extends TestBase {
}
@Test void d03_headerRejectsBlankName() {
+ var v = JspView.of("hello.jsp");
assertThrows(IllegalArgumentException.class,
- () -> JspView.of("hello.jsp").header("", "v"));
+ () -> v.header("", "v"));
assertThrows(IllegalArgumentException.class,
- () -> JspView.of("hello.jsp").header(null, "v"));
+ () -> v.header(null, "v"));
}
@Test void d04_headerRejectsNullValue() {
// null header value is rejected (unlike attribute values).
+ var v = JspView.of("hello.jsp");
assertThrows(IllegalArgumentException.class,
- () -> JspView.of("hello.jsp").header("X", null));
+ () -> v.header("X", null));
}
@Test void d05_headerReturnsNewInstance() {
@@ -201,8 +208,9 @@ class JspView_Test extends TestBase {
@Test void d06_responseHeadersMapIsImmutable() {
var v = JspView.of("hello.jsp").header("X", "1");
+ var headers = v.getResponseHeaders();
assertThrows(UnsupportedOperationException.class,
- () -> v.getResponseHeaders().put("Y", "2"));
+ () -> headers.put("Y", "2"));
}
/*
----------------------------------------------------------------------------------------
*