OLD | NEW |
1 package data | 1 package data |
2 | 2 |
3 import ( | 3 import ( |
4 "path/filepath" | 4 "path/filepath" |
5 "reflect" | 5 "reflect" |
6 "testing" | 6 "testing" |
7 | 7 |
8 "go.skia.org/infra/go/testutils" | 8 "go.skia.org/infra/go/testutils" |
9 ) | 9 ) |
10 | 10 |
11 func TestParseReleaseDump(t *testing.T) { | 11 func TestParseReleaseDump(t *testing.T) { |
12 » testInput := testutils.MustReadFile("parse-release.dump") | 12 » testInput := testutils.MustReadFile("parse-catchsegv-release.dump") |
13 trace := ParseStackTrace(testInput) | 13 trace := ParseStackTrace(testInput) |
14 expected := StackTrace{ | 14 expected := StackTrace{ |
15 Frames: []StackTraceFrame{ | 15 Frames: []StackTraceFrame{ |
16 FullStackFrame("src/core/", "SkReadBuffer.cpp", "readFla
ttenable", 344), | 16 FullStackFrame("src/core/", "SkReadBuffer.cpp", "readFla
ttenable", 344), |
17 FullStackFrame("src/core/", "SkReadBuffer.h", "readFlatt
enable", 130), | 17 FullStackFrame("src/core/", "SkReadBuffer.h", "readFlatt
enable", 130), |
18 FullStackFrame("src/core/", "SkPictureData.cpp", "parseB
ufferTag", 498), | 18 FullStackFrame("src/core/", "SkPictureData.cpp", "parseB
ufferTag", 498), |
19 FullStackFrame("src/core/", "SkPictureData.cpp", "parseS
treamTag", 424), | 19 FullStackFrame("src/core/", "SkPictureData.cpp", "parseS
treamTag", 424), |
20 FullStackFrame("src/core/", "SkPictureData.cpp", "parseS
tream", 580), | 20 FullStackFrame("src/core/", "SkPictureData.cpp", "parseS
tream", 580), |
21 FullStackFrame("src/core/", "SkPicture.cpp", "CreateFrom
Stream", 153), | 21 FullStackFrame("src/core/", "SkPicture.cpp", "CreateFrom
Stream", 153), |
22 FullStackFrame("src/core/", "SkPictureData.cpp", "parseS
treamTag", 392), | 22 FullStackFrame("src/core/", "SkPictureData.cpp", "parseS
treamTag", 392), |
23 FullStackFrame("src/core/", "SkPictureData.cpp", "parseS
tream", 580), | 23 FullStackFrame("src/core/", "SkPictureData.cpp", "parseS
tream", 580), |
24 FullStackFrame("src/core/", "SkPicture.cpp", "CreateFrom
Stream", 153), | 24 FullStackFrame("src/core/", "SkPicture.cpp", "CreateFrom
Stream", 153), |
25 FullStackFrame("fuzzer_cache/src/", "parseskp.cpp", "too
l_main", 41), | 25 FullStackFrame("fuzzer_cache/src/", "parseskp.cpp", "too
l_main", 41), |
26 }, | 26 }, |
27 } | 27 } |
28 if !reflect.DeepEqual(expected, trace) { | 28 if !reflect.DeepEqual(expected, trace) { |
29 t.Errorf("Expected %#v\nbut was %#v", expected, trace) | 29 t.Errorf("Expected %#v\nbut was %#v", expected, trace) |
30 } | 30 } |
31 } | 31 } |
32 | 32 |
33 func TestParseDebugDump(t *testing.T) { | 33 func TestParseDebugDump(t *testing.T) { |
34 » testInput := testutils.MustReadFile("parse-debug.dump") | 34 » testInput := testutils.MustReadFile("parse-catchsegv-debug.dump") |
35 | 35 |
36 trace := ParseStackTrace(testInput) | 36 trace := ParseStackTrace(testInput) |
37 | 37 |
38 expected := StackTrace{ | 38 expected := StackTrace{ |
39 Frames: []StackTraceFrame{ | 39 Frames: []StackTraceFrame{ |
40 FullStackFrame("src/core/", "SkReadBuffer.cpp", "readFla
ttenable", 343), | 40 FullStackFrame("src/core/", "SkReadBuffer.cpp", "readFla
ttenable", 343), |
41 FullStackFrame("src/core/", "SkReadBuffer.h", "readFlatt
enable", 130), | 41 FullStackFrame("src/core/", "SkReadBuffer.h", "readFlatt
enable", 130), |
42 FullStackFrame("src/core/", "SkReadBuffer.h", "readPathE
ffect", 136), | 42 FullStackFrame("src/core/", "SkReadBuffer.h", "readPathE
ffect", 136), |
43 FullStackFrame("src/core/", "SkPaint.cpp", "unflatten",
1971), | 43 FullStackFrame("src/core/", "SkPaint.cpp", "unflatten",
1971), |
44 FullStackFrame("src/core/", "SkReadBuffer.h", "readPaint
", 126), | 44 FullStackFrame("src/core/", "SkReadBuffer.h", "readPaint
", 126), |
(...skipping 10 matching lines...) Expand all Loading... |
55 FullStackFrame("fuzzer_cache/src/", "parseskp.cpp", "too
l_main", 41), | 55 FullStackFrame("fuzzer_cache/src/", "parseskp.cpp", "too
l_main", 41), |
56 }, | 56 }, |
57 } | 57 } |
58 | 58 |
59 if !reflect.DeepEqual(expected, trace) { | 59 if !reflect.DeepEqual(expected, trace) { |
60 t.Errorf("Expected %#v\nbut was %#v", expected, trace) | 60 t.Errorf("Expected %#v\nbut was %#v", expected, trace) |
61 } | 61 } |
62 } | 62 } |
63 | 63 |
64 func TestParsingEdgeCases(t *testing.T) { | 64 func TestParsingEdgeCases(t *testing.T) { |
65 » // This is a made up dump that has the edge cases for parsing. | 65 » // This is a made up dump that has the edge cases for parsing function n
ames. |
66 » testInput := testutils.MustReadFile("parse-edge.dump") | 66 » testInput := testutils.MustReadFile("parse-catchsegv-edge.dump") |
67 trace := ParseStackTrace(testInput) | 67 trace := ParseStackTrace(testInput) |
68 expected := StackTrace{ | 68 expected := StackTrace{ |
69 Frames: []StackTraceFrame{ | 69 Frames: []StackTraceFrame{ |
70 FullStackFrame("src/codec/", "SkMasks.cpp", "convert_to_
8", 54), | 70 FullStackFrame("src/codec/", "SkMasks.cpp", "convert_to_
8", 54), |
71 FullStackFrame("src/codec/", "SkBmpMaskCodec.cpp", "deco
deRows", 93), | 71 FullStackFrame("src/codec/", "SkBmpMaskCodec.cpp", "deco
deRows", 93), |
72 FullStackFrame("src/core/", "SkClipStack.cpp", "Element:
:updateBoundAndGenID", 483), | 72 FullStackFrame("src/core/", "SkClipStack.cpp", "Element:
:updateBoundAndGenID", 483), |
73 FullStackFrame("src/core/", "SkClipStack.cpp", "pushElem
ent", 719), | 73 FullStackFrame("src/core/", "SkClipStack.cpp", "pushElem
ent", 719), |
74 FullStackFrame("dm/", "DMSrcSink.cpp", "SKPSrc::draw", 7
51), | 74 FullStackFrame("dm/", "DMSrcSink.cpp", "SKPSrc::draw", 7
51), |
75 FullStackFrame("src/core/", "SkReader32.h", "eof", 38), | 75 FullStackFrame("src/core/", "SkReader32.h", "eof", 38), |
76 FullStackFrame("src/core/", "SkTaskGroup.cpp", "ThreadPo
ol::Wait", 88), | 76 FullStackFrame("src/core/", "SkTaskGroup.cpp", "ThreadPo
ol::Wait", 88), |
(...skipping 11 matching lines...) Expand all Loading... |
88 trace := ParseStackTrace("") | 88 trace := ParseStackTrace("") |
89 | 89 |
90 if !trace.IsEmpty() { | 90 if !trace.IsEmpty() { |
91 t.Errorf("Expected stacktrace to be empty but was %#v", trace) | 91 t.Errorf("Expected stacktrace to be empty but was %#v", trace) |
92 } | 92 } |
93 } | 93 } |
94 | 94 |
95 func stacktrace(file string) string { | 95 func stacktrace(file string) string { |
96 return filepath.Join("stacktrace", file) | 96 return filepath.Join("stacktrace", file) |
97 } | 97 } |
98 | |
99 func TestParseDumpFilesCase0(t *testing.T) { | |
100 // Case 0, both debug and release dumped, due to an assertion error | |
101 debugDump := testutils.MustReadFile(stacktrace("case0_debug.dump")) | |
102 debugErr := testutils.MustReadFile(stacktrace("case0_debug.err")) | |
103 releaseDump := testutils.MustReadFile(stacktrace("case0_release.dump")) | |
104 releaseErr := testutils.MustReadFile(stacktrace("case0_release.err")) | |
105 | |
106 result := ParseFuzzResult(debugDump, debugErr, releaseDump, releaseErr) | |
107 expectedFlags := DebugCrashed | ReleaseCrashed | DebugAssertionViolated
| ReleaseOther | |
108 if result.Flags != expectedFlags { | |
109 t.Errorf("parsed Flags were wrong. Expected %s, but was %s", ex
pectedFlags.String(), result.Flags.String()) | |
110 } | |
111 } | |
112 | |
113 func TestParseDumpFilesCase1(t *testing.T) { | |
114 // Case 1, both debug and release exist with partial success | |
115 debugDump := "" | |
116 debugErr := testutils.MustReadFile(stacktrace("case1_debug.err")) | |
117 releaseDump := "" | |
118 releaseErr := testutils.MustReadFile(stacktrace("case1_release.err")) | |
119 | |
120 result := ParseFuzzResult(debugDump, debugErr, releaseDump, releaseErr) | |
121 expectedFlags := DebugFailedGracefully | ReleaseFailedGracefully | |
122 | |
123 if result.Flags != expectedFlags { | |
124 t.Errorf("parsed Flags were wrong. Expected %s, but was %s", ex
pectedFlags.String(), result.Flags.String()) | |
125 } | |
126 } | |
127 | |
128 func TestParseDumpFilesCase2(t *testing.T) { | |
129 // Case 2, debug dumped and hit an assertion, release timed out | |
130 debugDump := testutils.MustReadFile(stacktrace("case2_debug.dump")) | |
131 debugErr := testutils.MustReadFile(stacktrace("case2_debug.err")) | |
132 releaseDump := "" | |
133 releaseErr := "" | |
134 | |
135 result := ParseFuzzResult(debugDump, debugErr, releaseDump, releaseErr) | |
136 expectedFlags := DebugCrashed | DebugAssertionViolated | ReleaseTimedOut | |
137 if result.Flags != expectedFlags { | |
138 t.Errorf("parsed Flags were wrong. Expected %s, but was %s", ex
pectedFlags.String(), result.Flags.String()) | |
139 } | |
140 } | |
141 | |
142 func TestParseDumpFilesCase3(t *testing.T) { | |
143 // Case 3, both debug and release ran a bad malloc | |
144 debugDump := testutils.MustReadFile(stacktrace("case3_debug.dump")) | |
145 debugErr := testutils.MustReadFile(stacktrace("case3_debug.err")) | |
146 releaseDump := testutils.MustReadFile(stacktrace("case3_release.dump")) | |
147 releaseErr := testutils.MustReadFile(stacktrace("case3_release.err")) | |
148 | |
149 result := ParseFuzzResult(debugDump, debugErr, releaseDump, releaseErr) | |
150 expectedFlags := DebugCrashed | DebugBadAlloc | ReleaseCrashed | Release
BadAlloc | |
151 if result.Flags != expectedFlags { | |
152 t.Errorf("parsed Flags were wrong. Expected %s, but was %s", ex
pectedFlags.String(), result.Flags.String()) | |
153 } | |
154 } | |
155 | |
156 func TestParseDumpFilesCase4(t *testing.T) { | |
157 // Case 4, both debug and release failed gracefully | |
158 debugDump := testutils.MustReadFile(stacktrace("case4_debug.dump")) | |
159 debugErr := testutils.MustReadFile(stacktrace("case4_debug.err")) | |
160 releaseDump := testutils.MustReadFile(stacktrace("case4_release.dump")) | |
161 releaseErr := testutils.MustReadFile(stacktrace("case4_release.err")) | |
162 | |
163 result := ParseFuzzResult(debugDump, debugErr, releaseDump, releaseErr) | |
164 expectedFlags := DebugFailedGracefully | ReleaseFailedGracefully | |
165 if result.Flags != expectedFlags { | |
166 t.Errorf("parsed Flags were wrong. Expected %s, but was %s", ex
pectedFlags.String(), result.Flags.String()) | |
167 } | |
168 } | |
169 | |
170 func TestParseDumpFilesCase5(t *testing.T) { | |
171 // Case 5, both debug and release crashed, but no stacktrace | |
172 debugDump := testutils.MustReadFile(stacktrace("case5_debug.dump")) | |
173 debugErr := testutils.MustReadFile(stacktrace("case5_debug.err")) | |
174 releaseDump := testutils.MustReadFile(stacktrace("case5_release.dump")) | |
175 releaseErr := testutils.MustReadFile(stacktrace("case5_release.err")) | |
176 | |
177 result := ParseFuzzResult(debugDump, debugErr, releaseDump, releaseErr) | |
178 expectedFlags := DebugCrashed | ReleaseCrashed | DebugNoStackTrace | Rel
easeNoStackTrace | |
179 if result.Flags != expectedFlags { | |
180 t.Errorf("parsed Flags were wrong. Expected %s, but was %s", ex
pectedFlags.String(), result.Flags.String()) | |
181 } | |
182 } | |
183 | |
184 func TestParseDumpFilesCase6(t *testing.T) { | |
185 // Case 6, both debug and release timed out | |
186 debugDump := "" | |
187 debugErr := "" | |
188 releaseDump := "" | |
189 releaseErr := "" | |
190 | |
191 result := ParseFuzzResult(debugDump, debugErr, releaseDump, releaseErr) | |
192 expectedFlags := DebugTimedOut | ReleaseTimedOut | |
193 if result.Flags != expectedFlags { | |
194 t.Errorf("parsed Flags were wrong. Expected %s, but was %s", ex
pectedFlags.String(), result.Flags.String()) | |
195 } | |
196 } | |
OLD | NEW |