mirror of
https://gitlab.com/mangadex-pub/mangadex_at_home.git
synced 2024-01-19 02:48:37 +00:00
Merge branch 'update-everything' into 'master'
Update all the deps See merge request mangadex-pub/mangadex_at_home!103
This commit is contained in:
commit
754c1de51d
|
@ -17,6 +17,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
|
||||||
|
## [2.0.4] - 2023-08-07
|
||||||
|
### Changed
|
||||||
|
- [2023-08-07] Updated dependencies [@carbotaniuman].
|
||||||
|
- [2023-04-06] Fixed DB contention issues [@carbotaniuman].
|
||||||
|
- [2023-04-06] Make errors more useful [@carbotaniuman].
|
||||||
|
|
||||||
## [2.0.3] - 2022-02-17
|
## [2.0.3] - 2022-02-17
|
||||||
### Changed
|
### Changed
|
||||||
- [2022-02-17] Updated dependencies [@carbotaniuman].
|
- [2022-02-17] Updated dependencies [@carbotaniuman].
|
||||||
|
@ -411,7 +417,8 @@ This release contains many breaking changes! Of note are the changes to the cach
|
||||||
### Fixed
|
### Fixed
|
||||||
- [2020-06-11] Tweaked logging configuration to reduce log file sizes by [@carbotaniuman].
|
- [2020-06-11] Tweaked logging configuration to reduce log file sizes by [@carbotaniuman].
|
||||||
|
|
||||||
[Unreleased]: https://gitlab.com/mangadex/mangadex_at_home/-/compare/2.0.3...HEAD
|
[Unreleased]: https://gitlab.com/mangadex/mangadex_at_home/-/compare/2.0.4...HEAD
|
||||||
|
[2.0.4]: https://gitlab.com/mangadex/mangadex_at_home/-/compare/2.0.3...2.0.4
|
||||||
[2.0.3]: https://gitlab.com/mangadex/mangadex_at_home/-/compare/2.0.2...2.0.3
|
[2.0.3]: https://gitlab.com/mangadex/mangadex_at_home/-/compare/2.0.2...2.0.3
|
||||||
[2.0.2]: https://gitlab.com/mangadex/mangadex_at_home/-/compare/2.0.1...2.0.2
|
[2.0.2]: https://gitlab.com/mangadex/mangadex_at_home/-/compare/2.0.1...2.0.2
|
||||||
[2.0.1]: https://gitlab.com/mangadex/mangadex_at_home/-/compare/2.0.0...2.0.1
|
[2.0.1]: https://gitlab.com/mangadex/mangadex_at_home/-/compare/2.0.0...2.0.1
|
||||||
|
|
42
build.gradle
42
build.gradle
|
@ -1,12 +1,14 @@
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "jacoco"
|
id "jacoco"
|
||||||
id "java"
|
id "java"
|
||||||
id "org.jetbrains.kotlin.jvm" version "1.6.0"
|
id "org.jetbrains.kotlin.jvm" version "1.8.0"
|
||||||
id "org.jetbrains.kotlin.kapt" version "1.6.0"
|
id "org.jetbrains.kotlin.kapt" version "1.8.0"
|
||||||
id "application"
|
id "application"
|
||||||
id "com.github.johnrengelman.shadow" version "7.0.0"
|
id "com.github.johnrengelman.shadow" version "7.0.0"
|
||||||
id "com.diffplug.spotless" version "5.8.2"
|
id "com.diffplug.spotless" version "5.8.2"
|
||||||
id "net.afanasev.sekret" version "0.1.1"
|
id "net.afanasev.sekret" version "0.1.1-RC3"
|
||||||
id "com.palantir.git-version" version "0.12.3"
|
id "com.palantir.git-version" version "0.12.3"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,18 +30,16 @@ configurations {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation "org.jetbrains.kotlin:kotlin-reflect"
|
implementation "org.jetbrains.kotlin:kotlin-reflect"
|
||||||
|
|
||||||
compileOnly group: "net.afanasev", name: "sekret-annotation", version: "0.1.1"
|
|
||||||
|
|
||||||
implementation group: "commons-io", name: "commons-io", version: "2.11.0"
|
implementation group: "commons-io", name: "commons-io", version: "2.11.0"
|
||||||
implementation group: "org.apache.commons", name: "commons-compress", version: "1.21"
|
implementation group: "org.apache.commons", name: "commons-compress", version: "1.22"
|
||||||
implementation group: "ch.qos.logback", name: "logback-classic", version: "1.3.0-alpha4"
|
implementation group: "ch.qos.logback", name: "logback-classic", version: "1.3.6"
|
||||||
|
|
||||||
implementation group: "io.micrometer", name: "micrometer-registry-prometheus", version: "1.8.3"
|
implementation group: "io.micrometer", name: "micrometer-registry-prometheus", version: "1.8.3"
|
||||||
implementation group: "com.maxmind.geoip2", name: "geoip2", version: "2.15.0"
|
implementation group: "com.maxmind.geoip2", name: "geoip2", version: "2.16.1"
|
||||||
|
|
||||||
implementation platform(group: "org.http4k", name: "http4k-bom", version: "4.19.3.0")
|
implementation platform(group: "org.http4k", name: "http4k-bom", version: "4.41.3.0")
|
||||||
implementation platform(group: "com.fasterxml.jackson", name: "jackson-bom", version: "2.13.1")
|
implementation platform(group: "com.fasterxml.jackson", name: "jackson-bom", version: "2.14.2")
|
||||||
implementation platform(group: "io.netty", name: "netty-bom", version: "4.1.74.Final")
|
implementation platform(group: "io.netty", name: "netty-bom", version: "4.1.91.Final")
|
||||||
|
|
||||||
implementation group: "org.http4k", name: "http4k-core"
|
implementation group: "org.http4k", name: "http4k-core"
|
||||||
implementation group: "org.http4k", name: "http4k-resilience4j"
|
implementation group: "org.http4k", name: "http4k-resilience4j"
|
||||||
|
@ -52,12 +52,12 @@ dependencies {
|
||||||
implementation group: "org.http4k", name: "http4k-server-netty"
|
implementation group: "org.http4k", name: "http4k-server-netty"
|
||||||
implementation group: "io.netty", name: "netty-codec-haproxy"
|
implementation group: "io.netty", name: "netty-codec-haproxy"
|
||||||
implementation group: "io.netty", name: "netty-transport-native-epoll", classifier: "linux-x86_64"
|
implementation group: "io.netty", name: "netty-transport-native-epoll", classifier: "linux-x86_64"
|
||||||
implementation group: "io.netty.incubator", name: "netty-incubator-transport-native-io_uring", version: "0.0.11.Final", classifier: "linux-x86_64"
|
implementation group: "io.netty.incubator", name: "netty-incubator-transport-native-io_uring", version: "0.0.19.Final", classifier: "linux-x86_64"
|
||||||
testImplementation group: "org.http4k", name: "http4k-testing-kotest"
|
testImplementation group: "org.http4k", name: "http4k-testing-kotest"
|
||||||
runtimeOnly group: "io.netty", name: "netty-tcnative-boringssl-static", version: "2.0.48.Final"
|
runtimeOnly group: "io.netty", name: "netty-tcnative-boringssl-static", version: "2.0.59.Final"
|
||||||
|
|
||||||
implementation group: "com.zaxxer", name: "HikariCP", version: "4.0.3"
|
implementation group: "com.zaxxer", name: "HikariCP", version: "4.0.3"
|
||||||
implementation group: "org.xerial", name: "sqlite-jdbc", version: "3.34.0"
|
implementation group: "org.xerial", name: "sqlite-jdbc", version: "3.41.2.1"
|
||||||
implementation "org.ktorm:ktorm-core:$ktorm_version"
|
implementation "org.ktorm:ktorm-core:$ktorm_version"
|
||||||
implementation "org.ktorm:ktorm-jackson:$ktorm_version"
|
implementation "org.ktorm:ktorm-jackson:$ktorm_version"
|
||||||
|
|
||||||
|
@ -66,10 +66,10 @@ dependencies {
|
||||||
|
|
||||||
testImplementation "io.kotest:kotest-runner-junit5:$kotest_version"
|
testImplementation "io.kotest:kotest-runner-junit5:$kotest_version"
|
||||||
testImplementation "io.kotest:kotest-assertions-core:$kotest_version"
|
testImplementation "io.kotest:kotest-assertions-core:$kotest_version"
|
||||||
testImplementation "io.mockk:mockk:1.12.3"
|
testImplementation "io.mockk:mockk:1.13.4"
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(Test) {
|
tasks.withType(Test).configureEach {
|
||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
javaLauncher = javaToolchains.launcherFor {
|
javaLauncher = javaToolchains.launcherFor {
|
||||||
languageVersion = JavaLanguageVersion.of(8)
|
languageVersion = JavaLanguageVersion.of(8)
|
||||||
|
@ -91,14 +91,14 @@ kapt {
|
||||||
}
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
toolchain {
|
||||||
targetCompatibility = JavaVersion.VERSION_1_8
|
languageVersion.set(JavaLanguageVersion.of(8))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
|
tasks.withType(KotlinCompile).configureEach {
|
||||||
kotlinOptions {
|
compilerOptions {
|
||||||
freeCompilerArgs = ["-Xjsr305=strict"]
|
freeCompilerArgs = ["-Xjsr305=strict"]
|
||||||
jvmTarget = "1.8"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
kotest_version=5.1.0
|
kotest_version=5.5.5
|
||||||
ktorm_version=3.4.1
|
ktorm_version=3.6.0
|
||||||
picocli_version=4.6.3
|
picocli_version=4.7.1
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,5 +1,5 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|
2
gradlew
vendored
2
gradlew
vendored
|
@ -72,7 +72,7 @@ case "`uname`" in
|
||||||
Darwin* )
|
Darwin* )
|
||||||
darwin=true
|
darwin=true
|
||||||
;;
|
;;
|
||||||
MINGW* )
|
MSYS* | MINGW* )
|
||||||
msys=true
|
msys=true
|
||||||
;;
|
;;
|
||||||
NONSTOP* )
|
NONSTOP* )
|
||||||
|
|
21
gradlew.bat
vendored
21
gradlew.bat
vendored
|
@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
set JAVA_EXE=java.exe
|
set JAVA_EXE=java.exe
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
if "%ERRORLEVEL%" == "0" goto init
|
if "%ERRORLEVEL%" == "0" goto execute
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
@ -54,7 +54,7 @@ goto fail
|
||||||
set JAVA_HOME=%JAVA_HOME:"=%
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
if exist "%JAVA_EXE%" goto init
|
if exist "%JAVA_EXE%" goto execute
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
|
@ -64,21 +64,6 @@ echo location of your Java installation.
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
:init
|
|
||||||
@rem Get command-line arguments, handling Windows variants
|
|
||||||
|
|
||||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
|
||||||
|
|
||||||
:win9xME_args
|
|
||||||
@rem Slurp the command line arguments.
|
|
||||||
set CMD_LINE_ARGS=
|
|
||||||
set _SKIP=2
|
|
||||||
|
|
||||||
:win9xME_args_slurp
|
|
||||||
if "x%~1" == "x" goto execute
|
|
||||||
|
|
||||||
set CMD_LINE_ARGS=%*
|
|
||||||
|
|
||||||
:execute
|
:execute
|
||||||
@rem Setup the command line
|
@rem Setup the command line
|
||||||
|
|
||||||
|
@ -86,7 +71,7 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
@rem Execute Gradle
|
@rem Execute Gradle
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||||
|
|
||||||
:end
|
:end
|
||||||
@rem End local scope for the variables with windows NT shell
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
|
7
src/main/kotlin/mdnet/cache/ImageStorage.kt
vendored
7
src/main/kotlin/mdnet/cache/ImageStorage.kt
vendored
|
@ -95,9 +95,14 @@ class ImageStorage(
|
||||||
try {
|
try {
|
||||||
val toUpdate = HashSet<String>()
|
val toUpdate = HashSet<String>()
|
||||||
queue.drainTo(toUpdate)
|
queue.drainTo(toUpdate)
|
||||||
val now = Instant.now()
|
|
||||||
|
|
||||||
|
if (toUpdate.isEmpty()) {
|
||||||
LOGGER.info { "Updating LRU times for ${toUpdate.size} entries" }
|
LOGGER.info { "Updating LRU times for ${toUpdate.size} entries" }
|
||||||
|
} else {
|
||||||
|
LOGGER.info { "Skipping empty LRU update" }
|
||||||
|
}
|
||||||
|
|
||||||
|
val now = Instant.now()
|
||||||
|
|
||||||
if (databaseLock.tryLock(500, TimeUnit.MILLISECONDS)) {
|
if (databaseLock.tryLock(500, TimeUnit.MILLISECONDS)) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -20,7 +20,6 @@ package mdnet.settings
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonNaming
|
import com.fasterxml.jackson.databind.annotation.JsonNaming
|
||||||
import net.afanasev.sekret.Secret
|
|
||||||
|
|
||||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
||||||
data class ClientSettings(
|
data class ClientSettings(
|
||||||
|
@ -33,7 +32,7 @@ data class ClientSettings(
|
||||||
|
|
||||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
||||||
data class ServerSettings(
|
data class ServerSettings(
|
||||||
@field:Secret val secret: String,
|
val secret: String,
|
||||||
val externalPort: Int = 0,
|
val externalPort: Int = 0,
|
||||||
val gracefulShutdownWaitSeconds: Int = 60,
|
val gracefulShutdownWaitSeconds: Int = 60,
|
||||||
val hostname: String = "0.0.0.0",
|
val hostname: String = "0.0.0.0",
|
||||||
|
@ -44,7 +43,11 @@ data class ServerSettings(
|
||||||
val port: Int = 443,
|
val port: Int = 443,
|
||||||
val threads: Int = 0,
|
val threads: Int = 0,
|
||||||
val enableProxyProtocol: Boolean = false,
|
val enableProxyProtocol: Boolean = false,
|
||||||
)
|
) {
|
||||||
|
override fun toString(): String {
|
||||||
|
return "ServerSettings(secret=<redacted>, externalPort=$externalPort, gracefulShutdownWaitSeconds=$gracefulShutdownWaitSeconds, hostname='$hostname', maxKilobitsPerSecond=$maxKilobitsPerSecond, externalMaxKilobitsPerSecond=$externalMaxKilobitsPerSecond, maxMebibytesPerHour=$maxMebibytesPerHour, externalIp=$externalIp, port=$port, threads=$threads, enableProxyProtocol=$enableProxyProtocol)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
||||||
data class DevSettings(
|
data class DevSettings(
|
||||||
|
@ -57,5 +60,9 @@ data class DevSettings(
|
||||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
||||||
data class MetricsSettings(
|
data class MetricsSettings(
|
||||||
val enableGeoip: Boolean = false,
|
val enableGeoip: Boolean = false,
|
||||||
@field:Secret val geoipLicenseKey: String = "none"
|
val geoipLicenseKey: String = "none"
|
||||||
)
|
) {
|
||||||
|
override fun toString(): String {
|
||||||
|
return "MetricsSettings(enableGeoip=$enableGeoip, geoipLicenseKey=<redacted>)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -20,7 +20,6 @@ package mdnet.settings
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonNaming
|
import com.fasterxml.jackson.databind.annotation.JsonNaming
|
||||||
import net.afanasev.sekret.Secret
|
|
||||||
import org.http4k.core.Uri
|
import org.http4k.core.Uri
|
||||||
|
|
||||||
sealed class PingResult
|
sealed class PingResult
|
||||||
|
@ -37,12 +36,13 @@ data class RemoteSettings(
|
||||||
val latestBuild: Int,
|
val latestBuild: Int,
|
||||||
val url: Uri,
|
val url: Uri,
|
||||||
val clientId: String,
|
val clientId: String,
|
||||||
@field:Secret val tokenKey: ByteArray,
|
val tokenKey: ByteArray,
|
||||||
val compromised: Boolean,
|
val compromised: Boolean,
|
||||||
val paused: Boolean,
|
val paused: Boolean,
|
||||||
val disableTokens: Boolean = false,
|
val disableTokens: Boolean = false,
|
||||||
val tls: TlsCert?
|
val tls: TlsCert?
|
||||||
) : PingResult() {
|
) : PingResult() {
|
||||||
|
|
||||||
override fun equals(other: Any?): Boolean {
|
override fun equals(other: Any?): Boolean {
|
||||||
if (this === other) return true
|
if (this === other) return true
|
||||||
if (javaClass != other?.javaClass) return false
|
if (javaClass != other?.javaClass) return false
|
||||||
|
@ -74,11 +74,19 @@ data class RemoteSettings(
|
||||||
result = 31 * result + (tls?.hashCode() ?: 0)
|
result = 31 * result + (tls?.hashCode() ?: 0)
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "RemoteSettings(imageServer=$imageServer, latestBuild=$latestBuild, url=$url, clientId='$clientId', tokenKey=<redacted>, compromised=$compromised, paused=$paused, disableTokens=$disableTokens, tls=$tls)"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
||||||
data class TlsCert(
|
data class TlsCert(
|
||||||
val createdAt: String,
|
val createdAt: String,
|
||||||
@field:Secret val privateKey: String,
|
val privateKey: String,
|
||||||
@field:Secret val certificate: String
|
val certificate: String
|
||||||
)
|
) {
|
||||||
|
override fun toString(): String {
|
||||||
|
return "TlsCert(createdAt='$createdAt', privateKey=<redacted>, certificate=<redacted>)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -20,20 +20,27 @@ package mdnet.settings
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies
|
import com.fasterxml.jackson.databind.PropertyNamingStrategies
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonNaming
|
import com.fasterxml.jackson.databind.annotation.JsonNaming
|
||||||
import net.afanasev.sekret.Secret
|
|
||||||
|
|
||||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
||||||
data class SettingsRequest(
|
data class SettingsRequest(
|
||||||
@field:Secret val secret: String,
|
val secret: String,
|
||||||
val ipAddress: String?,
|
val ipAddress: String?,
|
||||||
val port: Int,
|
val port: Int,
|
||||||
val diskSpace: Long,
|
val diskSpace: Long,
|
||||||
val networkSpeed: Long,
|
val networkSpeed: Long,
|
||||||
val buildVersion: Int,
|
val buildVersion: Int,
|
||||||
val tlsCreatedAt: String?,
|
val tlsCreatedAt: String?,
|
||||||
)
|
) {
|
||||||
|
override fun toString(): String {
|
||||||
|
return "SettingsRequest(secret=<redacted>, ipAddress=$ipAddress, port=$port, diskSpace=$diskSpace, networkSpeed=$networkSpeed, buildVersion=$buildVersion, tlsCreatedAt=$tlsCreatedAt)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy::class)
|
||||||
data class LogoutRequest(
|
data class LogoutRequest(
|
||||||
@field:Secret val secret: String,
|
val secret: String,
|
||||||
)
|
) {
|
||||||
|
override fun toString(): String {
|
||||||
|
return "LogoutRequest(secret=<redacted>)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ import io.kotest.matchers.nulls.shouldNotBeNull
|
||||||
import io.kotest.matchers.shouldBe
|
import io.kotest.matchers.shouldBe
|
||||||
import org.apache.commons.io.IOUtils
|
import org.apache.commons.io.IOUtils
|
||||||
import org.ktorm.database.Database
|
import org.ktorm.database.Database
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration.Companion.minutes
|
||||||
import kotlin.time.ExperimentalTime
|
import kotlin.time.ExperimentalTime
|
||||||
|
|
||||||
class ImageStorageTest : FreeSpec() {
|
class ImageStorageTest : FreeSpec() {
|
||||||
|
@ -177,7 +177,7 @@ class ImageStorageSlowTest : FreeSpec() {
|
||||||
writer.stream.write(ByteArray(4096))
|
writer.stream.write(ByteArray(4096))
|
||||||
writer.commit(4096).shouldBeTrue()
|
writer.commit(4096).shouldBeTrue()
|
||||||
|
|
||||||
eventually(Duration.minutes(5)) {
|
eventually(5.minutes) {
|
||||||
imageStorage.size.shouldBeGreaterThan(0)
|
imageStorage.size.shouldBeGreaterThan(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -193,7 +193,7 @@ class ImageStorageSlowTest : FreeSpec() {
|
||||||
writer.commit(8192).shouldBeTrue()
|
writer.commit(8192).shouldBeTrue()
|
||||||
|
|
||||||
imageStorage.calculateSize()
|
imageStorage.calculateSize()
|
||||||
eventually(Duration.minutes(5)) {
|
eventually(5.minutes) {
|
||||||
imageStorage.size.shouldBeZero()
|
imageStorage.size.shouldBeZero()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue