-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
63 lines (54 loc) · 1.45 KB
/
main.go
File metadata and controls
63 lines (54 loc) · 1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package main
import (
"concurrent-sql/tests"
"concurrent-sql/verify"
"database/sql"
"flag"
"fmt"
_ "github.com/go-sql-driver/mysql"
"log"
"strings"
)
var paramDir = flag.String("dir", "test-cases", "specify the test case directory")
var genExpect = flag.Bool("gen", false, "generate a expect result of specified query")
var dsn = flag.String("dsn", "root@tcp(127.0.0.1:4000)/?allowNativePasswords=true&maxAllowedPacket=0", "db connection")
var query = flag.String("query", "", "specify the query to be execute to get the expect result string")
func main() {
// 1. find all test cases.
flag.Parse()
if *genExpect {
printExpectResult(*dsn, *query)
return
}
log.Printf("begin test")
log.Printf("dir=%s", *paramDir)
var testCases []*tests.TestCase
if cases, err := tests.LoadCases(*paramDir); err != nil {
log.Fatal(err)
} else {
testCases = cases
log.Printf("%d cases loaded", len(testCases))
}
// 2. invoke each case's run.
for _, c := range testCases {
if err := c.Run(); err != nil {
// error happened.
log.Fatal(err)
}
}
log.Printf("test finish")
}
func printExpectResult(dsn, query string) {
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatal("connect to db failed", err)
}
result, err := verify.GetQueryResult(db, query)
if err != nil {
log.Fatal("query from failed", err)
}
str := result.ToOneString()
str = strings.ReplaceAll(str, "\n", "\\n")
str = strings.ReplaceAll(str, "\t", "\\t")
fmt.Println(str)
}