diff --git a/.ci/check_rare_string.sh b/.ci/check_rare_string.sh new file mode 100644 index 00000000..c79290b4 --- /dev/null +++ b/.ci/check_rare_string.sh @@ -0,0 +1,70 @@ +#!/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 1ec5e316..031860ea 100755 --- a/.ci/ci_check.sh +++ b/.ci/ci_check.sh @@ -2,22 +2,29 @@ set -e default_tag=v3.1.1 + +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" + local content=${1} + echo -e "\033[32m ${content}\033[0m" } -get_sed_cmd() -{ +get_sed_cmd() { local sed_cmd="sed -i" - if [ "$(uname)" == "Darwin" ];then - sed_cmd="sed -i .bkp" + if [ "$(uname)" == "Darwin" ]; then + sed_cmd="sed -i .bkp" fi echo "$sed_cmd" } -download_build_chain() -{ +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() { tag=$(curl -sS "https://gitee.com/api/v5/repos/FISCO-BCOS/FISCO-BCOS/tags" | grep -oe "\"name\":\"v[2-9]*\.[0-9]*\.[0-9]*\"" | cut -d \" -f 4 | sort -V | tail -n 1) LOG_INFO "--- current tag: $tag" if [[ -z ${tag} ]]; then @@ -27,8 +34,7 @@ download_build_chain() curl -#LO "https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/${tag}/build_chain.sh" && chmod u+x build_chain.sh } -prepare_environment() -{ +prepare_environment() { ## prepare resources for integration test pwd ls -a @@ -37,53 +43,100 @@ prepare_environment() cp -r nodes/127.0.0.1/sdk/* ./src/integration-test/resources/conf cp ./src/integration-test/resources/config-example.toml ./src/integration-test/resources/config.toml cp -r ./src/main/resources/contract ./contracts - if [ "${node_type}" == "sm" ];then - sed_cmd=$(get_sed_cmd) - $sed_cmd 's/useSMCrypto = "false"/useSMCrypto = "true"/g' ./src/integration-test/resources/config.toml + if [ "${node_type}" == "sm" ]; then + sed_cmd=$(get_sed_cmd) + $sed_cmd 's/useSMCrypto = "false"/useSMCrypto = "true"/g' ./src/integration-test/resources/config.toml fi } -build_node() -{ +build_node() { local node_type="${1}" - if [ "${node_type}" == "sm" ];then - bash -x build_chain.sh -l 127.0.0.1:4 -s - sed_cmd=$(get_sed_cmd) - $sed_cmd 's/sm_crypto_channel=false/sm_crypto_channel=true/g' nodes/127.0.0.1/node*/config.ini + if [ "${node_type}" == "sm" ]; then + bash -x build_chain.sh -l 127.0.0.1:4 -s + sed_cmd=$(get_sed_cmd) + $sed_cmd 's/sm_crypto_channel=false/sm_crypto_channel=true/g' nodes/127.0.0.1/node*/config.ini else - bash -x build_chain.sh -l 127.0.0.1:4 + bash -x build_chain.sh -l 127.0.0.1:4 fi ./nodes/127.0.0.1/fisco-bcos -v ./nodes/127.0.0.1/start_all.sh } -check_standard_node() -{ +check_standard_node() { build_node prepare_environment - ## run integration test + # run integration test bash gradlew test --info bash gradlew integrationTest --info + + LOG_INFO "------ standard_node check_rare_string---------" + check_rare_string } -check_sm_node() -{ +check_sm_node() { build_node sm prepare_environment sm - ## run integration test + # run integration test bash gradlew test --info bash gradlew integrationTest --info + + LOG_INFO "------ sm_node check_rare_string---------" + check_rare_string +} + +check_basic() { + # check code format + bash gradlew verifyGoogleJavaFormat + # build + bash gradlew build + # test + bash gradlew test + bash gradlew integrationTest --info } -check_basic() -{ -# check code format -bash gradlew verifyGoogleJavaFormat -# build -bash gradlew build -# test -bash gradlew test -bash gradlew integrationTest --info +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} } #cp src/integration-test/resources/config-example.toml src/integration-test/resources/config.toml