Skip to content

Conversation

@Bombe
Copy link
Contributor

@Bombe Bombe commented Oct 10, 2025

Bug Report: https://freenet.mantishub.io/view.php?id=7230

This branch fixes the problem outlined in the bug report mentioned above, but it also does so much more. 😁 There are four types of commits:

🧑‍💻 – lays groundwork for upcoming tests. This comprises a parser for HTTP responses and Hamcrest matchers for said parsed responses, allowing more expressive tests.
⬆️ – updates dependencies. This updates to the last version of Mockito that we can use (due to its inability to mock anything involving WeakReference starting in version 3), allowing mocks of final classes and classes with final methods; required for mocking Toadlet.findSupportedMethods()!
🐛 – fixes problems I found in the ToadletContextImpl. One of them is the one from the bug report, the other ones are small issues that I found during tests.
✅ – adds additional tests.

The final barrage of tests achieves almost full coverage of the outer-most try block in ToadletContextImpl.handle().

@Bombe Bombe marked this pull request as draft October 10, 2025 08:28
@Bombe Bombe force-pushed the fix/7230-persistent-connections branch from 31cbc86 to 4ffed47 Compare October 10, 2025 08:36
@Bombe Bombe marked this pull request as ready for review October 10, 2025 08:57
Copy link
Contributor

@bertm bertm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still have to look into the test tooling part (but seems fine at a first glance). Here's some feedback on the fred and gradle parts.

@ArneBab
Copy link
Contributor

ArneBab commented Nov 23, 2025

@bertm did you get to have a look at the test tooling by now?

@ArneBab
Copy link
Contributor

ArneBab commented Dec 12, 2025

The tests look good to me.

@ArneBab
Copy link
Contributor

ArneBab commented Dec 13, 2025

… but the tests fail for me …

$ ./gradlew clean test
> Task :clean

