github.com/instana/go-sensor@v1.62.2-0.20240520081010-4919868049e1/autoprofile/internal/pprof/profile/profile_test.go (about)

     1  // Copyright 2015 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 profile
     6  
     7  import (
     8  	"bytes"
     9  	"testing"
    10  )
    11  
    12  func TestEmptyProfile(t *testing.T) {
    13  	var buf bytes.Buffer
    14  	p, err := Parse(&buf)
    15  	if err != nil {
    16  		t.Error("Want no error, got", err)
    17  	}
    18  	if p == nil {
    19  		t.Fatal("Want a valid profile, got <nil>")
    20  	}
    21  	if !p.Empty() {
    22  		t.Errorf("Profile should be empty, got %#v", p)
    23  	}
    24  }
    25  
    26  func TestParseContention(t *testing.T) {
    27  	tests := []struct {
    28  		name    string
    29  		in      string
    30  		wantErr bool
    31  	}{
    32  		{
    33  			name: "valid",
    34  			in: `--- mutex:
    35  cycles/second=3491920901
    36  sampling period=1
    37  43227965305 1659640 @ 0x45e851 0x45f764 0x4a2be1 0x44ea31
    38  34035731690 15760 @ 0x45e851 0x45f764 0x4a2b17 0x44ea31
    39  `,
    40  		},
    41  		{
    42  			name: "valid with comment",
    43  			in: `--- mutex:
    44  cycles/second=3491920901
    45  sampling period=1
    46  43227965305 1659640 @ 0x45e851 0x45f764 0x4a2be1 0x44ea31
    47  #	0x45e850	sync.(*Mutex).Unlock+0x80	/go/src/sync/mutex.go:126
    48  #	0x45f763	sync.(*RWMutex).Unlock+0x83	/go/src/sync/rwmutex.go:125
    49  #	0x4a2be0	main.main.func3+0x70		/go/src/internal/pprof/profile/a_binary.go:58
    50  
    51  34035731690 15760 @ 0x45e851 0x45f764 0x4a2b17 0x44ea31
    52  #	0x45e850	sync.(*Mutex).Unlock+0x80	/go/src/sync/mutex.go:126
    53  #	0x45f763	sync.(*RWMutex).Unlock+0x83	/go/src/sync/rwmutex.go:125
    54  #	0x4a2b16	main.main.func2+0xd6		/go/src/internal/pprof/profile/a_binary.go:48
    55  `,
    56  		},
    57  		{
    58  			name:    "empty",
    59  			in:      `--- mutex:`,
    60  			wantErr: true,
    61  		},
    62  		{
    63  			name: "invalid header",
    64  			in: `--- channel:
    65  43227965305 1659640 @ 0x45e851 0x45f764 0x4a2be1 0x44ea31`,
    66  			wantErr: true,
    67  		},
    68  	}
    69  	for _, tc := range tests {
    70  		_, err := parseContention([]byte(tc.in))
    71  		if tc.wantErr && err == nil {
    72  			t.Errorf("parseContention(%q) succeeded unexpectedly", tc.name)
    73  		}
    74  		if !tc.wantErr && err != nil {
    75  			t.Errorf("parseContention(%q) failed unexpectedly: %v", tc.name, err)
    76  		}
    77  	}
    78  
    79  }