github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/tls/run.sh (about)

     1  #!/bin/bash
     2  
     3  set -eu
     4  
     5  cur=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
     6  source $cur/../_utils/test_prepare
     7  
     8  WORK_DIR=$TEST_DIR/$TEST_NAME
     9  
    10  API_VERSION="v1alpha1"
    11  
    12  function get_mysql_ssl_data_path() {
    13  	run_sql 'SHOW VARIABLES WHERE Variable_Name = "datadir"' $MYSQL_PORT1 $MYSQL_PASSWORD1
    14  	mysql_data_path=$(cat "$TEST_DIR/sql_res.$TEST_NAME.txt" | grep Value | cut -d ':' -f 2 | xargs)
    15  	echo "$mysql_data_path"
    16  }
    17  
    18  function setup_tidb_with_tls() {
    19  	echo "run a new tidb server with tls"
    20  	cat - >"$WORK_DIR/tidb-tls-config.toml" <<EOF
    21  
    22  socket = "/tmp/tidb-tls.sock"
    23  
    24  [status]
    25  status-port = 10090
    26  
    27  [security]
    28  # set the path for certificates. Empty string means disabling secure connections.
    29  ssl-ca = "$cur/conf/ca.pem"
    30  ssl-cert = "$cur/conf/dm.pem"
    31  ssl-key = "$cur/conf/dm.key"
    32  cluster-ssl-ca = "$cur/conf/ca.pem"
    33  cluster-ssl-cert = "$cur/conf/dm.pem"
    34  cluster-ssl-key = "$cur/conf/dm.key"
    35  EOF
    36  
    37  	bin/tidb-server \
    38  		-P 4400 \
    39  		--path $WORK_DIR/tidb \
    40  		--store unistore \
    41  		--config $WORK_DIR/tidb-tls-config.toml \
    42  		--log-file "$WORK_DIR/tidb.log" 2>&1 &
    43  
    44  	sleep 5
    45  	# if execute failed, print tidb's log for debug
    46  	mysql -uroot -h127.0.0.1 -P4400 --default-character-set utf8 --ssl-ca $cur/conf/ca.pem --ssl-cert $cur/conf/dm.pem --ssl-key $cur/conf/dm.key -E -e "drop database if exists tls" || (cat $WORK_DIR/tidb.log && exit 1)
    47  	mysql -uroot -h127.0.0.1 -P4400 --default-character-set utf8 --ssl-ca $cur/conf/ca.pem --ssl-cert $cur/conf/dm.pem --ssl-key $cur/conf/dm.key -E -e "drop database if exists dm_meta"
    48  }
    49  
    50  function prepare_data() {
    51  	run_sql 'DROP DATABASE if exists tls;' $MYSQL_PORT1 $MYSQL_PASSWORD1
    52  	run_sql 'CREATE DATABASE tls;' $MYSQL_PORT1 $MYSQL_PASSWORD1
    53  	run_sql "CREATE TABLE tls.t(i TINYINT, j INT UNIQUE KEY);" $MYSQL_PORT1 $MYSQL_PASSWORD1
    54  	for j in $(seq 10); do
    55  		run_sql "INSERT INTO tls.t VALUES ($j,${j}000$j),($j,${j}001$j);" $MYSQL_PORT1 $MYSQL_PASSWORD1
    56  	done
    57  }
    58  
    59  function setup_mysql_tls() {
    60  	mysql_data_path=$(get_mysql_ssl_data_path)
    61  	echo "mysql_ssl_setup at=$mysql_data_path"
    62  
    63  	# NOTE we can use ` mysql_ssl_rsa_setup --datadir "$mysql_data_path"` to create a new cert in datadir
    64  	# in ci, mysql in other container, so we can't use the mysql_ssl_rsa_setup
    65  	# only mysql 8.0 support use `ALTER INSTANCE RELOAD TLS` to reload cert
    66  	# when use mysql 5.7 we need to restart mysql-server manually if your local server do not enable ssl
    67  
    68  	run_sql "grant all on *.* to 'dm_tls_test'@'%' identified by '123456' require ssl;" $MYSQL_PORT1 $MYSQL_PASSWORD1
    69  	run_sql 'flush privileges;' $MYSQL_PORT1 $MYSQL_PASSWORD1
    70  
    71  	cp $cur/conf/source1.yaml $WORK_DIR/source1.yaml
    72  	sed -i "s%dir-placeholer%$mysql_data_path%g" $WORK_DIR/source1.yaml
    73  	# add a tls source with only ca
    74  	cp $cur/conf/source-only-ca.yaml $WORK_DIR/source-only-ca.yaml
    75  	sed -i "s%dir-placeholer%$mysql_data_path%g" $WORK_DIR/source-only-ca.yaml
    76  	echo "add dm_tls_test user done $mysql_data_path"
    77  }
    78  
    79  function prepare_test() {
    80  	cleanup_process
    81  
    82  	# clean test dir
    83  	rm -rf $WORK_DIR
    84  	mkdir $WORK_DIR
    85  
    86  	# kill the old tidb with tls
    87  	pkill -hup tidb-server 2>/dev/null || true
    88  	wait_process_exit tidb-server
    89  
    90  	run_sql 'SHOW GLOBAL VARIABLES LIKE "tls_version";' $MYSQL_PORT1 $MYSQL_PASSWORD1
    91  	setup_mysql_tls
    92  	setup_tidb_with_tls
    93  	prepare_data
    94  }
    95  
    96  function test_worker_handle_multi_tls_tasks() {
    97  	prepare_test
    98  
    99  	cp $cur/conf/dm-master1.toml $WORK_DIR/
   100  	cp $cur/conf/dm-master2.toml $WORK_DIR/
   101  	cp $cur/conf/dm-master3.toml $WORK_DIR/
   102  	cp $cur/conf/dm-worker1.toml $WORK_DIR/
   103  	cp $cur/conf/dm-worker2.toml $WORK_DIR/
   104  	cp $cur/conf/dm-task.yaml $WORK_DIR/
   105  	cp $cur/conf/dm-task-2.yaml $WORK_DIR/
   106  
   107  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-master1.toml
   108  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-master2.toml
   109  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-master3.toml
   110  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-worker1.toml
   111  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-worker2.toml
   112  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-task.yaml
   113  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-task-2.yaml
   114  
   115  	run_dm_master $WORK_DIR/master1 $MASTER_PORT1 $WORK_DIR/dm-master1.toml
   116  	run_dm_master $WORK_DIR/master2 $MASTER_PORT2 $WORK_DIR/dm-master2.toml
   117  	run_dm_master $WORK_DIR/master3 $MASTER_PORT3 $WORK_DIR/dm-master3.toml
   118  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT1 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   119  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT2 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   120  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT3 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   121  
   122  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $WORK_DIR/dm-worker1.toml
   123  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   124  
   125  	# operate mysql config to worker
   126  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   127  		"operate-source create $WORK_DIR/source-only-ca.yaml" \
   128  		"\"result\": true" 2 \
   129  		"\"source\": \"$SOURCE_ID1\"" 1
   130  
   131  	echo "start task and check stage"
   132  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   133  		"start-task $WORK_DIR/dm-task.yaml --remove-meta=true"
   134  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   135  		"start-task $WORK_DIR/dm-task-2.yaml --remove-meta=true"
   136  
   137  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   138  		"query-status test" \
   139  		"\"result\": true" 2 \
   140  		"\"unit\": \"Sync\"" 1
   141  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   142  		"query-status test2" \
   143  		"\"result\": true" 2 \
   144  		"\"unit\": \"Sync\"" 1
   145  
   146  	echo "check data"
   147  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   148  	check_sync_diff $WORK_DIR $cur/conf/diff_config-2.toml
   149  
   150  	echo "============================== test_worker_handle_multi_tls_tasks success =================================="
   151  }
   152  
   153  function test_worker_ha_when_enable_source_tls() {
   154  	prepare_test
   155  
   156  	cp $cur/conf/dm-master1.toml $WORK_DIR/
   157  	cp $cur/conf/dm-master2.toml $WORK_DIR/
   158  	cp $cur/conf/dm-master3.toml $WORK_DIR/
   159  	cp $cur/conf/dm-worker1.toml $WORK_DIR/
   160  	cp $cur/conf/dm-worker2.toml $WORK_DIR/
   161  	cp $cur/conf/dm-task.yaml $WORK_DIR/
   162  
   163  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-master1.toml
   164  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-master2.toml
   165  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-master3.toml
   166  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-worker1.toml
   167  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-worker2.toml
   168  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-task.yaml
   169  
   170  	run_dm_master $WORK_DIR/master1 $MASTER_PORT1 $WORK_DIR/dm-master1.toml
   171  	run_dm_master $WORK_DIR/master2 $MASTER_PORT2 $WORK_DIR/dm-master2.toml
   172  	run_dm_master $WORK_DIR/master3 $MASTER_PORT3 $WORK_DIR/dm-master3.toml
   173  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT1 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   174  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT2 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   175  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT3 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   176  
   177  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $WORK_DIR/dm-worker1.toml
   178  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   179  
   180  	# operate mysql config to worker
   181  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   182  		"operate-source create $WORK_DIR/source1.yaml" \
   183  		"\"result\": true" 2 \
   184  		"\"source\": \"$SOURCE_ID1\"" 1
   185  
   186  	#  start task
   187  	echo "start task and check stage"
   188  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   189  		"start-task $WORK_DIR/dm-task.yaml --remove-meta=true" \
   190  		"\"result\": true" 2
   191  
   192  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   193  		"query-status test" \
   194  		"\"result\": true" 2 \
   195  		"\"unit\": \"Sync\"" 1
   196  
   197  	echo "check data"
   198  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   199  
   200  	echo "pause task before kill and restart dm-worker"
   201  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   202  		"pause-task test" \
   203  		"\"result\": true" 2
   204  
   205  	echo "start dm-worker2 and kill dm-worker1"
   206  	kill_process dm-worker1
   207  	check_port_offline $WORKER1_PORT 20
   208  
   209  	mysql_data_path=$(get_mysql_ssl_data_path)
   210  	echo "mysql_ssl_setup at=$mysql_data_path"
   211  
   212  	# change ca.pem name to make sure HA
   213  	mv "$mysql_data_path/ca.pem" "$mysql_data_path/ca.pem.bak"
   214  
   215  	run_dm_worker $WORK_DIR/worker2 $WORKER2_PORT $WORK_DIR/dm-worker2.toml
   216  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   217  
   218  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   219  		"query-status test" \
   220  		"\"result\": true" 2 \
   221  		"Paused" 1
   222  
   223  	# resume task and check stage
   224  	echo "resume task to worker2"
   225  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   226  		"resume-task test" \
   227  		"\"result\": true" 2
   228  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   229  		"query-status test" \
   230  		"\"result\": true" 2 \
   231  		"\"unit\": \"Sync\"" 1 \
   232  		"worker2" 1
   233  
   234  	# incr data
   235  	run_sql 'INSERT INTO tls.t VALUES (99,9999999);' $MYSQL_PORT1 $MYSQL_PASSWORD1
   236  
   237  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   238  
   239  	# resume ca.pem
   240  	mv "$mysql_data_path/ca.pem.bak" "$mysql_data_path/ca.pem"
   241  
   242  	echo "============================== test_worker_ha_when_enable_source_tls success =================================="
   243  }
   244  
   245  function test_master_ha_when_enable_tidb_and_only_ca_source_tls() {
   246  	prepare_test
   247  
   248  	cp $cur/conf/dm-master1.toml $WORK_DIR/
   249  	cp $cur/conf/dm-master2.toml $WORK_DIR/
   250  	cp $cur/conf/dm-master3.toml $WORK_DIR/
   251  	cp $cur/conf/dm-worker1.toml $WORK_DIR/
   252  	cp $cur/conf/dm-task.yaml $WORK_DIR/
   253  
   254  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-master1.toml
   255  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-master2.toml
   256  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-master3.toml
   257  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-worker1.toml
   258  	sed -i "s%dir-placeholer%$cur\/conf%g" $WORK_DIR/dm-task.yaml
   259  
   260  	run_dm_master $WORK_DIR/master1 $MASTER_PORT1 $WORK_DIR/dm-master1.toml
   261  	run_dm_master $WORK_DIR/master2 $MASTER_PORT2 $WORK_DIR/dm-master2.toml
   262  	run_dm_master $WORK_DIR/master3 $MASTER_PORT3 $WORK_DIR/dm-master3.toml
   263  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT1 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   264  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT2 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   265  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT3 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   266  
   267  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $WORK_DIR/dm-worker1.toml
   268  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   269  
   270  	# operate mysql config to worker
   271  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   272  		"operate-source create $WORK_DIR/source1.yaml" \
   273  		"\"result\": true" 2 \
   274  		"\"source\": \"$SOURCE_ID1\"" 1
   275  
   276  	echo "check master alive"
   277  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   278  		"list-member" \
   279  		"\"alive\": true" 3
   280  
   281  	echo "start task and check stage"
   282  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   283  		"start-task $WORK_DIR/dm-task.yaml --remove-meta=true" \
   284  		"\"result\": true" 2
   285  
   286  	run_dm_ctl_with_tls_and_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" $cur/conf/ca.pem $cur/conf/dm.pem $cur/conf/dm.key \
   287  		"query-status test" \
   288  		"\"result\": true" 2 \
   289  		"\"unit\": \"Sync\"" 1
   290  
   291  	echo "test http and api interface"
   292  	check_rpc_alive $cur/../bin/check_master_online_http 127.0.0.1:$MASTER_PORT1 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   293  	check_rpc_alive $cur/../bin/check_master_http_apis 127.0.0.1:$MASTER_PORT1 "$cur/conf/ca.pem" "$cur/conf/dm.pem" "$cur/conf/dm.key"
   294  
   295  	# https://github.com/pingcap/dm/issues/1458
   296  	# check the log is not repeatedly printed
   297  	check_log_not_contains $WORK_DIR/master1/log/dm-master.log "remote error: tls: bad certificate"
   298  	check_log_not_contains $WORK_DIR/master1/log/dm-master.log "client certificate authentication failed"
   299  
   300  	echo "use common name not in 'cert-allowed-cn' should not request success"
   301  	check_rpc_alive $cur/../bin/check_master_online_http 127.0.0.1:$MASTER_PORT1 "$cur/conf/ca.pem" "$cur/conf/other.pem" "$cur/conf/other.key" && exit 1 || true
   302  
   303  	# TODO: curl's version is too low in ci, uncomment this after ci upgrade the version
   304  	#echo "pause task"
   305  	#curl -X PUT --cacert "$cur/conf/ca.pem"  --key "$cur/conf/dm.key" --cert "$cur/conf/dm.pem" https://127.0.0.1:$MASTER_PORT1/apis/$API_VERSION/tasks/test -d '{"op": 2}' > $WORK_DIR/pause.log || cat $WORK_DIR/pause.log
   306  	#check_log_contains $WORK_DIR/pause.log "\"result\": true" 2
   307  
   308  	#echo "query status"
   309  	#curl -X GET --cacert "$cur/conf/ca.pem"  --key "$cur/conf/dm.key" --cert "$cur/conf/dm.pem" https://127.0.0.1:$MASTER_PORT1/apis/$API_VERSION/status/test > $WORK_DIR/status.log || cat $WORK_DIR/status.log
   310  	#check_log_contains $WORK_DIR/status.log "\"stage\": \"Paused\"" 1
   311  
   312  	echo "check data"
   313  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
   314  
   315  	echo "============================== test_master_ha_when_enable_tidb_and_only_ca_source_tls success =================================="
   316  }
   317  
   318  function prepare_test_no_tls() {
   319  	cleanup_process
   320  
   321  	# clean test dir
   322  	rm -rf $WORK_DIR
   323  	mkdir $WORK_DIR
   324  
   325  	# kill the old tidb
   326  	pkill -hup tidb-server 2>/dev/null || true
   327  	wait_process_exit tidb-server
   328  
   329  	# restart tidb
   330  	run_tidb_server 4000 $TIDB_PASSWORD
   331  
   332  	cp $cur/conf/source-no-tls.yaml $WORK_DIR/source-no-tls.yaml
   333  
   334  	prepare_data
   335  }
   336  
   337  function test_source_and_target_with_empty_tlsconfig() {
   338  	prepare_test_no_tls
   339  
   340  	cp $cur/conf/dm-master-no-tls.toml $WORK_DIR/
   341  	cp $cur/conf/dm-worker3.toml $WORK_DIR/
   342  	cp $cur/conf/dm-task-no-tls.yaml $WORK_DIR/
   343  
   344  	# start DM worker and master
   345  	run_dm_master $WORK_DIR/master $MASTER_PORT $WORK_DIR/dm-master-no-tls.toml
   346  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT
   347  	run_dm_worker $WORK_DIR/worker3 $WORKER3_PORT $WORK_DIR/dm-worker3.toml
   348  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER3_PORT
   349  
   350  	# operate mysql config to worker
   351  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   352  		"operate-source create $WORK_DIR/source-no-tls.yaml" \
   353  		"\"result\": true" 2 \
   354  		"\"source\": \"$SOURCE_ID1\"" 1
   355  
   356  	echo "check master alive"
   357  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   358  		"list-member" \
   359  		"\"alive\": true" 1
   360  
   361  	echo "start task and check stage"
   362  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   363  		"start-task $WORK_DIR/dm-task-no-tls.yaml --remove-meta=true" \
   364  		"\"result\": true" 2
   365  
   366  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
   367  		"query-status test" \
   368  		"\"result\": true" 2 \
   369  		"\"unit\": \"Sync\"" 1
   370  
   371  	run_sql 'INSERT INTO tls.t VALUES (99,9999999);' $MYSQL_PORT1 $MYSQL_PASSWORD1
   372  
   373  	echo "check data"
   374  	check_sync_diff $WORK_DIR $cur/conf/diff_config-1.toml
   375  
   376  	echo "============================== test_source_and_target_with_empty_tlsconfig success =================================="
   377  }
   378  
   379  function run() {
   380  	test_master_ha_when_enable_tidb_and_only_ca_source_tls
   381  
   382  	test_worker_handle_multi_tls_tasks
   383  	test_worker_ha_when_enable_source_tls
   384  
   385  	test_source_and_target_with_empty_tlsconfig
   386  }
   387  
   388  cleanup_data tls
   389  cleanup_process
   390  
   391  run
   392  
   393  # kill the tidb with tls
   394  pkill -hup tidb-server 2>/dev/null || true
   395  wait_process_exit tidb-server
   396  
   397  run_tidb_server 4000 $TIDB_PASSWORD
   398  
   399  cleanup_process
   400  
   401  echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"