mesh/delivery merged: source.main moved to novox/mesh-host@3e3e43de5214
mesh/check pass 175fb45c19e3 on 3e3e43de5214 | unit 299 run, 1042 kept, 5 skipped | integration 302 run, 1043 kept, 4 skipped | over bound: unit (slow…
40 lines
1.3 KiB
Go
40 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// An apply runs in a context the bus's loss cannot end: the link's context ends when the bus goes, and the bus may go
|
|
// because of the apply itself (it replaces the bus's own container), which then must finish (issue 1945, live on
|
|
// 2026-10-25 at 11:23: novox's node-engine removed the bus container, its link's context ended, and the docker run that
|
|
// would have made the new one was never made).
|
|
func TestAnApplyOutlivesTheLinksContext(t *testing.T) {
|
|
type key struct{}
|
|
link, cancel := context.WithCancel(context.WithValue(context.Background(), key{}, "v"))
|
|
ctx, done := applyContext(link)
|
|
defer done()
|
|
cancel()
|
|
if ctx.Err() != nil {
|
|
t.Fatalf("the apply's context ended with the link's: %v", ctx.Err())
|
|
}
|
|
if ctx.Value(key{}) != "v" {
|
|
t.Fatal("the apply's context lost the link's values")
|
|
}
|
|
}
|
|
|
|
// An apply is bounded all the same: a step that hangs (a docker call that never returns) cannot hold the node agent for
|
|
// ever (the review of issue 1945).
|
|
func TestAnApplyIsBounded(t *testing.T) {
|
|
ctx, done := applyContext(context.Background())
|
|
defer done()
|
|
at, ok := ctx.Deadline()
|
|
if !ok {
|
|
t.Fatal("an apply has no bound")
|
|
}
|
|
if left := time.Until(at); left > applyBound || left < applyBound-time.Minute {
|
|
t.Fatalf("the bound is %s away, want about %s", left, applyBound)
|
|
}
|
|
}
|