mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
*: FatalStack to stacktrace tests after timeout
Related to https://github.com/coreos/etcd/issues/4065.
This commit is contained in:
parent
2eac21ae0a
commit
497bbd3010
@ -17,6 +17,7 @@ package testutil
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -45,3 +46,11 @@ func MustNewURL(t *testing.T, s string) *url.URL {
|
|||||||
}
|
}
|
||||||
return u
|
return u
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FatalStack helps to fatal the test and print out the stacks of all running goroutines.
|
||||||
|
func FatalStack(t *testing.T, s string) {
|
||||||
|
stackTrace := make([]byte, 8*1024)
|
||||||
|
n := runtime.Stack(stackTrace, true)
|
||||||
|
t.Error(string(stackTrace[:n]))
|
||||||
|
t.Fatalf(s)
|
||||||
|
}
|
||||||
|
@ -15,9 +15,9 @@
|
|||||||
package storage
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -443,10 +443,7 @@ func TestKVTxnBlockNonTnxOperations(t *testing.T) {
|
|||||||
select {
|
select {
|
||||||
case <-done:
|
case <-done:
|
||||||
case <-time.After(10 * time.Second):
|
case <-time.After(10 * time.Second):
|
||||||
stack := make([]byte, 8*1024)
|
testutil.FatalStack(t, fmt.Sprintf("#%d: operation failed to be unblocked", i))
|
||||||
n := runtime.Stack(stack, true)
|
|
||||||
t.Error(string(stack[:n]))
|
|
||||||
t.Fatalf("#%d: operation failed to be unblocked", i)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -773,8 +770,9 @@ func TestWatchableKVWatch(t *testing.T) {
|
|||||||
if !reflect.DeepEqual(ev, wev) {
|
if !reflect.DeepEqual(ev, wev) {
|
||||||
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
||||||
}
|
}
|
||||||
case <-time.After(time.Second):
|
case <-time.After(5 * time.Second):
|
||||||
t.Fatalf("failed to watch the event")
|
// CPU might be too slow, and the routine is not able to switch around
|
||||||
|
testutil.FatalStack(t, "failed to watch the event")
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Put([]byte("foo1"), []byte("bar1"), 2)
|
s.Put([]byte("foo1"), []byte("bar1"), 2)
|
||||||
@ -798,8 +796,8 @@ func TestWatchableKVWatch(t *testing.T) {
|
|||||||
if !reflect.DeepEqual(ev, wev) {
|
if !reflect.DeepEqual(ev, wev) {
|
||||||
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
||||||
}
|
}
|
||||||
case <-time.After(time.Second):
|
case <-time.After(5 * time.Second):
|
||||||
t.Fatalf("failed to watch the event")
|
testutil.FatalStack(t, "failed to watch the event")
|
||||||
}
|
}
|
||||||
|
|
||||||
w = s.NewWatchStream()
|
w = s.NewWatchStream()
|
||||||
@ -825,8 +823,8 @@ func TestWatchableKVWatch(t *testing.T) {
|
|||||||
if !reflect.DeepEqual(ev, wev) {
|
if !reflect.DeepEqual(ev, wev) {
|
||||||
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
||||||
}
|
}
|
||||||
case <-time.After(time.Second):
|
case <-time.After(5 * time.Second):
|
||||||
t.Fatalf("failed to watch the event")
|
testutil.FatalStack(t, "failed to watch the event")
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Put([]byte("foo1"), []byte("bar11"), 3)
|
s.Put([]byte("foo1"), []byte("bar11"), 3)
|
||||||
@ -850,8 +848,8 @@ func TestWatchableKVWatch(t *testing.T) {
|
|||||||
if !reflect.DeepEqual(ev, wev) {
|
if !reflect.DeepEqual(ev, wev) {
|
||||||
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
||||||
}
|
}
|
||||||
case <-time.After(time.Second):
|
case <-time.After(5 * time.Second):
|
||||||
t.Fatalf("failed to watch the event")
|
testutil.FatalStack(t, "failed to watch the event")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@ import (
|
|||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -457,11 +456,7 @@ func TestTxnBlockBackendForceCommit(t *testing.T) {
|
|||||||
select {
|
select {
|
||||||
case <-done:
|
case <-done:
|
||||||
case <-time.After(5 * time.Second): // wait 5 seconds for CI with slow IO
|
case <-time.After(5 * time.Second): // wait 5 seconds for CI with slow IO
|
||||||
// print out stack traces of all routines if there is a failure
|
testutil.FatalStack(t, "failed to execute ForceCommit")
|
||||||
stackTrace := make([]byte, 8*1024)
|
|
||||||
n := runtime.Stack(stackTrace, true)
|
|
||||||
t.Error(string(stackTrace[:n]))
|
|
||||||
t.Fatalf("failed to execute ForceCommit")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user