mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-05 08:51:48 +00:00
83 lines
2.5 KiB
Go
83 lines
2.5 KiB
Go
package pprof
|
|
|
|
import (
|
|
"context"
|
|
"reflect"
|
|
"sort"
|
|
"testing"
|
|
)
|
|
|
|
func labelsSorted(ctx context.Context) []label {
|
|
ls := []label{}
|
|
ForLabels(ctx, func(key, value string) bool {
|
|
ls = append(ls, label{key, value})
|
|
return true
|
|
})
|
|
sort.Sort(labelSorter(ls))
|
|
return ls
|
|
}
|
|
|
|
type labelSorter []label
|
|
|
|
func (s labelSorter) Len() int { return len(s) }
|
|
func (s labelSorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
|
func (s labelSorter) Less(i, j int) bool { return s[i].key < s[j].key }
|
|
|
|
func TestContextLabels(t *testing.T) {
|
|
// Background context starts with no lablels.
|
|
ctx := context.Background()
|
|
labels := labelsSorted(ctx)
|
|
if len(labels) != 0 {
|
|
t.Errorf("labels on background context: want [], got %v ", labels)
|
|
}
|
|
|
|
// Add a single label.
|
|
ctx = WithLabels(ctx, Labels("key", "value"))
|
|
// Retrieve it with Label.
|
|
v, ok := Label(ctx, "key")
|
|
if !ok || v != "value" {
|
|
t.Errorf(`Label(ctx, "key"): got %v, %v; want "value", ok`, v, ok)
|
|
}
|
|
gotLabels := labelsSorted(ctx)
|
|
wantLabels := []label{{"key", "value"}}
|
|
if !reflect.DeepEqual(gotLabels, wantLabels) {
|
|
t.Errorf("(sorted) labels on context: got %v, want %v", gotLabels, wantLabels)
|
|
}
|
|
|
|
// Add a label with a different key.
|
|
ctx = WithLabels(ctx, Labels("key2", "value2"))
|
|
v, ok = Label(ctx, "key2")
|
|
if !ok || v != "value2" {
|
|
t.Errorf(`Label(ctx, "key2"): got %v, %v; want "value2", ok`, v, ok)
|
|
}
|
|
gotLabels = labelsSorted(ctx)
|
|
wantLabels = []label{{"key", "value"}, {"key2", "value2"}}
|
|
if !reflect.DeepEqual(gotLabels, wantLabels) {
|
|
t.Errorf("(sorted) labels on context: got %v, want %v", gotLabels, wantLabels)
|
|
}
|
|
|
|
// Add label with first key to test label replacement.
|
|
ctx = WithLabels(ctx, Labels("key", "value3"))
|
|
v, ok = Label(ctx, "key")
|
|
if !ok || v != "value3" {
|
|
t.Errorf(`Label(ctx, "key3"): got %v, %v; want "value3", ok`, v, ok)
|
|
}
|
|
gotLabels = labelsSorted(ctx)
|
|
wantLabels = []label{{"key", "value3"}, {"key2", "value2"}}
|
|
if !reflect.DeepEqual(gotLabels, wantLabels) {
|
|
t.Errorf("(sorted) labels on context: got %v, want %v", gotLabels, wantLabels)
|
|
}
|
|
|
|
// Labels called with two labels with the same key should pick the second.
|
|
ctx = WithLabels(ctx, Labels("key4", "value4a", "key4", "value4b"))
|
|
v, ok = Label(ctx, "key4")
|
|
if !ok || v != "value4b" {
|
|
t.Errorf(`Label(ctx, "key4"): got %v, %v; want "value4b", ok`, v, ok)
|
|
}
|
|
gotLabels = labelsSorted(ctx)
|
|
wantLabels = []label{{"key", "value3"}, {"key2", "value2"}, {"key4", "value4b"}}
|
|
if !reflect.DeepEqual(gotLabels, wantLabels) {
|
|
t.Errorf("(sorted) labels on context: got %v, want %v", gotLabels, wantLabels)
|
|
}
|
|
}
|