| diff -u original/runner.go bogo/runner.go |
| --- original/runner.go 2018-09-13 21:07:29.000000000 +0100 |
| +++ bogo/runner.go 2019-01-20 11:51:00.705040230 +0000 |
| @@ -84,6 +84,14 @@ |
| // like “SSL_ERROR_NO_CYPHER_OVERLAP”. |
| ErrorMap map[string]string |
| |
| + // TestErrorMap maps from full test names to the correct error |
| + // string for the shim in question. |
| + TestErrorMap map[string]string |
| + |
| + // TestLocalErrorMap maps from full test names to the correct local |
| + // error string for the shim in question. |
| + TestLocalErrorMap map[string]string |
| + |
| // HalfRTTTickets is the number of half-RTT tickets the client should |
| // expect before half-RTT data when testing 0-RTT. |
| HalfRTTTickets int |
| @@ -986,7 +994,11 @@ |
| } |
| } |
| |
| -func translateExpectedError(errorStr string) string { |
| +func translateExpectedError(testName string, errorStr string) string { |
| + if translated, ok := shimConfig.TestErrorMap[testName]; ok { |
| + return translated |
| + } |
| + |
| if translated, ok := shimConfig.ErrorMap[errorStr]; ok { |
| return translated |
| } |
| @@ -998,6 +1010,14 @@ |
| return errorStr |
| } |
| |
| +func translateExpectedLocalError(testName string, localError string) string { |
| + if translated, ok := shimConfig.TestLocalErrorMap[testName]; ok { |
| + return translated |
| + } |
| + |
| + return localError |
| +} |
| + |
| func runTest(test *testCase, shimPath string, mallocNumToFail int64) error { |
| // Help debugging panics on the Go side. |
| defer func() { |
| @@ -1275,18 +1295,20 @@ |
| } |
| |
| failed := err != nil || childErr != nil |
| - expectedError := translateExpectedError(test.expectedError) |
| + expectedError := translateExpectedError(test.name, test.expectedError) |
| correctFailure := len(expectedError) == 0 || strings.Contains(stderr, expectedError) |
| + shouldFail := test.shouldFail || expectedError != "" |
| |
| + var expectedLocalError = translateExpectedLocalError(test.name, test.expectedLocalError) |
| localError := "none" |
| if err != nil { |
| localError = err.Error() |
| } |
| - if len(test.expectedLocalError) != 0 { |
| - correctFailure = correctFailure && strings.Contains(localError, test.expectedLocalError) |
| + if len(expectedLocalError) != 0 { |
| + correctFailure = correctFailure && strings.Contains(localError, expectedLocalError) |
| } |
| |
| - if failed != test.shouldFail || failed && !correctFailure || mustFail { |
| + if failed != shouldFail || failed && !correctFailure || mustFail { |
| childError := "none" |
| if childErr != nil { |
| childError = childErr.Error() |
| @@ -1294,9 +1316,9 @@ |
| |
| var msg string |
| switch { |
| - case failed && !test.shouldFail: |
| + case failed && !shouldFail: |
| msg = "unexpected failure" |
| - case !failed && test.shouldFail: |
| + case !failed && shouldFail: |
| msg = "unexpected success" |
| case failed && !correctFailure: |
| msg = "bad error (wanted '" + expectedError + "' / '" + test.expectedLocalError + "')" |
| Only in bogo/: runner.go.orig |