56 lines
1.2 KiB
Go
Raw Normal View History

2019-04-22 02:59:20 +00:00
package blademaster
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"time"
"go-common/library/net/trace"
)
func TestTrace(t *testing.T) {
wait := make(chan bool, 1)
eng := New()
eng.Use(Trace())
eng.GET("/test-trace", func(c *Context) {
if _, ok := trace.FromContext(c.Context); !ok {
t.Errorf("expect get trace from context")
}
c.Writer.Write([]byte("pong"))
wait <- true
})
go eng.Run("127.0.0.1:28080")
time.Sleep(time.Second)
http.Get("http://127.0.0.1:28080/test-trace")
<-wait
}
func TestTraceClient(t *testing.T) {
wait := make(chan bool, 1)
trace.Init(nil)
root := trace.New("test-title")
ctx := trace.NewContext(context.Background(), root)
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
keys := []string{trace.KeyTraceID, trace.KeyTraceSpanID, trace.KeyTraceParentID, trace.KeyTraceID}
for _, key := range keys {
if r.Header.Get(key) == "" {
t.Errorf("empty key: %s", key)
}
}
wait <- true
}))
defer srv.Close()
req, err := http.NewRequest(http.MethodGet, srv.URL, nil)
if err != nil {
t.Fatal(err)
}
req = req.WithContext(ctx)
client := &http.Client{Transport: &TraceTransport{}}
if _, err = client.Do(req); err != nil {
t.Fatal(err)
}
<-wait
}