Skip to content

Commit d042f58

Browse files
committed
Add panic handler tests, remove redundant "graphql:" err prefix
* Add panic handler tests * Fix rebase bug * Document new PanicHandler option in README
1 parent 513af5d commit d042f58

File tree

4 files changed

+27
-1
lines changed

4 files changed

+27
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ func (r *helloWorldResolver) Hello(ctx context.Context) (string, error) {
109109
- `Tracer(tracer trace.Tracer)` is used to trace queries and fields. It defaults to `trace.OpenTracingTracer`.
110110
- `ValidationTracer(tracer trace.ValidationTracer)` is used to trace validation errors. It defaults to `trace.NoopValidationTracer`.
111111
- `Logger(logger log.Logger)` is used to log panics during query execution. It defaults to `exec.DefaultLogger`.
112+
- `PanicHandler(panicHandler errors.PanicHandler)` is used to transform panics into errors during query execution. It defaults to `errors.DefaultPanicHandler`.
112113
- `DisableIntrospection()` disables introspection queries.
113114

114115
### Custom Errors

errors/panic_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ type DefaultPanicHandler struct{}
1414

1515
// MakePanicError creates a new QueryError from a panic that occurred during execution
1616
func (h *DefaultPanicHandler) MakePanicError(ctx context.Context, value interface{}) *QueryError {
17-
return Errorf("graphql: panic occurred: %v", value)
17+
return Errorf("panic occurred: %v", value)
1818
}

errors/panic_handler_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package errors
2+
3+
import (
4+
"context"
5+
"testing"
6+
)
7+
8+
func TestDefaultPanicHandler(t *testing.T) {
9+
handler := &DefaultPanicHandler{}
10+
qErr := handler.MakePanicError(context.Background(), "foo")
11+
if qErr == nil {
12+
t.Fatal("Panic error must not be nil")
13+
}
14+
const (
15+
expectedMessage = "panic occurred: foo"
16+
expectedError = "graphql: " + expectedMessage
17+
)
18+
if qErr.Error() != expectedError {
19+
t.Errorf("Unexpected panic error message: %q != %q", qErr.Error(), expectedError)
20+
}
21+
if qErr.Message != expectedMessage {
22+
t.Errorf("Unexpected panic QueryError.Message: %q != %q", qErr.Message, expectedMessage)
23+
}
24+
}

subscriptions.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ func (s *Schema) subscribe(ctx context.Context, queryString string, operationNam
5757
Limiter: make(chan struct{}, s.maxParallelism),
5858
Tracer: s.tracer,
5959
Logger: s.logger,
60+
PanicHandler: s.panicHandler,
6061
SubscribeResolverTimeout: s.subscribeResolverTimeout,
6162
}
6263
varTypes := make(map[string]*introspection.Type)

0 commit comments

Comments
 (0)