亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go gRPC 服務器使集成測試失敗

Go gRPC 服務器使集成測試失敗

Go
蝴蝶不菲 2023-03-21 14:30:31
我最近又開始玩 go,目前我的任務是實現一個服務(將運行在 k8s 上),它應該充當 gRPC 服務器。根據要求,目前,為了滿足 k8s 上的 readinessProbe,我需要為我的服務實現一個健康檢查端點,并且應該對此進行測試:我所做的是:func main() {    server := startHTTPServer()    defer server.Close()    c := make(chan os.Signal, 1)    signal.Notify(c, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)    <-c    log.Println("Stopped")}func startHTTPServer() *http.Server {    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {        w.WriteHeader(http.StatusOK)    })    server := &http.Server{        Addr: net.JoinHostPort("", strconv.Itoa(livelinessPort)),    }    go server.ListenAndServe()    return server}我按照這篇文章以這種方式進行了測試:func TestMain(m *testing.M) {    flag.Parse()    wg := setup()    result := m.Run()    shutdown(wg)    os.Exit(result)}func shutdown(wg *sync.WaitGroup) {    syscall.Kill(syscall.Getpid(), syscall.SIGINT)    wg.Wait()}func setup() *sync.WaitGroup{    os.Setenv("APP_ENV", EnvTest)    wg := &sync.WaitGroup{}    startMainProcess(wg)    return wg}func startMainProcess(wg *sync.WaitGroup) {    go func() {        wg.Add(1)        defer wg.Done()        main()    }()}func TestK8SHealth(t *testing.T) {    res, err := http.Get("http://:8080/")    if err != nil {        t.Errorf("Unexpected API error: %s", err)        return    }    defer res.Body.Close()    if res.StatusCode != http.StatusOK {        t.Errorf("Unexpected status code: %d", res.StatusCode)        return    }}到目前為止一切順利:$ go testPASS2018/08/13 09:23:16 Stoppedok      github.com/...        0.015s
查看完整描述

1 回答

?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

grpcServer.Serve(lis)是一個阻塞調用。所以就像你對 HTTP server 所做的那樣go server.ListenAndServe(),你需要在一個 goroutine 中運行它。你能試試看是否go grpcServer.Serve(lis)能讓測試通過嗎?

我不確定你的新 EDIT 表明問題出在聽眾身上。您可以檢查是否net.Listen("tcp", fmt.Sprintf(":%d", serverPort))返回或阻止。


查看完整回答
反對 回復 2023-03-21
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號