> Task :compileJava
Warnung: [options] Quellwert 8 ist veraltet und wird in einem zukünftigen Release entfernt
Warnung: [options] Zielwert 8 ist veraltet und wird in einem zukünftigen Release entfernt
Warnung: [options] Verwenden Sie -Xlint:-options, um Warnungen zu veralteten Optionen zu unterdrücken.
src/freenet/support/io/TempBucketFactory.java:487: Warnung: [removal] finalize() in Object ist veraltet und wurde zum Entfernen markiert
		protected void finalize() throws Throwable {
		               ^
src/freenet/support/io/TempBucketFactory.java:497: Warnung: [removal] finalize() in Object ist veraltet und wurde zum Entfernen markiert
                        super.finalize();
                             ^
src/freenet/support/io/TempBucketFactory.java:904: Warnung: [removal] finalize() in Object ist veraltet und wurde zum Entfernen markiert
        protected void finalize() throws Throwable {
                       ^
src/freenet/support/io/TempBucketFactory.java:915: Warnung: [removal] finalize() in Object ist veraltet und wurde zum Entfernen markiert
            super.finalize();
                 ^
src/freenet/pluginmanager/PluginTalker.java:91: Warnung: [removal] ThreadDeath in java.lang ist veraltet und wurde zum Entfernen markiert
		} catch (ThreadDeath td) {
		         ^
src/freenet/io/comm/UdpSocketHandler.java:185: Warnung: [removal] runFinalization() in System ist veraltet und wurde zum Entfernen markiert
				System.runFinalization();
				      ^
src/freenet/io/comm/UdpSocketHandler.java:187: Warnung: [removal] runFinalization() in System ist veraltet und wurde zum Entfernen markiert
				System.runFinalization();
				      ^
src/freenet/support/BloomFilter.java:233: Warnung: [removal] finalize() in Object ist veraltet und wurde zum Entfernen markiert
	protected void finalize() throws Throwable {
	               ^
src/freenet/support/BloomFilter.java:235: Warnung: [removal] finalize() in Object ist veraltet und wurde zum Entfernen markiert
                super.finalize();
                     ^
src/freenet/support/io/MultiReaderBucket.java:186: Warnung: [removal] finalize() in Object ist veraltet und wurde zum Entfernen markiert
		protected void finalize() throws Throwable {
		               ^
src/freenet/support/io/MultiReaderBucket.java:188: Warnung: [removal] finalize() in Object ist veraltet und wurde zum Entfernen markiert
                        super.finalize();
                             ^
Hinweis: Einige Eingabedateien verwenden oder überschreiben eine veraltete API.
Hinweis: Wiederholen Sie die Kompilierung mit -Xlint:deprecation, um Details zu erhalten.
14 Warnungen

> Task :copyResourcesToClasses2
> Task :processResources NO-SOURCE
> Task :classes
> Task :copyTestResourcesToClasses2

> Task :compileTestJava
Warnung: [options] Quellwert 8 ist veraltet und wird in einem zukünftigen Release entfernt
Warnung: [options] Zielwert 8 ist veraltet und wird in einem zukünftigen Release entfernt
Warnung: [options] Verwenden Sie -Xlint:-options, um Warnungen zu veralteten Optionen zu unterdrücken.
Hinweis: Einige Eingabedateien verwenden oder überschreiben eine veraltete API.
Hinweis: Wiederholen Sie die Kompilierung mit -Xlint:deprecation, um Details zu erhalten.
3 Warnungen

> Task :processTestResources NO-SOURCE
> Task :testClasses
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

> Task :test

FCPMessageTest > wrappedMessageDelegatesName FAILED
    org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
        Caused by: org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
            Caused by: java.lang.IllegalStateException at FCPMessageTest.java:31
                Caused by: java.lang.IllegalArgumentException at FCPMessageTest.java:31

FCPMessageTest > wrappedMessageDelegatesSend FAILED
    org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
        Caused by: org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
            Caused by: java.lang.IllegalStateException at FCPMessageTest.java:31
                Caused by: java.lang.IllegalArgumentException at FCPMessageTest.java:31

FCPMessageTest > wrappedMessageDelegatesRun FAILED
    org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
        Caused by: org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
            Caused by: java.lang.IllegalStateException at FCPMessageTest.java:31
                Caused by: java.lang.IllegalArgumentException at FCPMessageTest.java:31

FCPMessageTest > wrappingNullReturnsNull FAILED
    org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
        Caused by: org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
            Caused by: java.lang.IllegalStateException at FCPMessageTest.java:31
                Caused by: java.lang.IllegalArgumentException at FCPMessageTest.java:31

FCPMessageTest > messageIsNotWrappedIfListRequestIdentifierIsNull FAILED
    org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
        Caused by: org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
            Caused by: java.lang.IllegalStateException at FCPMessageTest.java:31
                Caused by: java.lang.IllegalArgumentException at FCPMessageTest.java:31

FCPMessageTest > wrappingMessageAddsIdentifier FAILED
    org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
        Caused by: org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
            Caused by: java.lang.IllegalStateException at FCPMessageTest.java:31
                Caused by: java.lang.IllegalArgumentException at FCPMessageTest.java:31

FCPMessageTest > wrappedMessageDelegatesEndString FAILED
    org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
        Caused by: org.mockito.exceptions.base.MockitoException at FCPMessageTest.java:31
            Caused by: java.lang.IllegalStateException at FCPMessageTest.java:31
                Caused by: java.lang.IllegalArgumentException at FCPMessageTest.java:31

ToadletContextImplTest > pipeliningAPutAndAGetRequestResultsInTwoSuccessfulRequests FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > sendingInvalidHttpRequestLineResultsInHttpStatus400 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > permanentRedirectExceptionWhenLocatingToadletWillResultInRedirect FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > putRequestToToadletThatDoesNotSupportPutResultsInHttpStatus405 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > requestWithFullAccessForwardsRequestToPageMakerForParsingAdvancedModeSwitches FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > emptyLinesBeforeTheFirstLineAreIgnored FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > requestingNoOutputPageWillReturnStatus204 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > putRequestWithoutExtendedMethodHandlingResultsInHttpStatus403 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > sendingRequestAfterPostRequestWithInvalidContentLengthHeaderResultsInASingleResponseBeingSent FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > sendingPostRequestWithInvalidContentLengthHeaderClosesConnection FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > emptyRequestWillCloseTheSocket FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > sendingPostRequestWithoutContentLengthHeaderResultsInHttpStatus400 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > sendingInvalidHttpVersionResultsInHttpStatus400 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > putRequestWithContentResultsInHttpStatus403 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > sendingInvalidHeaderResultsInHttpStatus400 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > postRequestWithoutFormPasswordResultInToadletBeingCalledWhenPostWithoutPasswordIsAllowed FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > redirectExceptionFromToadletResultsInRedirect FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > sendingGetRequestWithContentLengthHeaderResultsInHttpStatus400 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > requestWithoutFullAccessDoesNotForwardRequestToPageMakerForParsingAdvancedModeSwitches FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > getRequestWithExtremelyLongUrlResultsInHttpStatus400 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > postRequestWithFormPasswordResultInToadletBeingCalled FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > sendingInvalidUrlResultsInHttpStatus400 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > sendingPostRequestWithInvalidContentLengthHeaderResultsInHttpStatus400 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > postRequestWhenPostRequestsAreNotAllowedResultsInHttpStatus405 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > getRequestWithoutToadletResultsInHttpStatus404 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > postRequestWithoutFormPasswordResultsInRedirectToSameToadlet FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > postRequestSucceedsWhenContainerIsPublicGatewayButStillAllowsFullAccess FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > endingTheRequestDuringTheHeadersWillCloseTheSocket FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > pipeliningTwoGetRequestsWithPersistentConnectionsEnabledResultsInTwoHttpStatus200 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > postRequestWhenContainerIsPublicGatewayResultsInHttpStatus405 FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

ToadletContextImplTest > requestingHomepageWillReturnHomepage FAILED
    org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
        Caused by: org.mockito.exceptions.base.MockitoException at ToadletContextImplTest.java:331
            Caused by: java.lang.IllegalStateException at ToadletContextImplTest.java:331
                Caused by: java.lang.IllegalArgumentException at ToadletContextImplTest.java:331

UserAlertManagerTest > generatedAtomContainsUserAlertWithCharactersThatAreNotValidInXml FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

UserAlertManagerTest > generatedAtomContainsTitle FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

UserAlertManagerTest > generatedAtomContainsNodeId FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

UserAlertManagerTest > generatedAtomEntriesUseAnchorForId FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

UserAlertManagerTest > generatedAtomContainsLinkToItself FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

UserAlertManagerTest > generatedAtomContainsLastUpdateTime FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

UserAlertManagerTest > generatedAtomContainsUserAlerts FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

UserAlertManagerTest > generatedAtomContainsLinkToContext FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

UserAlertManagerTest > generatedAtomContainsLogoUrl FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

UserAlertManagerTest > generatedAtomDoesNotContainInvalidUserAlerts FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

UserAlertManagerTest > generatedAtomContainsMultipleUserAlerts FAILED
    org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
        Caused by: org.mockito.exceptions.base.MockitoException at UserAlertManagerTest.java:196
            Caused by: java.lang.IllegalStateException at UserAlertManagerTest.java:196
                Caused by: java.lang.IllegalArgumentException at UserAlertManagerTest.java:196

Shutting down...

> Task :test

1238 tests completed, 49 failed

@ArneBab
Copy link
Contributor

ArneBab commented Dec 13, 2025

Regarding Mockito.inline:

org.mockito » mockito-inlineMIT
Mockito preconfigured inline mock maker (intermediate and to be superseeded by automatic usage in a future version)

https://mvnrepository.com/artifact/org.mockito

@Bombe
Copy link
Contributor Author

Bombe commented Dec 14, 2025

… but the tests fail for me …

Hmm. Are you sure your source directory is clean, i.e. no local modifications? ./gradlew clean test works fine on macOS, on Java 8/11/17/21/25.

@Bombe
Copy link
Contributor Author

Bombe commented Dec 14, 2025

Regarding Mockito.inline:

org.mockito » mockito-inlineMIT
Mockito preconfigured inline mock maker (intermediate and to be superseeded by automatic usage in a future version)

I’m aware. We can’t use a newer version, anyway (for reasons detailed in 7865349), and this saves us creating a file in a Mockito-specific location, just so it can use the correct mock maker. 🙂

@bertm
Copy link
Contributor

bertm commented Dec 16, 2025

@bertm did you get to have a look at the test tooling by now?

This look very well-structured and usable (code-wose) and sufficiently correct (HTTP-wise). I'd wish for all of fred's code to have such nice test fixtures.

Thanks @Bombe !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants