check.go 2.5 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 23 24 25 26 27 28 29 30
	for _, scriptFile := range scriptFiles {
		logFile := utils.ScriptToLog(scriptFile)

		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 45 46 47 48 49 50 51

	for numb, line := range expectArr {
		log := "N/A"
		if len(logArr) > numb {
			log = logArr[numb]
		}

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

aaronchen2k2k's avatar
aaronchen2k2k 已提交
52 53
		if !pass {
			result = false
aaronchen2k2k's avatar
aaronchen2k2k 已提交
54 55 56
			(*summaryMap)["fail"] = (*summaryMap)["fail"].(int) + 1
		} else {
			(*summaryMap)["pass"] = (*summaryMap)["pass"].(int) + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
57
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
58
		(*summaryMap)["total"] = (*summaryMap)["total"].(int) + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
59 60 61 62 63 64 65 66 67 68 69 70 71

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

		if !pass {
			checkpoints = append(checkpoints, "Expect "+line)
			checkpoints = append(checkpoints, "Actual "+log)
		}
	}

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

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

	fmt.Printf("From %s to %s, duration %d sec \n",
		startSec.Format("2006-01-02 15:04:05"),
		endSec.Format("2006-01-02 15:04:05"),
		summaryMap["duration"])

	fmt.Printf("Total: %d, Fail: %d, Pass: %d \n",
		summaryMap["total"], summaryMap["pass"], summaryMap["fail"])
aaronchen2k2k's avatar
aaronchen2k2k 已提交
83 84 85

	for script, result := range resultMap {

aaronchen2k2k's avatar
aaronchen2k2k 已提交
86
		fmt.Printf("\n--- Case %s: %t \n", script, result)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
87 88 89 90 91 92 93 94 95 96 97
		if !result {
			checkpoints := checkpointMap[script]

			for _, line := range checkpoints {
				if strings.Index(line, "Line") > -1 {
					fmt.Printf("\n")
				}

				fmt.Printf("    %s \n", line)
			}
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
98 99
	}
}