| // Copyright 2015 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 profile | |
| import ( | |
| "bytes" | |
| "testing" | |
| ) | |
| func TestEmptyProfile(t *testing.T) { | |
| var buf bytes.Buffer | |
| p, err := Parse(&buf) | |
| if err != nil { | |
| t.Error("Want no error, got", err) | |
| } | |
| if p == nil { | |
| t.Fatal("Want a valid profile, got <nil>") | |
| } | |
| if !p.Empty() { | |
| t.Errorf("Profile should be empty, got %#v", p) | |
| } | |
| } | |
| func TestParseContention(t *testing.T) { | |
| tests := []struct { | |
| name string | |
| in string | |
| wantErr bool | |
| }{ | |
| { | |
| name: "valid", | |
| in: `--- mutex: | |
| cycles/second=3491920901 | |
| sampling period=1 | |
| 43227965305 1659640 @ 0x45e851 0x45f764 0x4a2be1 0x44ea31 | |
| 34035731690 15760 @ 0x45e851 0x45f764 0x4a2b17 0x44ea31 | |
| `, | |
| }, | |
| { | |
| name: "valid with comment", | |
| in: `--- mutex: | |
| cycles/second=3491920901 | |
| sampling period=1 | |
| 43227965305 1659640 @ 0x45e851 0x45f764 0x4a2be1 0x44ea31 | |
| # 0x45e850 sync.(*Mutex).Unlock+0x80 /go/src/sync/mutex.go:126 | |
| # 0x45f763 sync.(*RWMutex).Unlock+0x83 /go/src/sync/rwmutex.go:125 | |
| # 0x4a2be0 main.main.func3+0x70 /go/src/internal/pprof/profile/a_binary.go:58 | |
| 34035731690 15760 @ 0x45e851 0x45f764 0x4a2b17 0x44ea31 | |
| # 0x45e850 sync.(*Mutex).Unlock+0x80 /go/src/sync/mutex.go:126 | |
| # 0x45f763 sync.(*RWMutex).Unlock+0x83 /go/src/sync/rwmutex.go:125 | |
| # 0x4a2b16 main.main.func2+0xd6 /go/src/internal/pprof/profile/a_binary.go:48 | |
| `, | |
| }, | |
| { | |
| name: "empty", | |
| in: `--- mutex:`, | |
| wantErr: true, | |
| }, | |
| { | |
| name: "invalid header", | |
| in: `--- channel: | |
| 43227965305 1659640 @ 0x45e851 0x45f764 0x4a2be1 0x44ea31`, | |
| wantErr: true, | |
| }, | |
| } | |
| for _, tc := range tests { | |
| _, err := parseContention([]byte(tc.in)) | |
| if tc.wantErr && err == nil { | |
| t.Errorf("parseContention(%q) succeeded unexpectedly", tc.name) | |
| } | |
| if !tc.wantErr && err != nil { | |
| t.Errorf("parseContention(%q) failed unexpectedly: %v", tc.name, err) | |
| } | |
| } | |
| } |