Fix a typo on the inner invoker parameters (#492)

This commit is contained in:
Bálint Böde 2021-06-29 23:56:12 +02:00 committed by GitHub
parent f23070ee85
commit f5508d9801
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 2 deletions

View File

@ -60,7 +60,7 @@ regenerate these stubs using protobuf compiler plugin version 19.2.0 or newer.
ResponseStream<R> $createStreamingCall<Q, R>( ResponseStream<R> $createStreamingCall<Q, R>(
ClientMethod<Q, R> method, Stream<Q> requests, ClientMethod<Q, R> method, Stream<Q> requests,
{CallOptions? options}) { {CallOptions? options}) {
var invoker = (method, request, options) => var invoker = (method, requests, options) =>
ResponseStream<R>(_channel.createCall<Q, R>(method, requests, options)); ResponseStream<R>(_channel.createCall<Q, R>(method, requests, options));
for (final interceptor in _interceptors.reversed) { for (final interceptor in _interceptors.reversed) {

View File

@ -1,3 +1,5 @@
import 'dart:async';
import 'package:grpc/grpc.dart'; import 'package:grpc/grpc.dart';
import 'package:grpc/src/client/interceptor.dart'; import 'package:grpc/src/client/interceptor.dart';
import 'package:http2/transport.dart'; import 'package:http2/transport.dart';
@ -44,7 +46,11 @@ class FakeInterceptor implements ClientInterceptor {
ClientStreamingInvoker<Q, R> invoker) { ClientStreamingInvoker<Q, R> invoker) {
_invocations.add(InterceptorInvocation(_id, _unary, ++_streaming)); _invocations.add(InterceptorInvocation(_id, _unary, ++_streaming));
return invoker(method, requests, _inject(options)); final requestStream = _id > 10
? requests.cast<int>().map((req) => req * _id).cast<Q>()
: requests;
return invoker(method, requestStream, _inject(options));
} }
CallOptions _inject(CallOptions options) { CallOptions _inject(CallOptions options) {
@ -206,4 +212,43 @@ void main() {
harness.tearDown(); harness.tearDown();
FakeInterceptor.tearDown(); FakeInterceptor.tearDown();
}); });
test('streaming interceptors with request stream operation', () async {
const ids = [21, 73, 37];
final harness = ClientHarness()
..interceptors = ids.map((e) => FakeInterceptor(e))
..setUp();
const requests = [1, 15, 7];
const multiplier = 21 * 73 * 37;
const responses = [1 * multiplier, 15 * multiplier, 7 * multiplier];
var index = 0;
void handleRequest(StreamMessage message) {
final data = validateDataMessage(message);
final request = mockDecode(data.data);
if (index++ == 0) {
harness.sendResponseHeader();
}
harness.sendResponseValue(request);
}
void handleDone() {
harness.sendResponseTrailer();
}
await harness.runTest(
clientCall:
harness.client.bidirectional(Stream.fromIterable(requests)).toList(),
expectedResult: responses,
expectedPath: '/Test/Bidirectional',
serverHandlers: [handleRequest, handleRequest, handleRequest],
doneHandler: handleDone,
);
harness.tearDown();
FakeInterceptor.tearDown();
});
} }