feat: jpa, messaging, notification, mongo, graphql 어댑터터 구현체 추가
This commit is contained in:
@@ -42,6 +42,29 @@ configurations {
|
||||
jpaPlatformPerformanceTestRuntimeOnly.extendsFrom testRuntimeOnly
|
||||
}
|
||||
|
||||
// The testkit as a consumable artifact.
|
||||
//
|
||||
// The rule pack in `testkit` was only ever exercised by its own fixture tests: nothing imported the
|
||||
// production graph and ran the rules against it, so "controller must not expose an entity" and
|
||||
// "domain must not depend on Hibernate" were verified as library code and applied to nothing. The
|
||||
// composition root is the only place that can see every runtime leaf at once, so it is where the
|
||||
// production suite belongs — and it needs the rules.
|
||||
tasks.register('testkitJar', Jar) {
|
||||
archiveClassifier = 'testkit'
|
||||
from sourceSets.testkit.output
|
||||
}
|
||||
|
||||
configurations {
|
||||
jpaTestkit {
|
||||
canBeConsumed = true
|
||||
canBeResolved = false
|
||||
}
|
||||
}
|
||||
|
||||
artifacts {
|
||||
jpaTestkit(tasks.named('testkitJar', Jar))
|
||||
}
|
||||
|
||||
// Every test lane compiles and runs against the testkit.
|
||||
sourceSets.test {
|
||||
compileClasspath += sourceSets.testkit.output
|
||||
@@ -172,6 +195,12 @@ def postgresqlFileserverMetadataIntegrationTest = registerPostgreSqlReadinessTes
|
||||
def postgresqlFileserverReclamationIntegrationTest = registerPostgreSqlReadinessTest(
|
||||
'postgresqlFileserverReclamationIntegrationTest',
|
||||
'dev.caskeleton.adapter.outbound.persistence.readiness.PostgreSqlFileserverReclamationIntegrationTest')
|
||||
// The notification stream is opt-in and lives outside the default Flyway location, so "is it
|
||||
// applied and promoted" is a real deployment question with a real wrong answer. This lane asks it
|
||||
// against a real server; the entity-scan half is a unit test.
|
||||
def postgresqlNotificationSchemaActivationIntegrationTest = registerPostgreSqlReadinessTest(
|
||||
'postgresqlNotificationSchemaActivationIntegrationTest',
|
||||
'dev.caskeleton.adapter.outbound.persistence.readiness.PostgreSqlNotificationSchemaActivationIntegrationTest')
|
||||
|
||||
def verifyJpaSqlConstructionSafety = tasks.register('verifyJpaSqlConstructionSafety') {
|
||||
group = 'verification'
|
||||
@@ -281,19 +310,29 @@ def jpaPlatformSecurityTest = registerJpaPlatformLane(
|
||||
'jpa-security',
|
||||
'Verifies runtime role privileges and search_path safety (design §36).')
|
||||
|
||||
// Machine-dependent bounds live in their own source set and never gate an ordinary build: attaching
|
||||
// them to `check` would make a laptop's `check` fail for reasons that are not about the code.
|
||||
def jpaPlatformPerformanceTest = tasks.register('jpaPlatformPerformanceTest', Test) {
|
||||
// The pool behaviour contract. Named for what it does.
|
||||
//
|
||||
// It was `jpaPlatformPerformanceTest`, described as certifying pool and REQUIRES_NEW pressure, and
|
||||
// gated by `performance.assertions.enabled` — which defaulted to false everywhere, including in the
|
||||
// nightly workflow that set it explicitly to false. So the release gate depended on a lane whose
|
||||
// only threshold assertion was that thresholds were not being asserted. "Certified" described a
|
||||
// run in which no latency or throughput bound was ever compared to anything.
|
||||
//
|
||||
// What the lane genuinely verifies is a behaviour contract: a REQUIRES_NEW depth of one needs two
|
||||
// connections per concurrent thread, a saturated pool reports its pending count, and a caller waits
|
||||
// rather than proceeding without a connection. Those are true on any machine, so they need no flag
|
||||
// — and this name does not promise a number nobody measured. A real performance gate needs a
|
||||
// dedicated runner, warmup and sample counts, and recorded thresholds; when that exists it belongs
|
||||
// in a lane of its own rather than behind a boolean on this one.
|
||||
def jpaPlatformPoolContractTest = tasks.register('jpaPlatformPoolContractTest', Test) {
|
||||
group = 'verification'
|
||||
description = 'Certifies Hikari pool and REQUIRES_NEW connection pressure (design §38).'
|
||||
description = 'Verifies Hikari pool and REQUIRES_NEW connection behaviour (design §38).'
|
||||
testClassesDirs = sourceSets.jpaPlatformPerformanceTest.output.classesDirs
|
||||
classpath = sourceSets.jpaPlatformPerformanceTest.runtimeClasspath
|
||||
useJUnitPlatform()
|
||||
failOnNoDiscoveredTests = true
|
||||
outputs.upToDateWhen { false }
|
||||
jvmArgs('-Duser.timezone=UTC')
|
||||
systemProperty 'performance.assertions.enabled',
|
||||
(project.findProperty('performance.assertions.enabled') ?: 'false').toString()
|
||||
}
|
||||
|
||||
// The JPA release gate (design §41). Aggregates every lane whose absence would let one of the
|
||||
@@ -307,7 +346,7 @@ tasks.register('jpaPlatformReleaseGate') {
|
||||
dependsOn jpaPlatformFailureTest
|
||||
dependsOn jpaPlatformQueryPlanTest
|
||||
dependsOn jpaPlatformSecurityTest
|
||||
dependsOn jpaPlatformPerformanceTest
|
||||
dependsOn jpaPlatformPoolContractTest
|
||||
}
|
||||
|
||||
apply from: rootProject.file('gradle/jpa-evidence.gradle')
|
||||
|
||||
Reference in New Issue
Block a user