Skip to main content

Voting load reference

Generated by step-cli load reference. Unknown configuration keys are rejected. Local initialization derives tenant endpoints, the available browser, and Docker networking from the coordinator. Paths in preparation are relative to the workload YAML. Secrets are referenced by environment-variable name.

reference

Generate command/configuration Markdown from help text and Rust field documentation

Usage: reference [OPTIONS]

Options:
--output <OUTPUT>
Destination file; stdout when omitted

-h, --help
Print help

image

Build a source-only worker image from the bundled runtime

Usage: image [OPTIONS] --engine <ENGINE> --tag <TAG>

Options:
--engine <ENGINE>
Engine to include in the image

Possible values:
- k6: Authenticated HTTP with native encryption completed before measurement
- chromium: Full browser rendering, selection, encryption and confirmation

--tag <TAG>
Docker tag; include a registry for Kubernetes workers

--push
Push the built image using the current Docker registry credentials

--rust-image <RUST_IMAGE>
Rust builder image for the standalone worker

[default: rust:1.96.0-bookworm]

--k6-image <K6_IMAGE>
Image supplying the k6 executable

[default: grafana/k6:1.6.0]

--worker-image <WORKER_IMAGE>
Base image for protocol workers

[default: debian:bookworm-slim]

--browser-image <BROWSER_IMAGE>
Base image for browser workers

[default: node:22-bookworm-slim]

--playwright-version <PLAYWRIGHT_VERSION>
Playwright version, kept in sync with the portal test runner

[default: 1.62.1]

-h, --help
Print help (see a summary with '-h')

init

Generate a documented workload using the configured tenant administrator

Usage: init [OPTIONS]

Options:
--target <TARGET>
Local devcontainer defaults or remote deployment URLs from CLI configuration

[default: local]
[possible values: local, remote]

--output <OUTPUT>
YAML destination; existing files are never overwritten

[default: voting-load.yaml]

--portal-url <PORTAL_URL>
Voting-portal base URL; required for remote targets

--storage-origin <STORAGE_ORIGIN>
Public publication-storage origin; required for remote targets

-h, --help
Print help

prepare

Validate dependencies, create the election/census, and prepare immutable worker inputs

Usage: prepare [OPTIONS] --output <OUTPUT> <CONFIG>

Arguments:
<CONFIG>
Workload YAML written by init

Options:
--output <OUTPUT>
Fresh run directory, including private provisioning logs and worker inputs

--engine <ENGINE>
Override the engine before preparing inputs

Possible values:
- k6: Authenticated HTTP with native encryption completed before measurement
- chromium: Full browser rendering, selection, encryption and confirmation

--workers <WORKERS>
Override parallel preparation workers

-h, --help
Print help (see a summary with '-h')

run

Execute a prepared run once and automatically write its HTML report

Usage: run [OPTIONS] <DIRECTORY>

Arguments:
<DIRECTORY>
Prepared run directory

Options:
--workers <WORKERS>
Override the worker count recorded in the workload

--executor <EXECUTOR>
Execution backend; defaults to the workload's configured executor

Possible values:
- local: Parallel worker processes on the coordinator
- docker: Isolated containers sharing prepared inputs through a bind mount
- kubernetes: Indexed pods with durable shared input and attempt storage

-h, --help
Print help (see a summary with '-h')

report

Rebuild aggregate results; optional database auditing remains coordinator-only

Usage: report [OPTIONS] <DIRECTORY>

Arguments:
<DIRECTORY>
Completed or interrupted run directory

Options:
--dsn-env <DSN_ENV>
Environment variable containing a read-only backend PostgreSQL DSN

--open
Open the standalone report with the configured browser opener

--screenshot <SCREENSHOT>
Capture the report as a PNG using the configured Playwright browser

-h, --help
Print help

check

Validate configuration and check installed engine dependencies

Usage: check <CONFIG>

Arguments:
<CONFIG>


Options:
-h, --help
Print help

target

SettingDefaultMeaning
tenant_idfrom CLI sessionExisting synthetic tenant administered by the CLI session.
portal_url"http://localhost:3000"Voting portal base URL, including a path prefix if deployed under one.
keycloak_url"http://keycloak:8090"Keycloak base URL.
graphql_url"http://graphql-engine:8080/v1/graphql"Full GraphQL endpoint.
storage_origins["http://minio-proxy:9002"]Public S3/CDN origins returned by publication signing.
upload_mode"local"Rewrite upload hosts for the devcontainer's local storage network only.

