diff --git a/.gitignore b/.gitignore index d59df1ab..c29a6217 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ out/ ### Python ### __pycache__ + +### Kotlin ### +.kotlin diff --git a/build.gradle b/build.gradle index b5a14daf..ba7c2fe3 100644 --- a/build.gradle +++ b/build.gradle @@ -1,39 +1,50 @@ plugins { id 'java' id 'jacoco' - id 'com.adarshr.test-logger' version '4.0.0' + id 'com.adarshr.test-logger' version '4.0.+' id 'io.freefair.lombok' version '8.6' id 'io.spring.dependency-management' version '1.1.+' id "org.jetbrains.kotlin.jvm" version "2.0.+" id 'org.springframework.boot' version '3.3.+' } -repositories { mavenCentral() } -bootRun { jvmArgs(["-Xms2g", "-Xmx2g", "-XX:+ExitOnOutOfMemoryError", "-Djdk.tracePinnedThreads=full"]) } +repositories { + mavenCentral() +} + +bootRun { + jvmArgs(["-Xms2g", "-Xmx2g", "-XX:+ExitOnOutOfMemoryError", "-Djdk.tracePinnedThreads=full"]) +} -ext { - testcontainersVersion = "1.19.8" +dependencyManagement { + imports { + mavenBom "org.testcontainers:testcontainers-bom:1.19.+" + } } dependencies { implementation "com.github.ben-manes.caffeine:caffeine" - implementation "com.google.guava:guava:33.2.1-jre" + implementation "com.google.guava:guava:33.2.+" + implementation "io.github.oshai:kotlin-logging-jvm:6.0.+" + implementation 'org.jetbrains.kotlin:kotlin-stdlib:2.0.+' implementation "org.springframework.boot:spring-boot-starter-actuator" implementation "org.springframework.boot:spring-boot-starter-cache" implementation "org.springframework.boot:spring-boot-starter-data-jpa" + implementation "org.springframework.boot:spring-boot-starter-data-mongodb" implementation "org.springframework.boot:spring-boot-starter-webflux" runtimeOnly "com.h2database:h2" runtimeOnly "org.postgresql:postgresql:42.+" - testImplementation "io.github.hakky54:logcaptor:2.9.2" - testImplementation "io.github.oshai:kotlin-logging-jvm:6.0.9" - testImplementation "org.apache.commons:commons-compress:1.26.2" + testImplementation "io.github.hakky54:logcaptor:2.9.+" + testImplementation "org.apache.commons:commons-compress:1.26.+" testImplementation "org.assertj:assertj-core" testImplementation "org.junit.jupiter:junit-jupiter" - testImplementation "org.junit-pioneer:junit-pioneer:2.2.0" + testImplementation "org.junit-pioneer:junit-pioneer:2.2.+" + testImplementation 'org.mockito.kotlin:mockito-kotlin:5.3.+' testImplementation "org.springframework.boot:spring-boot-starter-test" testImplementation "org.springframework.boot:spring-boot-testcontainers" - testImplementation "org.testcontainers:junit-jupiter:$testcontainersVersion" - testImplementation "org.testcontainers:postgresql:$testcontainersVersion" + testImplementation "org.testcontainers:junit-jupiter" + testImplementation "org.testcontainers:mongodb" + testImplementation "org.testcontainers:postgresql" testRuntimeOnly "org.junit.platform:junit-platform-launcher" } diff --git a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results-netty.png b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results-netty.png index e6d45b21..7166471c 100644 Binary files a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results-netty.png and b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results-netty.png differ diff --git a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results.csv b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results.csv index d4cf5b0c..2b063790 100644 --- a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results.csv +++ b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results.csv @@ -1,17 +1,17 @@ scenario,approach,requests_ok,requests_error,requests_per_second_p50,requests_per_second_p90,requests_per_second_max,latency_millis_min,latency_millis_p50,latency_millis_p90,latency_millis_p99,latency_millis_max,cpu_use_percent_avg,cpu_use_percent_max,ram_use_percent_avg,ram_use_percent_max,heap_use_percent_avg,heap_use_percent_max,garbage_collection_count,garbage_collection_time_millis,platform_threads_avg,platform_threads_max,sockets_avg,sockets_max,network_kib_per_req_avg,network_kib_per_req_max,network_packets_per_req_avg,network_packets_per_req_max -smoketest-get-movies-postgres-no-cache,platform-tomcat,89,0,10,10.6,16,109,111,119,608,698,16.6,25.8,20.2,20.8,6.33,13.3,161,772,30,31,407,552,19.8,22.2,145,161 -smoketest-get-movies-postgres-no-cache,loom-tomcat,89,0,10,10.7,17,111,114,126,682,767,16.5,19.0,24.1,24.6,5.63,13.0,164,770,26,27,393,538,28.4,32.0,186,207 -smoketest-get-movies-postgres-no-cache,loom-netty,89,0,10,11.3,14,115,118,126,432,520,17.9,20.1,24.5,25.0,5.00,12.1,158,871,23,23,414,560,36.8,42.4,222,248 -smoketest-get-movies-postgres-no-cache,webflux-netty,89,0,10,10.4,14,116,120,131,410,497,18.3,23.2,24.6,25.2,4.00,5.89,159,852,27,27,408,552,46.8,52.4,276,306 -smoketest-get-movies-postgres,platform-tomcat,89,0,10,10.7,17,104,106,111,720,809,14.5,18.8,24.7,25.2,6.32,13.5,161,769,32,33,379,524,25.0,28.0,99.9,108 -smoketest-get-movies-postgres,loom-tomcat,89,0,10,10.8,18,104,106,137,782,881,14.0,15.8,25.0,25.5,5.30,12.8,164,788,27,28,391,536,27.8,31.4,99.8,109 -smoketest-get-movies-postgres,loom-netty,89,0,10,11.4,15,105,107,110,522,608,14.9,19.8,25.0,25.5,6.00,11.4,144,777,23,24,411,556,29.9,33.6,90.1,98.4 -smoketest-get-movies-postgres,webflux-netty,89,0,10,10.5,15,105,106,113,453,542,14.2,19.5,25.0,25.6,3.56,4.76,156,838,27,28,418,564,33.7,37.9,97.8,105 -smoketest-get-time,platform-tomcat,1300,0,200,201,202,0.33,0.44,0.59,0.95,1.89,5.05,6.59,23.1,23.2,3.64,4.45,136,640,64,64,87,104,0.88,1.05,8.60,10 -smoketest-get-time,loom-tomcat,1300,0,200,200,201,0.36,0.48,0.61,0.92,1.83,5.04,5.64,23.0,23.1,4.33,5.92,119,539,22,22,87,104,0.87,1.04,8.62,10 -smoketest-get-time,loom-netty,1300,0,200,200,201,0.44,0.67,0.94,1.53,2.73,5.94,8.16,23.2,23.2,4.73,6.40,119,595,18,18,87,104,0.62,0.73,5.38,6 -smoketest-get-time,webflux-netty,1300,0,200,200,201,0.41,0.58,0.87,1.39,3.00,6.44,10.5,23.2,23.3,3.38,4.53,136,704,22,22,87,104,0.63,0.74,5.36,6 -smoketest-get-movies-h2,platform-tomcat,89,0,10,10.6,16,104,106,108,610,701,5.14,8.54,23.4,23.5,3.51,10.0,167,843,29,30,12,14,4.91,5.62,21.5,24 -smoketest-get-movies-h2,loom-tomcat,89,0,10,10.7,17,105,106,116,636,725,5.33,8.57,23.5,23.6,3.38,10.1,170,839,22,23,12,14,4.88,5.62,21.4,24 -smoketest-get-movies-h2,loom-netty,89,0,10,10.4,14,104,106,109,358,447,5.39,9.46,23.4,23.5,6.15,10.6,155,760,18,19,12,14,4.43,5.00,14.8,16 -smoketest-get-movies-h2,webflux-netty,89,0,10,10.4,14,104,107,109,369,457,5.48,8.84,23.5,23.6,5.25,10.4,156,758,22,23,12,14,4.84,5.48,21.8,24 +smoketest-get-time,platform-tomcat,1300,0,200,200,201,0.34,0.46,0.60,0.91,2.29,5.50,8.32,18.1,18.2,3.93,4.75,119,581,65,65,70,104,0.88,1.08,8.63,11.8 +smoketest-get-time,loom-tomcat,1300,0,200,200,201,0.38,0.51,0.66,1.00,5.47,5.12,7.60,22.1,22.2,4.69,6.27,119,588,22,22,70,104,0.87,1.06,8.61,11.7 +smoketest-get-time,loom-netty,1300,0,200,200,201,0.46,0.67,0.92,1.51,2.46,5.92,8.37,22.5,22.7,4.56,6.27,119,581,18,18,70,104,0.62,0.79,5.37,8.23 +smoketest-get-time,webflux-netty,1300,0,200,200,201,0.44,0.62,0.82,1.18,2.08,5.94,7.36,22.7,22.8,3.49,4.48,119,574,22,22,70,104,0.63,0.80,5.37,8.23 +smoketest-get-movies-h2,platform-tomcat,69,0,10,11.8,16,104,106,115,602,671,5.86,8.33,23.1,23.2,8.02,12.6,107,467,29,30,12,14,4.67,5.62,20.7,24 +smoketest-get-movies-h2,loom-tomcat,69,0,10,11.8,16,104,106,144,620,697,4.83,8.61,23.2,23.3,6.40,12.5,108,490,22,23,12,14,4.67,5.62,20.7,24 +smoketest-get-movies-h2,loom-netty,69,0,10,11.2,14,104,106,109,375,445,5.23,9.52,23.2,23.3,6.68,11.6,124,564,18,19,12,15,4.23,5.00,14.4,16 +smoketest-get-movies-h2,webflux-netty,69,0,10,11.2,14,104,106,114,372,439,5.15,9.35,23.4,23.5,6.66,11.6,124,556,22,23,12,14,4.64,5.50,21.2,24.4 +smoketest-get-movies-postgres,platform-tomcat,69,0,10,11.8,16,104,106,109,630,698,13.7,19.9,25.6,25.9,8.65,13.7,107,487,30,31,335,438,13.2,15.0,95.9,107 +smoketest-get-movies-postgres,loom-tomcat,69,0,10,12.1,17,105,106,138,713,782,14.1,18.1,25.8,26.2,7.55,13.7,110,524,27,28,371,474,15.7,18.1,95.1,105 +smoketest-get-movies-postgres,loom-netty,69,0,10,11.5,15,105,107,126,458,528,14.2,18.5,25.6,25.9,4.39,10.4,113,593,23,24,347,450,18.1,20.6,89.6,96.2 +smoketest-get-movies-postgres,webflux-netty,69,0,10,11.9,14,104,107,123,439,511,14.0,17.2,25.6,26.0,4.32,10.6,116,596,27,28,348,452,21.5,24.4,97.6,107 +smoketest-get-movies-postgres-no-cache,platform-tomcat,69,0,10,12.1,17,118,123,156,698,766,18.1,21.5,26.0,26.3,6.12,13.1,113,526,29,30,334,434,52.4,64.2,302,363 +smoketest-get-movies-postgres-no-cache,loom-tomcat,69,0,10,12.1,17,124,128,192,751,814,20.2,22.8,26.3,26.6,5.28,11.9,116,569,27,27,360,460,60.7,72.6,341,404 +smoketest-get-movies-postgres-no-cache,loom-netty,69,0,10,11.5,15,128,131,145,519,590,20.1,23.8,25.9,26.2,4.93,11.2,122,630,23,23,336,436,69.8,81.7,379,440 +smoketest-get-movies-postgres-no-cache,webflux-netty,69,0,10,11.2,14,128,131,195,504,530,19.6,22.1,26.0,26.4,4.97,10.5,137,695,26,27,348,450,79.3,92.6,428,497 diff --git a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results.png b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results.png index b4601304..e043a843 100644 Binary files a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results.png and b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-21/results.png differ diff --git a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results-netty.png b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results-netty.png index 1a530453..294aca54 100644 Binary files a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results-netty.png and b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results-netty.png differ diff --git a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results.csv b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results.csv index a0cedd07..daa3349e 100644 --- a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results.csv +++ b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results.csv @@ -1,17 +1,17 @@ scenario,approach,requests_ok,requests_error,requests_per_second_p50,requests_per_second_p90,requests_per_second_max,latency_millis_min,latency_millis_p50,latency_millis_p90,latency_millis_p99,latency_millis_max,cpu_use_percent_avg,cpu_use_percent_max,ram_use_percent_avg,ram_use_percent_max,heap_use_percent_avg,heap_use_percent_max,garbage_collection_count,garbage_collection_time_millis,platform_threads_avg,platform_threads_max,sockets_avg,sockets_max,network_kib_per_req_avg,network_kib_per_req_max,network_packets_per_req_avg,network_packets_per_req_max -smoketest-get-time,platform-tomcat,1300,0,200,200,201,0.32,0.45,0.60,0.82,1.86,5.01,7.09,18.0,18.0,3.57,4.19,119,504,62,62,87,104,0.88,1.05,8.59,10 -smoketest-get-time,loom-tomcat,1300,0,200,200,201,0.34,0.42,0.55,0.87,2.07,5.07,6.32,21.8,21.9,4.58,6.19,119,511,22,22,87,104,0.87,1.04,8.61,10 -smoketest-get-time,loom-netty,1300,0,200,201,201,0.43,0.52,0.68,1.12,2.19,4.70,7.34,22.1,22.2,4.35,6.24,136,632,18,18,87,104,0.62,0.73,5.36,6 -smoketest-get-time,webflux-netty,1300,0,200,201,202,0.39,0.50,0.75,1.19,2.21,4.81,7.32,22.2,22.3,3.29,4.45,136,616,22,22,87,104,0.62,0.74,5.35,6 -smoketest-get-movies-h2,platform-tomcat,69,0,10,11.8,16,104,106,112,609,678,6.41,9.25,22.6,22.7,7.28,12.5,124,508,29,30,12,15,4.67,5.62,20.7,24 -smoketest-get-movies-h2,loom-tomcat,69,0,10,12.1,17,105,106,125,644,713,5.85,10.0,22.9,23,7.21,12.5,124,504,22,23,12,14,4.63,5.62,20.6,24 -smoketest-get-movies-h2,loom-netty,69,0,10,11.2,14,105,107,110,382,450,5.26,9.93,22.7,22.8,6.92,10.2,121,546,18,19,12,14,4.24,5.00,14.4,16 -smoketest-get-movies-h2,webflux-netty,69,0,10,11.2,14,105,107,110,396,464,5.40,7.79,22.8,22.9,6.98,10.3,121,559,22,23,12,14,4.63,5.48,21.1,24 -smoketest-get-movies-postgres,platform-tomcat,69,0,10,12.1,17,104,106,123,651,720,15.2,19.8,24.9,25.3,9.10,13.7,121,528,32,33,331,430,12.8,14.6,92.8,103 -smoketest-get-movies-postgres,loom-tomcat,69,0,10,12.1,17,105,106,140,679,747,14.2,18.3,25.2,25.6,7.26,13.3,108,486,24,25,363,464,15.6,17.9,94.0,103 -smoketest-get-movies-postgres,loom-netty,69,0,10,11.2,14,104,107,110,438,510,14.1,16.7,24.7,25.2,7.59,11.5,121,590,20,21,344,444,18.4,20.8,89.9,97.6 -smoketest-get-movies-postgres,webflux-netty,69,0,10,11.2,14,105,107,113,424,492,14.2,17.8,24.9,25.4,7.69,11.5,121,608,24,25,345,446,21.4,24.6,96.2,104 -smoketest-get-movies-postgres-no-cache,platform-tomcat,69,0,10,12.1,17,119,123,166,735,805,18.0,19.4,25.2,25.6,5.94,12.9,130,576,31,32,332,432,52.6,63.1,303,361 -smoketest-get-movies-postgres-no-cache,loom-tomcat,69,0,10,12.4,18,125,129,205,776,861,20.0,25.1,25.3,25.6,6.05,12.7,130,580,23,24,333,432,60.1,72.6,337,405 -smoketest-get-movies-postgres-no-cache,loom-netty,69,0,10,11.5,15,130,134,146,498,569,21.7,27.5,25.2,25.5,5.38,10.9,129,634,20,20,337,436,69.6,81.6,378,439 -smoketest-get-movies-postgres-no-cache,webflux-netty,69,0,10,11.2,14,128,132,177,447,517,20.1,23.4,25.2,25.6,5.64,11.3,130,610,23,24,346,446,78.9,93.3,426,502 +smoketest-get-time,platform-tomcat,1300,0,200,200,201,0.32,0.41,0.54,0.82,2.63,4.32,6.36,17.6,17.8,3.57,4.27,119,490,60,60,70,104,0.88,1.06,8.59,11.6 +smoketest-get-time,loom-tomcat,1300,0,200,200,201,0.34,0.44,0.57,1.00,1.73,4.32,5.61,21.6,21.7,4.67,6.27,119,504,22,22,70,104,0.87,1.05,8.58,11.5 +smoketest-get-time,loom-netty,1300,0,200,200,201,0.44,0.58,0.86,1.40,8.04,5.48,7.31,21.8,22.0,4.39,6.07,119,581,18,18,70,104,0.62,0.79,5.36,8.20 +smoketest-get-time,webflux-netty,1300,0,200,200,201,0.39,0.50,0.72,1.16,2.46,4.89,7.77,21.9,22.0,3.20,4.18,119,567,22,22,70,104,0.63,0.80,5.37,8.25 +smoketest-get-movies-h2,platform-tomcat,69,0,10,11.8,16,104,106,124,561,629,5.74,9.41,22.4,22.5,7.14,12.5,124,500,29,30,12,14,4.67,5.62,20.7,24 +smoketest-get-movies-h2,loom-tomcat,69,0,10,11.8,16,104,106,143,631,692,5.12,9.77,22.7,22.8,6.47,12.4,108,450,22,23,12,14,4.67,5.62,20.7,24 +smoketest-get-movies-h2,loom-netty,69,0,10,11.2,14,104,107,110,376,444,5.62,9.57,22.5,22.6,6.69,10.2,107,493,19,19,12,14,4.23,5.00,14.4,16 +smoketest-get-movies-h2,webflux-netty,69,0,10,11.2,14,104,107,110,374,444,4.76,7.11,22.5,22.7,7.00,10.3,121,567,22,23,12,14,4.63,5.48,21.1,24 +smoketest-get-movies-postgres,platform-tomcat,69,0,10,12.1,17,104,106,132,642,711,13.4,17.4,24.7,25.1,9.17,13.9,121,523,32,33,335,436,13.0,14.7,93.9,104 +smoketest-get-movies-postgres,loom-tomcat,69,0,10,12.1,17,105,107,129,705,772,14.6,17.1,24.8,25.2,4.12,10.0,113,553,24,25,333,434,15.6,17.9,94.0,103 +smoketest-get-movies-postgres,loom-netty,69,0,10,11.2,14,104,107,110,435,504,13.9,16.5,24.8,25.2,7.61,11.6,113,515,20,21,354,454,18.2,20.5,89.3,95.2 +smoketest-get-movies-postgres,webflux-netty,69,0,10,11.2,14,105,107,110,401,468,13.9,15.8,24.9,25.3,7.85,11.8,121,551,23,24,352,454,21.5,24.5,96.7,105 +smoketest-get-movies-postgres-no-cache,platform-tomcat,69,0,10,12.1,17,119,122,154,677,748,17.6,20.2,25.2,25.6,5.69,12.6,130,580,29,30,346,446,52.0,62.6,301,357 +smoketest-get-movies-postgres-no-cache,loom-tomcat,69,0,10,12.1,17,124,129,177,743,810,19.3,22,25.3,25.6,6.02,12.6,113,502,23,24,332,434,60.2,72.4,338,403 +smoketest-get-movies-postgres-no-cache,loom-netty,69,0,10,11.2,14,129,133,147,460,528,21.2,24.1,25.1,25.4,3.80,5.59,138,646,19,20,352,452,69.2,81.6,376,439 +smoketest-get-movies-postgres-no-cache,webflux-netty,69,0,10,11.2,14,127,131,168,445,516,19.9,22.5,25.3,25.6,5.29,10.5,130,628,23,24,351,452,79.2,92.7,428,498 diff --git a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results.png b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results.png index 0c92a16b..83de17b5 100644 Binary files a/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results.png and b/results/ci/scenarios-smoketest/Ubuntu-22.04/java-22/results.png differ diff --git a/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results-netty.png b/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results-netty.png index 004075c0..97e782e3 100644 Binary files a/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results-netty.png and b/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results-netty.png differ diff --git a/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results.csv b/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results.csv index dead6499..b1c61b3a 100644 --- a/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results.csv +++ b/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results.csv @@ -1,17 +1,17 @@ scenario,approach,requests_ok,requests_error,requests_per_second_p50,requests_per_second_p90,requests_per_second_max,latency_millis_min,latency_millis_p50,latency_millis_p90,latency_millis_p99,latency_millis_max,cpu_use_percent_avg,cpu_use_percent_max,ram_use_percent_avg,ram_use_percent_max,heap_use_percent_avg,heap_use_percent_max,garbage_collection_count,garbage_collection_time_millis,platform_threads_avg,platform_threads_max,sockets_avg,sockets_max,network_kib_per_req_avg,network_kib_per_req_max,network_packets_per_req_avg,network_packets_per_req_max -smoketest-get-time,platform-tomcat,1300,0,200,200,201,0.31,0.37,0.51,0.83,1.35,4.51,6.07,17.0,17.1,3.78,4.55,144,696,62,62,86,104,0.88,1.05,8.60,10.0 -smoketest-get-time,loom-tomcat,1300,0,200,200,201,0.33,0.43,0.57,0.88,5.92,4.74,6.58,20.9,21.0,4.88,6.48,126,609,22,22,86,103,0.87,1.04,8.62,10 -smoketest-get-time,loom-netty,1300,0,200,201,202,0.42,0.53,0.70,1.11,6.17,4.95,7.07,21.1,21.1,4.57,6.24,119,560,18,18,86,104,0.62,0.73,5.35,6 -smoketest-get-time,webflux-netty,1301,0,200,200,201,0.39,0.52,0.68,1.16,5.29,5.73,9.34,20.9,21.0,3.56,4.51,112,546,22,22,86,103,0.63,0.75,5.37,6.04 -smoketest-get-movies-h2,platform-tomcat,69,0,10,11.8,16,103,104,111,575,643,4.97,7.75,21.3,21.4,2.80,3.32,117,566,29,30,11,14,4.67,5.62,20.7,24 -smoketest-get-movies-h2,loom-tomcat,69,0,10,11.8,16,104,105,138,621,692,4.82,7.29,21.7,21.8,3.39,9.48,131,622,22,23,11,14,4.67,5.62,20.7,24 -smoketest-get-movies-h2,loom-netty,69,0,10,11.2,14,103,105,108,360,428,4.61,7.77,21.6,21.7,6.61,10.4,105,506,18,19,11,13,4.23,5.00,14.4,16 -smoketest-get-movies-h2,webflux-netty,69,0,10,11.2,14,103,105,111,363,430,4.48,6.82,21.6,21.7,6.85,10.5,107,472,23,23,11,13,4.63,5.48,21.1,24 -smoketest-get-movies-postgres,platform-tomcat,69,0,10,11.8,16,103,105,115,599,668,13.1,16.5,24.1,24.6,8.92,13.8,107,463,30,31,367,473,13.4,15.0,97.3,107 -smoketest-get-movies-postgres,loom-tomcat,69,0,10,12.1,17,103,105,147,670,737,13.2,17.2,24.0,24.6,7.87,13.6,124,544,27,28,351,457,15.9,18.3,96.3,107 -smoketest-get-movies-postgres,loom-netty,69,0,10,11.2,14,103,106,109,417,485,12.9,15.9,24.0,24.5,7.53,11.6,107,529,24,24,370,475,18.5,20.9,92.1,98.8 -smoketest-get-movies-postgres,webflux-netty,69,0,10,11.2,14,104,106,113,396,464,13.1,16.1,24.0,24.5,7.73,11.6,121,581,27,28,363,467,21.7,24.6,98.3,106 -smoketest-get-movies-postgres-no-cache,platform-tomcat,69,0,10,12.1,17,118,122,144,672,739,17.0,20.1,24.2,24.6,6.25,13.1,130,576,30,30,329,433,52.8,63.5,306,364 -smoketest-get-movies-postgres-no-cache,loom-tomcat,69,0,10,12.1,17,124,127,195,741,808,19.3,22.2,24.3,24.7,4.88,9.84,132,615,26,27,333,435,60.5,74.6,340,406 -smoketest-get-movies-postgres-no-cache,loom-netty,69,0,10,11.5,15,128,131,140,473,542,19.7,21.8,23.8,24.2,4.48,6.07,122,608,22,23,348,451,69.1,84.1,375,442 -smoketest-get-movies-postgres-no-cache,webflux-netty,69,0,10,11.2,14,127,131,170,423,492,18.7,21.3,24.0,24.4,4.54,6.27,109,526,27,27,363,467,78.4,92.5,425,497 +smoketest-get-time,platform-tomcat,1300,0,200,200,201,0.31,0.39,0.51,0.86,1.92,4.69,5.83,16.7,16.8,3.73,4.35,119,609,60,60,69,103,0.88,1.05,8.61,11.5 +smoketest-get-time,loom-tomcat,1300,0,200,200,201,0.34,0.41,0.53,0.74,4.46,5.02,7.09,20.6,20.6,4.71,6.07,102,462,22,22,69,103,0.87,1.06,8.60,11.6 +smoketest-get-time,loom-netty,1300,0,200,200,201,0.43,0.53,0.69,1.25,2.54,5.05,7.31,20.9,21,4.62,6.47,136,632,18,18,86,103,0.62,0.73,5.37,6 +smoketest-get-time,webflux-netty,1300,0,200,200,201,0.39,0.52,0.70,1.10,2.97,5.20,7.40,21.1,21.2,3.47,4.46,119,546,22,22,69,103,0.62,0.79,5.36,8.17 +smoketest-get-movies-h2,platform-tomcat,69,0,10,11.8,16,103,105,129,571,638,4.98,9.23,21.2,21.3,7.23,12.7,124,528,29,30,11,13,4.67,5.62,20.7,24 +smoketest-get-movies-h2,loom-tomcat,69,0,10,11.8,16,103,105,139,620,689,4.52,7.32,21.2,21.2,3.69,9.56,131,627,22,23,11,13,4.67,5.62,20.7,24 +smoketest-get-movies-h2,loom-netty,69,0,10,11.2,14,103,105,109,364,433,5.30,8.46,21.5,21.6,7.41,11.7,107,465,18,19,11,13,4.24,5.00,14.4,16 +smoketest-get-movies-h2,webflux-netty,69,0,10,11.2,14,103,105,112,359,427,4.73,8.55,21.5,21.6,6.20,11.6,110,494,23,23,11,13,4.63,5.48,21.1,24 +smoketest-get-movies-postgres,platform-tomcat,69,0,10,11.8,16,103,106,124,609,679,13.3,16.4,23.6,24.1,9.18,13.9,121,540,30,31,353,457,13.3,14.9,96.5,105 +smoketest-get-movies-postgres,loom-tomcat,69,0,10,12.1,17,103,105,144,668,735,13.8,17.1,23.6,23.9,7.90,13.6,124,556,27,28,342,447,15.9,18.3,96.5,107 +smoketest-get-movies-postgres,loom-netty,69,0,10,11.5,15,104,107,113,465,534,13.3,16.6,23.6,24.1,4.06,10.5,131,675,23,24,355,459,18.3,20.9,90.7,97.8 +smoketest-get-movies-postgres,webflux-netty,69,0,10,11.2,14,104,106,115,418,487,13.2,16.1,23.6,24,4.23,10.5,131,661,27,28,361,465,21.7,24.9,98.7,107 +smoketest-get-movies-postgres-no-cache,platform-tomcat,69,0,10,12.1,17,118,121,153,658,726,16.9,19.1,24.0,24.5,5.15,12.1,116,556,30,30,363,467,52.7,63.0,304,361 +smoketest-get-movies-postgres-no-cache,loom-tomcat,69,0,10,12.1,17,123,127,182,737,803,18.7,21.2,23.9,24.3,4.98,10.1,131,645,26,27,336,439,60.2,72.6,340,404 +smoketest-get-movies-postgres-no-cache,loom-netty,69,0,10,11.5,15,127,131,143,504,572,20.2,22.2,23.9,24.4,4.80,10.5,137,695,22,23,356,459,68.7,81.7,374,440 +smoketest-get-movies-postgres-no-cache,webflux-netty,69,0,10,11.2,14,127,131,174,475,574,19.3,22.4,23.9,24.4,5.02,10.5,137,689,26,27,352,455,78.7,92.6,425,497 diff --git a/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results.png b/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results.png index 45db1dce..56287c8d 100644 Binary files a/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results.png and b/results/ci/scenarios-smoketest/ubuntu-24.04/java-21/results.png differ diff --git a/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results-netty.png b/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results-netty.png index 0f8beb10..08cb5e99 100644 Binary files a/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results-netty.png and b/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results-netty.png differ diff --git a/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results.csv b/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results.csv index 6fc84b98..81295ca6 100644 --- a/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results.csv +++ b/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results.csv @@ -1,17 +1,17 @@ scenario,approach,requests_ok,requests_error,requests_per_second_p50,requests_per_second_p90,requests_per_second_max,latency_millis_min,latency_millis_p50,latency_millis_p90,latency_millis_p99,latency_millis_max,cpu_use_percent_avg,cpu_use_percent_max,ram_use_percent_avg,ram_use_percent_max,heap_use_percent_avg,heap_use_percent_max,garbage_collection_count,garbage_collection_time_millis,platform_threads_avg,platform_threads_max,sockets_avg,sockets_max,network_kib_per_req_avg,network_kib_per_req_max,network_packets_per_req_avg,network_packets_per_req_max -smoketest-get-time,platform-tomcat,1300,0,200,200,201,0.31,0.38,0.50,0.71,3.27,4.23,7.04,17.0,17,3.52,4.27,120,504,61,61,86,103,0.88,1.05,8.61,10 -smoketest-get-time,loom-tomcat,1300,0,200,200,201,0.34,0.41,0.53,0.88,3.08,4.52,6.34,20.9,21.0,4.81,6.41,119,476,22,22,69,103,0.87,1.06,8.60,11.6 -smoketest-get-time,loom-netty,1300,0,200,200,201,0.42,0.53,0.72,1.09,5.06,5.07,7.59,20.9,21.0,4.58,6.28,119,553,18,18,86,103,0.62,0.73,5.36,6 -smoketest-get-time,webflux-netty,1300,0,200,200,201,0.39,0.50,0.69,1.14,6.66,5.33,7.85,20.9,21.1,3.23,4.16,119,567,22,22,69,103,0.63,0.80,5.37,8.23 -smoketest-get-movies-h2,platform-tomcat,69,0,10,11.8,16,104,105,124,564,631,5.26,8.27,21.4,21.5,6.76,12.6,110,437,29,30,11,13,4.67,5.62,20.7,24 -smoketest-get-movies-h2,loom-tomcat,69,0,10,11.8,16,104,105,136,596,672,5.10,8.31,21.7,21.8,7.11,12.4,124,480,22,23,11,13,4.67,5.62,20.7,24 -smoketest-get-movies-h2,loom-netty,69,0,10,11.2,14,104,106,109,361,429,5.10,8.73,21.5,21.6,6.78,10.7,91,366,18,19,11,13,4.23,5.00,14.4,16 -smoketest-get-movies-h2,webflux-netty,69,0,10,11.2,14,104,106,112,353,421,5.27,8.02,21.5,21.7,6.71,10.2,107,469,23,23,11,13,4.63,5.48,21.1,24 -smoketest-get-movies-postgres,platform-tomcat,69,0,10,11.8,16,104,106,129,591,659,13.3,17.5,23.9,24.4,9.00,13.6,121,485,30,31,356,459,13.2,14.8,96.1,105 -smoketest-get-movies-postgres,loom-tomcat,69,0,10,12.1,17,104,106,139,665,734,13.8,17.5,24.0,24.5,7.65,13.2,124,516,24,25,342,445,15.7,18.1,95.1,105 -smoketest-get-movies-postgres,loom-netty,69,0,10,11.2,14,104,106,110,415,483,13.5,16.1,24.1,24.6,8.76,11.9,104,464,21,21,364,467,18.4,21.8,91,97.6 -smoketest-get-movies-postgres,webflux-netty,69,0,10,11.2,14,104,106,112,397,463,13.4,16.4,24.0,24.5,7.56,11.4,121,565,24,25,361,465,21.7,24.6,98.3,106 -smoketest-get-movies-postgres-no-cache,platform-tomcat,69,0,10,12.5,16,119,121,157,680,750,17.5,22.1,24.2,24.7,5.99,12.6,113,496,30,30,328,431,52.3,63.0,302,361 -smoketest-get-movies-postgres-no-cache,loom-tomcat,69,0,10,12.1,17,125,128,202,758,822,19.1,21.0,24.4,24.9,4.78,9.39,137,664,23,24,338,439,60.8,72.7,342,406 -smoketest-get-movies-postgres-no-cache,loom-netty,69,0,10,11.5,15,128,132,141,491,560,21.2,25.2,24.0,24.6,4.49,8.86,134,675,19,20,352,453,69.1,84.1,374,442 -smoketest-get-movies-postgres-no-cache,webflux-netty,69,0,10,11.2,14,127,131,157,432,498,19.1,21.2,24.2,24.7,5.41,10.9,130,600,23,24,356,459,79.1,92.7,427,498 +smoketest-get-time,platform-tomcat,1300,0,200,200,201,0.31,0.37,0.50,0.78,2.52,4.26,5.31,17.1,17.1,3.87,4.53,119,560,60,60,86,103,0.88,1.05,8.60,10 +smoketest-get-time,loom-tomcat,1300,0,200,200,201,0.32,0.41,0.52,0.74,2.90,4.76,6.04,21.8,21.9,4.89,6.48,119,483,22,22,86,103,0.88,1.04,8.67,10 +smoketest-get-time,loom-netty,1300,0,200,200,201,0.42,0.52,0.71,1.13,6.16,4.82,7.31,21.8,21.9,4.74,6.43,119,504,18,18,86,104,0.62,0.73,5.36,6 +smoketest-get-time,webflux-netty,1300,0,200,200,201,0.39,0.52,0.69,1.03,2.11,4.69,6.81,22.0,22.1,3.66,4.62,119,504,22,22,86,103,0.63,0.74,5.38,6 +smoketest-get-movies-h2,platform-tomcat,69,0,10,11.8,16,103,105,119,559,628,4.39,8.50,22.4,22.5,7.32,12.7,124,492,29,30,11,13,4.67,5.62,20.7,24 +smoketest-get-movies-h2,loom-tomcat,69,0,10,11.8,16,103,105,135,594,661,4.69,7.35,22.6,22.7,7.19,12.6,124,496,22,23,11,13,4.67,5.62,20.7,24 +smoketest-get-movies-h2,loom-netty,69,0,10,11.2,14,103,105,108,353,421,4.52,6.80,22.6,22.8,6.56,11.3,124,544,18,19,11,13,4.23,5.00,14.4,16 +smoketest-get-movies-h2,webflux-netty,69,0,10,11.2,14,103,106,121,352,419,4.63,8.50,22.7,22.8,3.49,11.3,116,529,23,23,11,13,4.63,5.48,21.1,24 +smoketest-get-movies-postgres,platform-tomcat,69,0,10,11.8,16,103,105,118,591,659,13.0,15.7,24.7,25.3,9.22,13.9,121,485,30,31,351,455,13.3,14.8,96.6,106 +smoketest-get-movies-postgres,loom-tomcat,69,0,10,12.1,17,104,106,127,674,739,13.5,17.7,24.8,25.2,7.91,13.5,124,512,24,25,344,447,15.8,18.3,95.6,107 +smoketest-get-movies-postgres,loom-netty,69,0,10,11.2,14,104,106,109,414,482,12.8,15.8,24.7,25.1,4.57,10.7,127,629,20,21,361,465,18.4,20.9,91.6,98.8 +smoketest-get-movies-postgres,webflux-netty,69,0,10,11.2,14,104,106,110,415,483,13.4,17.3,24.5,25.0,4.39,9.63,131,643,24,25,361,465,21.7,24.8,98.2,107 +smoketest-get-movies-postgres-no-cache,platform-tomcat,69,0,10,12.1,17,118,121,156,670,739,17.3,20.8,24.9,25.5,6.02,12.8,130,568,30,30,328,431,52.6,62.8,305,359 +smoketest-get-movies-postgres-no-cache,loom-tomcat,69,0,10,12.1,17,124,128,165,721,787,19.2,22.6,25.0,25.4,6.05,12.8,130,572,23,24,334,437,60.1,72.4,339,403 +smoketest-get-movies-postgres-no-cache,loom-netty,69,0,10,11.5,15,128,133,143,492,561,21.6,26.4,24.8,25.2,4.80,9.87,137,627,19,20,351,453,68.6,81.8,374,440 +smoketest-get-movies-postgres-no-cache,webflux-netty,69,0,10,11.2,14,128,131,162,428,500,19.4,21.3,24.9,25.4,4.83,9.76,137,669,23,24,354,455,78.8,95.1,425,497 diff --git a/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results.png b/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results.png index 30454643..f0c843ab 100644 Binary files a/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results.png and b/results/ci/scenarios-smoketest/ubuntu-24.04/java-22/results.png differ diff --git a/src/main/docker/docker-compose-mongo.yaml b/src/main/docker/docker-compose-mongo.yaml new file mode 100644 index 00000000..d6f0c104 --- /dev/null +++ b/src/main/docker/docker-compose-mongo.yaml @@ -0,0 +1,11 @@ +services: + mongodb: + image: mongo:7 + restart: unless-stopped + ports: + - '27017:27017' + volumes: + - mongo-data:/data/db + +volumes: + mongo-data: diff --git a/src/main/docker/docker-compose-postgres.yaml b/src/main/docker/docker-compose-postgres.yaml index 2b49248b..84dc120b 100644 --- a/src/main/docker/docker-compose-postgres.yaml +++ b/src/main/docker/docker-compose-postgres.yaml @@ -1,5 +1,3 @@ -name: infra - services: postgres: container_name: postgres diff --git a/src/main/java/uk/gleissner/loomwebflux/LoomWebfluxApp.java b/src/main/java/uk/gleissner/loomwebflux/LoomWebfluxApp.java index b4de1150..0070386b 100644 --- a/src/main/java/uk/gleissner/loomwebflux/LoomWebfluxApp.java +++ b/src/main/java/uk/gleissner/loomwebflux/LoomWebfluxApp.java @@ -5,10 +5,9 @@ import org.springframework.boot.context.properties.ConfigurationPropertiesScan; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableScheduling; -import uk.gleissner.loomwebflux.config.AppProperties; @SpringBootApplication -@ConfigurationPropertiesScan(basePackageClasses = AppProperties.class) +@ConfigurationPropertiesScan @EnableScheduling @EnableCaching public class LoomWebfluxApp { diff --git a/src/main/java/uk/gleissner/loomwebflux/movie/domain/Movie.java b/src/main/java/uk/gleissner/loomwebflux/movie/domain/Movie.java index d9dcd61f..acd3d4f0 100644 --- a/src/main/java/uk/gleissner/loomwebflux/movie/domain/Movie.java +++ b/src/main/java/uk/gleissner/loomwebflux/movie/domain/Movie.java @@ -21,6 +21,8 @@ import static jakarta.persistence.GenerationType.IDENTITY; @Entity +// TODO cg Needed by MongoDB but fails JPA tests +//@Document @Data @Builder(toBuilder = true) @NoArgsConstructor @@ -32,6 +34,9 @@ public class Movie implements Comparable { .thenComparing(Movie::getGenre) .thenComparing(Movie::getId); + // TODO cg This is not usable by MongoDB and currently fails with + // org.springframework.dao.InvalidDataAccessApiUsageException: Cannot autogenerate id of type java.lang.Long for entity + // of type uk.gleissner.loomwebflux.movie.domain.Movie @Id @GeneratedValue(strategy = IDENTITY) @EqualsAndHashCode.Exclude diff --git a/src/main/java/uk/gleissner/loomwebflux/movie/repo/MovieRepo.java b/src/main/java/uk/gleissner/loomwebflux/movie/repo/MovieRepo.java index 50cb8669..5318ff11 100644 --- a/src/main/java/uk/gleissner/loomwebflux/movie/repo/MovieRepo.java +++ b/src/main/java/uk/gleissner/loomwebflux/movie/repo/MovieRepo.java @@ -8,6 +8,7 @@ public interface MovieRepo extends ListCrudRepository { + @org.springframework.data.mongodb.repository.Query("{'directors.lastName': ?0}") @Query("SELECT m FROM Movie m JOIN m.directors d WHERE d.lastName = :directorName") Set findByDirectorName(String directorName); } diff --git a/src/main/resources/application-mongo.yaml b/src/main/resources/application-mongo.yaml new file mode 100644 index 00000000..5bc382d2 --- /dev/null +++ b/src/main/resources/application-mongo.yaml @@ -0,0 +1,11 @@ +spring: + data: + mongodb: + port: 27017 + database: mongo + autoconfigure: + exclude: + # JPA + - org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration + - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration + - org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index faa7649b..5bed786f 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -1,6 +1,11 @@ spring: application: name: loom-webflux + autoconfigure: + exclude: + # Mongo + - org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration + - org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration cache: caffeine: spec: expireAfterWrite=1h diff --git a/src/test/java/uk/gleissner/loomwebflux/config/MetricCsvLoggerTest.kt b/src/test/kotlin/uk/gleissner/loomwebflux/config/MetricCsvLoggerTest.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/config/MetricCsvLoggerTest.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/config/MetricCsvLoggerTest.kt diff --git a/src/test/java/uk/gleissner/loomwebflux/fixture/AbstractIT.kt b/src/test/kotlin/uk/gleissner/loomwebflux/fixture/AbstractIT.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/fixture/AbstractIT.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/fixture/AbstractIT.kt diff --git a/src/test/java/uk/gleissner/loomwebflux/fixture/CartesianTestApproachesAndDelayCallDepths.kt b/src/test/kotlin/uk/gleissner/loomwebflux/fixture/CartesianTestApproachesAndDelayCallDepths.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/fixture/CartesianTestApproachesAndDelayCallDepths.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/fixture/CartesianTestApproachesAndDelayCallDepths.kt diff --git a/src/test/java/uk/gleissner/loomwebflux/fixture/LogCaptorFixture.kt b/src/test/kotlin/uk/gleissner/loomwebflux/fixture/LogCaptorFixture.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/fixture/LogCaptorFixture.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/fixture/LogCaptorFixture.kt diff --git a/src/test/java/uk/gleissner/loomwebflux/fixture/WebTestConfig.java b/src/test/kotlin/uk/gleissner/loomwebflux/fixture/WebTestConfig.java similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/fixture/WebTestConfig.java rename to src/test/kotlin/uk/gleissner/loomwebflux/fixture/WebTestConfig.java diff --git a/src/test/java/uk/gleissner/loomwebflux/movie/MovieControllerIT.kt b/src/test/kotlin/uk/gleissner/loomwebflux/movie/MovieControllerIT.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/movie/MovieControllerIT.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/movie/MovieControllerIT.kt diff --git a/src/test/kotlin/uk/gleissner/loomwebflux/movie/MovieControllerMongoIT.kt b/src/test/kotlin/uk/gleissner/loomwebflux/movie/MovieControllerMongoIT.kt new file mode 100644 index 00000000..10718782 --- /dev/null +++ b/src/test/kotlin/uk/gleissner/loomwebflux/movie/MovieControllerMongoIT.kt @@ -0,0 +1,21 @@ +package uk.gleissner.loomwebflux.movie + +import org.junit.jupiter.api.Disabled +import org.springframework.boot.testcontainers.service.connection.ServiceConnection +import org.springframework.test.context.ActiveProfiles +import org.testcontainers.containers.MongoDBContainer +import org.testcontainers.junit.jupiter.Container +import org.testcontainers.junit.jupiter.Testcontainers + +@ActiveProfiles("mongo") +@Testcontainers +@Disabled("TODO cg Fix this") +internal open class MovieControllerMongoIT : MovieControllerIT() { + + companion object { + + @Container + @ServiceConnection + val mongo = MongoDBContainer("mongo:7") + } +} diff --git a/src/test/java/uk/gleissner/loomwebflux/movie/MovieControllerPostgresIT.kt b/src/test/kotlin/uk/gleissner/loomwebflux/movie/MovieControllerPostgresIT.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/movie/MovieControllerPostgresIT.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/movie/MovieControllerPostgresIT.kt diff --git a/src/test/java/uk/gleissner/loomwebflux/movie/MovieControllerPostgresNoCacheIT.kt b/src/test/kotlin/uk/gleissner/loomwebflux/movie/MovieControllerPostgresNoCacheIT.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/movie/MovieControllerPostgresNoCacheIT.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/movie/MovieControllerPostgresNoCacheIT.kt diff --git a/src/test/java/uk/gleissner/loomwebflux/movie/domain/Directors.kt b/src/test/kotlin/uk/gleissner/loomwebflux/movie/domain/Directors.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/movie/domain/Directors.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/movie/domain/Directors.kt diff --git a/src/test/java/uk/gleissner/loomwebflux/movie/domain/MovieJsonTest.kt b/src/test/kotlin/uk/gleissner/loomwebflux/movie/domain/MovieJsonTest.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/movie/domain/MovieJsonTest.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/movie/domain/MovieJsonTest.kt diff --git a/src/test/java/uk/gleissner/loomwebflux/movie/domain/Movies.kt b/src/test/kotlin/uk/gleissner/loomwebflux/movie/domain/Movies.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/movie/domain/Movies.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/movie/domain/Movies.kt diff --git a/src/test/java/uk/gleissner/loomwebflux/movie/repo/CachedMovieRepoTest.kt b/src/test/kotlin/uk/gleissner/loomwebflux/movie/repo/CachedMovieRepoTest.kt similarity index 75% rename from src/test/java/uk/gleissner/loomwebflux/movie/repo/CachedMovieRepoTest.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/movie/repo/CachedMovieRepoTest.kt index f31a3d58..848de240 100644 --- a/src/test/java/uk/gleissner/loomwebflux/movie/repo/CachedMovieRepoTest.kt +++ b/src/test/kotlin/uk/gleissner/loomwebflux/movie/repo/CachedMovieRepoTest.kt @@ -4,14 +4,18 @@ import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith +import org.mockito.ArgumentMatchers.anyIterable +import org.mockito.ArgumentMatchers.anyList import org.mockito.Mock -import org.mockito.Mockito.* import org.mockito.junit.jupiter.MockitoExtension +import org.mockito.kotlin.any +import org.mockito.kotlin.never +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever import org.springframework.cache.Cache import org.springframework.cache.CacheManager import uk.gleissner.loomwebflux.config.AppProperties import uk.gleissner.loomwebflux.movie.domain.Directors.davidLynch -import uk.gleissner.loomwebflux.movie.domain.Movie import uk.gleissner.loomwebflux.movie.domain.Movies.mulhollandDrive import uk.gleissner.loomwebflux.movie.domain.Movies.theStraightStory @@ -35,7 +39,7 @@ class CachedMovieRepoTest { @BeforeEach fun beforeEach() { - `when`(cacheManager.getCache(any())).thenReturn(cache); + whenever(cacheManager.getCache(any())).thenReturn(cache) sut = CachedMovieRepo(appProperties, movieRepo, cacheManager) } @@ -43,7 +47,7 @@ class CachedMovieRepoTest { fun `findByDirectorName should delegate to underlying repo`() { val directorName = davidLynch.lastName val expectedMovies = setOf(mulhollandDrive, theStraightStory) - `when`(movieRepo.findByDirectorName(directorName)).thenReturn(expectedMovies) + whenever(movieRepo.findByDirectorName(directorName)).thenReturn(expectedMovies) val movies = sut.findByDirectorName(directorName) @@ -53,19 +57,19 @@ class CachedMovieRepoTest { @Test fun `save should return movie without saving when repoReadOnly is true`() { - `when`(appProperties.repoReadOnly()).thenReturn(true) + whenever(appProperties.repoReadOnly()).thenReturn(true) val savedMovies = sut.saveAll(listOf(mulhollandDrive)) assertThat(savedMovies).containsExactly(mulhollandDrive) - verify(movieRepo, never()).save(any(Movie::class.java)) + verify(movieRepo, never()).saveAll(anyList()) } @Test fun `save should delegate to underlying repo when repoReadOnly is false`() { val movies = listOf(mulhollandDrive) - `when`(appProperties.repoReadOnly()).thenReturn(false) - `when`(movieRepo.saveAll(anyIterable())).thenReturn(movies) + whenever(appProperties.repoReadOnly()).thenReturn(false) + whenever(movieRepo.saveAll(anyIterable())).thenReturn(movies) val savedMovies = sut.saveAll(movies) @@ -76,7 +80,7 @@ class CachedMovieRepoTest { @Test fun `deleteById should not delete when repoReadOnly is true`() { val movieId = 1L - `when`(appProperties.repoReadOnly()).thenReturn(true) + whenever(appProperties.repoReadOnly()).thenReturn(true) sut.deleteById(movieId) @@ -86,7 +90,7 @@ class CachedMovieRepoTest { @Test fun `deleteById should delegate to underlying repo when repoReadOnly is false`() { val movieId = 1L - `when`(appProperties.repoReadOnly()).thenReturn(false) + whenever(appProperties.repoReadOnly()).thenReturn(false) sut.deleteById(movieId) diff --git a/src/test/java/uk/gleissner/loomwebflux/time/TimeIT.kt b/src/test/kotlin/uk/gleissner/loomwebflux/time/TimeIT.kt similarity index 100% rename from src/test/java/uk/gleissner/loomwebflux/time/TimeIT.kt rename to src/test/kotlin/uk/gleissner/loomwebflux/time/TimeIT.kt diff --git a/src/test/resources/application-test.yaml b/src/test/resources/application-test.yaml index 94b1c1f8..37974c82 100644 --- a/src/test/resources/application-test.yaml +++ b/src/test/resources/application-test.yaml @@ -4,5 +4,4 @@ loom-webflux: logging: level: uk.gleissner.loomwebflux: debug -# org.hibernate.SQL: debug