blob: 7a4d5f87a76baef6501d8143ea98be5c647fecad [file] [log] [blame]
Matt Rosencrantzb30286b2014-11-10 14:52:17 -08001package impl_test
2
3import (
4 "io"
5 "testing"
6
Jiri Simsa764efb72014-12-25 20:57:03 -08007 "v.io/core/veyron2"
Jiri Simsa764efb72014-12-25 20:57:03 -08008 service "v.io/core/veyron2/services/mgmt/vtrace"
9 "v.io/core/veyron2/vtrace"
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080010
Suharsh Sivakumard68949c2015-01-26 10:32:23 -080011 _ "v.io/core/veyron/profiles"
Jiri Simsa764efb72014-12-25 20:57:03 -080012 "v.io/core/veyron/services/mgmt/vtrace/impl"
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080013)
14
Matt Rosencrantzfa3082c2015-01-22 21:39:04 -080015func TestVtraceServer(t *testing.T) {
16 ctx, shutdown := veyron2.Init()
17 defer shutdown()
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080018
Matt Rosencrantzf541b772015-01-13 07:58:59 -080019 server, err := veyron2.NewServer(ctx)
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080020 if err != nil {
21 t.Fatalf("Could not create server: %s", err)
22 }
Suharsh Sivakumard68949c2015-01-26 10:32:23 -080023 endpoints, err := server.Listen(veyron2.GetListenSpec(ctx))
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080024 if err != nil {
25 t.Fatalf("Listen failed: %s", err)
26 }
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080027 if err := server.Serve("", impl.NewVtraceService(), nil); err != nil {
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080028 t.Fatalf("Serve failed: %s", err)
29 }
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080030
Matt Rosencrantzfa3082c2015-01-22 21:39:04 -080031 sctx, span := vtrace.SetNewSpan(ctx, "The Span")
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080032 vtrace.ForceCollect(sctx)
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080033 span.Finish()
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080034 id := span.Trace()
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080035
Matt Rosencrantzfa3082c2015-01-22 21:39:04 -080036 client := service.StoreClient(endpoints[0].Name())
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080037
Matt Rosencrantzf541b772015-01-13 07:58:59 -080038 sctx, _ = vtrace.SetNewTrace(sctx)
39 trace, err := client.Trace(sctx, id)
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080040 if err != nil {
41 t.Fatalf("Unexpected error getting trace: %s", err)
42 }
43 if len(trace.Spans) != 1 {
44 t.Errorf("Returned trace should have 1 span, found %#v", trace)
45 }
46 if trace.Spans[0].Name != "The Span" {
47 t.Errorf("Returned span has wrong name: %#v", trace)
48 }
49
Matt Rosencrantzf541b772015-01-13 07:58:59 -080050 sctx, _ = vtrace.SetNewTrace(sctx)
51 call, err := client.AllTraces(sctx)
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080052 if err != nil {
53 t.Fatalf("Unexpected error getting traces: %s", err)
54 }
55 ntraces := 0
56 stream := call.RecvStream()
57 var tr *vtrace.TraceRecord
58 for stream.Advance() {
59 trace := stream.Value()
60 if trace.ID == id {
61 tr = &trace
62 }
63 ntraces++
64 }
65 if err = stream.Err(); err != nil && err != io.EOF {
66 t.Fatalf("Unexpected error reading trace stream: %s", err)
67 }
Matt Rosencrantzbe1a8b52014-11-21 15:14:06 -080068 if ntraces != 1 {
69 t.Fatalf("Expected 1 trace, got %#v", ntraces)
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080070 }
71 if tr == nil {
72 t.Fatalf("Desired trace %x not found.", id)
73 }
74 if len(tr.Spans) != 1 {
75 t.Errorf("Returned trace should have 1 span, found %#v", tr)
76 }
77 if tr.Spans[0].Name != "The Span" {
78 t.Fatalf("Returned span has wrong name: %#v", tr)
79 }
80}