ztf.go 5.8 KB
Newer Older
1 2 3 4 5
package main

import (
	"flag"
	"github.com/easysoft/zentaoatf/src/action"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
6
	"github.com/easysoft/zentaoatf/src/server"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
7
	serverConst "github.com/easysoft/zentaoatf/src/server/utils/const"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
8
	commonUtils "github.com/easysoft/zentaoatf/src/utils/common"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9
	configUtils "github.com/easysoft/zentaoatf/src/utils/config"
10
	"github.com/easysoft/zentaoatf/src/utils/const"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
11
	fileUtils "github.com/easysoft/zentaoatf/src/utils/file"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
12
	i118Utils "github.com/easysoft/zentaoatf/src/utils/i118"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
13
	logUtils "github.com/easysoft/zentaoatf/src/utils/log"
14
	stringUtils "github.com/easysoft/zentaoatf/src/utils/string"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
15
	"github.com/easysoft/zentaoatf/src/utils/vari"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
16
	"github.com/fatih/color"
17
	"os"
18
	"os/signal"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
19
	"strconv"
20
	"strings"
21
	"syscall"
22 23
)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
24 25 26 27 28 29 30 31 32 33
var (
	language        string
	independentFile bool
	keywords        string

	productId string
	moduleId  string
	taskId    string
	suiteId   string

34 35
	noNeedConfirm bool

aaronchen2k2k's avatar
aaronchen2k2k 已提交
36 37 38
	flagSet *flag.FlagSet
)

