This repository contains the tests related to XCM NFTs for various networks.
It uses Unique Network's baedeker
tool to set up the test networks.
Also, direnv is used to load all the needed environment variables automatically, such as:
RELAY_POLKADOT_BRANCH
containing the version of the relaychain runtime used in tests<NETWORK_NAME>_URL
containing the running test network's URL<NETWORK_NAME>_ID
containing the parachain ID of the test network (if it is not the relay chain)
-
Install direnv.
-
cd
into thexnft-tests
. You'll see the following prompt fromdirenv
:direnv: error <PATH TO xnft-tests>/.envrc is blocked. Run `direnv allow` to approve its content
-
Run
direnv allow
-
To run the test networks,
baedeker
needs their binaries. There are two ways to provide them:-
Set the corresponding environment variable in the
.env
file to the path of the binary.This option is suitable for testing while developing a new feature of the needed network.
Example: providing Quartz binary
# .env QUARTZ_BINARY=/path/to/unique-chain/target/release/unique-collator
-
Use a docker image: modify the
.baedeker/rewrites.jsonnet
file and provide the docker image instead of a path to a binary. By default, the relay chain's binary is provided using this option. See.baedeker/rewrites.jsonnet
for details.Important: the
baedeker
won't pull the needed docker image by itself. You need to rundocker pull <IMAGE>
for all your images before runningbaedeker
.Example of the error message when the relay chain's image is absent
ERROR baedeker: runtime error: spec builder: docker finished with non-zero exit code; spec dumped to "" Command was: "timeout" "-s" "INT" "25" "docker" "run" "--rm" "-e" "RUST_LOG=debug" "-e" "RUST_BACKTRACE=full" "-e" "COLORBT_SHOW_HIDDEN=1" "--pull" "never" "uniquenetwork/builder-polkadot:release-v1.0.0" "build-spec" "--base-path" "/tmp/node" "--chain" "rococo-local" vendor/baedeker-library/inputs/base.libsonnet:14:63-100: function <builtin_process_spec> call <build spec for relay> vendor/baedeker-library/inputs/base.libsonnet:14:12-101: function <builtin_description> call vendor/baedeker-library/outputs/compose.libsonnet:99:61-70: field <specJson> access argument <value> evaluation vendor/baedeker-library/outputs/compose.libsonnet:99:36-101: function <builtin_manifest_json_ex> call
-
-
cd
into the.baedeker
directory -
If you didn't pull the relay chain's image, you need to run the following
docker pull uniquenetwork/builder-polkadot:$RELAY_POLKADOT_BRANCH
Important: If you're using additional docker images, you need to pull them as well.
-
Run
./up.sh ./testnets.jsonnet
Wait until the following prompt appears:Baedeker env updated Enjoy your baedeker networks at http://<IP ADDRESS>/
You can follow the link from the prompt, where you will find links to a polkadotjs/apps UI of each test network.
-
Run
yarn
to install dependencies. -
Run the needed tests. Examples:
- Run the
quartz-karura
test:yarn quartz-karura
- Run all tests related to Quartz:
yarn all-quartz
- Run all tests related to Karura:
yarn all-karura
- Run the
-
When you don't need the test networks anymore, you can shut them down by running
./down
in the.baedeker
directory. -
If need the test networks again with the same binaries, you can just run then:
./up.sh ./testnets.jsonnet
.
By default, all networks' nodes run with the -lxcm=trace
argument.
When you start the test networks, you will see that each node defined in the testnets.json
has its own docker container.
By typing docker ps
you can see them.
The example output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5e7fe845589b nginx:latest "/docker-entrypoint.…" 6 seconds ago Up 3 seconds 80/tcp bdk-env-nginx-1
13a00167b251 0lach/empty:latest "/home/mrshiposha/de…" 6 seconds ago Up 4 seconds bdk-env-relay-karura-node-bob-1
6cb79f49e42c 0lach/empty:latest "/home/mrshiposha/de…" 6 seconds ago Up 4 seconds bdk-env-relay-quartz-node-alice-1
cc8294383ab0 uniquenetwork/builder-polkadot:release-v1.0.0 "/bin/polkadot --nam…" 6 seconds ago Up 4 seconds bdk-env-relay-node-alice-1
4d79b6ba1bc1 0lach/empty:latest "/home/mrshiposha/de…" 6 seconds ago Up 4 seconds bdk-env-relay-quartz-node-bob-1
a5210fcb9255 uniquenetwork/builder-polkadot:release-v1.0.0 "/bin/polkadot --nam…" 6 seconds ago Up 5 seconds bdk-env-relay-node-ferdie-1
d8880f6749d0 uniquenetwork/builder-polkadot:release-v1.0.0 "/bin/polkadot --nam…" 6 seconds ago Up 5 seconds bdk-env-relay-node-bob-1
ab4ed157b4a9 jacogr/polkadot-js-apps:latest "/docker-entrypoint.…" 6 seconds ago Up 4 seconds 80/tcp bdk-env-polkadot-apps-1
3a1b750774ac 0lach/empty:latest "/home/mrshiposha/de…" 6 seconds ago Up 5 seconds bdk-env-relay-karura-node-alice-1
dd662e356362 uniquenetwork/builder-polkadot:release-v1.0.0 "/bin/polkadot --nam…" 6 seconds ago Up 5 seconds bdk-env-relay-node-dave-1
bfece072c400 uniquenetwork/builder-polkadot:release-v1.0.0 "/bin/polkadot --nam…" 6 seconds ago Up 4 seconds bdk-env-relay-node-charlie-1
9c7087ac0252 uniquenetwork/builder-polkadot:release-v1.0.0 "/bin/polkadot --nam…" 6 seconds ago Up 5 seconds bdk-env-relay-node-eve-1
Suppose you're interested in logs of a Quartz node. There are several Quartz nodes in the list above, so you can choose any of them (see the NAMES
column). For instance, you could pick the bdk-env-relay-quartz-node-alice-1
by typing the following:
docker logs -f bdk-env-relay-quartz-node-alice-1
To use baedeker
in CI you need to:
- Install it
- name: Install baedeker uses: UniqueNetwork/baedeker-action/setup@built
- Setup it's library
- name: Setup baedeker library run: mkdir -p .baedeker/vendor/ && git clone https://github.com/UniqueNetwork/baedeker-library .baedeker/vendor/baedeker-library
- Then, you can run the test networks
- name: Start networks uses: UniqueNetwork/baedeker-action@built id: bdk with: jpath: | .baedeker/vendor tla-str: | relay_spec=rococo-local # snippets in the `inputs` resemble the `.baedeker/rewrites.json` file inputs: | # NOTE: The path to the testnet.json file might differ depending on how you checkout the `xnft-tests` repo. xnft-tests/.baedeker/testnets.jsonnet # Usage of a docker image to provide the relay chain binary snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadot':{dockerImage:'uniquenetwork/builder-polkadot:${{ <VERSION VARIABLE> }}'}}) # You can use `snippet` to provide the rest of the required binaries.