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! >>>>>>"