github.com/aquayi/gokit@v0.0.0-20170805152833-88827a405d9b/init_test.go (about)

     1  package GoKit
     2  
     3  import (
     4  	"os"
     5  	"runtime"
     6  	"testing"
     7  
     8  	"syscall"
     9  
    10  	"io/ioutil"
    11  
    12  	"fmt"
    13  
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func Test_Init(t *testing.T) {
    18  	filename := "test.pid"
    19  
    20  	Init(filename)
    21  	defer os.Remove(filename)
    22  
    23  	// 检查核心数设置
    24  	expected := runtime.GOMAXPROCS(-1)
    25  	actual := runtime.NumCPU()
    26  	assert.Equal(t, expected, actual, "没能把GOMAXPROCS设置成最大核心数")
    27  
    28  	// 检查是否正确保存了pid
    29  	expectedPID := fmt.Sprint(syscall.Getpid())
    30  	data, _ := ioutil.ReadFile(filename)
    31  	actualPID := string(data)
    32  	assert.Equal(t, expectedPID, actualPID, "保存的PID的实际的不一致。")
    33  }
    34  
    35  func Test_WaitingKill(t *testing.T) {
    36  	ast := assert.New(t)
    37  	done := WaitingKill()
    38  
    39  	go func() {
    40  		// 获取当前进程的 pid
    41  		pid := syscall.Getpid()
    42  
    43  		// 通过pid号,找到当前进程
    44  		p, err := os.FindProcess(pid)
    45  		ast.Nil(err, "CANNOT find %d Procesee", pid)
    46  
    47  		// 给当前进程发送关闭信号 syscall.SIGINT
    48  		// 相当于在命令行,按下了 Ctrl+c
    49  		err = p.Signal(syscall.SIGINT)
    50  		ast.Nil(err, "FAIL to send syscall.SIGINT to %d Process", pid)
    51  	}()
    52  
    53  	data, ok := <-done
    54  	assert.False(t, ok, "从关闭通道done中,接收到了实际传输过来的数据: %v", data)
    55  }