test.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package test
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "os"
  7. "reflect"
  8. "regexp"
  9. "scd_check_tools/conf"
  10. "scd_check_tools/email"
  11. "scd_check_tools/logger"
  12. "scd_check_tools/models/bo"
  13. "scd_check_tools/tools"
  14. "strings"
  15. "sync"
  16. "time"
  17. )
  18. //单元测试时使用的固定的用户token
  19. //在start时传入
  20. var UnitTestToken = ""
  21. //单元测试类
  22. type UnitTest struct {
  23. UserInfo map[string]interface{}
  24. }
  25. func Start(testtoken string) {
  26. //判断当前运行模式,仅当runmode为test时才启动所有的测试
  27. //启动时会执行该方法中所有的测试过程
  28. if conf.GlobalConfig["unittest"] != "true" {
  29. return
  30. }
  31. UnitTestToken = testtoken
  32. go func() {
  33. time.Sleep(10 * time.Second)
  34. t := new(UnitTest)
  35. logger.Logger.Println("******************正在进行单元测试********************")
  36. if t.UserInfo == nil {
  37. t.UserInfo = map[string]interface{}{"name": "单元测试", "ip": "127.0.0.1"}
  38. }
  39. typ := reflect.TypeOf(t)
  40. val := reflect.ValueOf(t) //获取reflect.Type类型
  41. numOfMethod := typ.NumMethod()
  42. logger.Logger.Println(fmt.Sprintf("需要进行的单元测试有%d个", numOfMethod))
  43. for i := 0; i < numOfMethod; i++ {
  44. val.Method(i).Call(nil)
  45. }
  46. }()
  47. }
  48. func (t *UnitTest) TestReg() {
  49. return
  50. xmlStr := `<LN0 lineno="211125" nodeid="4211127" desc="" inst="" lnClass="LLN0" lnType="AutoPrefix1532860310_SAC_PSIU600_LLN0" prefix="">`
  51. pattern := `( lineno="\d{1,}" nodeid="\d{1,}")|(&#xA;)|( ix="")|(<ext:eOption.*?>.*?</ext:eOption>)` //替换其中的lineno和nodeid属性
  52. reg := regexp.MustCompile(pattern)
  53. xmlStr = reg.ReplaceAllString(xmlStr, "")
  54. fmt.Println(xmlStr)
  55. }
  56. //测试邮件发送
  57. func (t *UnitTest) TestEmailSend() {
  58. return
  59. err := new(email.Send).SendEmail("3116246@qq.com", "测试", "这是邮件发送测试", []string{})
  60. if err != nil {
  61. logger.Logger.Error(err)
  62. } else {
  63. logger.Logger.Println("=====测试邮件已发送成功,请登录测试邮件确认!")
  64. }
  65. }
  66. //测试:根据告警等级统计结果
  67. func (t *UnitTest) GetRuleLevelCheckList() {
  68. return
  69. //appport := conf.GlobalConfig["appport"]
  70. //url := "http://127.0.0.1:" + appport + "/api/model/get_south_model"
  71. //logger.Logger.Println(fmt.Sprintf("============正在测试GetModelList方法,请求URL:%s", url))
  72. //testResult, _ := tools.Get(url, UnitTestToken)
  73. //logger.Logger.Println(fmt.Sprintf("============GetModelList方法测试结果:%+v", testResult))
  74. testobj := new(bo.ScdNodeRule)
  75. testobj.ScdID = 16000007
  76. logger.Logger.Println(fmt.Sprintf("============正在测试[根据告警等级统计结果]方法,参数:"))
  77. result, err := testobj.ResultStatByLevel("", "", "", "", "")
  78. if err != nil {
  79. logger.Logger.Error(err)
  80. }
  81. resultStr, _ := json.Marshal(result)
  82. logger.Logger.Println(fmt.Sprintf("============[根据告警等级统计结果]测试结果:%+v", string(resultStr)))
  83. }
  84. //测试:获取规则校验统计结果
  85. func (t *UnitTest) GetRuleCheckList() {
  86. return
  87. //appport := conf.GlobalConfig["appport"]
  88. //url := "http://127.0.0.1:" + appport + "/api/model/get_south_model"
  89. //logger.Logger.Println(fmt.Sprintf("============正在测试GetModelList方法,请求URL:%s", url))
  90. //testResult, _ := tools.Get(url, UnitTestToken)
  91. //logger.Logger.Println(fmt.Sprintf("============GetModelList方法测试结果:%+v", testResult))
  92. testobj := new(bo.ScdNodeRule)
  93. testobj.ScdID = 16000007
  94. logger.Logger.Println(fmt.Sprintf("============正在测试[获取规则校验统计结果]方法,参数:"))
  95. result, _, err := testobj.ResultList("", "", "", "", "", "", 1, 20)
  96. if err != nil {
  97. logger.Logger.Error(err)
  98. }
  99. resultStr, _ := json.Marshal(result)
  100. logger.Logger.Println(fmt.Sprintf("============[获取规则校验统计结果]测试结果:%+v", string(resultStr)))
  101. }
  102. //测试:解析scd文件的间隔和装置
  103. func (t *UnitTest) PScdIed() {
  104. return
  105. appport := conf.GlobalConfig["appport"]
  106. url := "http://127.0.0.1:" + appport + "/api/screen/scd/parse/step1"
  107. logger.Logger.Println(fmt.Sprintf("============正在测试解析scd文件的间隔和装置方法,请求URL:%s", url))
  108. postdata := []string{"station_id=861", "scd_path=\\static\\download\\曲山20210520.scd", "scd_name=曲山20210520.scd"}
  109. postdataStr := strings.Join(postdata, "&")
  110. testResult, _ := tools.Post(url, postdataStr, UnitTestToken)
  111. logger.Logger.Println(fmt.Sprintf("============解析scd文件的间隔和装置方法测试结果:%+v", testResult))
  112. }
  113. //测点:创建测试任务
  114. func (t *UnitTest) CTask() {
  115. return
  116. appport := conf.GlobalConfig["appport"]
  117. url := "http://127.0.0.1:" + appport + "/api/task/save"
  118. logger.Logger.Println(fmt.Sprintf("============正在测试创建任务方法,请求URL:%s", url))
  119. postdata := []string{"id=0", "name=UnitTest_检测任务", "station_id=861", "memo=这是一个检测任务", "report_id=10", "scd_id=10", "modelids=[[1,2]]"}
  120. postdataStr := strings.Join(postdata, "&")
  121. testResult, _ := tools.Post(url, postdataStr, UnitTestToken)
  122. logger.Logger.Println(fmt.Sprintf("============创建任务方法测试结果:%+v", testResult))
  123. }
  124. //测点:删除测试任务
  125. func (t *UnitTest) DTask() {
  126. return
  127. appport := conf.GlobalConfig["appport"]
  128. url := "http://127.0.0.1:" + appport + "/api/task/delete"
  129. logger.Logger.Println(fmt.Sprintf("============正在测试删除任务方法,请求URL:%s", url))
  130. postdata := []string{"id=91"}
  131. postdataStr := strings.Join(postdata, "&")
  132. testResult, _ := tools.Post(url, postdataStr, UnitTestToken)
  133. logger.Logger.Println(fmt.Sprintf("============删除任务方法测试结果:%+v", testResult))
  134. }
  135. //测试:添加接线方式
  136. func (t *UnitTest) AddTest12() {
  137. return
  138. appport := conf.GlobalConfig["appport"]
  139. url := "http://127.0.0.1:" + appport + "/api/admin/linkstyle/save"
  140. logger.Logger.Println(fmt.Sprintf("============正在测试添加接线方式方法,请求URL:%s", url))
  141. postdata := []string{"id=2", "name=单2母方式", "vol_id=152"}
  142. postdataStr := strings.Join(postdata, "&")
  143. testResult, _ := tools.Post(url, postdataStr, UnitTestToken)
  144. logger.Logger.Println(fmt.Sprintf("============添加接线方式方法测试结果:%+v", testResult))
  145. }
  146. //测试:查询接线方式
  147. func (t *UnitTest) AddTest13() {
  148. return
  149. appport := conf.GlobalConfig["appport"]
  150. url := "http://127.0.0.1:" + appport + "/api/admin/linkstyle/list"
  151. logger.Logger.Println(fmt.Sprintf("============正在测试查询接线方式方法,请求URL:%s", url))
  152. //postdata := []string{"id=2", "name=单2母方式", "vol_id=152"}
  153. //postdataStr := strings.Join(postdata, "&")
  154. testResult, _ := tools.Get(url, UnitTestToken)
  155. logger.Logger.Println(fmt.Sprintf("============查询接线方式方法测试结果:%+v", testResult))
  156. }
  157. //测试:添加内置模型
  158. func (t *UnitTest) AddTest14() {
  159. return
  160. appport := conf.GlobalConfig["appport"]
  161. url := "http://127.0.0.1:" + appport + "/api/admin/sysmodel/save"
  162. logger.Logger.Println(fmt.Sprintf("============正在测试添加内置模型方法,请求URL:%s", url))
  163. postdata := []string{"id=1", "model_name=线路保护", "vol_id=152", "area_type=116330", "ied_types=P,M,I,C,MM,PM", "line_link_style=2", "relation_json="}
  164. postdataStr := strings.Join(postdata, "&")
  165. testResult, _ := tools.Post(url, postdataStr, UnitTestToken)
  166. logger.Logger.Println(fmt.Sprintf("============添加内置模型方法测试结果:%+v", testResult))
  167. }
  168. //测试:查询内置模型
  169. func (t *UnitTest) AddTest15() {
  170. return
  171. appport := conf.GlobalConfig["appport"]
  172. url := "http://127.0.0.1:" + appport + "/api/admin/sysmodel/list"
  173. logger.Logger.Println(fmt.Sprintf("============正在测试查询内置模型方法,请求URL:%s", url))
  174. //postdata := []string{"id=2", "name=单2母方式", "vol_id=152"}
  175. //postdataStr := strings.Join(postdata, "&")
  176. testResult, _ := tools.Get(url, UnitTestToken)
  177. logger.Logger.Println(fmt.Sprintf("============查询内置模型方法测试结果:%+v", testResult))
  178. }
  179. func (t *UnitTest) Test16() {
  180. return
  181. testobj := new(bo.CheckAreaMgr)
  182. testobj.ScdId = 4000002
  183. logger.Logger.Println(fmt.Sprintf("============正在测试[生成检测模型间隔]方法,参数:"))
  184. testobj.Reset()
  185. }
  186. func (t *UnitTest) Test17() {
  187. return
  188. logger.Logger.Println(fmt.Sprintf("============正在测试[模型复制]方法,参数:"))
  189. testobj := new(bo.SysCheckModelMgr)
  190. testobj.Model.ModelName = "[15]"
  191. testobj.Copy(9)
  192. }
  193. func (t *UnitTest) Test18() {
  194. return
  195. logger.Logger.Println(fmt.Sprintf("============正在测试[删除模型]方法,参数:"))
  196. testobj := new(bo.SysCheckModelMgr)
  197. testobj.Model.Id = 32
  198. testobj.Delete()
  199. }
  200. func (t *UnitTest) Test19() {
  201. return
  202. logger.Logger.Println(fmt.Sprintf("=============正在测试生成报告"))
  203. appport := conf.GlobalConfig["appport"]
  204. url := "http://127.0.0.1:" + appport + "/api/report/make"
  205. logger.Logger.Println(fmt.Sprintf("============正在测试报告生成,请求URL:%s", url))
  206. postdata := []string{"task_id=131"}
  207. postdataStr := strings.Join(postdata, "&")
  208. testResult, _ := tools.Post(url, postdataStr, UnitTestToken)
  209. logger.Logger.Println(fmt.Sprintf("============测试结果报告生成:%+v", testResult))
  210. }
  211. func (t *UnitTest) TestDoiNameRex(regstr, soruce string) {
  212. defer func() {
  213. os.Exit(0)
  214. }()
  215. regstrs := strings.Split(regstr, "&")
  216. if len(regstrs) == 1 {
  217. //未分组时,直接匹配
  218. fcdarex, err2 := regexp.Compile(regstr)
  219. if err2 != nil {
  220. logger.Logger.Error(err2, regstr)
  221. return
  222. }
  223. r := fcdarex.MatchString(soruce)
  224. if !r {
  225. logger.Logger.Debug(errors.New("表达式验证未通过:" + regstr + " 匹配目标:" + soruce))
  226. }
  227. fmt.Println(fmt.Sprintf("匹配结果%+v", r))
  228. return
  229. }
  230. wg := sync.WaitGroup{}
  231. wg.Add(len(regstrs))
  232. wgResultFalse := sync.Map{}
  233. for _, item := range regstrs {
  234. go func(item string) {
  235. fcdarex, err2 := regexp.Compile(item)
  236. r := true
  237. if err2 != nil {
  238. logger.Logger.Error(err2, item)
  239. r = false
  240. wgResultFalse.Store("false", r)
  241. } else if !fcdarex.MatchString(soruce) {
  242. r = false
  243. wgResultFalse.Store("false", r)
  244. }
  245. fmt.Println(fmt.Sprintf("表达式%s匹配结果%+v", item, r))
  246. wg.Done()
  247. }(item)
  248. }
  249. wg.Wait()
  250. fmt.Println(fmt.Sprintf("匹配结果%+v", wgResultFalse))
  251. matchSuccess := true
  252. if _, h := wgResultFalse.Load("false"); h {
  253. matchSuccess = false
  254. }
  255. fmt.Println(fmt.Sprintf("总的匹配结果:%+v", matchSuccess))
  256. }
  257. func (t *UnitTest) TestIntAddrParse() {
  258. return
  259. defer func() {
  260. os.Exit(0)
  261. }()
  262. intAddr := ""
  263. addrs := strings.Split(intAddr, ":")
  264. if len(addrs) == 2 {
  265. intAddr = addrs[1]
  266. }
  267. intAddrs := strings.Split(intAddr, "/")
  268. if len(intAddrs) == 1 {
  269. logger.Logger.Error(errors.New(fmt.Sprintf("无效的intAddr:%s", intAddr)))
  270. return
  271. }
  272. ldinst := intAddrs[0]
  273. lnstr := intAddrs[1]
  274. v_tmpAry := strings.Split(lnstr, ".")
  275. if len(v_tmpAry) < 2 {
  276. logger.Logger.Error(errors.New(fmt.Sprintf("无效的intAddr:%s", intAddr)))
  277. return
  278. }
  279. doda := v_tmpAry[1:]
  280. doname := ""
  281. daname := ""
  282. if len(doda) == 1 {
  283. //只有do
  284. doname = doda[0]
  285. } else {
  286. doname = doda[0]
  287. daname = strings.Join(doda[1:], ".") //还原da
  288. }
  289. fmt.Println(fmt.Sprintf("lnstr:%s,ldinst:%s,doname:%s,daname:%s", lnstr, ldinst, doname, daname))
  290. }