github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/_utils/run_dm_ctl_with_tls_and_retry (about)

     1  #!/bin/bash
     2  # tools to run dmctl from command line
     3  # parameter 1: work directory
     4  # parameter 2: master-addr port
     5  # parameter 3: ssl-ca path
     6  # parameter 4: ssl-cert path
     7  # parameter 5: ssl-key path
     8  # parameter 6: command
     9  
    10  workdir=$1
    11  master_addr=$2
    12  ssl_ca=$3
    13  ssl_cert=$4
    14  ssl_key=$5
    15  cmd=$6
    16  
    17  shift 6
    18  
    19  PWD=$(pwd)
    20  binary=$PWD/bin/dmctl.test
    21  ts=$(date +"%s")
    22  dmctl_log=$workdir/dmctl.$ts.log
    23  pid=$$
    24  
    25  all_matched=true
    26  echo "dmctl test cmd: \"$cmd\""
    27  for ((k = 0; k < 10; k++)); do
    28  	echo "$cmd" | $binary -test.coverprofile="$TEST_DIR/cov.$TEST_NAME.dmctl.$ts.$pid.out" DEVEL -master-addr=$master_addr --ssl-ca $ssl_ca --ssl-cert $ssl_cert --ssl-key $ssl_key >$dmctl_log 2>&1
    29  	all_matched=true
    30  	for ((i = 1; i < $#; i += 2)); do
    31  		j=$((i + 1))
    32  		value=${!i}
    33  		expected=${!j}
    34  		got=$(sed "s/$value/$value\n/g" $dmctl_log | grep -c "$value")
    35  		if [ "$got" != "$expected" ]; then
    36  			echo "command: $cmd $value count: $got != expected: $expected"
    37  			cat $dmctl_log
    38  			all_matched=false
    39  			break
    40  		fi
    41  	done
    42  	if [ $# -eq 0 ]; then
    43  		cat $dmctl_log
    44  	fi
    45  	if $all_matched; then
    46  		exit 0
    47  	fi
    48  
    49  	sleep 2
    50  done
    51  
    52  exit 1
    53  
    54  # gocovmerge doesn't support merge profiles with different modes, however atomic
    55  # mode and count mode have the same profile format, so we need to unify cover
    56  # mode before running gocovmerge. As coverage file is not generated synchronously,
    57  # we will patch covermode before `make coverage`