Skip to content

Commit ee6defb

Browse files
committed
test for batch limiting
1 parent b007361 commit ee6defb

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed

src/test/groovy/graphql/servlet/AbstractGraphQLHttpServletSpec.groovy

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,19 @@ class AbstractGraphQLHttpServletSpec extends Specification {
285285
getBatchedResponseContent()[1].data.echo == "test"
286286
}
287287

288+
def "Execution Result Handler allows limiting number of queries"() {
289+
setup:
290+
request.addParameter('query', '[{ "query": "query { echo(arg:\\"test\\") }" }, { "query": "query { echo(arg:\\"test\\") }" }, { "query": "query { echo(arg:\\"test\\") }" }]')
291+
292+
when:
293+
servlet.doGet(request, response)
294+
295+
then:
296+
response.getStatus() == STATUS_OK
297+
response.getContentType() == CONTENT_TYPE_JSON_UTF8
298+
getBatchedResponseContent().size() == 2
299+
}
300+
288301
def "mutation over HTTP GET returns errors"() {
289302
setup:
290303
request.addParameter('query', 'mutation { echo(arg:"test") }')
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package graphql.servlet;
2+
3+
import graphql.ExecutionInput;
4+
import graphql.ExecutionResult;
5+
6+
import java.io.IOException;
7+
import java.io.Writer;
8+
import java.util.ArrayList;
9+
import java.util.Iterator;
10+
import java.util.List;
11+
12+
public class TestBatchInputHandlerFactory implements GraphQLExecutionResultHandlerFactory {
13+
@Override
14+
public ExecutionResultHandler getBatchHandler(Writer respWriter, GraphQLObjectMapper graphQLObjectMapper) {
15+
return new LimitedBatchSizeHandler(respWriter, graphQLObjectMapper);
16+
}
17+
18+
private class LimitedBatchSizeHandler implements ExecutionResultHandler {
19+
20+
Writer writer;
21+
GraphQLObjectMapper mapper;
22+
List<ExecutionResult> results = new ArrayList<>();
23+
24+
private LimitedBatchSizeHandler(Writer respWriter, GraphQLObjectMapper graphQLObjectMapper) {
25+
this.mapper = graphQLObjectMapper;
26+
this.writer = respWriter;
27+
}
28+
29+
@Override
30+
public void finalizeResults() {
31+
try {
32+
writer.write("[");
33+
Iterator<ExecutionResult> iter = results.iterator();
34+
while (iter.hasNext()) {
35+
writer.write(mapper.serializeResultAsJson(iter.next()));
36+
if (iter.hasNext()) {
37+
writer.write(",");
38+
}
39+
}
40+
writer.write("]");
41+
} catch (IOException e) {
42+
throw new RuntimeException(e);
43+
}
44+
}
45+
46+
@Override
47+
public void accept(ExecutionResult executionResult) {
48+
results.add(executionResult);
49+
}
50+
51+
@Override
52+
public boolean shouldContinue(Iterator<ExecutionInput> executionInputIterator) {
53+
return results.size() < 2 && executionInputIterator.hasNext();
54+
}
55+
}
56+
}

src/test/groovy/graphql/servlet/TestUtils.groovy

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class TestUtils {
2424
.with(createGraphQlSchema(queryDataFetcher, mutationDataFetcher, subscriptionDataFetcher))
2525
.with(createInstrumentedQueryInvoker())
2626
.with(asyncServletModeEnabled)
27+
.with(createBatchInputHandlerFactory())
2728
.build())
2829
servlet.init(null)
2930
return servlet
@@ -34,6 +35,10 @@ class TestUtils {
3435
GraphQLQueryInvoker.newBuilder().with([instrumentation]).build()
3536
}
3637

38+
static def createBatchInputHandlerFactory() {
39+
new TestBatchInputHandlerFactory()
40+
}
41+
3742
static def createGraphQlSchema(DataFetcher queryDataFetcher = { env -> env.arguments.arg },
3843
DataFetcher mutationDataFetcher = { env -> env.arguments.arg },
3944
DataFetcher subscriptionDataFetcher = { env ->

0 commit comments

Comments
 (0)