|
1 | 1 | #!/bin/bash |
2 | 2 |
|
3 | | -range_sha=${BASE_SHA} |
4 | | -echo $(git diff --name-status ${range_sha} | awk '{print $2}') |
5 | | -#service files |
6 | | -update_service_functions="" |
7 | | -service_files=`git diff --name-status ${range_sha} | awk '{print $2}' | grep "^tencentcloud/service*"` |
8 | | -if [ $service_files ] ; then |
9 | | - update_service_functions=`echo $service_files | xargs git diff ${range_sha} | grep "@@" | grep "func" | awk -F ")" '{print $2}' | awk -F "(" '{print $1}' | tr -d ' '` |
10 | | -fi |
11 | | -echo "update_service_functions: $update_service_functions" |
12 | | -need_test_files="" |
13 | | -for update_service_function in $update_service_functions; do |
14 | | - tmp_files=`grep -r --with-filename $update_service_function ./tencentcloud | awk -F ":" '{print $1}' | grep -v "service_tencent*" | awk -F "/" '{print $3}' | sort | uniq | egrep "^resource_tc_|^data_source_tc" | awk -F "." '{print $1}' | awk '/_test$/{print "tencentcloud/"$0".go"} !/_test$/{print "tencentcloud/"$0"_test.go"}'` |
15 | | - need_test_files="$need_test_files $tmp_files" |
| 3 | +range_sha="${BASE_SHA}" |
| 4 | + |
| 5 | +# changed files |
| 6 | +changed_files="$(git diff --name-only "${range_sha}" | grep -E '\.go$')" |
| 7 | +echo "Changed Files: ${changed_files}" |
| 8 | + |
| 9 | +# changed test files |
| 10 | +changed_test_files="$(echo "${changed_files}" | grep -E "_test\.go$")" |
| 11 | +echo "Changed test files: ${changed_test_files}" |
| 12 | + |
| 13 | +# test files for changed service |
| 14 | +changed_service_files="$(echo "${changed_files}" | grep -E "^tencentcloud/(services/[^/]+/)?service_")" |
| 15 | +changed_services_test_files="" |
| 16 | +for service_file in ${changed_service_files}; do |
| 17 | + service_file_dir="$(dirname "${service_file}")" |
| 18 | + service_funcs="$(git diff "${range_sha}" "${service_file}" | grep -E "^.func " | awk -F ")" '{print $2}' | awk -F "(" '{print $1}' | tr -d ' ')" |
| 19 | + for func in ${service_funcs}; do |
| 20 | + files_using_func="$(grep -r --with-filename "${func}" "$service_file_dir" | awk -F ":" '{print $1}' | grep -E "^tencentcloud/(services/[^/]+/)?(resource_tc|data_source_tc)" | sort | uniq)" |
| 21 | + if [[ "${files_using_func}" == "" ]]; then |
| 22 | + continue |
| 23 | + fi |
| 24 | + files_using_func_test_files="$(echo "${files_using_func}" | awk -F "." '{print $1"_test.go"}')" |
| 25 | + changed_services_test_files="${changed_services_test_files} ${files_using_func_test_files}" |
| 26 | + done |
16 | 27 | done |
17 | | -echo "need_test_files: $need_test_files" |
18 | | - |
19 | | -# resource&&data_source files |
20 | | -update_sources=`git diff --name-status ${range_sha}| awk '{print $2}' | egrep "^tencentcloud/resource_tc|^tencentcloud/data_source" | egrep -v "_test.go" | awk -F "." '{print $1"_test.go"}'` |
21 | | -echo "update_sources: $update_sources" |
22 | | -# test files |
23 | | -delta_test_files=`git diff --name-status ${range_sha} | egrep "_test\.go$" | awk '{print $2}'` |
24 | | -echo "delta_test_files: $delta_test_files" |
25 | | -# all test files |
26 | | -delta_test_files="$delta_test_files $need_test_files $update_sources" |
27 | | -delta_test_files=`echo $delta_test_files | xargs -n1 | sort | uniq` |
28 | | -echo "all delta_test_files: $delta_test_files" |
29 | | -for delta_test_file in ${delta_test_files}; do |
30 | | - test_casts=`egrep "func TestAcc.+\(" ${delta_test_file} | awk -F "(" '{print $1}' | awk '{print $2}' | grep -v "NeedFix"` |
31 | | - echo "[$delta_test_file] \n$test_casts" |
32 | | - for test_cast in ${test_casts}; do |
33 | | - go_test_cmd="go test -v -run ${test_cast} -timeout=0 ./tencentcloud/" |
34 | | - $go_test_cmd |
35 | | - if [ $? -ne 0 ]; then |
36 | | - printf "[GO TEST FILED] ${go_test_cmd}" |
37 | | - exit 1 |
38 | | - fi |
39 | | - done |
| 28 | +echo "Test files for changed service functions: ${changed_services_test_files}" |
| 29 | + |
| 30 | +# test files for changed resource and datasource |
| 31 | +changed_sources_test_files="$(echo "${changed_files}" | grep -E "^tencentcloud/(services/[^/]+/)?(resource_tc|data_source_tc)" | grep -Ev "_test.go" | awk -F "." '{print $1"_test.go"}')" |
| 32 | +echo "Test files for changed resource and datasource: ${changed_sources_test_files}" |
| 33 | + |
| 34 | +# all need run test files |
| 35 | +need_run_test_files="${changed_test_files} ${changed_services_test_files} ${changed_sources_test_files}" |
| 36 | +need_run_test_files="$(echo "${need_run_test_files}" | xargs -n1 | sort | uniq)" |
| 37 | +echo "All need run test files: ${need_run_test_files}" |
| 38 | + |
| 39 | +# run test |
| 40 | +for test_file in ${need_run_test_files}; do |
| 41 | + test_file_dir="$(dirname "$test_file")" |
| 42 | + test_casts="$(grep -E "func TestAcc.+\(" "${test_file}" | awk -F "(" '{print $1}' | awk '{print $2}' | grep -v "NeedFix")" |
| 43 | + printf "[%s]\n%s\n" "${test_file}" "${test_casts}" |
| 44 | + |
| 45 | + for test_cast in ${test_casts}; do |
| 46 | + go_test_cmd="go test -v -run ${test_cast} -timeout=0 ./${test_file_dir}/" |
| 47 | + $go_test_cmd |
| 48 | + if ! $go_test_cmd; then |
| 49 | + printf "[GO TEST FAILED] %s\n" "${go_test_cmd}" |
| 50 | + exit 1 |
| 51 | + fi |
| 52 | + done |
40 | 53 | done |
0 commit comments