xk6-coap
is a k6
extension for the
Constrained Application Protocol
(CoAP).
MATURITY NOTICE:
xk6-coap
is under active development and breaking API changes are to be expected. The project has been open sourced early to ensure that external consumers have an opportunity to influence and contribute to its future direction.
To get started, either build the k6
binary or use the
golioth/xk6-coap
image.
The quickest way to get started is by using the golioth/xk6-coap
image,
which is built from this repository and
published to DockerHub. Tests can be supplied when creating a container from the
image via a bind mount. For
example, the following command would run the simple
example from this repository.
docker run -it --rm -e COAP_PSK_ID=<YOUR-PSK-ID> -e COAP_PSK=<YOUR-PSK> -v $(pwd)/examples/simple.js:/simple.js golioth/xk6-coap k6 run /simple.js --vus 10 --duration 5s
xk6-coap
supports authentication via pre-shared keys (PSKs) and client
certificates. The former is provided by specifying environment variables, while
the latter is provided by specifying file paths. The simple.js
example passes
COAP_PSK_ID
and COAP_PSK
to the instantiated Client
, which will cause it
use use the respective values for PSK authentication. If a Client
is
instantiated with both PSK environment variables and certificate file paths,
certificate authentication will take precedence.
client = new Client(
"coap.golioth.io:5684",
"COAP_PSK_ID",
"COAP_PSK",
);
Only PSK is provided and it will be used for authentication.
client = new Client(
"coap.golioth.io:5684",
"",
"",
"path/to/client/crt.pem",
"path/to/client/key.pem",
);
Only certificate is provided and it will be used for authentication.
client = new Client(
"coap.golioth.io:5684",
"COAP_PSK_ID",
"COAP_PSK",
"path/to/client/crt.pem",
"path/to/client/key.pem",
);
Both are provided but certificate takes precedence.
Using k6
extentions requires including the extension(s) in a k6
build. The
xk6
tool will handle executing the build,
and the Makefile
in this repository will ensure that xk6
is installed and
produces a valid build.
make build
This will produce a k6
binary in the current working directory. To execute a
test with 2 virtual users making connections and sending GET
messages for 5
seconds, the following command could be run.
./k6 run ./examples/simple.js --vus 10 --duration 5s
Reference the k6
documentation
for more information on how to configure and run tests.
xk6-coap
is essentially glue machinery that allows for
plgd-dev/go-coap
/
pion/dtls
functionality to be exposed
to k6
tests. This project would not be possible without the work done by
contributors (some of whom are on the Golioth team!) on both of those projects.