kubo/util/ctx/fracctx_test.go
Henry 92d08db7a5 rewrote import paths of go.net/context to use golang.org/x/context
- updated go-ctxgroup and goprocess
ctxgroup: AddChildGroup was changed to AddChild. Used in two files:
- p2p/net/mock/mock_net.go
- routing/dht/dht.go

- updated context from hg repo to git
prev. commit in hg was ad01a6fcc8a19d3a4478c836895ffe883bd2ceab. (context: make parentCancelCtx iterative)
represents commit 84f8955a887232b6308d79c68b8db44f64df455c in git repo

- updated context to master (b6fdb7d8a4ccefede406f8fe0f017fb58265054c)

Aaron Jacobs (2):
net/context: Don't accept a context in the DoSomethingSlow example.
context: Be clear that users must cancel the result of WithCancel.

Andrew Gerrand (1):
go.net: use golang.org/x/... import paths

Bryan C. Mills (1):
net/context: Don't leak goroutines in Done example.

Damien Neil (1):
context: fix removal of cancelled timer contexts from parent

David Symonds (2):
context: Fix WithValue example code.
net: add import comments.

Sameer Ajmani (1):
context: fix TestAllocs to account for ints in interfaces
2015-02-25 11:58:19 +01:00

147 lines
2.6 KiB
Go

package ctxutil
import (
"testing"
"time"
travis "github.com/jbenet/go-ipfs/util/testutil/ci/travis"
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
)
// this test is on the context tool itself, not our stuff. it's for sanity on ours.
func TestDeadline(t *testing.T) {
if travis.IsRunning() {
t.Skip("timeouts don't work reliably on travis")
}
ctx, _ := context.WithTimeout(context.Background(), 5*time.Millisecond)
select {
case <-ctx.Done():
t.Fatal("ended too early")
default:
}
<-time.After(6 * time.Millisecond)
select {
case <-ctx.Done():
default:
t.Fatal("ended too late")
}
}
func TestDeadlineFractionForever(t *testing.T) {
ctx, _ := WithDeadlineFraction(context.Background(), 0.5)
_, found := ctx.Deadline()
if found {
t.Fatal("should last forever")
}
}
func TestDeadlineFractionHalf(t *testing.T) {
if travis.IsRunning() {
t.Skip("timeouts don't work reliably on travis")
}
ctx1, _ := context.WithTimeout(context.Background(), 10*time.Millisecond)
ctx2, _ := WithDeadlineFraction(ctx1, 0.5)
select {
case <-ctx1.Done():
t.Fatal("ctx1 ended too early")
case <-ctx2.Done():
t.Fatal("ctx2 ended too early")
default:
}
<-time.After(2 * time.Millisecond)
select {
case <-ctx1.Done():
t.Fatal("ctx1 ended too early")
case <-ctx2.Done():
t.Fatal("ctx2 ended too early")
default:
}
<-time.After(4 * time.Millisecond)
select {
case <-ctx1.Done():
t.Fatal("ctx1 ended too early")
case <-ctx2.Done():
default:
t.Fatal("ctx2 ended too late")
}
<-time.After(6 * time.Millisecond)
select {
case <-ctx1.Done():
default:
t.Fatal("ctx1 ended too late")
}
}
func TestDeadlineFractionCancel(t *testing.T) {
ctx1, cancel1 := context.WithTimeout(context.Background(), 10*time.Millisecond)
ctx2, cancel2 := WithDeadlineFraction(ctx1, 0.5)
select {
case <-ctx1.Done():
t.Fatal("ctx1 ended too early")
case <-ctx2.Done():
t.Fatal("ctx2 ended too early")
default:
}
cancel2()
select {
case <-ctx1.Done():
t.Fatal("ctx1 should NOT be cancelled")
case <-ctx2.Done():
default:
t.Fatal("ctx2 should be cancelled")
}
cancel1()
select {
case <-ctx1.Done():
case <-ctx2.Done():
default:
t.Fatal("ctx1 should be cancelled")
}
}
func TestDeadlineFractionObeysParent(t *testing.T) {
ctx1, cancel1 := context.WithTimeout(context.Background(), 10*time.Millisecond)
ctx2, _ := WithDeadlineFraction(ctx1, 0.5)
select {
case <-ctx1.Done():
t.Fatal("ctx1 ended too early")
case <-ctx2.Done():
t.Fatal("ctx2 ended too early")
default:
}
cancel1()
select {
case <-ctx2.Done():
default:
t.Fatal("ctx2 should be cancelled")
}
}