Skip to content

Commit 7b7ad10

Browse files
author
Lucius
committed
Added new image with generated block logs for use in testing
1 parent b53a736 commit 7b7ad10

File tree

5 files changed

+187
-5
lines changed

5 files changed

+187
-5
lines changed

.gitlab-ci.yaml

+62-4
Original file line numberDiff line numberDiff line change
@@ -665,17 +665,20 @@ broadcast_tests:
665665
test_tools_tests:
666666
stage: test
667667
extends: .test_tools_based
668-
668+
needs:
669+
- !reference [.test_tools_based, needs]
670+
- job: copy_testing_block_logs_to_cache
669671
variables:
670672
PYTEST_TIMEOUT_MINUTES: 30
671673
PYTEST_JUNIT_REPORT: $CI_PROJECT_DIR/tests/python/hive-local-tools/test-tools/tests/report.xml
672-
674+
TESTING_BLOCK_LOGS_DESTINATION: $CI_PROJECT_DIR/tests/python/hive-local-tools/test-tools/tests/testing_block_logs
673675
script:
674-
- cd tests/python/hive-local-tools/test-tools/tests
676+
- cp -r $TESTING_BLOCK_LOGS_CACHE_DIR/* $TESTING_BLOCK_LOGS_DESTINATION
677+
- cd $CI_PROJECT_DIR/tests/python/hive-local-tools/test-tools/tests
675678
- pip install local-tools/
676679
- !reference [.run-pytest, script]
677680
tags:
678-
- public-runner-docker
681+
- data-cache-storage
679682

680683
rc_direct_delegations_tests:
681684
stage: test
@@ -1184,6 +1187,61 @@ authority_tests:
11841187
tags:
11851188
- public-runner-docker
11861189

1190+
generate_testing_block_logs_and_save_image:
1191+
stage: build
1192+
extends: [.extended_block_log_creation, .test_tools_based]
1193+
timeout: 1h
1194+
variables:
1195+
GIT_DEPTH: 0
1196+
TESTING_BLOCK_LOGS_DIR: "$CI_PROJECT_DIR/testing_block_logs"
1197+
script:
1198+
- $CI_PROJECT_DIR/scripts/ci-helpers/testing_block_log_image_generator.sh
1199+
artifacts:
1200+
reports:
1201+
dotenv:
1202+
- testing_block_log_latest_version.env
1203+
- testing_block_log_latest_commit_short_sha.env
1204+
tags:
1205+
- public-runner-docker
1206+
- hived-for-tests
1207+
1208+
copy_testing_block_logs_to_cache:
1209+
stage: build
1210+
extends: .docker_image_builder_job
1211+
needs:
1212+
- job: generate_testing_block_logs_and_save_image
1213+
artifacts: true
1214+
variables:
1215+
TESTING_BLOCK_LOGS_CACHE_DIR: "/cache/testing_block_logs_${TESTING_BLOCK_LOG_LATEST_COMMIT_SHORT_SHA}"
1216+
script:
1217+
- echo $TESTING_BLOCK_LOGS_CACHE_DIR
1218+
- echo "TESTING_BLOCK_LOGS_CACHE_DIR=$TESTING_BLOCK_LOGS_CACHE_DIR" > $CI_PROJECT_DIR/testing_block_log_cache_dir.env
1219+
- |
1220+
if [ -d "$TESTING_BLOCK_LOGS_CACHE_DIR" ]; then
1221+
echo "Directory $TESTING_BLOCK_LOGS_CACHE_DIR exists. Skipping copy from image process..."
1222+
else
1223+
echo "Start copy testing block logs from image - $TESTING_BLOCK_LOG_LATEST_VERSION_IMAGE"
1224+
mkdir -p $TESTING_BLOCK_LOGS_CACHE_DIR && cd $TESTING_BLOCK_LOGS_CACHE_DIR
1225+
echo "Start copy block_logs from - $TESTING_BLOCK_LOG_LATEST_VERSION_IMAGE"
1226+
docker pull $TESTING_BLOCK_LOG_LATEST_VERSION_IMAGE
1227+
$CI_PROJECT_DIR/scripts/ci-helpers/export-data-from-docker-image.sh $TESTING_BLOCK_LOG_LATEST_VERSION_IMAGE $TESTING_BLOCK_LOGS_CACHE_DIR --image-path=/
1228+
checksum_from_image=$(docker inspect --format='{{ index .Config.Labels "testing_block_logs_checksum" }}' $TESTING_BLOCK_LOG_LATEST_VERSION_IMAGE)
1229+
echo "Checksum from image: $checksum_from_image"
1230+
checksum_after_copy=$(find $TESTING_BLOCK_LOGS_CACHE_DIR -type f | sort | xargs cat | md5sum |cut -d ' ' -f 1)
1231+
echo "Checksum after copy: $checksum_after_copy"
1232+
if [[ "$checksum_from_image" != "$checksum_after_copy" ]]; then
1233+
echo "Checksum mismatch detected! The checksum from the container does not match the checksum after copying."
1234+
exit 1
1235+
fi
1236+
fi
1237+
- tree $TESTING_BLOCK_LOGS_CACHE_DIR
1238+
artifacts:
1239+
reports:
1240+
dotenv:
1241+
- testing_block_log_cache_dir.env
1242+
tags:
1243+
- data-cache-storage
1244+
11871245
generate_universal_block_logs_and_save_image:
11881246
stage: build
11891247
extends: [.extended_block_log_creation, .test_tools_based]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#! /bin/bash
2+
3+
set -euo pipefail
4+
5+
SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
6+
7+
# shellcheck source=./docker_image_utils.sh
8+
source "$SCRIPTPATH/docker_image_utils.sh"
9+
10+
submodule_path=$CI_PROJECT_DIR
11+
REGISTRY=$CI_REGISTRY_IMAGE
12+
REGISTRY_USER=$REGISTRY_USER
13+
REGISTRY_PASSWORD=$REGISTRY_PASS
14+
IMGNAME=/testing-block-logs
15+
16+
echo "Attempting to get commit for: $submodule_path"
17+
18+
CHANGES=(tests/python/functional/util/testing_block_logs/generate_testing_block_logs.py)
19+
commit=$("$SCRIPTPATH/retrieve_last_commit.sh" "${submodule_path}" "${CHANGES[@]}")
20+
echo "commit with last source code changes is $commit"
21+
22+
pushd "${submodule_path}"
23+
short_commit=$(git -c core.abbrev=8 rev-parse --short "$commit")
24+
popd
25+
26+
prefix_tag="testing-block-log"
27+
tag=$prefix_tag-$short_commit
28+
29+
img=$( build_image_name $IMGNAME "$tag" "$REGISTRY" )
30+
img_path=$( build_image_registry_path $IMGNAME "$tag" "$REGISTRY" )
31+
img_tag=$( build_image_registry_tag $IMGNAME "$tag" "$REGISTRY" )
32+
33+
echo "$REGISTRY_PASSWORD" | docker login -u "$REGISTRY_USER" "$REGISTRY" --password-stdin
34+
35+
image_exists=0
36+
docker_image_exists $IMGNAME "$tag" "$REGISTRY" image_exists
37+
38+
if [ "$image_exists" -eq 1 ];
39+
then
40+
echo "Testing block log image is up to date. Skipping generation..."
41+
else
42+
echo "${img} image is missing. Starting generation of testing block logs..."
43+
echo "Save block logs to directory: $TESTING_BLOCK_LOGS_DIR"
44+
cd tests/python/functional/util/testing_block_logs
45+
python3 generate_testing_block_logs.py --output-block-log-directory="$TESTING_BLOCK_LOGS_DIR/block_logs_for_testing"
46+
echo "Block logs saved in: $TESTING_BLOCK_LOGS_DIR"
47+
48+
checksum=$(find $TESTING_BLOCK_LOGS_DIR -type f | sort | xargs cat | md5sum |cut -d ' ' -f 1)
49+
echo "Checksum of the generated testing block logs: $checksum"
50+
51+
echo "Build a Dockerfile"
52+
53+
pwd
54+
cd $TESTING_BLOCK_LOGS_DIR
55+
pwd
56+
57+
cat <<EOF > Dockerfile
58+
FROM scratch
59+
LABEL testing_block_logs_checksum=${checksum}
60+
COPY block_logs_for_testing /testing_block_logs
61+
EOF
62+
cat Dockerfile
63+
echo "Build docker image containing testing_block_logs"
64+
docker build -t $img .
65+
docker push $img
66+
echo "Created and push docker image with testing block logs: $img"
67+
fi
68+
69+
echo "TESTING_BLOCK_LOG_LATEST_VERSION_IMAGE=$img" > $CI_PROJECT_DIR/testing_block_log_latest_version.env
70+
echo "TESTING_BLOCK_LOG_LATEST_COMMIT_SHORT_SHA=$short_commit" > $CI_PROJECT_DIR/testing_block_log_latest_commit_short_sha.env

tests/python/functional/util/testing_block_logs/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from __future__ import annotations
2+
3+
import argparse
4+
from pathlib import Path
5+
6+
from loguru import logger
7+
8+
import test_tools as tt
9+
10+
11+
def generate_and_copy_empty_log(
12+
split_value: int,
13+
block_count: int,
14+
target_dir: Path,
15+
) -> None:
16+
node = tt.InitNode()
17+
node.config.block_log_split = split_value
18+
19+
node.run(time_control=tt.SpeedUpRateTimeControl(speed_up_rate=10))
20+
tt.logger.info(f"Waiting for block {block_count}...")
21+
node.wait_for_block_with_number(block_count)
22+
23+
node.close()
24+
node.block_log.copy_to(target_dir / f"_{block_count}", artifacts="required")
25+
26+
27+
def prepare_empty_logs(
28+
output_block_log_directory: Path,
29+
) -> None:
30+
"""
31+
This script generates block logs (both split and monlithic) of different length with empty blocks only
32+
"""
33+
logger.disable("helpy")
34+
logger.disable("test_tools")
35+
36+
# Initial 30 blocks are needed to have at least 10 irreversible ones.
37+
block_log_directory_30 = output_block_log_directory / "empty_30"
38+
block_log_directory_30.mkdir(parents=True, exist_ok=True)
39+
generate_and_copy_empty_log(9999, 30, block_log_directory_30)
40+
generate_and_copy_empty_log(-1, 30, block_log_directory_30)
41+
42+
# 430 blocks is enough for the split block log to be in 2 parts.
43+
block_log_directory_430 = output_block_log_directory / "empty_430"
44+
block_log_directory_430.mkdir(parents=True, exist_ok=True)
45+
generate_and_copy_empty_log(9999, 430, block_log_directory_430)
46+
generate_and_copy_empty_log(-1, 430, block_log_directory_430)
47+
48+
49+
if __name__ == "__main__":
50+
parser = argparse.ArgumentParser()
51+
parser.add_argument("--output-block-log-directory", type=Path, default=Path(__file__).parent)
52+
args = parser.parse_args()
53+
prepare_empty_logs(args.output_block_log_directory)
54+
# TODO: Add generation of other logs here.

0 commit comments

Comments
 (0)