Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ plugins {
application
kotlin("jvm") version "2.1.10"
kotlin("plugin.serialization") version "2.1.10"
kotlin("plugin.allopen") version "2.1.10"

alias(libs.plugins.ksp)
id("org.jsonschema2pojo") version "1.2.2"
alias(libs.plugins.openapi.generator)

Expand Down Expand Up @@ -38,8 +38,7 @@ dependencies {
implementation(libs.clikt)
implementation(libs.mordant)

ksp(libs.restate.sdk.api.kotlin.gen) { isChanging = true }
implementation(libs.restate.sdk.kotlin.http) { isChanging = true }
implementation(libs.restate.sdk.kotlin.http)
implementation(libs.vertx)

implementation(libs.junit.all)
Expand Down Expand Up @@ -123,15 +122,14 @@ openApiGenerate {

tasks {
withType<KotlinCompile>().configureEach {
dependsOn(openApiGenerate)
dependsOn(generateJsonSchema2Pojo)
dependsOn(withType<GenerateTask>())
}

test { useJUnitPlatform() }
}

afterEvaluate { tasks.named("kspKotlin").configure { mustRunAfter("openApiGenerate") } }

spotless {
kotlin {
ktfmt()
Expand All @@ -141,6 +139,12 @@ spotless {
kotlinGradle { ktfmt() }
}

allOpen {
annotation("dev.restate.sdk.annotation.Service")
annotation("dev.restate.sdk.annotation.VirtualObject")
annotation("dev.restate.sdk.annotation.Workflow")
}

licenseReport {
renderers =
arrayOf<com.github.jk1.license.render.ReportRenderer>(
Expand Down
1 change: 0 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
kotlin.code.style=official
ksp.useKSP2 = true

javaLanguageVersion = 21
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[versions]
restate = "2.4.2"
restate = "2.6.0"
ktor = "2.3.13"

[libraries]
Expand Down
9 changes: 0 additions & 9 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,8 @@ rootProject.name = "restate-e2e"
dependencyResolutionManagement {
versionCatalogs {
create("libs") {
library("restate-sdk-client", "dev.restate", "client").versionRef("restate")
library("restate-sdk-client-kotlin", "dev.restate", "client-kotlin").versionRef("restate")
library("restate-sdk-api-kotlin", "dev.restate", "sdk-api-kotlin").versionRef("restate")
library("restate-sdk-kotlin-http", "dev.restate", "sdk-kotlin-http").versionRef("restate")
library("restate-sdk-api-kotlin-gen", "dev.restate", "sdk-api-kotlin-gen")
.versionRef("restate")

version("log4j", "2.24.3")
library("log4j-api", "org.apache.logging.log4j", "log4j-api").versionRef("log4j")
Expand Down Expand Up @@ -70,11 +66,6 @@ dependencyResolutionManagement {
.version("1.10.1")
library("kotlinx-coroutines-test", "org.jetbrains.kotlinx", "kotlinx-coroutines-test")
.version("1.10.1")

version("ksp", "2.1.10-1.0.31")
library("symbol-processing-api", "com.google.devtools.ksp", "symbol-processing-api")
.versionRef("ksp")
plugin("ksp", "com.google.devtools.ksp").versionRef("ksp")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,16 @@ package dev.restate.sdktesting.tests
import dev.restate.client.Client
import dev.restate.client.kotlin.rejectSuspend
import dev.restate.client.kotlin.resolveSuspend
import dev.restate.client.kotlin.response
import dev.restate.client.kotlin.toVirtualObject
import dev.restate.sdk.annotation.Handler
import dev.restate.sdk.annotation.Shared
import dev.restate.sdk.annotation.VirtualObject
import dev.restate.sdk.endpoint.Endpoint
import dev.restate.sdk.kotlin.*
import dev.restate.sdk.kotlin.awakeable
import dev.restate.sdk.kotlin.get
import dev.restate.sdk.kotlin.set
import dev.restate.sdk.kotlin.state
import dev.restate.sdktesting.infra.InjectClient
import dev.restate.sdktesting.infra.RestateDeployerExtension
import dev.restate.serde.kotlinx.jsonSerde
Expand All @@ -33,14 +38,13 @@ class AwakeableIngressEndpointTest {
class MyService {

@Handler
suspend fun run(ctx: ObjectContext): String {
val awk = ctx.awakeable<String>()
ctx.set<String>("awk", awk.id)
suspend fun run(): String {
val awk = awakeable<String>()
state().set("awk", awk.id)
return awk.await()
}

@Shared
suspend fun getAwakeable(ctx: SharedObjectContext): String = ctx.get<String>("awk") ?: ""
@Shared suspend fun getAwakeable(): String = state().get<String>("awk") ?: ""
}

companion object {
Expand All @@ -55,18 +59,21 @@ class AwakeableIngressEndpointTest {
@InjectClient ingressClient: Client,
) = runTest {
val key = UUID.randomUUID().toString()
val client = AwakeableIngressEndpointTestMyServiceClient.fromClient(ingressClient, key)
val client = ingressClient.toVirtualObject<MyService>(key)

val runResult = async { client.run(idempotentCallOptions) }
val runResult = async {
client.request { run() }.options(idempotentCallOptions).call().response
}

// Wait for awakeable to be registered
await withAlias
"awakeable is registered" untilAsserted
{
assertThat(client.getAwakeable()).isNotBlank()
assertThat(client.request { getAwakeable() }.call().response).isNotBlank()
}

val awakeableId = client.getAwakeable(idempotentCallOptions)
val awakeableId =
client.request { getAwakeable() }.options(idempotentCallOptions).call().response

val expectedResult = "solved!"

Expand All @@ -82,18 +89,22 @@ class AwakeableIngressEndpointTest {
@Test
fun completeWithFailure(@InjectClient ingressClient: Client) = runTest {
val key = UUID.randomUUID().toString()
val client = AwakeableIngressEndpointTestMyServiceClient.fromClient(ingressClient, key)
val client = ingressClient.toVirtualObject<MyService>(key)

val runResult = async { runCatching { client.run(idempotentCallOptions) }.exceptionOrNull() }
val runResult = async {
runCatching { client.request { run() }.options(idempotentCallOptions).call().response }
.exceptionOrNull()
}

// Wait for awakeable to be registered
await withAlias
"awakeable is registered" untilAsserted
{
assertThat(client.getAwakeable()).isNotBlank()
assertThat(client.request { getAwakeable() }.call().response).isNotBlank()
}

val awakeableId = client.getAwakeable(idempotentCallOptions)
val awakeableId =
client.request { getAwakeable() }.options(idempotentCallOptions).call().response

val expectedReason = "my bad!"

Expand Down
Loading
Loading