Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

zombienet: warp-sync integration test added #12675

Merged
merged 59 commits into from
Dec 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
2acfdeb
zombienet: warp-sync integration test added
michalkucharczyk Nov 10, 2022
7c0c9e2
spelling
michalkucharczyk Nov 10, 2022
11ac063
Readme corrected
michalkucharczyk Nov 10, 2022
a843ca1
dir name updated
michalkucharczyk Nov 10, 2022
fa8350c
Check second phase of warp sync
michalkucharczyk Nov 11, 2022
d7a2a75
zombienet pipeline enable + naive test network
michalkucharczyk Nov 14, 2022
0ad17cf
zombienet stage added
michalkucharczyk Nov 14, 2022
eb0f65b
paritypr/substrate-debug image added for zombienet testing
michalkucharczyk Nov 14, 2022
20a109d
debugs added
michalkucharczyk Nov 14, 2022
4e63baa
debugs added
michalkucharczyk Nov 14, 2022
9180782
buildah problem fixed
michalkucharczyk Nov 15, 2022
0e7923f
rollback
michalkucharczyk Nov 15, 2022
df0087c
runner tag
michalkucharczyk Nov 15, 2022
1c52738
test name corrected
michalkucharczyk Nov 15, 2022
05f403f
dir renamed (regex problem)
michalkucharczyk Nov 15, 2022
4307c5d
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
michalkucharczyk Nov 15, 2022
9e1ba5b
common code clean up
michalkucharczyk Nov 15, 2022
e27fbc5
common code clean up
michalkucharczyk Nov 15, 2022
e2867b4
fix
michalkucharczyk Nov 15, 2022
0649849
warp sync test improvements
michalkucharczyk Nov 16, 2022
4d10841
full sha used
michalkucharczyk Nov 16, 2022
cb99176
disable tracing for nodes
michalkucharczyk Nov 16, 2022
37b2167
COMMON_USER -> DOCKERIO_USER
michalkucharczyk Nov 16, 2022
8f1cbe4
refs reworked
michalkucharczyk Nov 16, 2022
8f5f607
paritypr/substrate image used
michalkucharczyk Nov 16, 2022
80de118
DOCKERIO -> DOCKER
michalkucharczyk Nov 16, 2022
6ac5d72
generate-ws-db toml cleanup
michalkucharczyk Nov 16, 2022
5391f96
improvements
michalkucharczyk Nov 18, 2022
c7a33fc
fix
michalkucharczyk Nov 18, 2022
cc7dc23
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
Nov 18, 2022
698e3f9
raw chain spec used
michalkucharczyk Nov 22, 2022
d9bec53
zombienet v1.3.18 used
michalkucharczyk Nov 22, 2022
9dab437
zombienet: warp sync test enabled
michalkucharczyk Nov 21, 2022
97e8817
chain-spec path corrected
michalkucharczyk Nov 21, 2022
49ebf53
log parsing improved
michalkucharczyk Nov 21, 2022
6eacafb
warp sync test: removed validators
michalkucharczyk Nov 22, 2022
ea2cf67
fix
michalkucharczyk Nov 22, 2022
740cd1d
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
michalkucharczyk Nov 22, 2022
d24ce71
review remarks applied
michalkucharczyk Nov 22, 2022
d802895
dir test name changed: 0000_block_building -> 0000-block-building
michalkucharczyk Nov 23, 2022
4d92172
transaction finalized test added
michalkucharczyk Nov 23, 2022
f0ce356
transaction finalized test: error handling improved
michalkucharczyk Nov 23, 2022
84dbbce
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
Nov 24, 2022
b0866fc
trigger CI job
michalkucharczyk Nov 25, 2022
5fa03d7
trigger CI job
michalkucharczyk Nov 25, 2022
84e1d78
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
Nov 25, 2022
39538a8
trigger CI job
michalkucharczyk Nov 25, 2022
6bfc470
trigger CI job
michalkucharczyk Nov 26, 2022
c85fa51
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
Nov 26, 2022
5268d83
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
Nov 30, 2022
9d00ccf
Explicitly touch `version.rs` to invalidate the related cache
rcny Dec 1, 2022
847a7a9
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
Dec 2, 2022
4674c12
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
Dec 5, 2022
c8b8194
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
Dec 5, 2022
e5e7165
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
Dec 5, 2022
60185e8
zombienet add logs as artifacts
pepoviola Dec 5, 2022
d7f5835
Revert "Explicitly touch `version.rs` to invalidate the related cache"
michalkucharczyk Dec 7, 2022
f4ec3a9
Merge remote-tracking branch 'origin/master' into mku-basic-warp-sync…
michalkucharczyk Dec 7, 2022
827a058
file naming changed
michalkucharczyk Dec 7, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ stages:
- test
- build
- publish
- zombienet
- deploy
- notify

