package Engine import ( "fmt" "LAPP_PRN_Service/common" conf "LAPP_PRN_Service/config" "LAPP_PRN_Service/db" "testing" "time" ) func TestEngine(t *testing.T) { conf, err := conf.ReadYamlConfig("D:\\Go\\gopath\\src\\LAPP_PLATFORM\\conf\\config.yaml") if err != nil { t.Errorf("failed to read yaml config due to: %v", err) return } RunEngine(conf) time.Sleep(60 * time.Second) } // 测试不同服务之间的GoRouting通信 /** |-- 管道 --| --> 1号打印机 --| Fetcher--|--管道--|Scheduler --->| |--管道--|--> Saver |-- 管道 --| --> 2号打印机 --| 引擎管理对象: 1. Fetcher 2. Fetcher -> Scheduler 管道 3. Scheduler 4. Printer列表 (每个Printer包括接收数据的管道和缓存数据的队列) 5. 打印机 -> Saver的管道 6. Saver(带有缓存数据队列) **/ func TestEngineRoutine(t *testing.T) { fschan := make(chan int) // 数据获取服务到调度器的管道 sp1chan := make(chan int) // 调度器到1号打印机的管道 sp2chan := make(chan int) // 调度器到2号打印机的管道 pschan := make(chan int) // 打印机到保存服务的管道 var t1, t2 time.Time var sp1q []int var sp2q []int t1 = time.Now() fmt.Println("start time = ", t1) // 模拟数据获取服务 go func() { for i := 0; i < 40000; i++ { fschan <- i } }() // 启动调度器服务 go func() { for { i := <-fschan if i%2 == 0 { sp1chan <- i } else { sp2chan <- i } } }() // 启动打印机1服务 go func() { for { i := <-sp1chan //fmt.Println("打印机1接收打印任务:", i) sp1q = append(sp1q, i) } }() // 启动打印机2服务 go func() { for { i := <-sp2chan //fmt.Println("打印机2接收打印任务:", i) sp2q = append(sp2q, i) } }() go func() { for { if len(sp1q) > 0 { i := sp1q[0] sp1q = sp1q[1:] pschan <- i fmt.Println("打印机1:任务:", i, "完成") } } }() go func() { for { if len(sp2q) > 0 { i := sp2q[0] sp2q = sp2q[1:] pschan <- i fmt.Println("打印机2:任务:", i, "完成") } } }() // 启动保存服务 go func() { for { i := <-pschan fmt.Println("任务:", i, " 被保存") if i >= 39998 { t2 = time.Now() fmt.Println("end time = ", t2) } } }() time.Sleep(10 * time.Second) sub := t2.Sub(t1) fmt.Println("Duration = ", sub.Seconds()) } func TestEngineRoutineWithQueue(t *testing.T) { fschan := make(chan int) // 数据获取服务到调度器的管道 sp1chan := make(chan int) // 调度器到1号打印机的管道 sp2chan := make(chan int) // 调度器到2号打印机的管道 pschan := make(chan int) // 打印机到保存服务的管道 var t1, t2 time.Time t1 = time.Now() fmt.Println("start time = ", t1) // 模拟数据获取服务 go func() { for i := 0; i < 40000; i++ { fschan <- i } }() // 启动调度器服务 go func() { for { i := <-fschan if i%2 == 0 { sp1chan <- i } else { sp2chan <- i } } }() // 启动打印机1服务 go func() { var sp1q []int var t int for { if len(sp1q) > 0 { t = sp1q[0] } else { continue } select { case i := <-sp1chan: sp1q = append(sp1q, i) fmt.Println("打印机1接收打印任务:", i) case pschan <- t: sp1q = sp1q[1:] fmt.Println("打印机1发送保存任务:", t) } } }() // 启动打印机2服务 go func() { var sp2q []int var t int for { if len(sp2q) > 0 { t = sp2q[0] } else { continue } select { case i := <-sp2chan: sp2q = append(sp2q, i) fmt.Println("打印机2接收打印任务:", i) case pschan <- t: sp2q = sp2q[1:] fmt.Println("打印机2发送保存任务:", t) } } }() // 启动保存服务 go func() { for { i := <-pschan fmt.Println("任务:", i, " 被保存") if i >= 39998 { t2 = time.Now() fmt.Println("end time = ", t2) } } }() time.Sleep(10 * time.Second) sub := t2.Sub(t1) fmt.Println("Duration = ", sub.Seconds()) } func TestDelPrinterInfo(t *testing.T) { var ( connstring string err error ) // 连接数据库 connstring = fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", `10.114.64.19`, "lapp", "123fis", "SJA_APS", 1433) if err = db.InitMssqlDb(connstring); err != nil { t.Errorf("Failed to connect db due to: %v", err) return } //defer db.G_DbEngine.Close() tick := time.Tick(5 * time.Second) //tick := time.Tick(72 * time.Hour) for { select { case <-tick: //执行删除操作 before7day := time.Now().AddDate(0, 0, -1) fmt.Printf("before7day:%s", before7day) t.Log("before7day") timestr := common.TimeFormat(before7day, "yyyyMMddHHmmss") t.Log(timestr) printer := new(db.PrintHead) printer.PlantNr = db.PlantNr printer.DelBefore7DayRecords(timestr) } } }