blob: 8b3fbc3a21ee742aa197f0ee974f443443b6e065 [file] [log] [blame] [edit]
// Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package benchproc
import (
"testing"
"golang.org/x/perf/benchfmt"
)
func checkNameExtractor(t *testing.T, x extractor, fullName string, want string) {
t.Helper()
res := &benchfmt.Result{Name: benchfmt.Name(fullName)}
got := string(x(res))
if got != want {
t.Errorf("got %s, want %s", got, want)
}
}
func TestExtractName(t *testing.T) {
check := checkNameExtractor
x, err := newExtractor(".name")
if err != nil {
t.Fatal(err)
}
check(t, x, "Test", "Test")
check(t, x, "Test/a", "Test")
check(t, x, "Test-4", "Test")
check(t, x, "Test/a-4", "Test")
}
func TestExtractFullName(t *testing.T) {
check := checkNameExtractor
t.Run("basic", func(t *testing.T) {
x, err := newExtractor(".fullname")
if err != nil {
t.Fatal(err)
}
check(t, x, "Test", "Test")
check(t, x, "Test/a=123", "Test/a=123")
check(t, x, "Test-2", "Test-2")
})
t.Run("excludeA", func(t *testing.T) {
x := newExtractorFullName([]string{"/a"})
check(t, x, "Test", "Test")
check(t, x, "Test/a=123", "Test")
check(t, x, "Test/b=123/a=123", "Test/b=123")
check(t, x, "Test/a=123/b=123", "Test/b=123")
check(t, x, "Test/a=123/a=123", "Test")
check(t, x, "Test/a=123-2", "Test-2")
})
t.Run("excludeName", func(t *testing.T) {
x := newExtractorFullName([]string{".name"})
check(t, x, "Test", "*")
check(t, x, "Test/a=123", "*/a=123")
x = newExtractorFullName([]string{".name", "/a"})
check(t, x, "Test", "*")
check(t, x, "Test/a=123", "*")
check(t, x, "Test/a=123/b=123", "*/b=123")
})
t.Run("excludeGomaxprocs", func(t *testing.T) {
x := newExtractorFullName([]string{"/gomaxprocs"})
check(t, x, "Test", "Test")
check(t, x, "Test/a=123", "Test/a=123")
check(t, x, "Test/a=123-2", "Test/a=123")
check(t, x, "Test/gomaxprocs=123", "Test")
})
}
func TestExtractNameKey(t *testing.T) {
check := checkNameExtractor
t.Run("basic", func(t *testing.T) {
x, err := newExtractor("/a")
if err != nil {
t.Fatal(err)
}
check(t, x, "Test", "")
check(t, x, "Test/a=1", "1")
check(t, x, "Test/aa=1", "")
check(t, x, "Test/a=1/b=2", "1")
check(t, x, "Test/b=1/a=2", "2")
check(t, x, "Test/b=1/a=2-4", "2")
})
t.Run("gomaxprocs", func(t *testing.T) {
x, err := newExtractor("/gomaxprocs")
if err != nil {
t.Fatal(err)
}
check(t, x, "Test", "")
check(t, x, "Test/gomaxprocs=4", "4")
check(t, x, "Test-4", "4")
check(t, x, "Test/a-4", "4")
})
}
func TestExtractFileKey(t *testing.T) {
x, err := newExtractor("file-key")
if err != nil {
t.Fatal(err)
}
res := r(t, "Name", "file-key", "123", "other-key", "456")
got := string(x(res))
want := "123"
if got != want {
t.Errorf("got %s, want %s", got, want)
}
res = r(t, "Name", "other-key", "456")
got = string(x(res))
want = ""
if got != want {
t.Errorf("got %s, want %s", got, want)
}
}
func TestExtractBadKey(t *testing.T) {
check := func(t *testing.T, got error, want string) {
t.Helper()
if got == nil || got.Error() != want {
t.Errorf("got error %s, want error %s", got, want)
}
}
_, err := newExtractor("")
check(t, err, "key must not be empty")
}