2016-06-08 71 views
0

我对travis和Go非常陌生。我对https服务器进行了测试,运行良好,我在本地计算机上运行了go test -v ./...,但在尝试连接到服务器时,由于getsocketopt: connection refused错误,Travis的大部分时间都会失败。它应该在https://localhost:8081上收听。我的.travis.yml中有什么可以阻止这种情况发生?Travis CI在尝试测试Golang HTTP Server时失败

这里是我的.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()) 
      } 
    } 
}() 
+0

您是否在尝试启动服务器时检查错误? – JimB

+0

是的,它被设置为在执行'http.ListenAndServeTLS'命令时产生的任何错误都无法通过测试。虽然创建测试客户端尝试连接到服务器时发生故障。 – cphelps

+0

您需要先展示如何创建服务器和客户端。这并不一定与Travis有关。 – JimB

回答

3

你启动服务器,并尝试连接之间没有同步。启动服务器后添加time.Sleep应该突出显示该问题。

减少服务器未准备好的窗口的一种方法是同步创建net.Listener,然后在启动服务器之前将打开的侦听器添加到http.Server配置。 httptest.Server可以为您执行此操作,并绑定到随机端口以防止在测试期间发生冲突,并使用本地测试TLS证书。

相关问题