github.com/jgbaldwinbrown/perf@v0.1.1/benchproc/extract_test.go (about) 1 // Copyright 2022 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package benchproc 6 7 import ( 8 "testing" 9 10 "golang.org/x/perf/benchfmt" 11 ) 12 13 func checkNameExtractor(t *testing.T, x extractor, fullName string, want string) { 14 t.Helper() 15 res := &benchfmt.Result{Name: benchfmt.Name(fullName)} 16 got := string(x(res)) 17 if got != want { 18 t.Errorf("got %s, want %s", got, want) 19 } 20 } 21 22 func TestExtractName(t *testing.T) { 23 check := checkNameExtractor 24 25 x, err := newExtractor(".name") 26 if err != nil { 27 t.Fatal(err) 28 } 29 check(t, x, "Test", "Test") 30 check(t, x, "Test/a", "Test") 31 check(t, x, "Test-4", "Test") 32 check(t, x, "Test/a-4", "Test") 33 } 34 35 func TestExtractFullName(t *testing.T) { 36 check := checkNameExtractor 37 38 t.Run("basic", func(t *testing.T) { 39 x, err := newExtractor(".fullname") 40 if err != nil { 41 t.Fatal(err) 42 } 43 check(t, x, "Test", "Test") 44 check(t, x, "Test/a=123", "Test/a=123") 45 check(t, x, "Test-2", "Test-2") 46 }) 47 48 t.Run("excludeA", func(t *testing.T) { 49 x := newExtractorFullName([]string{"/a"}) 50 check(t, x, "Test", "Test") 51 check(t, x, "Test/a=123", "Test") 52 check(t, x, "Test/b=123/a=123", "Test/b=123") 53 check(t, x, "Test/a=123/b=123", "Test/b=123") 54 check(t, x, "Test/a=123/a=123", "Test") 55 check(t, x, "Test/a=123-2", "Test-2") 56 }) 57 58 t.Run("excludeName", func(t *testing.T) { 59 x := newExtractorFullName([]string{".name"}) 60 check(t, x, "Test", "*") 61 check(t, x, "Test/a=123", "*/a=123") 62 x = newExtractorFullName([]string{".name", "/a"}) 63 check(t, x, "Test", "*") 64 check(t, x, "Test/a=123", "*") 65 check(t, x, "Test/a=123/b=123", "*/b=123") 66 }) 67 68 t.Run("excludeGomaxprocs", func(t *testing.T) { 69 x := newExtractorFullName([]string{"/gomaxprocs"}) 70 check(t, x, "Test", "Test") 71 check(t, x, "Test/a=123", "Test/a=123") 72 check(t, x, "Test/a=123-2", "Test/a=123") 73 check(t, x, "Test/gomaxprocs=123", "Test") 74 }) 75 } 76 77 func TestExtractNameKey(t *testing.T) { 78 check := checkNameExtractor 79 80 t.Run("basic", func(t *testing.T) { 81 x, err := newExtractor("/a") 82 if err != nil { 83 t.Fatal(err) 84 } 85 check(t, x, "Test", "") 86 check(t, x, "Test/a=1", "1") 87 check(t, x, "Test/aa=1", "") 88 check(t, x, "Test/a=1/b=2", "1") 89 check(t, x, "Test/b=1/a=2", "2") 90 check(t, x, "Test/b=1/a=2-4", "2") 91 }) 92 93 t.Run("gomaxprocs", func(t *testing.T) { 94 x, err := newExtractor("/gomaxprocs") 95 if err != nil { 96 t.Fatal(err) 97 } 98 check(t, x, "Test", "") 99 check(t, x, "Test/gomaxprocs=4", "4") 100 check(t, x, "Test-4", "4") 101 check(t, x, "Test/a-4", "4") 102 }) 103 } 104 105 func TestExtractFileKey(t *testing.T) { 106 x, err := newExtractor("file-key") 107 if err != nil { 108 t.Fatal(err) 109 } 110 111 res := r(t, "Name", "file-key", "123", "other-key", "456") 112 got := string(x(res)) 113 want := "123" 114 if got != want { 115 t.Errorf("got %s, want %s", got, want) 116 } 117 118 res = r(t, "Name", "other-key", "456") 119 got = string(x(res)) 120 want = "" 121 if got != want { 122 t.Errorf("got %s, want %s", got, want) 123 } 124 } 125 126 func TestExtractBadKey(t *testing.T) { 127 check := func(t *testing.T, got error, want string) { 128 t.Helper() 129 if got == nil || got.Error() != want { 130 t.Errorf("got error %s, want error %s", got, want) 131 } 132 } 133 _, err := newExtractor("") 134 check(t, err, "key must not be empty") 135 }