main.bats 4.9 KB
Newer Older
1 2 3 4
#!/usr/bin/env bats

load test_helper

5 6
# 1. 检查版本输出格式是否正确
# 2. 检查版本是否为当天编译的
X
xiyangxixian 已提交
7 8 9 10 11 12
@test "Test soar version" {
  run ${SOAR_BIN} -version
  [ "$status" -eq 0 ]
  [ "${lines[0]%% *}" == "Version:" ]
  [ "${lines[1]%% *}" == "Branch:" ]
  [ "${lines[2]%% *}" == "Compile:" ]
13
  [ $(expr "${lines[2]}" : "Compile: $(date +'%Y-%m-%d').*") -ne 0 ]   # 检查当前版本是否为今日编译的
14 15
}

16
# 3. 无参数执行是否正确
X
xiyangxixian 已提交
17 18
@test "No arguments prints message" {
  run ${SOAR_BIN}
19
  [ $status -eq 1 ]
X
xiyangxixian 已提交
20
  [ "${lines[0]}" == 'Args format error, use --help see how to use it!' ]
21 22
}

23
# 4. 检查输出的默认值是否改变 soar -print-config  加log-outpt 是因为日志默认是相对路径 
X
xiyangxixian 已提交
24
@test "Run default printconfig cases" {
W
wenzhi 已提交
25
  ${SOAR_BIN} -print-config -log-output=/dev/null  > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden
martianzhang's avatar
martianzhang 已提交
26
  run golden_diff
27
  echo "${output}"
28 29
  [ $status -eq 0 ]
}
X
xiyangxixian 已提交
30

31
# 5. soar 使用 config 配置文件路径是否正确
W
wenzhi 已提交
32
# 13. soar -check-config 数据库连接配置检查 *
33
# soar 数据库测试(线上、线下、-allow-online-as-test)
X
xiyangxixian 已提交
34
@test "Check config cases" {
W
wenzhi 已提交
35
  run ${SOAR_BIN_ENV} -check-config
X
xiyangxixian 已提交
36 37 38 39
  [ $status -eq 0 ]
  [ -z ${output} ]
}

40 41 42 43 44
# 6. soar 使用配置文件修改默认参数是否正确
# 注意:不启用的配置为默认配置项目
@test "Check the default config of the changes" {
  ${SOAR_BIN} -config ${BATS_FIXTURE_DIRNAME}/${BATS_TEST_NAME}.golden -print-config  -log-output=/dev/null > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden
  run golden_diff
45
  echo "${output}"
46 47 48 49 50 51 52
  [ $status -eq 0 ]
}

# 8. 执行 soar -query 为文件时是否正常
@test "Check soar query for input file" {
  ${SOAR_BIN} -query <(${SOAR_BIN} -list-test-sqls) > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden
  run golden_diff
53
  echo "${output}"
54 55 56 57 58 59 60
  [ $status -eq 0 ]
}

# 9. 管道输入 SQL 是否正常
@test "Check soar for pipe input" {
  ${SOAR_BIN} -list-test-sqls |${SOAR_BIN} > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden
  run golden_diff
61
  echo "${output}"
62 63
  [ $status -eq 0 ]
}
W
wenzhi 已提交
64
# 10. report 为 json 格式是否正常
65 66 67 68
@test "Check soar report for json" {
  ${SOAR_BIN} -query "select * from film" \
    -report-type json > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden
  run golden_diff
69
  echo "${output}"
70 71 72
  [ $status -eq 0 ]
}

W
wenzhi 已提交
73
# 10. report 为 markdown 格式是否正常
74 75 76 77
@test "Check soar report for markdown" {
  ${SOAR_BIN} -query "select * from film" \
    -report-type markdown > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden
  run golden_diff
78
  echo "${output}"
79 80 81 82 83 84 85 86 87
  [ $status -eq 0 ]
}