workload

SettingDefaultMeaning
engine"k6"HTTP protocol or full browser journey.
mode"vote"vote executes the whole journey; status measures login and voter status.
count100Number of distinct voters, independent of worker count.
start0Numeric suffix of the first voter.
username_prefix"load-"Prefix prepended to every numeric suffix.
shard_size25Maximum ballots loaded by one worker at a time.
concurrency2Concurrent voters per worker.
max_duration"30m"Maximum duration of each finite k6 shard, in k6 duration notation.
request_timeout"30s"HTTP request deadline for login, status and publication downloads.
cast_timeout"60s"HTTP cast request deadline.
locale"en"Language requested from Keycloak during protocol login.
password_env"LOAD_PASSWORD"Environment variable containing the shared synthetic voter password.
hash_iterations27500PBKDF2-SHA256 rounds, also installed as the fixture realm's policy.
client_id"voting-portal"OIDC client registered in the election realm.
journey_timeout_ms180000Browser journey timeout, in milliseconds.
action_timeout_ms15000Browser locator/expectation timeout, in milliseconds.
trace_httpfalseRetain sanitized per-fetch diagnostics in private logs.

execution

SettingDefaultMeaning
workers1Independent worker processes or pods.
executor"local"local, docker, or kubernetes.
image"voting-load:k6"Worker image, built from the bundled package before remote execution.
network"step_devcontainer_default"Docker network reachable from the target endpoints.
docker_mount_sourcenullOptional daemon-host path to prepared inputs; devcontainer bind mounts are otherwise discovered.
namespace"default"Kubernetes namespace for this run.
storage_class""ReadWriteMany storage class; required for Kubernetes.
storage_size"20Gi"Kubernetes volume capacity, including results.
wait_timeout"1h"Maximum wait for Kubernetes resources, using kubectl duration notation.
resources{"limits":{"cpu":"2","memory":"4Gi"},"requests":{"cpu":"1","memory":"1Gi"}}Kubernetes per-worker requests and limits (cpu/memory resource quantities).

preparation

SettingDefaultMeaning
templatenullOptional exported event template; the bundled single-election fixture is the default.
existing_eventnullOptional prior generated event config; provisions only a new voter range.
choicesnullOptional explicit decoded ballot selections.
threshold2Automatic trustee threshold.
poll_interval_seconds5Key-ceremony polling interval in seconds.
ceremony_timeout_seconds600Maximum ceremony wait in seconds.
publication_preparernullOptional application publication writer for deployments with separate S3 preparation.

runtime

SettingDefaultMeaning
k6"k6"k6 executable.
node"node"Node.js executable for Chromium workers.
playwright_dirpackages/voting-portal under the current directoryDirectory containing the installed @playwright/test package.
chromiumCHROMIUM_EXECUTABLE_PATH, chromium on PATH, or Playwright defaultOptional system Chromium executable; otherwise use Playwright's matching browser.
opener"xdg-open"Executable used by report --open.

reporting

SettingDefaultMeaning
max_errors20Maximum failure details retained in a report; total failure counts remain exact.
cdf_points51Quantile points per cumulative latency curve, including its endpoints.
bins60Maximum throughput chart buckets; independent of voter count.
sqlite_cache_kib16384SQLite aggregation cache in KiB; sorting spills to disk.
audit_batch_size1000Receipt IDs queried per read-only audit batch.
audit_timeout_ms30000PostgreSQL statement timeout in milliseconds.
audit_connect_timeout_seconds15PostgreSQL connection timeout in seconds.
screenshot_width1200Screenshot viewport width in CSS pixels.
screenshot_height1000Screenshot initial viewport height; the full report is captured.

Goals

goals defaults to an empty mapping. Supported stages are status_ms, cast_ms, and journey_ms; each accepts positive p50 and p99 limits in milliseconds. min_casts_per_second defaults to zero (disabled). Status-only workloads cannot configure cast goals. Every planned journey must succeed regardless of optional performance goals.