check.go 3.0 KB
Newer Older
aaronchen2k2k's avatar
aaronchen2k2k 已提交
1 2 3 4 5
package biz

import (
	"fmt"
	"regexp"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
6
	"strconv"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
7
	"strings"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
8
	"time"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9 10 11
	"utils"
)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
12 13 14 15 16 17 18
func CheckResults(dir string, langType string,
	summaryMap *map[string]interface{}, resultMap *map[string]bool, checkpointMap *map[string][]string) {
	fmt.Printf("\n=== Begin to analyse test result ===\n\n")

	(*summaryMap)["pass"] = 0
	(*summaryMap)["fail"] = 0
	(*summaryMap)["total"] = 0
aaronchen2k2k's avatar
aaronchen2k2k 已提交
19

aaronchen2k2k's avatar
aaronchen2k2k 已提交
20
	scriptFiles, _ := utils.GetAllFiles(dir, langType)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
21

aaronchen2k2k's avatar
aaronchen2k2k 已提交
22
	for _, scriptFile := range scriptFiles {
23
		logFile := utils.ScriptToLogName(scriptFile)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
24 25 26 27 28 29 30

		expectContent := utils.ReadExpect(scriptFile)
		logContent := utils.ReadFile(logFile)

		expectContent = strings.Trim(expectContent, "\n")
		logContent = strings.Trim(logContent, "\n")

aaronchen2k2k's avatar
aaronchen2k2k 已提交
31
		Compare(scriptFile, expectContent, logContent, summaryMap, resultMap, checkpointMap)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
32 33 34
	}
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
35
func Compare(scriptFile string, expectContent string, logContent string,
aaronchen2k2k's avatar
aaronchen2k2k 已提交
36
	summaryMap *map[string]interface{}, resultMap *map[string]bool, checkpointMap *map[string][]string) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
37 38 39
	expectArr := strings.Split(expectContent, "\n")
	logArr := strings.Split(logContent, "\n")

aaronchen2k2k's avatar
aaronchen2k2k 已提交
40 41 42
	checkpoints := make([]string, 0)

	result := true
aaronchen2k2k's avatar
aaronchen2k2k 已提交
43 44

	for numb, line := range expectArr {
45 46 47 48 49
		line = strings.TrimSpace(line)
		if line == "#" || line == "" {
			continue
		}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
50 51 52
		log := "N/A"
		if len(logArr) > numb {
			log = logArr[numb]
53
			log = strings.TrimSpace(log)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
54 55 56 57
		}

		pass, _ := regexp.MatchString(line, log)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
58 59 60 61 62 63
		if !pass {
			result = false
		}

		checkpoints = append(checkpoints, "Line "+strconv.Itoa(numb+1)+": "+strconv.FormatBool(result))

64 65 66 67 68 69 70 71
		checkpoints = append(checkpoints, "Expect "+line)
		checkpoints = append(checkpoints, "Actual "+log)
	}

	if !result {
		(*summaryMap)["fail"] = (*summaryMap)["fail"].(int) + 1
	} else {
		(*summaryMap)["pass"] = (*summaryMap)["pass"].(int) + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
72
	}
73
	(*summaryMap)["total"] = (*summaryMap)["total"].(int) + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
74 75 76 77 78

	(*resultMap)[scriptFile] = result
	(*checkpointMap)[scriptFile] = checkpoints
}

79
func Print(summaryMap map[string]interface{}, resultMap map[string]bool, checkpointMap map[string][]string, workDir string) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
80 81 82
	startSec := time.Unix(summaryMap["startTime"].(int64), 0)
	endSec := time.Unix(summaryMap["endTime"].(int64), 0)

83 84 85 86
	var log string
	logs := make([]string, 0)

	log = fmt.Sprintf("From %s to %s, duration %d sec",
aaronchen2k2k's avatar
aaronchen2k2k 已提交
87 88 89
		startSec.Format("2006-01-02 15:04:05"),
		endSec.Format("2006-01-02 15:04:05"),
		summaryMap["duration"])
90 91
	logs = append(logs, log)
	fmt.Println(log)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
92

93
	log = fmt.Sprintf("Total: %d, Fail: %d, Pass: %d",
aaronchen2k2k's avatar
aaronchen2k2k 已提交
94
		summaryMap["total"], summaryMap["pass"], summaryMap["fail"])
95 96
	logs = append(logs, log)
	fmt.Println(log)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
97 98

	for script, result := range resultMap {
99 100 101 102
		count := 0
		log = fmt.Sprintf("\n--- Case %s: %t", script, result)
		logs = append(logs, log)
		fmt.Println(log)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
103

104
		checkpoints := checkpointMap[script]
aaronchen2k2k's avatar
aaronchen2k2k 已提交
105

106 107 108 109
		for _, line := range checkpoints {
			if count > 0 && strings.Index(line, "Line ") > -1 {
				logs = append(logs, "\n")
				fmt.Println("")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
110
			}
111 112 113 114 115 116

			log = fmt.Sprintf("    %s", line)
			logs = append(logs, log)
			fmt.Println(log)

			count++
aaronchen2k2k's avatar
aaronchen2k2k 已提交
117
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
118
	}
119 120

	utils.WriteFile(workDir+"/logs/log.txt", strings.Join(logs, "\n"))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
121
}