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

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

aaronchen2k2k's avatar
aaronchen2k2k 已提交
13 14 15 16 17 18 19
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 已提交
20

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

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

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

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

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

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

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

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

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

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

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

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

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

65 66 67 68 69 70 71 72
		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 已提交
73
	}
74
	(*summaryMap)["total"] = (*summaryMap)["total"].(int) + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
75 76 77 78 79

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

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

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

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

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

aaronchen2k2k's avatar
aaronchen2k2k 已提交
99 100 101 102 103 104 105
	var sslice []string
	for key, _ := range resultMap {
		sslice = append(sslice, key)
	}
	sort.Strings(sslice)

	for _, script := range sslice {
106
		count := 0
aaronchen2k2k's avatar
aaronchen2k2k 已提交
107
		log = fmt.Sprintf("\n%s: %t", script, resultMap[script])
108 109
		logs = append(logs, log)
		fmt.Println(log)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
110

111
		checkpoints := checkpointMap[script]
aaronchen2k2k's avatar
aaronchen2k2k 已提交
112

113 114
		for _, line := range checkpoints {
			if count > 0 && strings.Index(line, "Line ") > -1 {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
115
				logs = append(logs, "")
116
				fmt.Println("")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
117
			}
118 119 120 121 122 123

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

			count++
aaronchen2k2k's avatar
aaronchen2k2k 已提交
124
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
125
	}
126

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