blob: 3bd0324a9ca825e54d842eb25b155f701ec64891 [file] [log] [blame]
package impl_test
import (
"io"
"testing"
"v.io/core/veyron2"
service "v.io/core/veyron2/services/mgmt/vtrace"
"v.io/core/veyron2/vtrace"
"v.io/core/veyron/profiles"
"v.io/core/veyron/services/mgmt/vtrace/impl"
)
func TestVtraceServer(t *testing.T) {
ctx, shutdown := veyron2.Init()
defer shutdown()
server, err := veyron2.NewServer(ctx)
if err != nil {
t.Fatalf("Could not create server: %s", err)
}
endpoints, err := server.Listen(profiles.LocalListenSpec)
if err != nil {
t.Fatalf("Listen failed: %s", err)
}
if err := server.Serve("", impl.NewVtraceService(), nil); err != nil {
t.Fatalf("Serve failed: %s", err)
}
sctx, span := vtrace.SetNewSpan(ctx, "The Span")
vtrace.ForceCollect(sctx)
span.Finish()
id := span.Trace()
client := service.StoreClient(endpoints[0].Name())
sctx, _ = vtrace.SetNewTrace(sctx)
trace, err := client.Trace(sctx, id)
if err != nil {
t.Fatalf("Unexpected error getting trace: %s", err)
}
if len(trace.Spans) != 1 {
t.Errorf("Returned trace should have 1 span, found %#v", trace)
}
if trace.Spans[0].Name != "The Span" {
t.Errorf("Returned span has wrong name: %#v", trace)
}
sctx, _ = vtrace.SetNewTrace(sctx)
call, err := client.AllTraces(sctx)
if err != nil {
t.Fatalf("Unexpected error getting traces: %s", err)
}
ntraces := 0
stream := call.RecvStream()
var tr *vtrace.TraceRecord
for stream.Advance() {
trace := stream.Value()
if trace.ID == id {
tr = &trace
}
ntraces++
}
if err = stream.Err(); err != nil && err != io.EOF {
t.Fatalf("Unexpected error reading trace stream: %s", err)
}
if ntraces != 1 {
t.Fatalf("Expected 1 trace, got %#v", ntraces)
}
if tr == nil {
t.Fatalf("Desired trace %x not found.", id)
}
if len(tr.Spans) != 1 {
t.Errorf("Returned trace should have 1 span, found %#v", tr)
}
if tr.Spans[0].Name != "The Span" {
t.Fatalf("Returned span has wrong name: %#v", tr)
}
}