mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-11 19:27:51 +08:00
- 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
147 lines
2.6 KiB
Go
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")
|
|
}
|
|
|
|
}
|