Runners
Actions and Asserts are performed by runners. Runners perform interactions with other services and report back to the engine. Each runner is a gRPC server running in a Docker container that implements the interface below. A test can only have one type of runner but can have multiple instances of that runner.
service Runner {
rpc Action (ActionRequest) returns (ActionReply);
rpc Assert (AssertRequest) returns (AssertReply);
rpc Healthcheck (google.protobuf.Empty) returns (HealthcheckReply);
}
Action
A runner must implement an Action
endpoint that takes an ActionRequest
and returns an ActionReply
message ActionRequest {
string type = 1;
string params = 2; // JSON string
}
message ActionReply {
string outputs = 1; // JSON string
}
An ActionRequest
contains the action type and
params being supplied to the runner.
The parameter params
in ActionRequest
is the JSON of the action's params
converted to a string.
For example, given this action:
actions:
- type: SomeAction
params:
foo: bar
The message will look like:
{
"type": "SomeAction",
"params": "{\"foo\": \"bar\"}"
}
Likewise, the parameter outputs
in ActionReply
JSON string of the object
that the runner is returning to the engine.
Assert
A runner must also implement the Assert
endpoint taking an
ActionRequest
and returning an ActionReply
. In general,
The Assert
is an extension of an Action
that checks it's
results in a way specific to the runner's medium of communication.
message AssertRequest {
string type = 1;
string params = 2;
}
message AssertReply {
bool passed = 1;
string actual = 2;
string expected = 3;
string description = 4;
}
Like in ActionRequest
, the AssertRequest
contains the
assert type and params
being supplied to the runner. The params are also a JSON string.
Each AssertReply
contains 4 parameters:
passed
: Whether or not the assert passedactual
: The actual data gathered by the runner for the assertexpected
: The data expected to be found by the runner in the assertdescription
: User friendly description summarizing the results of the assert
Healthcheck
The gRPC server must implement a healthcheck
endpoint which the engine
can call to ensure it is ready to receive messages.
message HealthcheckReply {
bool ready = 1;
}
The healthcheck
endpoint receives an empty call and returns a status
indicating it is ready. The engine will call the healthcheck endpoint
in an exponential backoff which is configurable