blob: d449966df7849afb2f82c1da28fdea321322c01c [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package vtracelib_test
import (
"io"
"testing"
"v.io/v23"
s_vtrace "v.io/v23/services/vtrace"
"v.io/v23/vtrace"
_ "v.io/x/ref/runtime/factories/generic"
"v.io/x/ref/services/internal/vtracelib"
"v.io/x/ref/test"
)
func TestVtraceServer(t *testing.T) {
ctx, shutdown := test.V23Init()
defer shutdown()
_, server, err := v23.WithNewServer(ctx, "", vtracelib.NewVtraceService(), nil)
if err != nil {
t.Fatalf("Could not create server: %s", err)
}
endpoints := server.Status().Endpoints
sctx, span := vtrace.WithNewSpan(ctx, "The Span")
vtrace.ForceCollect(sctx, 0)
span.Finish()
id := span.Trace()
client := s_vtrace.StoreClient(endpoints[0].Name())
sctx, _ = vtrace.WithNewTrace(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.WithNewTrace(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)
}
}