diff --git a/test/env.bats b/test/env.bats index 81da2d52f982b0d1f3f7b6004337bf892f342db4..f14758eac5452b3b46ee887febda7bf13b84ed28 100644 --- a/test/env.bats +++ b/test/env.bats @@ -5,18 +5,12 @@ load test_helper @test "Simple Query Optimizer" { ${SOAR_BIN_ENV} -query "select * from film where length > 120" | grep -v "散粒度" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden run golden_diff - echo "$output" [ $status -eq 0 ] } @test "Run all test cases" { ${SOAR_BIN} -list-test-sqls | ${SOAR_BIN_ENV} | grep -v "散粒度" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden run golden_diff - echo "$output" [ $status -eq 0 ] } -@test "Check dial timeout" { - run timeout 1 ${SOAR_BIN} -test-dsn "1.1.1.1" -check-config - [ $status -eq 124 ] -} diff --git a/test/main.bats b/test/main.bats index 6ed2ac30884fe5921fdf024a695a64098c519f84..674fcced4b36b1b5f17588aa5627ed14116eeb66 100644 --- a/test/main.bats +++ b/test/main.bats @@ -29,7 +29,7 @@ load test_helper } # 5. soar 使用 config 配置文件路径是否正确 -# 13. soar -check-config 数据库连接配置检查 * +# 13. soar -check-config 数据库连接配置检查 * # soar 数据库测试(线上、线下、-allow-online-as-test) @test "Check config cases" { run ${SOAR_BIN_ENV} -check-config @@ -61,7 +61,7 @@ load test_helper echo "${output}" [ $status -eq 0 ] } -# 10. report 为 json 格式是否正常 +# 10. report 为 json 格式是否正常 @test "Check soar report for json" { ${SOAR_BIN} -query "select * from film" \ -report-type json > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden @@ -70,7 +70,7 @@ load test_helper [ $status -eq 0 ] } -# 10. report 为 markdown 格式是否正常 +# 10. report 为 markdown 格式是否正常 @test "Check soar report for markdown" { ${SOAR_BIN} -query "select * from film" \ -report-type markdown > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden @@ -89,7 +89,7 @@ load test_helper [ $status -eq 0 ] } -# 12. 黑名单功能是否正常 +# 12. 黑名单功能是否正常 # soar 的日志和黑名单的相对路径都相对于 soar 的二进制文件路径说的 @test "Check soar blacklist" { run ${SOAR_BIN} -blacklist ../etc/soar.blacklist -query "show processlist;" @@ -97,17 +97,17 @@ load test_helper [ -z ${output} ] } -# 13. soar -check-config 数据库连接配置检查 * +# 13. soar -check-config 数据库连接配置检查 * # 参见 5 -# 14. soar -help 检查 +# 14. soar -help 检查 @test "Check soar help" { run ${SOAR_BIN} -help [ $status -eq 2 ] [ "${#lines[@]}" -gt 30 ] } -# 15. soar 数据库测试(线上、线下、-allow-online-as-test) +# 15. soar 数据库测试(线上、线下、-allow-online-as-test) # 参见 5 # 16. 语法检查(正确) @@ -123,7 +123,7 @@ load test_helper [ -n $ouput ] } -# 17. dsn 检查 +# 17. dsn 检查 @test "Check soar test dsn root:passwd@host:port/db" { run ${SOAR_BIN} -online-dsn="root:pase@D@192.168.12.11:3306/testDB" -print-config [ $(expr "$output" : ".*user: root") -ne 0 ] diff --git a/test/query.bats b/test/query.bats index 1f84a9d1627623d84c6ee9a5686b65d983c1cc38..ad8abaeac08596853734ae612e58a94926c8775b 100644 --- a/test/query.bats +++ b/test/query.bats @@ -7,6 +7,7 @@ load test_helper [ $status -eq 0 ] } +# @test "Check get tables from SQL" { ${SOAR_BIN} -list-test-sqls | ${SOAR_BIN} -report-type tables > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden ${SOAR_BIN} -list-test-sqls | ${SOAR_BIN} -report-type tables -test-dsn "/sakila" >> ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden @@ -15,3 +16,158 @@ load test_helper [ $status -eq 0 ] } +# SQL 语法检查 + +# 1. soar SQL 分隔符是否正常 (-delimiter) +@test "Check Soar Delimiter" { + ${SOAR_BIN} -delimiter "@" -query "select b from c @ select a from b" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 2. max-column-count (ddl 中才会有提示) +@test "Check Soar Max Column Count" { + ${SOAR_BIN} -query "create table a (a int,b int,c int,d int)" --max-column-count 3 > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# SQL 指纹检查 + +# 1. 检测各种类型的 SQL 语句,以及多条 SQL 语句的情况下,指纹是否正确 +@test "Check Soar SQL Fingerprint" { + ${SOAR_BIN} -list-test-sqls | ${SOAR_BIN} -report-type "fingerprint" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 1. 检测各种类型的 SQL 语句,以及多条SQL语句的情况下,压缩是否正确 +# 1. 检测各种类型的 SQL 语句,以及多条SQL语句的情况下,美化是否正确 +@test "Check Soar SQL pretty And Compress " { + ${SOAR_BIN} -list-test-sqls |${SOAR_BIN} -report-type "pretty"| ${SOAR_BIN} -report-type "compress" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# SQL 改写检查 + +# 1. 检查 SQL 改写 dml2select +@test "Check Soar SQL Rewrite Dml2select " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "dml2select" \ + -query "DELETE FROM film WHERE length > 100" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 2. 检查 SQL 改写 Star2columns +@test "Check Soar SQL Rewrite Star2columns " { + ${SOAR_BIN_ENV} -report-type "rewrite" -rewrite-rules "star2columns" \ + -query "select * from film where length > 120" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 4. 检查 SQL 改写 Having +@test "Check Soar SQL Rewrite Having " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "having" \ + -query "SELECT state, COUNT(*) FROM Drivers GROUP BY state HAVING state IN ('GA', 'TX') ORDER BY state" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 5. 检查 SQL 改写 orderbynull +@test "Check Soar SQL Rewrite Orderbynull " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "orderbynull" \ + -query "SELECT sum(col1) FROM tbl GROUP BY col" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 6. 检查 SQL 改写 unionall +@test "Check Soar SQL Rewrite Unionall " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "unionall" \ + -query "select country_id from city union select country_id from country" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 7. 检查 SQL 改写 or2in +@test "Check Soar SQL Rewrite Or2in " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "or2in" \ + -query "select country_id from city where col1 = 1 or (col2 = 1 or col2 = 2 ) or col1 = 3;" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 7. 检查 SQL 改写 dmlorderby +@test "Check Soar SQL Rewrite Dmlorderby " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "dmlorderby" \ + -query "DELETE FROM tbl WHERE col1=1 ORDER BY col" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 8. 检查 SQL 改写 distinctstar +@test "Check Soar SQL Rewrite Distinctstar " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "distinctstar" \ + -query "SELECT DISTINCT * FROM film;" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 9. 检查 SQL 改写 standard +@test "Check Soar SQL Rewrite Standard " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "standard" \ + -query "SELECT sum(col1) FROM tbl GROUP BY 1;" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 10. 检查 SQL 改写 mergealter +@test "Check Soar SQL Rewrite Mergealter " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "mergealter" \ + -query "ALTER TABLE t2 DROP COLUMN c;ALTER TABLE t2 DROP COLUMN d;" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 11. 检查 SQL 改写 alwaystrue +@test "Check Soar SQL Rewrite Alwaystrue " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "alwaystrue" \ + -query "SELECT count(col) FROM tbl where 'a'= 'a' or ('b' = 'b' and a = 'b');" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 12. 检查 SQL 改写 countstar +@test "Check Soar SQL Rewrite Countstar " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "countstar" \ + -query "SELECT count(col) FROM tbl GROUP BY 1;" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + + +# 16. 检查 SQL 改写 truncate +@test "Check Soar SQL Rewrite Truncate " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "truncate" \ + -query "DELETE FROM tbl" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 17. 检查 SQL 改写 rmparenthesis +@test "Check Soar SQL Rewrite Rmparenthesis " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "rmparenthesis" \ + -query "select col from a where (col = 1)" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +} + +# 18. 检查 SQL 改写 delimiter +@test "Check Soar SQL Rewrite Delimiter " { + ${SOAR_BIN} -report-type "rewrite" -rewrite-rules "delimiter" \ + -query "use sakila" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden + run golden_diff + [ $status -eq 0 ] +}