🤖 Announcing SmartTests: AI powered Contract Testing. Read our CTO's Blog Post here!

How to test Temporal Services using Signadot Sandboxes

Table of contents
Take Signadot for a whirl
Share

Co-authored by Arjun Iyer and Nimesha Jinarajadasa.

Introduction

Welcome to the Temporal + Signadot Sandboxes tutorial! In this guide, you'll learn how to quickly test new versions of Temporal worker code—either in a pull request or during local development—by leveraging a Temporal setup running in a remote Kubernetes cluster. This setup enables you to:

  • Rapidly iterate on worker code without redeploying the entire stack
  • Use sandboxes to isolate and test changes alongside a stable baseline
  • Observe workflow execution and routing in real time

Estimated time to complete: 10-15 minutes

What you'll accomplish:

  • Deploy Temporal and Signadot in Kubernetes
  • Run baseline client and worker services
  • Submit and observe a money transfer workflow
  • Deploy a sandboxed worker and route traffic to it
  • Understand how context propagation and selective task execution work under the hood

Prerequisites

Before you begin, ensure you have the following prerequisites set up:

1) Docker Desktop with Kubernetes Enabled

  • Download Docker Desktop and install it.
  • In Docker Desktop settings, enable the Kubernetes option.
  • Wait for the cluster to be ready (look for a green indicator).

2) kubectl Installed

  • Install kubectl and ensure it is available in your PATH.
  • Set your context to the Docker Desktop Kubernetes cluster:
	

3) Signadot Account and Operator

4) Signadot CLI (Optional, but recommended for sandbox management)

Project Setup

1. Clone the Project Repository

	

2. Deploy Temporal to Kubernetes

	

Step 1: Deploy Baseline Client and Worker

Deploy the Baseline Worker

	

Deploy the Baseline Client UI

	

Verify Deployments

	

You should see something like the following for the pods:

And this for the services:

Step 2: Submit a Money Transfer Workflow

Access the Client UI

  • Open the client UI in your browser. If using a local cluster, port-forward:
	

Then visit: http://localhost:8080

Submit a Money Transfer

  • Fill out the form and submit a transfer.
  • You should see a confirmation and workflow ID.

Open the Temporal UI

  • Port-forward the Temporal UI:
	

Then visit: http://localhost:8088

  • Search for your workflow ID and inspect its execution.

Observe the Worker Logs

	

You should see something like this in the worker logs:

Step 3: Deploy a Signadot Sandbox Worker

Fork the Worker Deployment

  • Use the same image as the baseline (no code changes needed):
  • Create a sandbox spec (e.g., worker-sandbox.yaml is provided):
	
  • Wait for the sandbox to be ready:
	
  • Confirm a new worker pod is running in the temporal namespace.

Step 4: Route a Workflow to the Sandbox

Use the Chrome Extension

  • Install the Signadot Chrome Extension
  • Log in to the Signadot dashboard via the extension. This will enable the extension to show a list of available Sandboxes.
  • In the client UI, select the sandbox you just created using the extension. This will enable requests to be routed to the new sandbox version of the worker.
  • Submit a new money transfer.

Observe Execution

  • Watch the Temporal UI and both worker logs:
	
  • You may see the task initially picked up by a baseline worker, but it will eventually be processed by the sandbox worker (retries are visible in the Temporal UI).

Step 5: How It Works (Under the Hood)

Context Propagation

  • The client uses the Temporal Python SDK's TracingInterceptor to propagate OpenTelemetry baggage (including the Signadot routing key) into the workflow submission task. This baggage is stored in the workflow's headers in Temporal's persistent storage.

Selective Task Execution

  • On the worker side, the same TracingInterceptor is used to extract baggage.
  • Custom interceptors (see temporal_worker/interceptors.py) check the routing key and consult the Signadot routeserver to determine if the worker should process the task.
  • If the routing key matches the sandbox, the sandbox worker processes the task; otherwise, it is skipped and retried until the correct worker picks it up.
  • There are interceptors for Workflow and Activity tasks
	

Summary

In this tutorial, you learned how to use Temporal and Signadot Sandboxes to rapidly test new worker code in an isolated Kubernetes environment. We demonstrated deploying baseline services, submitting and routing workflows, and leveraging sandboxes for safe, high-fidelity testing without disrupting the baseline environment. This approach enables faster iteration and more reliable integration testing for microservices.

Ready to go further? Check out more tutorials and resources at https://www.signadot.com/docs/overview.

Join our 1000+ subscribers for the latest updates from Signadot