This commit introduces a new tracing library, that replaces golang.org/x/net/trace, and supports (amongts other thing) nested traces. This is a minimal change, future patches will make use of the new functionality.
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package nettrace
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
func TestContext(t *testing.T) {
|
|
tr := New("TestContext", "trace")
|
|
defer tr.Finish()
|
|
|
|
// Attach the trace to a new context.
|
|
ctx := NewContext(context.Background(), tr)
|
|
|
|
// Get the trace back from the context.
|
|
{
|
|
tr2, ok := FromContext(ctx)
|
|
if !ok {
|
|
t.Errorf("Context with trace returned not found")
|
|
}
|
|
if tr != tr2 {
|
|
t.Errorf("Trace from context is different: %v != %v", tr, tr2)
|
|
}
|
|
}
|
|
|
|
// Create a child trace from the context.
|
|
{
|
|
tr3 := ChildFromContext(ctx, "TestContext", "child")
|
|
if p := tr3.(*trace).Parent; p != tr {
|
|
t.Errorf("Child doesn't have the right parent: %v != %v", p, tr)
|
|
}
|
|
tr3.Finish()
|
|
}
|
|
|
|
// FromContextOrNew returns the one from the context.
|
|
{
|
|
tr4, ctx4 := FromContextOrNew(ctx, "TestContext", "from-ctx")
|
|
if ctx4 != ctx {
|
|
t.Errorf("Got new context: %v != %v", ctx4, ctx)
|
|
}
|
|
if tr4 != tr {
|
|
t.Errorf("Context with trace returned new trace: %v != %v", tr4, tr)
|
|
}
|
|
}
|
|
|
|
// FromContextOrNew needs to create a new one.
|
|
{
|
|
tr5, ctx5 := FromContextOrNew(
|
|
context.Background(), "TestContext", "tr5")
|
|
if tr, _ := FromContext(ctx5); tr != tr5 {
|
|
t.Errorf("Context with trace returned the wrong trace: %v != %v",
|
|
tr, tr5)
|
|
}
|
|
tr5.Finish()
|
|
}
|
|
|
|
// Child from a context that has no trace attached.
|
|
{
|
|
tr6 := ChildFromContext(
|
|
context.Background(), "TestContext", "child")
|
|
tr6.Finish()
|
|
if p := tr6.(*trace).Parent; p != nil {
|
|
t.Errorf("Expected orphan trace, it has a parent: %v", p)
|
|
}
|
|
}
|
|
}
|