diff --git a/replication/driver/replication_stepqueue_test.go b/replication/driver/replication_stepqueue_test.go index 6520038..d76f544 100644 --- a/replication/driver/replication_stepqueue_test.go +++ b/replication/driver/replication_stepqueue_test.go @@ -14,11 +14,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/zrepl/zrepl/daemon/logging/trace" + "github.com/zrepl/zrepl/util/zreplcircleci" ) -// FIXME: this test relies on timing and is thus rather flaky -// (relies on scheduler responsiveness of < 500ms) func TestPqNotconcurrent(t *testing.T) { + zreplcircleci.SkipOnCircleCI(t, "because it relies on scheduler responsiveness < 500ms") + ctx, end := trace.WithTaskFromStack(context.Background()) defer end() var ctr uint32 @@ -90,6 +91,8 @@ func (r record) String() string { // Hence, perform some statistics on the wakeup times and assert that the mean wakeup // times for each step are close together. func TestPqConcurrent(t *testing.T) { + zreplcircleci.SkipOnCircleCI(t, "because it relies on scheduler responsiveness < 500ms") + ctx, end := trace.WithTaskFromStack(context.Background()) defer end() diff --git a/rpc/dataconn/timeoutconn/timeoutconn_test.go b/rpc/dataconn/timeoutconn/timeoutconn_test.go index 21bbe74..6f8246d 100644 --- a/rpc/dataconn/timeoutconn/timeoutconn_test.go +++ b/rpc/dataconn/timeoutconn/timeoutconn_test.go @@ -14,6 +14,7 @@ import ( "github.com/stretchr/testify/require" "github.com/zrepl/zrepl/util/socketpair" + "github.com/zrepl/zrepl/util/zreplcircleci" ) func TestReadTimeout(t *testing.T) { @@ -81,6 +82,8 @@ func TestWriteTimeout(t *testing.T) { } func TestNoPartialReadsDueToDeadline(t *testing.T) { + zreplcircleci.SkipOnCircleCI(t, "needs predictable low scheduling latency") + a, b, err := socketpair.SocketPair() require.NoError(t, err) defer a.Close() diff --git a/util/zreplcircleci/zreplcircleci.go b/util/zreplcircleci/zreplcircleci.go new file mode 100644 index 0000000..9135946 --- /dev/null +++ b/util/zreplcircleci/zreplcircleci.go @@ -0,0 +1,13 @@ +package zreplcircleci + +import ( + "fmt" + "os" + "testing" +) + +func SkipOnCircleCI(t *testing.T, reasonFmt string, args ...interface{}) { + if os.Getenv("CIRCLECI") != "" { + t.Skipf("This test is skipped in CircleCI. Reason: %s", fmt.Sprintf(reasonFmt, args...)) + } +}