Expand All @@ -52,6 +53,7 @@ variables:
BUILDAH_IMAGE: "quay.io/buildah/stable:v1.27"
RUSTY_CACHIER_SINGLE_BRANCH: master
RUSTY_CACHIER_DONT_OPERATE_ON_MAIN_BRANCH: "true"
ZOMBIENET_IMAGE: "docker.io/paritytech/zombienet:v1.3.22"

default:
retry:
Expand Down Expand Up @@ -166,14 +168,28 @@ default:
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs

.publish-refs:
rules:
- if: $CI_PIPELINE_SOURCE == "pipeline"
when: never
- if: $CI_PIPELINE_SOURCE == "web"
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_REF_NAME == "master"
- if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1

.build-refs:
# publish-refs + PRs
rules:
- if: $CI_PIPELINE_SOURCE == "pipeline"
when: never
- if: $CI_PIPELINE_SOURCE == "web"
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_REF_NAME == "master"
- if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
- if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs

.zombienet-refs:
extends: .build-refs

.nightly-pipeline:
rules:
Expand Down Expand Up @@ -205,6 +221,8 @@ include:
- scripts/ci/gitlab/pipeline/build.yml
# publish jobs
- scripts/ci/gitlab/pipeline/publish.yml
# zombienet jobs
- scripts/ci/gitlab/pipeline/zombienet.yml

#### stage: deploy

Expand Down
3 changes: 2 additions & 1 deletion scripts/ci/docker/subkey.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ FROM docker.io/library/ubuntu:20.04
# metadata
ARG VCS_REF
ARG BUILD_DATE
ARG IMAGE_NAME

LABEL io.parity.image.authors="[email protected]" \
io.parity.image.vendor="Parity Technologies" \
io.parity.image.title="parity/subkey" \
io.parity.image.title="${IMAGE_NAME}" \
io.parity.image.description="Subkey: key generating utility for Substrate." \
io.parity.image.source="https://github.com/paritytech/substrate/blob/${VCS_REF}/scripts/ci/docker/subkey.Dockerfile" \
io.parity.image.revision="${VCS_REF}" \
Expand Down
3 changes: 2 additions & 1 deletion scripts/ci/docker/substrate.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ FROM docker.io/library/ubuntu:20.04
# metadata
ARG VCS_REF
ARG BUILD_DATE
ARG IMAGE_NAME

LABEL io.parity.image.authors="[email protected]" \
io.parity.image.vendor="Parity Technologies" \
io.parity.image.title="parity/substrate" \
io.parity.image.title="${IMAGE_NAME}" \
io.parity.image.description="Substrate: The platform for blockchain innovators." \
io.parity.image.source="https://github.com/paritytech/substrate/blob/${VCS_REF}/scripts/ci/docker/Dockerfile" \
io.parity.image.revision="${VCS_REF}" \
Expand Down
2 changes: 1 addition & 1 deletion scripts/ci/gitlab/pipeline/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ build-linux-substrate:
extends:
- .collect-artifacts
- .docker-env
- .build-refs
- .publish-refs
variables:
# this variable gets overriden by "rusty-cachier environment inject", use the value as default
CARGO_TARGET_DIR: "$CI_PROJECT_DIR/target"
Expand Down
51 changes: 42 additions & 9 deletions scripts/ci/gitlab/pipeline/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,33 @@
# This file is part of .gitlab-ci.yml
# Here are all jobs that are executed during "publish" stage

