...
Run Format

Source file src/runtime/pprof/label_test.go

Documentation: runtime/pprof

  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)
  	}
  }
  

View as plain text