mirror of
https://github.com/Luzifer/nginx-sso.git
synced 2024-12-21 05:11:17 +00:00
130 lines
4.5 KiB
Go
130 lines
4.5 KiB
Go
|
// Copyright 2017, OpenCensus Authors
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
//
|
||
|
|
||
|
package zpages
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
"net/http/httptest"
|
||
|
|
||
|
"go.opencensus.io/trace"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
tid = trace.TraceID{1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 4, 8, 16, 32, 64, 128}
|
||
|
sid = trace.SpanID{1, 2, 4, 8, 16, 32, 64, 128}
|
||
|
sid2 = trace.SpanID{0, 3, 5, 9, 17, 33, 65, 129}
|
||
|
)
|
||
|
|
||
|
func TestTraceRows(t *testing.T) {
|
||
|
now := time.Now()
|
||
|
later := now.Add(2 * time.Second)
|
||
|
data := traceDataFromSpans("foo", []*trace.SpanData{{
|
||
|
SpanContext: trace.SpanContext{TraceID: tid, SpanID: sid},
|
||
|
ParentSpanID: sid2,
|
||
|
Name: "foo",
|
||
|
StartTime: now,
|
||
|
EndTime: later,
|
||
|
Attributes: map[string]interface{}{"stringkey": "stringvalue", "intkey": 42, "boolkey": true},
|
||
|
Annotations: []trace.Annotation{
|
||
|
{Time: now.Add(time.Millisecond), Message: "hello, world", Attributes: map[string]interface{}{"foo": "bar"}},
|
||
|
{Time: now.Add(1500 * time.Millisecond), Message: "hello, world"},
|
||
|
},
|
||
|
MessageEvents: []trace.MessageEvent{
|
||
|
{Time: now, EventType: 2, MessageID: 0x3, UncompressedByteSize: 0x190, CompressedByteSize: 0x12c},
|
||
|
{Time: later, EventType: 1, MessageID: 0x1, UncompressedByteSize: 0xc8, CompressedByteSize: 0x64},
|
||
|
},
|
||
|
Status: trace.Status{
|
||
|
Code: 1,
|
||
|
Message: "d'oh!",
|
||
|
},
|
||
|
}})
|
||
|
fakeTime := "2006/01/02-15:04:05.123456"
|
||
|
for i := range data.Rows {
|
||
|
data.Rows[i].Fields[0] = fakeTime
|
||
|
}
|
||
|
if want := (traceData{
|
||
|
Name: "foo",
|
||
|
Num: 1,
|
||
|
Rows: []traceRow{
|
||
|
{Fields: [3]string{fakeTime, " 2.000000", ""}, SpanContext: trace.SpanContext{TraceID: tid, SpanID: sid}, ParentSpanID: sid2},
|
||
|
{Fields: [3]string{fakeTime, "", `Status{canonicalCode=CANCELLED, description="d'oh!"}`}},
|
||
|
{Fields: [3]string{fakeTime, "", `Attributes:{boolkey=true, intkey=42, stringkey="stringvalue"}`}},
|
||
|
{Fields: [3]string{fakeTime, " . 0", "received message [400 bytes, 300 compressed bytes]"}},
|
||
|
{Fields: [3]string{fakeTime, " . 1000", `hello, world Attributes:{foo="bar"}`}},
|
||
|
{Fields: [3]string{fakeTime, " 1.499000", "hello, world"}},
|
||
|
{Fields: [3]string{fakeTime, " .500000", "sent message [200 bytes, 100 compressed bytes]"}}}}); !reflect.DeepEqual(data, want) {
|
||
|
t.Errorf("traceRows: got %v want %v\n", data, want)
|
||
|
}
|
||
|
|
||
|
var buf bytes.Buffer
|
||
|
writeTextTraces(&buf, data)
|
||
|
if want := `When Elapsed(s) Type
|
||
|
2006/01/02-15:04:05.123456 2.000000 trace_id: 01020304050607080102040810204080 span_id: 0102040810204080 parent_span_id: 0003050911214181
|
||
|
2006/01/02-15:04:05.123456 Status{canonicalCode=CANCELLED, description="d'oh!"}
|
||
|
2006/01/02-15:04:05.123456 Attributes:{boolkey=true, intkey=42, stringkey="stringvalue"}
|
||
|
2006/01/02-15:04:05.123456 . 0 received message [400 bytes, 300 compressed bytes]
|
||
|
2006/01/02-15:04:05.123456 . 1000 hello, world Attributes:{foo="bar"}
|
||
|
2006/01/02-15:04:05.123456 1.499000 hello, world
|
||
|
2006/01/02-15:04:05.123456 .500000 sent message [200 bytes, 100 compressed bytes]
|
||
|
`; buf.String() != want {
|
||
|
t.Errorf("writeTextTraces: got %q want %q\n", buf.String(), want)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestGetZPages(t *testing.T) {
|
||
|
mux := http.NewServeMux()
|
||
|
Handle(mux, "/debug")
|
||
|
server := httptest.NewServer(mux)
|
||
|
defer server.Close()
|
||
|
tests := []string{"/debug/rpcz", "/debug/tracez"}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(fmt.Sprintf("GET %s", tt), func(t *testing.T) {
|
||
|
res, err := http.Get(server.URL + tt)
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
return
|
||
|
}
|
||
|
if got, want := res.StatusCode, http.StatusOK; got != want {
|
||
|
t.Errorf("res.StatusCode = %d; want %d", got, want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestGetZPages_default(t *testing.T) {
|
||
|
server := httptest.NewServer(Handler)
|
||
|
defer server.Close()
|
||
|
tests := []string{"/rpcz", "/tracez"}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(fmt.Sprintf("GET %s", tt), func(t *testing.T) {
|
||
|
res, err := http.Get(server.URL + tt)
|
||
|
if err != nil {
|
||
|
t.Error(err)
|
||
|
return
|
||
|
}
|
||
|
if got, want := res.StatusCode, http.StatusOK; got != want {
|
||
|
t.Errorf("res.StatusCode = %d; want %d", got, want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|