39
func main() {
40 41 42 43 44
	channel := make(chan os.Signal)
	signal.Notify(channel, os.Interrupt, syscall.SIGTERM)
	go func() {
		<-channel
		cleanup()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
45
		os.Exit(0)
46 47
	}()

aaronchen2k2k's avatar
aaronchen2k2k 已提交
48
	flagSet = flag.NewFlagSet("atf", flag.ContinueOnError)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
49

aaronchen2k2k's avatar
aaronchen2k2k 已提交
50 51 52
	flagSet.StringVar(&vari.Interpreter, "interp", "", "")
	flagSet.StringVar(&vari.Interpreter, "interpreter", "", "")

aaronchen2k2k's avatar
aaronchen2k2k 已提交
53
	flagSet.StringVar(&productId, "p", "", "")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
54 55
	flagSet.StringVar(&productId, "product", "", "")

aaronchen2k2k's avatar
aaronchen2k2k 已提交
56
	flagSet.StringVar(&moduleId, "m", "", "")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
57 58
	flagSet.StringVar(&moduleId, "module", "", "")

aaronchen2k2k's avatar
aaronchen2k2k 已提交
59 60
	flagSet.StringVar(&suiteId, "s", "", "")
	flagSet.StringVar(&suiteId, "suiteId", "", "")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
61

aaronchen2k2k's avatar
aaronchen2k2k 已提交
62 63
	flagSet.StringVar(&taskId, "t", "", "")
	flagSet.StringVar(&taskId, "taskId", "", "")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
64

aaronchen2k2k's avatar
aaronchen2k2k 已提交
65
	flagSet.StringVar(&language, "l", "", "")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
66 67 68 69
	flagSet.StringVar(&language, "language", "", "")

	flagSet.BoolVar(&independentFile, "i", false, "")
	flagSet.BoolVar(&independentFile, "independent", false, "")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
70

aaronchen2k2k's avatar
aaronchen2k2k 已提交
71 72 73
	flagSet.StringVar(&keywords, "k", "", "")
	flagSet.StringVar(&keywords, "keywords", "", "")

74
	flagSet.BoolVar(&noNeedConfirm, "y", false, "")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
75 76
	flagSet.BoolVar(&vari.Verbose, "verbose", false, "")

aaronchen2k2k's avatar
aaronchen2k2k 已提交
77 78
	flagSet.IntVar(&vari.Port, "P", 0, "")
	flagSet.IntVar(&vari.Port, "port", 0, "")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
79
	flagSet.StringVar(&vari.Platform, "M", string(serverConst.Vm), "")
80

aaronchen2k2k's avatar
aaronchen2k2k 已提交
81 82 83 84 85
	var placeholder string
	flagSet.StringVar(&placeholder, "h", "", "")
	flagSet.StringVar(&placeholder, "r", "", "")
	flagSet.StringVar(&placeholder, "v", "", "")

86 87
	flagSet.StringVar(&vari.UnitTestResult, "result", "", "")

aaronchen2k2k's avatar
aaronchen2k2k 已提交
88 89
	if len(os.Args) == 1 {
		os.Args = append(os.Args, "run", ".")
90 91
	}

92
	switch os.Args[1] {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
93
	case "run", "-r":
aaronchen2k2k's avatar
aaronchen2k2k 已提交
94
		run(os.Args)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
95

aaronchen2k2k's avatar
aaronchen2k2k 已提交
96
	case "checkout", "co":
aaronchen2k2k's avatar
aaronchen2k2k 已提交
97
		if err := flagSet.Parse(os.Args[2:]); err == nil {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
98
			action.Generate(productId, moduleId, suiteId, taskId, independentFile, language)
99
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
100

aaronchen2k2k's avatar
aaronchen2k2k 已提交
101
	case "update", "up":
aaronchen2k2k's avatar
aaronchen2k2k 已提交
102
		if err := flagSet.Parse(os.Args[2:]); err == nil {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
103
			action.Generate(productId, moduleId, suiteId, taskId, independentFile, language)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
104
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
105 106

	case "ci":
aaronchen2k2k's avatar
aaronchen2k2k 已提交
107 108
		files := fileUtils.GetFilesFromParams(os.Args[2:])
		if err := flagSet.Parse(os.Args[len(files)+2:]); err == nil {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
109 110
			action.CommitCases(files)
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
111

aaronchen2k2k's avatar
aaronchen2k2k 已提交
112 113 114
	case "cr":
		files := fileUtils.GetFilesFromParams(os.Args[2:])
		if err := flagSet.Parse(os.Args[len(files)+2:]); err == nil {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
115
			action.CommitZTFTestResult(files, productId, taskId, noNeedConfirm)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
116
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
117

aaronchen2k2k's avatar
aaronchen2k2k 已提交
118
	case "cb":
aaronchen2k2k's avatar
aaronchen2k2k 已提交
119 120
		files := fileUtils.GetFilesFromParams(os.Args[2:])
		if err := flagSet.Parse(os.Args[len(files)+2:]); err == nil {
121
			action.CommitBug(files)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
122 123
		}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
124
	case "list", "ls", "-l":
aaronchen2k2k's avatar
aaronchen2k2k 已提交
125 126
		files := fileUtils.GetFilesFromParams(os.Args[2:])
		if err := flagSet.Parse(os.Args[len(files)+2:]); err == nil {
127 128 129 130
			if len(files) == 0 {
				files = append(files, ".")
			}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
131 132
			action.List(files, keywords)
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
133

aaronchen2k2k's avatar
aaronchen2k2k 已提交
134
	case "view", "-v":
aaronchen2k2k's avatar
aaronchen2k2k 已提交
135 136
		files := fileUtils.GetFilesFromParams(os.Args[2:])
		if err := flagSet.Parse(os.Args[len(files)+2:]); err == nil {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
137 138
			action.View(files, keywords)
		}
139

aaronchen2k2k's avatar
stdin  
aaronchen2k2k 已提交
140
	case "set", "-set":
aaronchen2k2k's avatar
aaronchen2k2k 已提交
141
		action.Set()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
142

143
	case "sort", "-sort":
aaronchen2k2k's avatar
aaronchen2k2k 已提交
144 145 146 147 148 149 150 151
		files := fileUtils.GetFilesFromParams(os.Args[2:])
		if err := flagSet.Parse(os.Args[len(files)+2:]); err == nil {
			action.Sort(files)
		}

	case "clean", "-clean", "-c":
		action.Clean()

aaronchen2k2k's avatar
aaronchen2k2k 已提交
152
	case "help", "-h":
aaronchen2k2k's avatar
help  
aaronchen2k2k 已提交
153
		logUtils.PrintUsage()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
154

aaronchen2k2k's avatar
stdin  
aaronchen2k2k 已提交
155
	default: // run
aaronchen2k2k's avatar
aaronchen2k2k 已提交
156 157 158 159 160 161 162
		if vari.Port != 0 {
			vari.RunMode = constant.RunModeServer
			startServer()

			return
		}

aaronchen2k2k's avatar
stdin  
aaronchen2k2k 已提交
163
		if len(os.Args) > 1 {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
164
			args := []string{os.Args[0], "run"}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
165 166
			args = append(args, os.Args[1:]...)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
167
			run(args)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
168 169 170
		} else {
			logUtils.PrintUsage()
		}
171
	}
172
}
173

aaronchen2k2k's avatar
aaronchen2k2k 已提交
174
func run(args []string) {
175
	if len(args) >= 3 && stringUtils.FindInArr(args[2], constant.UnitTestTypes) { // unit test
aaronchen2k2k's avatar
aaronchen2k2k 已提交
176
		// junit -p 1 mvn clean package test
177
		vari.UnitTestType = args[2]
aaronchen2k2k's avatar
aaronchen2k2k 已提交
178
		end := 8
179
		if end > len(args)-1 {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
180 181
			end = len(args) - 1
		}
182
		flagSet.Parse(args[3:])
183

184 185 186 187 188 189
		start := 3
		if vari.UnitTestResult != "" {
			start = start + 2
		} else {
			vari.UnitTestResult = "./"
		}
190 191 192 193 194 195 196 197
		if productId != "" {
			start = start + 2
			vari.ProductId = productId
		}
		if vari.Verbose {
			start = start + 1
		}

198 199 200 201
		if args[start] == constant.UnitTestToolMvn {
			vari.UnitTestTool = constant.UnitTestToolMvn
		} else if args[start] == constant.UnitTestToolRobot {
			vari.UnitTestTool = constant.UnitTestToolRobot
202 203
		}

204
		cmd := strings.Join(args[start:], " ")
aaronchen2k2k's avatar
aaronchen2k2k 已提交
205
		action.RunUnitTest(cmd)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
206 207
	} else { // func test
		files := fileUtils.GetFilesFromParams(args[2:])
aaronchen2k2k's avatar
aaronchen2k2k 已提交
208

aaronchen2k2k's avatar
aaronchen2k2k 已提交
209 210
		err := flagSet.Parse(args[len(files)+2:])
		if err == nil {
211 212
			vari.ProductId = productId

aaronchen2k2k's avatar
aaronchen2k2k 已提交
213 214 215
			if len(files) == 0 {
				files = append(files, ".")
			}
216

aaronchen2k2k's avatar
aaronchen2k2k 已提交
217 218 219
			if vari.Interpreter != "" {
				logUtils.PrintToWithColor(i118Utils.I118Prt.Sprintf("run_with_specific_interpreter", vari.Interpreter), color.FgCyan)
			}
220
			action.RunZTFTest(files, suiteId, taskId)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
221 222 223
		} else {
			logUtils.PrintUsage()
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
224 225 226
	}
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
227 228 229 230 231
func startServer() {
	vari.IP = commonUtils.GetIp()
	logUtils.PrintToWithColor(i118Utils.I118Prt.Sprintf("start_server", vari.IP, strconv.Itoa(vari.Port)), color.FgCyan)

	server := server.NewServer()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
232
	server.Init()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
233 234 235 236 237
	server.Run()

	return
}

238
func init() {
239
	cleanup()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
240

aaronchen2k2k's avatar
aaronchen2k2k 已提交
241
	configUtils.InitConfig()
242
}
243 244 245

func cleanup() {
	color.Unset()
246
}