# 11. report 格式 html 检查
@test "Check soar report for html" {
  ${SOAR_BIN} -query "select * from film" \
    -report-title "soar report check" \
    -report-type html > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden
  run golden_diff
88
  echo "${output}"
89 90 91
  [ $status -eq 0 ]
}

W
wenzhi 已提交
92
# 12. 黑名单功能是否正常
93 94 95 96 97 98 99
# soar 的日志和黑名单的相对路径都相对于 soar 的二进制文件路径说的
@test "Check soar blacklist" {
  run ${SOAR_BIN} -blacklist ../etc/soar.blacklist -query "show processlist;"
  [ $status -eq 0 ]
  [ -z ${output} ]
}

W
wenzhi 已提交
100
# 13. soar -check-config 数据库连接配置检查 *
101 102
# 参见 5

W
wenzhi 已提交
103
# 14. soar -help 检查
104 105 106 107 108 109
@test "Check soar help" {
  run ${SOAR_BIN} -help
  [ $status -eq 2 ]
  [ "${#lines[@]}" -gt 30 ]
}

W
wenzhi 已提交
110
# 15. soar 数据库测试(线上、线下、-allow-online-as-test)
111 112 113
# 参见 5

# 16. 语法检查(正确)
X
xiyangxixian 已提交
114 115 116
@test "Syntax Check OK" {
  run ${SOAR_BIN} -query "select * from film" -only-syntax-check
  [ $status -eq 0 ]
W
wenzhi 已提交
117
  [ -z $ouput ]
X
xiyangxixian 已提交
118
}
119
# 16. 语法检查(错误)
X
xiyangxixian 已提交
120 121 122
@test "Syntax Check Error" {
  run ${SOAR_BIN} -query "select * frm film" -only-syntax-check
  [ $status -eq 1 ]
W
wenzhi 已提交
123
  [ -n $ouput ]
X
xiyangxixian 已提交
124
}
125

W
wenzhi 已提交
126
# 17. dsn 检查
127
@test "Check soar test dsn root:passwd@host:port/db" {
128
  run ${SOAR_BIN} -online-dsn="root:pase@D@192.168.12.11:3306/testDB" -print-config
129 130 131 132 133 134 135 136
  [ $(expr "$output" : ".*user: root") -ne 0 ]
  [ $(expr "$output" : ".*addr: 192.168.12.11:3306") -ne 0 ]
  [ $(expr "$output" : ".*schema: testDB") -ne 0 ]
  [ $(expr "$output" : ".*charset: utf8") -ne 0 ]
}

# 18. 日志中是否含有密码
@test "Check log has password" {
137 138 139
  ${SOAR_BIN_ENV} -query "select * from film" -log-level=7
  run grep "1tIsB1g3rt" ${SOAR_BIN}.log
  [ ${status} -eq 1 ]
140 141 142 143
}

# 18. 输出中是否含有密码
@test "Check stdout has password" {
144 145 146 147 148
  run ${SOAR_BIN_ENV} -query "select * from film" -log-level=7
  [ $(expr "$output" : ".*1tIsB1g3rt.*") -eq 0 ]
  [ ${status} -eq 0 ]
}

149 150 151 152 153 154 155 156 157 158 159
# 20. 单条 SQL 中 JOIN 表的最大数量超过 2
@test "Check Max Join Table Count Overflow" {
  ${SOAR_BIN}  -max-join-table-count 2 -query="select a from b join c join d" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden
  run golden_diff
  echo "${output}"
  [ $status -eq 0 ]
}

# 21. 单条 SQL 中 JOIN 表未超过时是否正常默认为 5
@test "Check Max Join Table Count Default" {
  ${SOAR_BIN} -query="select a from b join c join d" > ${BATS_TMP_DIRNAME}/${BATS_TEST_NAME}.golden
160 161 162
  run golden_diff
  echo "${output}"
  [ $status -eq 0 ]
163
}