From ac94ca96a22dcf4336c48f3130a35a2fac7659e2 Mon Sep 17 00:00:00 2001 From: lucasli <410567249@qq.com> Date: Thu, 1 Feb 2024 21:40:37 +0800 Subject: [PATCH] add rare string check for release-3.6.0 (#822) --- .ci/check_rare_string.sh | 69 ++++++++++++++++++++++++++++++++++++++++ .ci/ci_check.sh | 58 +++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 .ci/check_rare_string.sh diff --git a/.ci/check_rare_string.sh b/.ci/check_rare_string.sh new file mode 100644 index 00000000..1707abee --- /dev/null +++ b/.ci/check_rare_string.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +concatenatedString=$1 + +function LOG_ERROR() +{ + local content=${1} + echo -e "\033[31m"${content}"\033[0m" +} + +function LOG_INFO() +{ + local content=${1} + echo -e "\033[32m"${content}"\033[0m" +} + +get_md5sum_cmd() { + local md5sum_cmd="md5sum" + if [ "$(uname)" == "Darwin" ]; then + md5sum_cmd="md5" + fi + echo "$md5sum_cmd" +} + +function checkConcatenatedRareString() { + local contract_address=${1} + md5sum_cmd=$(get_md5sum_cmd) + + md5_concatenatedString=$(echo -n "$concatenatedString" | $md5sum_cmd | awk '{print $1}') + + local set_output=$(./dist/console.sh call HelloWorld "${contract_address}" set "${concatenatedString}") + eventLogsFromSet=$(echo "set_output" | grep -o 'Event: {}' | sed 's/Event: {\(.*\)}/\1/') + if [ ! -z "$eventLogsFromSet" ]; then + echo "eventLogsFromSet=${eventLogsFromSet}" + md5_eventLogsFromSet=$(echo -n "$eventLogsFromSet" | $md5sum_cmd | awk '{print $1}') + if [ "$md5_concatenatedString" != "$md5_eventLogsFromSet" ]; then + LOG_ERROR "error: check failed, the md5 values of rareString and eventLogsFromSet are not equal, fail concatenatedString: ${concatenatedString}" + exit 1 + fi + fi + + # compare rare string and stringFromGet + get_output=$(./dist/console.sh call HelloWorld "${contract_address}" get) + stringFromGet=$(echo "$get_output" | grep "Return values" | sed 's/Return values:\(.*\)/\1/' | tr -d '()') + md5_stringFromGet=$(echo -n "$stringFromGet" | $md5sum_cmd | awk '{print $1}') + if [ "$md5_concatenatedString" != "$md5_stringFromGet" ]; then + LOG_ERROR "error: check failed, the md5 values of rareString and stringFromGet are not equal, fail concatenatedString: ${concatenatedString}" + exit 1 + else + LOG_INFO "check success, concatenatedString: ${concatenatedString}" + fi +} + +main() { + LOG_INFO "check rare string start, concatenatedString: ${concatenatedString}" + + # deploy HelloWorld contract + console_output=$(./dist/console.sh deploy HelloWorld) + contract_address=$(echo "$console_output" | grep -oE 'contract address: 0x[0-9a-fA-F]+' | sed 's/contract address: //') + if [ -z "$contract_address" ]; then + LOG_ERROR "deploy HelloWorld contract failed, contract_address: ${contract_address}" + exit 1 + fi + + checkConcatenatedRareString $contract_address + LOG_INFO "check rare string finished!" +} + +main "$@" diff --git a/.ci/ci_check.sh b/.ci/ci_check.sh index a8d8fddc..42efcdb8 100755 --- a/.ci/ci_check.sh +++ b/.ci/ci_check.sh @@ -1,6 +1,10 @@ #!/bin/bash set -e + +rare_str_range_names=("CJKUnifiedIdeographs" "CJKCompatibilityIdeographs" "CJKCompatibilityIdeographsSupplement" "KangxiRadicals" "CJKRadicalsSupplement" "IdeographicDescriptionCharacters" "Bopomofo" "BopomofoExtended" "CJKStrokes" "CJKSymbolsandPunctuation" "CJKCompatibilityForms" "CJKCompatibility" "EnclosedCJKLettersandMonths" "CJKUnifiedIdeographsExtensionA" "CJKUnifiedIdeographsExtensionB" "CJKUnifiedIdeographsExtensionC" "CJKUnifiedIdeographsExtensionD" "CJKUnifiedIdeographsExtensionE" "CJKUnifiedIdeographsExtensionF") +rare_str_range_values=("19968,40959" "63744,64255" "194560,195103" "12032,12255" "11904,12031" "12272,12287" "12544,12591" "12704,12735" "12736,12783" "12288,12351" "65072,65103" "13056,13311" "12800,13055" "13312,19903" "131072,173791" "173824,177977" "177984,178205" "178208,183969" "183984,191456") + LOG_INFO() { local content=${1} echo -e "\033[32m ${content}\033[0m" @@ -28,6 +32,11 @@ get_sed_cmd() echo "$sed_cmd" } +download_rare_string_jar() { + LOG_INFO "----- Downloading get-rare-string-with-unicode.jar -------" + curl -LO "https://github.com/FISCO-BCOS/LargeFiles/raw/master/binaries/jar/get-rare-string-with-unicode.jar" +} + download_build_chain() { local tag="${1}" @@ -83,6 +92,51 @@ clean_node() fi } +getRangeValues() { + local rangeValue=$1 + IFS=',' read -r startValue endValue <<<"$rangeValue" + + echo "$startValue $endValue" +} + +getConcatenatedRareStringWithRange() { + local startUnicode=${1} + local endUnicode=${2} + + # concatenate strings with begin middle end + local concatenatedString=$(java -cp './get-rare-string-with-unicode.jar' org.example.Main ${startUnicode}) + local midUnicode=$((($startUnicode + $endUnicode) / 2)) + for ((i = midUnicode; i <= midUnicode + 5; i++)); do + local currentRareString=$(java -cp './get-rare-string-with-unicode.jar' org.example.Main ${i}) + concatenatedString+="$currentRareString" + done + local endRareString=$(java -cp './get-rare-string-with-unicode.jar' org.example.Main ${endUnicode}) + concatenatedString+="$endRareString" + echo "$concatenatedString" +} + +check_rare_string() { + download_rare_string_jar + bash gradlew assemble + cp ./src/integration-test/resources/config.toml ./dist/conf/config.toml + cp -r ./nodes/127.0.0.1/sdk/* ./dist/conf/ + export LC_ALL=en_US.UTF-8 + export LANG=en_US.UTF-8 + export LANGUAGE=en_US.UTF-8 + + finalConcatenatedInputString="" + for ((i = 0; i < ${#rare_str_range_names[@]}; i++)); do + rangeName="${rare_str_range_names[$i]}" + rangeValue="${rare_str_range_values[$i]}" + + read -r startValue endValue <<<$(getRangeValues "$rangeValue") + concatenatedString=$(getConcatenatedRareStringWithRange $startValue $endValue) + finalConcatenatedInputString+="$concatenatedString" + done + + bash -x .ci/check_rare_string.sh ${finalConcatenatedInputString} +} + check_standard_node() { build_node ${@:2} @@ -90,6 +144,8 @@ check_standard_node() ## run integration test bash gradlew test --info bash gradlew integrationTest --info + LOG_INFO "------ standard_node check_rare_string---------" + check_rare_string clean_node "${1}" } @@ -100,6 +156,8 @@ check_sm_node() ## run integration test bash gradlew test --info bash gradlew integrationTest --info + LOG_INFO "------ standard_node check_rare_string---------" + check_rare_string clean_node "${1}" }