test: clean target/config between test runs to prevent stale credentials#3960
test: clean target/config between test runs to prevent stale credentials#3960
Conversation
…als causing 403 TestServerHelper.deleteDatabaseFolders() was cleaning database directories but not ./target/config/, so server-users.jsonl could persist across runs with a password hash from a different password. This caused FollowerSessionTokenQueryIT to fail intermittently with HTTP 403 when Basic auth hit a stale hash that did not match DefaultPasswordForTests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 0 |
🟢 Coverage ∅ diff coverage · -7.84% coverage variation
Metric Results Coverage variation ✅ -7.84% coverage variation Diff coverage ✅ ∅ diff coverage Coverage variation details
Coverable lines Covered lines Coverage Common ancestor commit (7656946) 118934 86475 72.71% Head commit (5158de6) 150173 (+31239) 97415 (+10940) 64.87% (-7.84%) Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch:
<coverage of head commit> - <coverage of common ancestor commit>Diff coverage details
Coverable lines Covered lines Diff coverage Pull request (#3960) 0 0 ∅ (not applicable) Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified:
<covered lines added or modified>/<coverable lines added or modified> * 100%
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes. Give us feedback
There was a problem hiding this comment.
Code Review
This pull request updates the deleteDatabaseFolders method in TestServerHelper.java to include the deletion of the ./target/config/ directory. Feedback was provided regarding the method's name, which no longer accurately describes its side effects, and the potential fragility of using hardcoded file paths.
|
|
||
| public static void deleteDatabaseFolders(final int totalServers) { | ||
| FileUtils.deleteRecursively(new File("./target/databases/")); | ||
| FileUtils.deleteRecursively(new File("./target/config/")); |
There was a problem hiding this comment.
The method deleteDatabaseFolders now deletes configuration files in addition to database folders. This introduces a side effect that is not reflected in the method's name, which can be misleading for other developers and may lead to unexpected behavior if a test intends to preserve configuration while resetting databases. Consider renaming the method to something more descriptive, such as cleanupTestArtifacts, or moving this logic to a dedicated cleanup method. Additionally, hardcoding the path ./target/config/ makes the cleanup logic fragile as it assumes a specific project structure and working directory.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3960 +/- ##
==========================================
+ Coverage 63.87% 63.93% +0.06%
==========================================
Files 1591 1591
Lines 118934 118934
Branches 25275 25275
==========================================
+ Hits 75968 76040 +72
+ Misses 32489 32408 -81
- Partials 10477 10486 +9 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
…skip ci] Bumps [org.postgresql:postgresql](https://github.com/pgjdbc/pgjdbc) from 42.7.10 to 42.7.11. Release notes *Sourced from [org.postgresql:postgresql's releases](https://github.com/pgjdbc/pgjdbc/releases).* > v42.7.11 > -------- > > Security > -------- > > * fix: Limit SCRAM PBKDF2 iterations accepted from the server. > pgjdbc was vulnerable to a client-side denial of service in SCRAM-SHA-256 authentication, where a malicious or compromised PostgreSQL server could specify an extremely large PBKDF2 iteration count, causing the client to consume unbounded CPU and potentially exhaust connection pools. The fix introduces a new scramMaxIterations connection property (defaulting to 100,000) to cap iteration counts before computation begins. > See the [Security Advisory](GHSA-98qh-xjc8-98pq) for more detail. > The following [CVE-2026-42198](https://nvd.nist.gov/vuln/detail/CVE-2026-42198) has been issued. > > Changes > ------- > > * fix: Add sources and javadocs to shaded published lib generation [`@sehrope`](https://github.com/sehrope) ([#4043](https://redirect.github.com/pgjdbc/pgjdbc/issues/4043)) > * update Changelog and website for release of 42.7.11 [`@davecramer`](https://github.com/davecramer) ([#4042](https://redirect.github.com/pgjdbc/pgjdbc/issues/4042)) > * Fix scram fix location in changelog and update published artifact developer list [`@sehrope`](https://github.com/sehrope) ([#4041](https://redirect.github.com/pgjdbc/pgjdbc/issues/4041)) > * Restrict test with scram\_iterations to v16+ and release notes [`@sehrope`](https://github.com/sehrope) ([#4040](https://redirect.github.com/pgjdbc/pgjdbc/issues/4040)) > * chore(deps): update ubuntu:24.04 docker digest to 84e77de [`@renovate-bot`](https://github.com/renovate-bot) ([#4017](https://redirect.github.com/pgjdbc/pgjdbc/issues/4017)) > * test: add tests for QueryExecutor#getTransactionState [`@vlsi`](https://github.com/vlsi) ([#4006](https://redirect.github.com/pgjdbc/pgjdbc/issues/4006)) > * chore(deps): update actions/create-github-app-token action to v2.2.2 [`@renovate-bot`](https://github.com/renovate-bot) ([#3983](https://redirect.github.com/pgjdbc/pgjdbc/issues/3983)) > * fix: fix flaky CopyBothResponseTest by using WAL flush LSN [`@vlsi`](https://github.com/vlsi) ([#3979](https://redirect.github.com/pgjdbc/pgjdbc/issues/3979)) > * fix: fix flaky replication restart tests by waiting for confirmed\_flush\_lsn [`@vlsi`](https://github.com/vlsi) ([#3975](https://redirect.github.com/pgjdbc/pgjdbc/issues/3975)) > * test: fix flaky LogicalReplicationStatusTest by polling pg\_stat\_replication [`@vlsi`](https://github.com/vlsi) ([#3974](https://redirect.github.com/pgjdbc/pgjdbc/issues/3974)) > * chore: replace Appveyor with ikalnytskyi/action-setup-postgres [`@vlsi`](https://github.com/vlsi) ([#3966](https://redirect.github.com/pgjdbc/pgjdbc/issues/3966)) > * test: move test table creation from [`@BeforeEach`](https://github.com/BeforeEach) to [`@BeforeAll`](https://github.com/BeforeAll) [`@vlsi`](https://github.com/vlsi) ([#3967](https://redirect.github.com/pgjdbc/pgjdbc/issues/3967)) > * Return jsonb as PGObject fixes Issue [#3926](https://redirect.github.com/pgjdbc/pgjdbc/issues/3926) [`@davecramer`](https://github.com/davecramer) ([#3956](https://redirect.github.com/pgjdbc/pgjdbc/issues/3956)) > * Update docker scripts [`@davecramer`](https://github.com/davecramer) ([#3958](https://redirect.github.com/pgjdbc/pgjdbc/issues/3958)) > * implement require\_auth, this is pretty much how libpq does this. [`@davecramer`](https://github.com/davecramer) ([#3895](https://redirect.github.com/pgjdbc/pgjdbc/issues/3895)) > * docs: add SCRAM authentication test setup section to TESTING.md [`@emmaeng700`](https://github.com/emmaeng700) ([#3945](https://redirect.github.com/pgjdbc/pgjdbc/issues/3945)) > * Add RequireServerVersion annotation for tests [`@sehrope`](https://github.com/sehrope) ([#3939](https://redirect.github.com/pgjdbc/pgjdbc/issues/3939)) > > 🐛 Bug Fixes > ----------- > > * fix: ensure extended protocol messages end with Sync message [`@vlsi`](https://github.com/vlsi) ([#3728](https://redirect.github.com/pgjdbc/pgjdbc/issues/3728)) > * fix: enable cursor-based fetching in extended protocol when transaction started via SQL command [`@vlsi`](https://github.com/vlsi) ([#3996](https://redirect.github.com/pgjdbc/pgjdbc/issues/3996)) > * fix: retry with SSL on IOException when sslMode=ALLOW [`@vlsi`](https://github.com/vlsi) ([#3973](https://redirect.github.com/pgjdbc/pgjdbc/issues/3973)) > * fix: allow fallback to non-SSL connection when sslMode=prefer and sslResponseTimeout kicks in [`@vlsi`](https://github.com/vlsi) ([#3968](https://redirect.github.com/pgjdbc/pgjdbc/issues/3968)) > * fix: catch SecurityException from setContextClassLoader on ForkJoinPool workers [`@vlsi`](https://github.com/vlsi) ([#3962](https://redirect.github.com/pgjdbc/pgjdbc/issues/3962)) > * fix: use compareTo for LogSequenceNumber comparison [`@vlsi`](https://github.com/vlsi) ([#3961](https://redirect.github.com/pgjdbc/pgjdbc/issues/3961)) > * fix: release COPY lock on IOException to prevent connection hang ([#3957](https://redirect.github.com/pgjdbc/pgjdbc/issues/3957)) [`@vlsi`](https://github.com/vlsi) ([#3960](https://redirect.github.com/pgjdbc/pgjdbc/issues/3960)) > > 🧰 Maintenance > ------------- > > * style: replace [`@exception`](https://github.com/exception) with [`@throws`](https://github.com/throws) in getBoolean javadoc [`@vlsi`](https://github.com/vlsi) ([#4035](https://redirect.github.com/pgjdbc/pgjdbc/issues/4035)) > * chore: use `@vlsi/github-actions-random-matrix` npm package [`@vlsi`](https://github.com/vlsi) ([#4008](https://redirect.github.com/pgjdbc/pgjdbc/issues/4008)) > * chore: use tag names for pinning github actions, pin ikalnytskyi/action-setup-postgres [`@vlsi`](https://github.com/vlsi) ([#4007](https://redirect.github.com/pgjdbc/pgjdbc/issues/4007)) > * chore: bump errorprone to 2.48.0 [`@vlsi`](https://github.com/vlsi) ([#4005](https://redirect.github.com/pgjdbc/pgjdbc/issues/4005)) > * test: add [`@DisableLogger`](https://github.com/DisableLogger) annotation to suppress expected log warnings in tests [`@vlsi`](https://github.com/vlsi) ([#3971](https://redirect.github.com/pgjdbc/pgjdbc/issues/3971)) > * chore: suppress deprecations in test code to reduce build verbosity [`@vlsi`](https://github.com/vlsi) ([#3972](https://redirect.github.com/pgjdbc/pgjdbc/issues/3972)) > * chore: replace log warning in ConnectionFactory.closeStream with Throwable.addSuppressed [`@vlsi`](https://github.com/vlsi) ([#3970](https://redirect.github.com/pgjdbc/pgjdbc/issues/3970)) > * chore: use greedy pairwise coverage for CI matrix generation [`@vlsi`](https://github.com/vlsi) ([#3965](https://redirect.github.com/pgjdbc/pgjdbc/issues/3965)) > * chore: use full version tags in GitHub Actions comments [`@vlsi`](https://github.com/vlsi) ([#3963](https://redirect.github.com/pgjdbc/pgjdbc/issues/3963)) > > ⬆️ Dependencies > --------------- ... (truncated) Changelog *Sourced from [org.postgresql:postgresql's changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md).* > [42.7.11] (2026-04-28) > ---------------------- > > ### Security > > * fix: Limit SCRAM PBKDF2 iterations accepted from the server. > pgjdbc was vulnerable to a client-side denial of service in SCRAM-SHA-256 authentication, where a malicious or compromised PostgreSQL server could specify an extremely large PBKDF2 iteration count, causing the client to consume unbounded CPU and potentially exhaust connection pools. The fix introduces a new scramMaxIterations connection property (defaulting to 100,000) to cap iteration counts before computation begins. > See the [Security Advisory](GHSA-98qh-xjc8-98pq) for more detail. > The following [CVE-2026-42198](https://nvd.nist.gov/vuln/detail/CVE-2026-42198) has been issued. > > ### Added > > * feat: implement require\_auth connection property, aligning with libpq behavior [PR [#3895](https://redirect.github.com/pgjdbc/pgjdbc/issues/3895)]([pgjdbc/pgjdbc#3895](https://redirect.github.com/pgjdbc/pgjdbc/pull/3895)) > > ### Changed > > * chore: replace Appveyor CI with ikalnytskyi/action-setup-postgres [PR [#3966](https://redirect.github.com/pgjdbc/pgjdbc/issues/3966)]([pgjdbc/pgjdbc#3966](https://redirect.github.com/pgjdbc/pgjdbc/pull/3966)) > * chore: upgrade Gradle to v9 [PR [#3978](https://redirect.github.com/pgjdbc/pgjdbc/issues/3978)]([pgjdbc/pgjdbc#3978](https://redirect.github.com/pgjdbc/pgjdbc/pull/3978)) > > ### Fixed > > * fix: ensure extended protocol messages end with Sync message [PR [#3728](https://redirect.github.com/pgjdbc/pgjdbc/issues/3728)]([pgjdbc/pgjdbc#3728](https://redirect.github.com/pgjdbc/pgjdbc/pull/3728)) > * fix: enable cursor-based fetching in extended protocol when transaction started via SQL command [PR [#3996](https://redirect.github.com/pgjdbc/pgjdbc/issues/3996)]([pgjdbc/pgjdbc#3996](https://redirect.github.com/pgjdbc/pgjdbc/pull/3996)) > * fix: retry with SSL on IOException when sslMode=ALLOW [PR [#3973](https://redirect.github.com/pgjdbc/pgjdbc/issues/3973)]([pgjdbc/pgjdbc#3973](https://redirect.github.com/pgjdbc/pgjdbc/pull/3973)) > * fix: make sure the driver honours connectTimeout when retrying the connection [PR [#3968](https://redirect.github.com/pgjdbc/pgjdbc/issues/3968)]([pgjdbc/pgjdbc#3968](https://redirect.github.com/pgjdbc/pgjdbc/pull/3968)) > * fix: allow fallback to non-SSL connection when sslMode=prefer and sslResponseTimeout kicks in [PR [#3968](https://redirect.github.com/pgjdbc/pgjdbc/issues/3968)]([pgjdbc/pgjdbc#3968](https://redirect.github.com/pgjdbc/pgjdbc/pull/3968)) > * fix: catch SecurityException from setContextClassLoader on ForkJoinPool workers [PR [#3962](https://redirect.github.com/pgjdbc/pgjdbc/issues/3962)]([pgjdbc/pgjdbc#3962](https://redirect.github.com/pgjdbc/pgjdbc/pull/3962)) > * fix: use compareTo for LogSequenceNumber comparison to handle unsigned values correctly [PR [#3961](https://redirect.github.com/pgjdbc/pgjdbc/issues/3961)]([pgjdbc/pgjdbc#3961](https://redirect.github.com/pgjdbc/pgjdbc/pull/3961)) > * fix: release COPY lock on IOException to prevent connection hang [PR [#3957](https://redirect.github.com/pgjdbc/pgjdbc/issues/3957)]([pgjdbc/pgjdbc#3957](https://redirect.github.com/pgjdbc/pgjdbc/pull/3957)) > * fix: return jsonb as PGObject instead of String [PR [#3956](https://redirect.github.com/pgjdbc/pgjdbc/issues/3956)]([pgjdbc/pgjdbc#3956](https://redirect.github.com/pgjdbc/pgjdbc/pull/3956)) > * fix: align SSL key file permission check with libpq [PR [#3952](https://redirect.github.com/pgjdbc/pgjdbc/issues/3952)]([pgjdbc/pgjdbc#3952](https://redirect.github.com/pgjdbc/pgjdbc/pull/3952)) > * fix: guard connection closed flag with a reentrant lock to protect against concurrent close [PR [#3905](https://redirect.github.com/pgjdbc/pgjdbc/issues/3905)]([pgjdbc/pgjdbc#3905](https://redirect.github.com/pgjdbc/pgjdbc/pull/3905)) Commits * [`78e261f`](pgjdbc/pgjdbc@78e261f) fix: Add sources and javadocs to shaded published lib generation * [`1e09fa0`](pgjdbc/pgjdbc@1e09fa0) update Changelog and website for release of 42.7.11 ([#4042](https://redirect.github.com/pgjdbc/pgjdbc/issues/4042)) * [`d479fa5`](pgjdbc/pgjdbc@d479fa5) Fix scram fix location in changelog and update published artifact developer l... * [`b04fc46`](pgjdbc/pgjdbc@b04fc46) docs: Add scram max iters fix to changelog * [`cf54822`](pgjdbc/pgjdbc@cf54822) test: Disable scram test on older version without scram\_iterations GUC * [`7dbcc79`](pgjdbc/pgjdbc@7dbcc79) test: Add SCRAM max iteration tests * [`c9d41d1`](pgjdbc/pgjdbc@c9d41d1) fix: Limit SCRAM PBKDF2 iterations accepted from the server * [`a340cb2`](pgjdbc/pgjdbc@a340cb2) style: replace [`@exception`](https://github.com/exception) with [`@throws`](https://github.com/throws) in getBoolean javadoc * [`77837f8`](pgjdbc/pgjdbc@77837f8) fix(deps): update dependency org.openrewrite.rewrite:org.openrewrite.rewrite.... * [`23af03b`](pgjdbc/pgjdbc@23af03b) chore(deps): update actions/checkout action to v6 * Additional commits viewable in [compare view](pgjdbc/pgjdbc@REL42.7.10...REL42.7.11) [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- Dependabot commands and options You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
…o [skip ci] Bumps [marked](https://github.com/markedjs/marked) from 18.0.2 to 18.0.3. Release notes *Sourced from [marked's releases](https://github.com/markedjs/marked/releases).* > v18.0.3 > ------- > > [18.0.3](markedjs/marked@v18.0.2...v18.0.3) (2026-05-01) > ----------------------------------------------------------------------------------- > > ### Bug Fixes > > * avoid task checkbox for setext heading text ([#3960](https://redirect.github.com/markedjs/marked/issues/3960)) ([2608e81](markedjs/marked@2608e81)) Commits * [`e8dc395`](markedjs/marked@e8dc395) chore(release): 18.0.3 [skip ci] * [`2608e81`](markedjs/marked@2608e81) fix: avoid task checkbox for setext heading text ([#3960](https://redirect.github.com/markedjs/marked/issues/3960)) * [`dba76f6`](markedjs/marked@dba76f6) chore(deps-dev): bump eslint from 10.2.0 to 10.2.1 ([#3953](https://redirect.github.com/markedjs/marked/issues/3953)) * [`015f1eb`](markedjs/marked@015f1eb) chore(deps-dev): bump typescript from 6.0.2 to 6.0.3 ([#3954](https://redirect.github.com/markedjs/marked/issues/3954)) * [`17c06e9`](markedjs/marked@17c06e9) chore: fix building license for docs ([#3952](https://redirect.github.com/markedjs/marked/issues/3952)) * [`55a54b5`](markedjs/marked@55a54b5) chore: Rename LICENSE.md to LICENSE for better compatibility with Bazel tooli... * See full diff in [compare view](markedjs/marked@v18.0.2...v18.0.3) [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- Dependabot commands and options You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Summary
TestServerHelper.deleteDatabaseFolders()was cleaning database directories but not./target/config/server-users.jsonlcould persist across test runs with a password hash from a different passwordFollowerSessionTokenQueryITto fail intermittently with HTTP 403 when Basic auth hit a stale hash that did not matchDefaultPasswordForTestsRoot cause
The auth flow in
AbstractServerHttpHandlermaps anyServerSecurityExceptionto HTTP 403.ServerSecurity.authenticate()uses PBKDF2 to re-encode the supplied password with the stored salt and compares to the stored hash. Ifserver-users.jsonlcontained a hash produced from a different password (e.g. from a manual server run or a different test context),passwordMatch()returned false and login returned 403.Fix
One line added to
TestServerHelper.deleteDatabaseFolders()to also delete./target/config/, matching the existing hardcoded cleanup of./target/databases/. This ensures each test run starts with no stale security configuration.Test plan
FollowerSessionTokenQueryITpasses on first run (clean slate, fresh credentials created)FollowerSessionTokenQueryITpasses on repeated runs (config cleaned between each run)ServerSecurityITandSecurityGroupMigrationITstill pass🤖 Generated with Claude Code