Skip to content

Commit 29b3421

Browse files
committed
Fix unit tests for async support
1 parent 9895e0c commit 29b3421

File tree

4 files changed

+29
-19
lines changed

4 files changed

+29
-19
lines changed

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestHandlerImpl.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,45 +44,49 @@ public void handle(HttpServletRequest request, HttpServletResponse response) thr
4444
response.setStatus(STATUS_BAD_REQUEST);
4545
log.info("Bad request: cannot handle http request", e);
4646
throw e;
47-
} catch (Throwable t) {
47+
} catch (Exception t) {
4848
response.setStatus(500);
4949
log.error("Cannot handle http request", t);
5050
throw t;
5151
}
5252
}
5353

54-
private void execute(GraphQLInvocationInput invocationInput, HttpServletRequest request,
55-
HttpServletResponse response) {
54+
protected void execute(GraphQLInvocationInput invocationInput, HttpServletRequest request,
55+
HttpServletResponse response) throws IOException {
5656
if (request.isAsyncSupported()) {
5757
AsyncContext asyncContext = request.isAsyncStarted()
5858
? request.getAsyncContext()
5959
: request.startAsync(request, response);
6060
asyncContext.setTimeout(configuration.getAsyncTimeout());
6161
invoke(invocationInput, request, response)
62-
.thenAccept(result -> writeResultResponse(result, request, response))
62+
.thenAccept(result -> writeResultResponse(invocationInput, result, request, response))
6363
.exceptionally(t -> writeErrorResponse(t, response))
6464
.thenAccept(aVoid -> asyncContext.complete());
6565
} else {
6666
try {
6767
GraphQLQueryResult result = invoke(invocationInput, request, response).join();
68-
writeResultResponse(result, request, response);
69-
} catch (Throwable t) {
68+
writeResultResponse(invocationInput, result, request, response);
69+
} catch (Exception t) {
7070
writeErrorResponse(t, response);
7171
}
7272
}
7373
}
7474

75-
private void writeResultResponse(GraphQLQueryResult queryResult, HttpServletRequest request,
75+
private void writeResultResponse(GraphQLInvocationInput invocationInput, GraphQLQueryResult queryResult, HttpServletRequest request,
7676
HttpServletResponse response) {
77-
QueryResponseWriter queryResponseWriter = QueryResponseWriter.createWriter(queryResult, configuration.getObjectMapper(),
78-
configuration.getSubscriptionTimeout());
77+
QueryResponseWriter queryResponseWriter = createWriter(invocationInput, queryResult);
7978
try {
8079
queryResponseWriter.write(request, response);
8180
} catch (IOException e) {
8281
throw new UncheckedIOException(e);
8382
}
8483
}
8584

85+
protected QueryResponseWriter createWriter(GraphQLInvocationInput invocationInput, GraphQLQueryResult queryResult) {
86+
return QueryResponseWriter.createWriter(queryResult, configuration.getObjectMapper(),
87+
configuration.getSubscriptionTimeout());
88+
}
89+
8690
private Void writeErrorResponse(Throwable t, HttpServletResponse response) {
8791
response.setStatus(STATUS_BAD_REQUEST);
8892
log.info("Bad GET request: path was not \"/schema.json\" or no query variable named \"query\" given", t);

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/cache/CachingHttpRequestHandlerImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ protected void execute(GraphQLInvocationInput invocationInput, HttpServletReques
4444
}
4545
}
4646

47+
@Override
4748
protected QueryResponseWriter createWriter(GraphQLInvocationInput invocationInput,
4849
GraphQLQueryResult queryResult) {
4950
return CachingQueryResponseWriter.createCacheWriter(

graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/AbstractGraphQLHttpServletSpec.groovy

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class AbstractGraphQLHttpServletSpec extends Specification {
127127
getResponseContent().data.echo == "special char á"
128128
}
129129

130-
def "async query over HTTP GET starts async request"() {
130+
def "disabling async support on request over HTTP GET does not start async request"() {
131131
setup:
132132
servlet = TestUtils.createDefaultServlet({ env -> env.arguments.arg }, { env -> env.arguments.arg }, { env ->
133133
AtomicReference<SingleSubscriberPublisher<String>> publisherRef = new AtomicReference<>();
@@ -138,12 +138,13 @@ class AbstractGraphQLHttpServletSpec extends Specification {
138138
return publisherRef.get()
139139
}, true)
140140
request.addParameter('query', 'query { echo(arg:"test") }')
141+
request.setAsyncSupported(false)
141142

142143
when:
143144
servlet.doGet(request, response)
144145

145146
then:
146-
request.asyncStarted == true
147+
request.asyncContext == null
147148
}
148149

149150
def "query over HTTP GET with variables returns data"() {
@@ -442,7 +443,7 @@ class AbstractGraphQLHttpServletSpec extends Specification {
442443
getResponseContent().data.echo == "test"
443444
}
444445

445-
def "async query over HTTP POST starts async request"() {
446+
def "disabling async support on request over HTTP POST does not start async request"() {
446447
setup:
447448
servlet = TestUtils.createDefaultServlet({ env -> env.arguments.arg }, { env -> env.arguments.arg }, { env ->
448449
AtomicReference<SingleSubscriberPublisher<String>> publisherRef = new AtomicReference<>();
@@ -455,12 +456,13 @@ class AbstractGraphQLHttpServletSpec extends Specification {
455456
request.setContent(mapper.writeValueAsBytes([
456457
query: 'query { echo(arg:"test") }'
457458
]))
459+
request.setAsyncSupported(false)
458460

459461
when:
460462
servlet.doPost(request, response)
461463

462464
then:
463-
request.asyncStarted == true
465+
request.asyncContext == null
464466
}
465467

466468
def "query over HTTP POST body with graphql contentType returns data"() {

graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/TestUtils.groovy

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import graphql.Directives
55
import graphql.Scalars
66
import graphql.execution.reactive.SingleSubscriberPublisher
77
import graphql.kickstart.execution.context.ContextSetting
8+
import graphql.kickstart.servlet.apollo.ApolloScalars
9+
import graphql.kickstart.servlet.context.GraphQLServletContextBuilder
10+
import graphql.kickstart.servlet.input.BatchInputPreProcessor
811
import graphql.schema.*
912
import graphql.schema.idl.RuntimeWiring
1013
import graphql.schema.idl.SchemaGenerator
@@ -46,7 +49,7 @@ class TestUtils {
4649
DataFetcher fieldDataFetcher = { env -> env.arguments.arg },
4750
DataFetcher otherDataFetcher,
4851
boolean asyncServletModeEnabled = false, ContextSetting contextSetting,
49-
graphql.kickstart.servlet.context.GraphQLServletContextBuilder contextBuilder) {
52+
GraphQLServletContextBuilder contextBuilder) {
5053
GraphQLSchema schema = createGraphQlSchemaWithTwoLevels(queryDataFetcher, fieldDataFetcher, otherDataFetcher)
5154
GraphQLHttpServlet servlet = GraphQLHttpServlet.with(GraphQLConfiguration
5255
.with(schema)
@@ -68,15 +71,15 @@ class TestUtils {
6871
}))
6972
return publisherRef.get()
7073
}, boolean asyncServletModeEnabled = false,
71-
graphql.kickstart.servlet.input.BatchInputPreProcessor batchHandler) {
74+
BatchInputPreProcessor batchHandler) {
7275
GraphQLHttpServlet servlet = GraphQLHttpServlet.with(
7376
graphQLConfiguration(createGraphQlSchema(queryDataFetcher, mutationDataFetcher, subscriptionDataFetcher),
7477
batchHandler, asyncServletModeEnabled))
7578
servlet.init(null)
7679
return servlet
7780
}
7881

79-
static def graphQLConfiguration(GraphQLSchema schema, graphql.kickstart.servlet.input.BatchInputPreProcessor batchInputPreProcessor,
82+
static def graphQLConfiguration(GraphQLSchema schema, BatchInputPreProcessor batchInputPreProcessor,
8083
boolean asyncServletModeEnabled) {
8184
def configBuilder = GraphQLConfiguration.with(schema).with(asyncServletModeEnabled)
8285
if (batchInputPreProcessor != null) {
@@ -159,7 +162,7 @@ class TestUtils {
159162
field.type(Scalars.GraphQLString)
160163
field.argument { argument ->
161164
argument.name("file")
162-
argument.type(graphql.kickstart.servlet.apollo.ApolloScalars.Upload)
165+
argument.type(ApolloScalars.Upload)
163166
}
164167
field.dataFetcher({ env -> new String(ByteStreams.toByteArray(env.arguments.file.getInputStream())) })
165168
}
@@ -168,7 +171,7 @@ class TestUtils {
168171
field.type(GraphQLList.list(Scalars.GraphQLString))
169172
field.argument { argument ->
170173
argument.name("files")
171-
argument.type(GraphQLList.list(GraphQLNonNull.nonNull(graphql.kickstart.servlet.apollo.ApolloScalars.Upload)))
174+
argument.type(GraphQLList.list(GraphQLNonNull.nonNull(ApolloScalars.Upload)))
172175
}
173176
field.dataFetcher({ env ->
174177
env.arguments.files.collect {
@@ -196,7 +199,7 @@ class TestUtils {
196199
.query(query)
197200
.mutation(mutation)
198201
.subscription(subscription)
199-
.additionalType(graphql.kickstart.servlet.apollo.ApolloScalars.Upload)
202+
.additionalType(ApolloScalars.Upload)
200203
.additionalDirective(Directives.DeferDirective)
201204
.build()
202205
}

0 commit comments

Comments
 (0)