|
@@ -17,6 +17,7 @@ package symbolizer
|
17
|
17
|
import (
|
18
|
18
|
"fmt"
|
19
|
19
|
"regexp"
|
|
20
|
+ "strings"
|
20
|
21
|
"testing"
|
21
|
22
|
|
22
|
23
|
"github.com/google/pprof/internal/plugin"
|
|
@@ -95,7 +96,66 @@ var testProfile = profile.Profile{
|
95
|
96
|
}
|
96
|
97
|
|
97
|
98
|
func TestSymbolization(t *testing.T) {
|
98
|
|
- prof := testProfile
|
|
99
|
+ sSym := symbolzSymbolize
|
|
100
|
+ lSym := localSymbolize
|
|
101
|
+ defer func() {
|
|
102
|
+ symbolzSymbolize = sSym
|
|
103
|
+ localSymbolize = lSym
|
|
104
|
+ }()
|
|
105
|
+ symbolzSymbolize = symbolzMock
|
|
106
|
+ localSymbolize = localMock
|
|
107
|
+
|
|
108
|
+ type testcase struct {
|
|
109
|
+ mode string
|
|
110
|
+ wantComment string
|
|
111
|
+ }
|
|
112
|
+
|
|
113
|
+ s := Symbolizer{
|
|
114
|
+ mockObjTool{},
|
|
115
|
+ &proftest.TestUI{T: t},
|
|
116
|
+ }
|
|
117
|
+ for i, tc := range []testcase{
|
|
118
|
+ {
|
|
119
|
+ "local",
|
|
120
|
+ "local=local",
|
|
121
|
+ },
|
|
122
|
+ {
|
|
123
|
+ "fastlocal",
|
|
124
|
+ "local=fastlocal",
|
|
125
|
+ },
|
|
126
|
+ {
|
|
127
|
+ "remote",
|
|
128
|
+ "symbolz",
|
|
129
|
+ },
|
|
130
|
+ {
|
|
131
|
+ "",
|
|
132
|
+ "local=:symbolz",
|
|
133
|
+ },
|
|
134
|
+ } {
|
|
135
|
+ prof := testProfile.Copy()
|
|
136
|
+ if err := s.Symbolize(tc.mode, nil, prof); err != nil {
|
|
137
|
+ t.Errorf("symbolize #%d: %v", i, err)
|
|
138
|
+ continue
|
|
139
|
+ }
|
|
140
|
+ if got, want := strings.Join(prof.Comments, ":"), tc.wantComment; got != want {
|
|
141
|
+ t.Errorf("got %s, want %s", got, want)
|
|
142
|
+ continue
|
|
143
|
+ }
|
|
144
|
+ }
|
|
145
|
+}
|
|
146
|
+
|
|
147
|
+func symbolzMock(sources plugin.MappingSources, syms func(string, string) ([]byte, error), p *profile.Profile, ui plugin.UI) error {
|
|
148
|
+ p.Comments = append(p.Comments, "symbolz")
|
|
149
|
+ return nil
|
|
150
|
+}
|
|
151
|
+
|
|
152
|
+func localMock(mode string, p *profile.Profile, obj plugin.ObjTool, ui plugin.UI) error {
|
|
153
|
+ p.Comments = append(p.Comments, "local="+mode)
|
|
154
|
+ return nil
|
|
155
|
+}
|
|
156
|
+
|
|
157
|
+func TestLocalSymbolization(t *testing.T) {
|
|
158
|
+ prof := testProfile.Copy()
|
99
|
159
|
|
100
|
160
|
if prof.HasFunctions() {
|
101
|
161
|
t.Error("unexpected function names")
|
|
@@ -105,8 +165,8 @@ func TestSymbolization(t *testing.T) {
|
105
|
165
|
}
|
106
|
166
|
|
107
|
167
|
b := mockObjTool{}
|
108
|
|
- if err := localSymbolize("", &prof, b, &proftest.TestUI{T: t}); err != nil {
|
109
|
|
- t.Fatalf("Symbolize(): %v", err)
|
|
168
|
+ if err := localSymbolize("", prof, b, &proftest.TestUI{T: t}); err != nil {
|
|
169
|
+ t.Fatalf("localSymbolize(): %v", err)
|
110
|
170
|
}
|
111
|
171
|
|
112
|
172
|
for _, loc := range prof.Location {
|