Merge pull request #3587 from krasi-georgiev/web-test-error-check

handle web_test webhandler errors.
This commit is contained in:
Goutham Veeramachaneni 2018-01-10 22:03:25 +05:30 committed by GitHub
commit 35a6ffbaf3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 11 deletions

View file

@ -35,6 +35,9 @@ func TestMain(m *testing.M) {
if testing.Short() { if testing.Short() {
os.Exit(m.Run()) os.Exit(m.Run())
} }
// On linux with a global proxy the tests will fail as the go client(http,grpc) tries to connect through the proxy.
os.Setenv("no_proxy", "localhost,127.0.0.1,0.0.0.0,:")
var err error var err error
promPath, err = os.Getwd() promPath, err = os.Getwd()
if err != nil { if err != nil {
@ -75,25 +78,20 @@ func TestStartupInterrupt(t *testing.T) {
}() }()
var startedOk bool var startedOk bool
var stoppedOk bool
var stoppedErr error var stoppedErr error
Loop: Loop:
for x := 0; x < 10; x++ { for x := 0; x < 10; x++ {
// error=nil means prometheus has started so can send the interrupt signal and wait for the grace shutdown. // error=nil means prometheus has started so can send the interrupt signal and wait for the grace shutdown.
if _, err := http.Get("http://localhost:9090/graph"); err == nil { if _, err := http.Get("http://localhost:9090/graph"); err == nil {
startedOk = true startedOk = true
prom.Process.Signal(os.Interrupt) prom.Process.Signal(os.Interrupt)
select { select {
case stoppedErr = <-done: case stoppedErr = <-done:
stoppedOk = true
break Loop break Loop
case <-time.After(10 * time.Second): case <-time.After(10 * time.Second):
} }
break Loop break Loop
} }
time.Sleep(500 * time.Millisecond) time.Sleep(500 * time.Millisecond)
} }
@ -102,10 +100,10 @@ Loop:
t.Errorf("prometheus didn't start in the specified timeout") t.Errorf("prometheus didn't start in the specified timeout")
return return
} }
if err := prom.Process.Kill(); err == nil && !stoppedOk { if err := prom.Process.Kill(); err == nil {
t.Errorf("prometheus didn't shutdown gracefully after sending the Interrupt signal") t.Errorf("prometheus didn't shutdown gracefully after sending the Interrupt signal")
} else if stoppedErr != nil { } else if stoppedErr != nil && stoppedErr.Error() != "signal: interrupt" { // TODO - find a better way to detect when the process didn't exit as expected!
t.Errorf("prometheus exited with an error:%v", stoppedErr) t.Errorf("prometheus exited with an unexpected error:%v", stoppedErr)
} }
} }

View file

@ -15,7 +15,6 @@ package web
import ( import (
"context" "context"
"fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
@ -30,6 +29,11 @@ import (
libtsdb "github.com/prometheus/tsdb" libtsdb "github.com/prometheus/tsdb"
) )
func TestMain(m *testing.M) {
// On linux with a global proxy the tests will fail as the go client(http,grpc) tries to connect through the proxy.
os.Setenv("no_proxy", "localhost,127.0.0.1,0.0.0.0,:")
os.Exit(m.Run())
}
func TestGlobalURL(t *testing.T) { func TestGlobalURL(t *testing.T) {
opts := &Options{ opts := &Options{
ListenAddress: ":9090", ListenAddress: ":9090",
@ -108,7 +112,12 @@ func TestReadyAndHealthy(t *testing.T) {
opts.Flags = map[string]string{} opts.Flags = map[string]string{}
webHandler := New(nil, opts) webHandler := New(nil, opts)
go webHandler.Run(context.Background()) go func() {
err := webHandler.Run(context.Background())
if err != nil {
t.Fatalf("Can't start web handler:%s", err)
}
}()
// Give some time for the web goroutine to run since we need the server // Give some time for the web goroutine to run since we need the server
// to be up before starting tests. // to be up before starting tests.
@ -202,7 +211,7 @@ func TestRoutePrefix(t *testing.T) {
go func() { go func() {
err := webHandler.Run(context.Background()) err := webHandler.Run(context.Background())
if err != nil { if err != nil {
panic(fmt.Sprintf("Can't start webhandler error %s", err)) t.Fatalf("Can't start web handler:%s", err)
} }
}() }()