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  }