Skip to content

test: run the two ITs that have been compiled but never executed - #6684

Merged
delchev merged 1 commit into
masterfrom
test/revive-dead-integration-tests
Aug 12, 2026
Merged

test: run the two ITs that have been compiled but never executed#6684
delchev merged 1 commit into
masterfrom
test/revive-dead-integration-tests

Conversation

@delchev

@delchev delchev commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Found while adding coverage for #6676 (PR #6683): the test I wanted to extend had never run a single time.

tests-integrations keeps its tests under src/main/java, and failsafe is configured for exactly that — testClassesDirectory=${project.build.outputDirectory} with includes **/*IT.java. Surefire has no such override, so it looks in target/test-classes, which this module never produces. A *Test class there is compiled by every build and executed by neither runner. It reports no failure and no skip, so nothing in the build output distinguishes it from a passing test.

Two classes were in that state:

class tests covers
CsvProcessorTest 4 strict / non-strict CSV import, column order and extra-column behavior of the header path
DatabaseMetadataHelperTest 1 database metadata helper

Renamed to CsvProcessorIT / DatabaseMetadataHelperIT so failsafe picks them up. No test body changed — only the class names, so the diff stays legible as what it is. All 5 pass against master:

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 -- DatabaseMetadataHelperIT
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0 -- CsvProcessorIT

(Re-run with a pristine data-csvim built from master, so this is independent of #6683 — those four tests exercise header-based inserts, which that PR does not touch.)

The two other *Test names under that tree are correct and stay

  • MultitenancyUserInterfaceIntegrationTest declares no tests; it is the base class of BpmnMultitenancyIT and MultitenancyHarmoniaIT, matching the tests-framework naming (IntegrationTest, UserInterfaceIntegrationTest).
  • repository-api-test's RepositoryGeneric*Test classes are shared bases in a test-support module; their concrete subclasses run under surefire in the repository implementations.

Worth considering separately

Nothing stops this from recurring — a new *Test in this module is still silently inert. A failsafe/surefire failIfNoSpecifiedTests-style guard, or a build check that no *Test.java exists under tests-integrations/src/main/java, would make the next one loud. I did not add one here to keep this PR to the observation and its fix.

tests-integrations keeps its tests under src/main/java, and failsafe is
configured for that: testClassesDirectory=${project.build.outputDirectory}
with includes **/*IT.java. Surefire has no such override, so it looks in
target/test-classes, which this module never produces. A *Test class there is
therefore compiled by every build and executed by neither runner - it reports
no failure and no skip, so nothing distinguishes it from a passing test.

Two classes were in that state:

- CsvProcessorTest (4 tests) - strict/non-strict CSV import, incl. the column
  order and extra-column behavior of the header path.
- DatabaseMetadataHelperTest (1 test).

Renamed to CsvProcessorIT / DatabaseMetadataHelperIT so failsafe picks them up.
No test body changed; only the class names, to keep the reason for the rename
legible in the diff. All 5 pass against master.

The other two *Test names under that tree are correct and stay as they are:
MultitenancyUserInterfaceIntegrationTest declares no tests and is the base class
of BpmnMultitenancyIT and MultitenancyHarmoniaIT, matching the tests-framework
naming; repository-api-test's RepositoryGeneric*Test classes are shared bases
whose concrete subclasses run under surefire in the repository implementations.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@delchev
delchev merged commit 72944bb into master Aug 12, 2026
9 checks passed
@delchev
delchev deleted the test/revive-dead-integration-tests branch August 12, 2026 20:11
delchev pushed a commit that referenced this pull request Aug 13, 2026
CsvProcessorIT and CsvimReimportIT create their fixture tables with
unquoted DDL (CREATE TABLE CSV_A ...) and then look them up by the
literal uppercase name with a null schema. Unquoted identifiers fold to
UPPERCASE on H2 but to lowercase on PostgreSQL, and
DatabaseNameNormalizer does not fold case, so the metadata lookup in
CsvimProcessor.process misses on the PostgreSQL CI leg and throws
"Table metadata was not found for table [CSV_A] in schema [null]"
(5 failures once #6684 wired these previously-never-executed ITs in).

Quote the table and column identifiers in the DDL/DML so both databases
store them in the same case, matching the uppercase name passed to
CsvFile and the uppercase CSV headers. This mirrors how the real .table
synchronizer path stores identifiers and the convention already used by
every other JDBC-style IT (DatabaseCrudNullValuesIT,
SchemaRepublishTypeToleranceIT, NumberingSdkIT).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

1 participant