.build-push-docker-image:
.build-push-docker-image-common:
extends:
- .build-refs
- .kubernetes-env
stage: publish
variables:
CI_IMAGE: $BUILDAH_IMAGE
GIT_STRATEGY: none
DOCKERFILE: $PRODUCT.Dockerfile
IMAGE_NAME: docker.io/parity/$PRODUCT
IMAGE_NAME: docker.io/$IMAGE_PATH
before_script:
- cd ./artifacts/$PRODUCT/
- VERSION="$(cat ./VERSION)"
- echo "${PRODUCT} version = ${VERSION}"
- test -z "${VERSION}" && exit 1
script:
- test "$Docker_Hub_User_Parity" -a "$Docker_Hub_Pass_Parity" ||
- test "$DOCKER_USER" -a "$DOCKER_PASS" ||
( echo "no docker credentials provided"; exit 1 )
- buildah bud
--format=docker
--build-arg VCS_REF="${CI_COMMIT_SHA}"
--build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
--build-arg IMAGE_NAME="${IMAGE_PATH}"
--tag "$IMAGE_NAME:$VERSION"
--tag "$IMAGE_NAME:latest"
--file "$DOCKERFILE" .
- echo "$Docker_Hub_Pass_Parity" |
buildah login --username "$Docker_Hub_User_Parity" --password-stdin docker.io
- echo "$DOCKER_PASS" |
buildah login --username "$DOCKER_USER" --password-stdin docker.io
- buildah info
- buildah push --format=v2s2 "$IMAGE_NAME:$VERSION"
- buildah push --format=v2s2 "$IMAGE_NAME:latest"
Expand All @@ -38,17 +39,49 @@
- echo "SUBSTRATE_IMAGE_TAG=${IMAGE_TAG}" | tee -a ./artifacts/$PRODUCT/build.env
- cat ./artifacts/$PRODUCT/build.env

.build-push-docker-image:
extends:
- .publish-refs
- .build-push-docker-image-common
variables:
IMAGE_PATH: parity/$PRODUCT
DOCKER_USER: $Docker_Hub_User_Parity
DOCKER_PASS: $Docker_Hub_Pass_Parity


# publish image to docker.io/paritypr, (e.g. for later use in zombienet testing)
.build-push-image-temporary:
extends:
- .build-refs
- .build-push-docker-image-common
variables:
IMAGE_PATH: paritypr/$PRODUCT
DOCKER_USER: $PARITYPR_USER
DOCKER_PASS: $PARITYPR_PASS

publish-docker-substrate:
stage: publish
extends: .build-push-docker-image
needs:
- job: build-linux-substrate
artifacts: true
variables:
PRODUCT: substrate

publish-docker-substrate-temporary:
extends: .build-push-image-temporary
needs:
- job: build-linux-substrate
artifacts: true
variables:
PRODUCT: substrate
artifacts:
reports:
# this artifact is used in zombienet-tests job
# https://docs.gitlab.com/ee/ci/multi_project_pipelines.html#with-variable-inheritance
dotenv: ./artifacts/$PRODUCT/build.env
expire_in: 24h

publish-docker-subkey:
stage: publish
extends: .build-push-docker-image
needs:
- job: build-subkey-linux
Expand All @@ -59,7 +92,7 @@ publish-docker-subkey:
publish-s3-release:
stage: publish
extends:
- .build-refs
- .publish-refs
- .kubernetes-env
needs:
- job: build-linux-substrate
Expand Down
53 changes: 53 additions & 0 deletions scripts/ci/gitlab/pipeline/zombienet.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# This file is part of .gitlab-ci.yml
# Here are all jobs that are executed during "zombienet" stage

# common settings for all zombienet jobs
.zombienet-common:
before_script:
- echo "Zombie-net Tests Config"
- echo "${ZOMBIENET_IMAGE}"
- echo "${SUBSTRATE_IMAGE_NAME} ${SUBSTRATE_IMAGE_TAG}"
- echo "${GH_DIR}"
- export DEBUG=zombie,zombie::network-node
- export ZOMBIENET_INTEGRATION_TEST_IMAGE=${SUBSTRATE_IMAGE_NAME}:${SUBSTRATE_IMAGE_TAG}
- echo "${ZOMBIENET_INTEGRATION_TEST_IMAGE}"
stage: zombienet
image: "${ZOMBIENET_IMAGE}"
needs:
- job: publish-docker-substrate-temporary
extends:
- .kubernetes-env
- .zombienet-refs
variables:
GH_DIR: "https://github.com/paritytech/substrate/tree/${CI_COMMIT_SHA}/zombienet"
FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: 1
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
when: always
expire_in: 2 days
paths:
- ./zombienet-logs
after_script:
- mkdir -p ./zombienet-logs
- cp /tmp/zombie*/logs/* ./zombienet-logs/
allow_failure: true
retry: 2
tags:
- zombienet-polkadot-integration-test

zombienet-0000-block-building:
extends:
- .zombienet-common
script:
- /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh
--github-remote-dir="${GH_DIR}/0000-block-building"
--test="block-building.zndsl"


zombienet-0001-basic-warp-sync:
extends:
- .zombienet-common
script:
- /home/nonroot/zombie-net/scripts/ci/run-test-env-manager.sh
--github-remote-dir="${GH_DIR}/0001-basic-warp-sync"
--test="test-warp-sync.zndsl"
15 changes: 15 additions & 0 deletions zombienet/0000-block-building/block-building.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[settings]
enable_tracing = false

[relaychain]
default_image = "{{ZOMBIENET_INTEGRATION_TEST_IMAGE}}"
default_command = "substrate"
chain = "local"

[[relaychain.nodes]]
name = "alice"
validator = true

[[relaychain.nodes]]
name = "bob"
validator = true
20 changes: 20 additions & 0 deletions zombienet/0000-block-building/block-building.zndsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Description: Block building
Network: ./block-building.toml
Creds: config

alice: is up
bob: is up

alice: reports node_roles is 4
bob: reports node_roles is 4

alice: reports peers count is at least 1
bob: reports peers count is at least 1

alice: reports block height is at least 5 within 20 seconds
bob: reports block height is at least 5 within 20 seconds

alice: count of log lines containing "error" is 0 within 2 seconds
bob: count of log lines containing "error" is 0 within 2 seconds

alice: js-script ./transaction-gets-finalized.js within 30 seconds
59 changes: 59 additions & 0 deletions zombienet/0000-block-building/transaction-gets-finalized.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
//based on: https://polkadot.js.org/docs/api/examples/promise/transfer-events

const assert = require("assert");

async function run(nodeName, networkInfo, args) {
const {wsUri, userDefinedTypes} = networkInfo.nodesByName[nodeName];
const api = await zombie.connect(wsUri, userDefinedTypes);

// Construct the keyring after the API (crypto has an async init)
const keyring = new zombie.Keyring({ type: "sr25519" });

// Add Alice to our keyring with a hard-derivation path (empty phrase, so uses dev)
const alice = keyring.addFromUri('//Alice');
const bob = '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty';

// Create a extrinsic, transferring 10^20 units to Bob
const transfer = api.tx.balances.transfer(bob, 10n**20n);

let transaction_success_event = false;
try {
await new Promise( async (resolve, reject) => {
const unsubscribe = await transfer
.signAndSend(alice, { nonce: -1 }, ({ events = [], status }) => {
console.log('Transaction status:', status.type);

if (status.isInBlock) {
console.log('Included at block hash', status.asInBlock.toHex());
console.log('Events:');

events.forEach(({ event: { data, method, section }, phase }) => {
console.log('\t', phase.toString(), `: ${section}.${method}`, data.toString());

if (section=="system" && method =="ExtrinsicSuccess") {
transaction_success_event = true;
}
});
} else if (status.isFinalized) {
console.log('Finalized block hash', status.asFinalized.toHex());
unsubscribe();
if (transaction_success_event) {
resolve();
} else {
reject("ExtrinsicSuccess has not been seen");
}
} else if (status.isError) {
unsubscribe();
reject("Transaction status.isError");
}

});
});
} catch (error) {
assert.fail("Transfer promise failed, error: " + error);
}

assert.ok("test passed");
}

module.exports = { run }
Loading