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)
}
}
}