瀏覽代碼

add test case

jinnrry 1 年之前
父節點
當前提交
6b22de8f83

+ 3 - 1
README.md

@@ -129,7 +129,9 @@ The code is in `server` folder.
 
 `make build`
 
-4、
+4、Unit test
+
+`make test`
 
 ## Api Documentation
 

+ 5 - 1
README_CN.md

@@ -128,10 +128,14 @@ SMTP端口: 25/465(SSL)
 
 后端代码进入 `server`文件夹,运行 `main.go`文件
 
-3、编译项目
+3、编译项目
 
 `make build`
 
+4、单元测试
+
+`make test`
+
 ## 后端接口文档
 
 [go to wiki](https://github.com/Jinnrry/PMail/wiki/%E5%90%8E%E7%AB%AF%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3)

+ 0 - 1
server/dto/parsemail/email_decode_test.go

@@ -1 +0,0 @@
-package parsemail

+ 10 - 0
server/hooks/base.go

@@ -151,6 +151,8 @@ func NewHookSender(socketPath string, name string, serverVersion string) *HookSe
 	}
 }
 
+var processList []*os.Process
+
 // Init 注册hook对象
 func Init(serverVersion string) {
 
@@ -184,6 +186,7 @@ func Init(serverVersion string) {
 				return nil
 			}
 			fmt.Printf("[%s] Plugin Start! PID:%d", info.Name(), p.Pid)
+			processList = append(processList, p)
 
 			pluginNo++
 
@@ -214,3 +217,10 @@ func Init(serverVersion string) {
 	})
 
 }
+
+func Stop() {
+	log.Info("Plugin Stop")
+	for _, process := range processList {
+		process.Kill()
+	}
+}

+ 0 - 7
server/main.go

@@ -8,7 +8,6 @@ import (
 	"pmail/config"
 	"pmail/cron_server"
 	"pmail/res_init"
-	"pmail/signal"
 	"pmail/utils/context"
 	"time"
 )
@@ -96,9 +95,3 @@ func main() {
 	log.Warnf("Server Stoped \n")
 
 }
-
-func stop() {
-	log.Warnf("Server Stop \n")
-	signal.RestartChan <- true
-	log.Warnf("Server Stop2 \n")
-}

+ 5 - 11
server/main_test.go

@@ -23,9 +23,6 @@ import (
 var httpClient *http.Client
 
 func TestMain(m *testing.M) {
-
-	fmt.Println("!!!!!TestMain!!!!!!!!")
-
 	cookeieJar, err := cookiejar.New(nil)
 	if err != nil {
 		panic(err)
@@ -34,21 +31,18 @@ func TestMain(m *testing.M) {
 	httpClient = &http.Client{Jar: cookeieJar, Timeout: 5 * time.Second}
 	os.Remove("config/config.json")
 	os.Remove("config/pmail_temp.db")
-	go main()
+	go func() {
+		main()
+	}()
 	time.Sleep(3 * time.Second)
 
 	m.Run()
-	fmt.Println("!!!!!TestMain!!!!!!!!")
-	time.Sleep(5 * time.Second)
-	stop()
-	signal.RestartChan <- false
-	fmt.Println("!!!!!TestMain!!!!!!!!")
 
+	signal.StopChan <- true
+	time.Sleep(3 * time.Second)
 }
 
 func TestMaster(t *testing.T) {
-	fmt.Println("!!!!!TestMaster!!!!!!!!")
-
 	t.Run("TestPort", testPort)
 	t.Run("testDataBaseSet", testDataBaseSet)
 	t.Run("testPwdSet", testPwdSet)

+ 17 - 7
server/res_init/init.go

@@ -53,13 +53,23 @@ func Init(serverVersion string) {
 		configStr, _ := json.Marshal(config.Instance)
 		log.Warnf("Config File Info:  %s", configStr)
 
-		restart := <-signal.RestartChan
-		log.Infof("Server Restart!")
-		smtp_server.Stop()
-		http_server.HttpsStop()
-		http_server.HttpStop()
-		pop3_server.Stop()
-		log.Warnf("!!!!!ASDFASDF!!!!%+v", restart)
+		select {
+		case <-signal.RestartChan:
+			log.Infof("Server Restart!")
+			smtp_server.Stop()
+			http_server.HttpsStop()
+			http_server.HttpStop()
+			pop3_server.Stop()
+			hooks.Stop()
+		case <-signal.StopChan:
+			log.Infof("Server Stop!")
+			smtp_server.Stop()
+			http_server.HttpsStop()
+			http_server.HttpStop()
+			pop3_server.Stop()
+			hooks.Stop()
+			return
+		}
 
 	}
 

+ 6 - 0
server/signal/signal.go

@@ -1,4 +1,10 @@
 package signal
 
+// InitChan 控制初始化流程结束
 var InitChan = make(chan bool)
+
+// RestartChan 控制程序重启
 var RestartChan = make(chan bool)
+
+// StopChan 控制程序结束
+var StopChan = make(chan bool)

+ 0 - 29
server/utils/errors/error_test.go

@@ -1,29 +0,0 @@
-package errors
-
-import (
-	"fmt"
-	"testing"
-)
-
-func TestNew(t *testing.T) {
-	err := New("err")
-	fmt.Println(err)
-}
-
-func TestWarp(t *testing.T) {
-	err := New("err1")
-	err = Wrap(err)
-	err = Wrap(err)
-	err = Wrap(err)
-	err = Wrap(err)
-	fmt.Println(err)
-}
-
-func TestWarpWithMsg(t *testing.T) {
-	err := New("err1")
-	err = Wrap(err)
-	err = Wrap(err)
-	err = Wrap(err)
-	err = WrapWithMsg(err, "last")
-	fmt.Println(err)
-}

+ 0 - 10
server/utils/password/encode_test.go

@@ -1,10 +0,0 @@
-package password
-
-import (
-	"fmt"
-	"testing"
-)
-
-func TestEncode(t *testing.T) {
-	fmt.Println(Encode("admin"))
-}