Annotation Interface RestateTest


@Target(TYPE) @Retention(RUNTIME) @Documented @Inherited @ExtendWith(RestateExtension.class) @TestInstance(PER_CLASS) public @interface RestateTest
Annotation to enable the Restate extension for JUnit 5. The annotation will bootstrap a Restate environment using TestContainers, and will automatically register all services field of the class annotated with BindService.

Example:

 // Annotate the class as RestateTest to start a Restate environment
 @RestateTest
 class CounterTest {

   // Annotate the service to bind
   @BindService private final Counter counter = new Counter();

   // Inject the client to send requests
   @Test
   void testGreet(@RestateClient Client ingressClient) {
     var client = CounterClient.fromClient(ingressClient, "my-counter");

     long response = client.get();
     assertThat(response).isEqualTo(0L);
   }
 }
 

The runner will deploy the services locally, execute Restate as container using Testcontainers, and register the services.

This extension is scoped per test class, meaning that the restate runner will be shared among test methods. Because of this behaviour, the extension sets the TestInstance as TestInstance.Lifecycle.PER_CLASS automatically.

Use the annotations RestateClient, RestateURL and RestateAdminClient to interact with the deployed environment:

 @Test
 void initialCountIsZero(@RestateClient Client client) {
     var client = CounterClient.fromClient(ingressClient, "my-counter");

     // Use client as usual
     long response = client.get();
     assertThat(response).isEqualTo(0L);
 }
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    Restate container image to use
    Environment variables in form key=value that should be added to the deployed Restate container.
  • Element Details

    • environment

      String[] environment
      Environment variables in form key=value that should be added to the deployed Restate container.
      Returns:
      the environment variables to add
      Default:
      {}
    • containerImage

      String containerImage
      Restate container image to use
      Default:
      "docker.io/restatedev/restate:latest"