|  | // 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) | 
|  | } | 
|  | } | 
|  |  | 
|  | } |