mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #4211 from gyuho/stack_watch
*: FatalStack to stacktrace tests after timeout
This commit is contained in:
commit
02ab7be106
@ -17,6 +17,7 @@ package testutil
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"runtime"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
@ -45,3 +46,11 @@ func MustNewURL(t *testing.T, s string) *url.URL {
|
||||
}
|
||||
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
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@ -443,10 +443,7 @@ func TestKVTxnBlockNonTnxOperations(t *testing.T) {
|
||||
select {
|
||||
case <-done:
|
||||
case <-time.After(10 * time.Second):
|
||||
stack := make([]byte, 8*1024)
|
||||
n := runtime.Stack(stack, true)
|
||||
t.Error(string(stack[:n]))
|
||||
t.Fatalf("#%d: operation failed to be unblocked", i)
|
||||
testutil.FatalStack(t, fmt.Sprintf("#%d: operation failed to be unblocked", i))
|
||||
}
|
||||
}
|
||||
|
||||
@ -773,8 +770,9 @@ func TestWatchableKVWatch(t *testing.T) {
|
||||
if !reflect.DeepEqual(ev, wev) {
|
||||
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
||||
}
|
||||
case <-time.After(time.Second):
|
||||
t.Fatalf("failed to watch the event")
|
||||
case <-time.After(5 * time.Second):
|
||||
// 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)
|
||||
@ -798,8 +796,8 @@ func TestWatchableKVWatch(t *testing.T) {
|
||||
if !reflect.DeepEqual(ev, wev) {
|
||||
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
||||
}
|
||||
case <-time.After(time.Second):
|
||||
t.Fatalf("failed to watch the event")
|
||||
case <-time.After(5 * time.Second):
|
||||
testutil.FatalStack(t, "failed to watch the event")
|
||||
}
|
||||
|
||||
w = s.NewWatchStream()
|
||||
@ -825,8 +823,8 @@ func TestWatchableKVWatch(t *testing.T) {
|
||||
if !reflect.DeepEqual(ev, wev) {
|
||||
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
||||
}
|
||||
case <-time.After(time.Second):
|
||||
t.Fatalf("failed to watch the event")
|
||||
case <-time.After(5 * time.Second):
|
||||
testutil.FatalStack(t, "failed to watch the event")
|
||||
}
|
||||
|
||||
s.Put([]byte("foo1"), []byte("bar11"), 3)
|
||||
@ -850,8 +848,8 @@ func TestWatchableKVWatch(t *testing.T) {
|
||||
if !reflect.DeepEqual(ev, wev) {
|
||||
t.Errorf("watched event = %+v, want %+v", ev, wev)
|
||||
}
|
||||
case <-time.After(time.Second):
|
||||
t.Fatalf("failed to watch the event")
|
||||
case <-time.After(5 * time.Second):
|
||||
testutil.FatalStack(t, "failed to watch the event")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,6 @@ import (
|
||||
"math"
|
||||
"os"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@ -457,11 +456,7 @@ func TestTxnBlockBackendForceCommit(t *testing.T) {
|
||||
select {
|
||||
case <-done:
|
||||
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
|
||||
stackTrace := make([]byte, 8*1024)
|
||||
n := runtime.Stack(stackTrace, true)
|
||||
t.Error(string(stackTrace[:n]))
|
||||
t.Fatalf("failed to execute ForceCommit")
|
||||
testutil.FatalStack(t, "failed to execute ForceCommit")
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user