猿问

Travis CI 在尝试测试 Golang HTTP Server 时失败

我对 travis 和 Go 很陌生。我对 https 服务器进行了测试,它在我的本地计算机上运行时运行良好,但由于尝试连接到服务器时出错,go test -v ./...它在 Travis 上的大部分时间都会失败。getsocketopt: connection refused它应该在听https://localhost:8081。我.travis.yml能做些什么来防止这种情况发生吗?


这是我的 .travis.yml


language: go

go:

 - 1.6

 - tip

matrix:

  allow_failures:

 - go: tip

before_install:

 - go get -v github.com/golang/lint/golint

install:

 - go get -v -d -t ./...

这是我的服务器创建代码:


func (webserver *WebServer) Start(keyLocation string, certLocation string) <-chan error {

    errors := make(chan error, 1)

    go func() {

        defer close(errors)

        errors <- http.ListenAndServeTLS(fmt.Sprintf(":%v", webserver.config.WebServerPort), certLocation, keyLocation, nil)

    }()

    return errors

}

和客户端代码:


func createHTTPClient(t *testing.T) *http.Client {

    t.Log("Creating a test client...")

    tr := &http.Transport {

        TLSClientConfig: &tls.Config {InsecureSkipVerify: true},

    }


    t.Log("Created a test client")

    return &http.Client {Transport: tr}

}

与客户的样品请求


request, _ := http.NewRequest(httpmethod, fmt.Sprintf("https://localhost:%d/token", port), nil)

client.Do(request)

在测试中启动服务器的示例


errors := server.Start(testKeyLocation, testCertLocation)

//Handle errors from server

go func() {

    select {

        case err := <-errors:

            if err != nil {

                t.Fatalf("Error with server: %s", err.Error())

            }

    }

}()


拉丁的传说
浏览 152回答 1
1回答

慕娘9325324

您在启动服务器和尝试连接之间没有同步。在启动服务器后添加一个time.Sleep应该突出这个问题。减少服务器未准备好的窗口的一种方法是net.Listener同步创建,然后http.Server在启动服务器之前将打开的侦听器添加到配置中。可以为您执行此httptest.Server操作,以及绑定到随机端口以防止测试期间发生冲突,并使用本地测试 TLS 证书。
随时随地看视频慕课网APP

相关分类

Go
我要回答