github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/tests/http_apis/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 prepare_data() {
    13  	run_sql 'DROP DATABASE if exists http_apis;' $MYSQL_PORT1 $MYSQL_PASSWORD1
    14  	run_sql 'CREATE DATABASE http_apis;' $MYSQL_PORT1 $MYSQL_PASSWORD1
    15  	run_sql "CREATE TABLE http_apis.t(i TINYINT, j INT UNIQUE KEY);" $MYSQL_PORT1 $MYSQL_PASSWORD1
    16  	for j in $(seq 100); do
    17  		run_sql "INSERT INTO http_apis.t VALUES ($j,${j}000$j),($j,${j}001$j);" $MYSQL_PORT1 $MYSQL_PASSWORD1
    18  	done
    19  }
    20  
    21  function run() {
    22  	prepare_data
    23  
    24  	run_dm_master $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml
    25  	check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT
    26  	run_dm_worker $WORK_DIR/worker1 $WORKER1_PORT $cur/conf/dm-worker1.toml
    27  	check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER1_PORT
    28  	# operate mysql config to worker
    29  	cp $cur/conf/source1.yaml $WORK_DIR/source1.yaml
    30  	sed -i "/relay-binlog-name/i\relay-dir: $WORK_DIR/worker1/relay_log" $WORK_DIR/source1.yaml
    31  
    32  	cat $WORK_DIR/source1.yaml | sed 's/$/\\n/' | sed 's/"/\\"/g' | tr -d '\n' >$WORK_DIR/source1.yaml.bak
    33  	source_data=$(cat $WORK_DIR/source1.yaml.bak)
    34  	rm $WORK_DIR/source1.yaml.bak
    35  	echo $source_data
    36  	curl -X PUT 127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/sources -d '{"op": 1, "config": ["'"$source_data"'"]}' >$WORK_DIR/create-source.log
    37  	check_log_contains $WORK_DIR/create-source.log "\"result\": true" 2
    38  	check_log_contains $WORK_DIR/create-source.log "\"source\": \"$SOURCE_ID1\"" 1
    39  
    40  	echo "start task and check stage"
    41  	cat $cur/conf/dm-task.yaml | sed 's/$/\\n/' | sed 's/"/\\"/g' | tr -d '\n' >$WORK_DIR/task.yaml.bak
    42  	task_data=$(cat $WORK_DIR/task.yaml.bak)
    43  	rm $WORK_DIR/task.yaml.bak
    44  	echo $task_data
    45  
    46  	check_http_alive 127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/status/test-task "task test-task has no source or not exist" 3
    47  
    48  	curl -X POST 127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/tasks -d '{"task": "'"$task_data"'"}' >$WORK_DIR/start-task.log
    49  	check_log_contains $WORK_DIR/start-task.log "\"result\": true" 2
    50  
    51  	sleep 1
    52  	curl -X GET 127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/status/test >$WORK_DIR/status.log
    53  	check_log_contains $WORK_DIR/status.log "\"stage\": \"Running\"" 2
    54  	check_log_contains $WORK_DIR/status.log "\"name\": \"test\"" 1
    55  
    56  	echo "get sub task configs"
    57  	curl -X GET 127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/subtasks/test >$WORK_DIR/subtask.log
    58  	check_log_contains $WORK_DIR/subtask.log "is-sharding = false" 1
    59  
    60  	echo "pause task and check stage"
    61  	curl -X PUT 127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/tasks/test -d '{ "op": 2 }' >$WORK_DIR/pause.log
    62  	check_log_contains $WORK_DIR/pause.log "\"op\": \"Pause\"" 1
    63  
    64  	sleep 1
    65  	curl -X GET 127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/status/test >$WORK_DIR/status.log
    66  	check_log_contains $WORK_DIR/status.log "\"stage\": \"Paused\"" 1
    67  	check_log_contains $WORK_DIR/status.log "\"name\": \"test\"" 1
    68  
    69  	echo "resume task and check stage"
    70  	curl -X PUT 127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/tasks/test -d '{ "op": 3 }' >$WORK_DIR/resume.log
    71  	check_log_contains $WORK_DIR/resume.log "\"op\": \"Resume\"" 1
    72  
    73  	sleep 1
    74  	curl -X GET 127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/status/test >$WORK_DIR/status.log
    75  	check_log_contains $WORK_DIR/status.log "\"stage\": \"Running\"" 2
    76  	check_log_contains $WORK_DIR/status.log "\"name\": \"test\"" 1
    77  
    78  	sleep 1
    79  	curl -X GET "127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/members?leader=true&master=true&worker=true" >$WORK_DIR/list-member.log
    80  	check_log_contains $WORK_DIR/list-member.log "leader" 1
    81  	check_log_contains $WORK_DIR/list-member.log "masters" 1
    82  	check_log_contains $WORK_DIR/list-member.log "workers" 1
    83  	check_log_contains $WORK_DIR/list-member.log "\"name\": \"master1\"" 2 # one in leader, one in masters
    84  	check_log_contains $WORK_DIR/list-member.log "\"name\": \"worker1\"" 1
    85  	check_log_contains $WORK_DIR/list-member.log "\"stage\": \"bound\"" 1
    86  	check_log_contains $WORK_DIR/list-member.log "\"source\": \"mysql-replica-01\"" 1
    87  
    88  	sleep 1
    89  	echo "kill dm-worker1"
    90  	kill_process dm-worker1
    91  	check_port_offline $WORKER1_PORT 20
    92  	run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \
    93  		"list-member --worker --name=worker1" \
    94  		"\"stage\": \"offline\"" 1
    95  	curl -X DELETE 127.0.0.1:$MASTER_PORT/apis/${API_VERSION}/members/worker/worker1 >$WORK_DIR/offline-worker.log
    96  	check_log_contains $WORK_DIR/offline-worker.log "\"result\": true" 1
    97  	echo "check data"
    98  	check_sync_diff $WORK_DIR $cur/conf/diff_config.toml
    99  }
   100  
   101  cleanup_data http_apis
   102  cleanup_process
   103  
   104  run $*
   105  
   106  cleanup_process
   107  
   108  echo "[$(date)] <<<<<< test case $TEST_NAME success! >>>>>>"