Get the tests passing

This commit is contained in:
Michael Lumish 2020-04-09 16:08:18 -07:00
parent 4bb965d2d8
commit f0d02f830d
2 changed files with 30 additions and 22 deletions

View File

@ -447,7 +447,11 @@ export class Http2ServerCallStream<
try {
const requestBytes = Buffer.concat(chunks, totalLength);
if (this.maxReceiveMessageSize !== -1 && requestBytes.length > this.maxReceiveMessageSize) {
this.cancelWithStatus(Status.RESOURCE_EXHAUSTED, `Server received message of size ${requestBytes.length} > max size ${this.maxReceiveMessageSize}`);
this.sendError({
code: Status.RESOURCE_EXHAUSTED,
details: `Server received message of size ${requestBytes.length} > max size ${this.maxReceiveMessageSize}`
});
resolve();
}
resolve(await this.deserializeMessage(requestBytes));
@ -564,18 +568,17 @@ export class Http2ServerCallStream<
this.sendStatus(status);
}
cancelWithStatus(code: Status, details: string) {
this.cancelled = true;
this.sendStatus({code, details, metadata: new Metadata()});
}
write(chunk: Buffer) {
if (this.checkCancelled()) {
return;
}
if (this.maxSendMessageSize !== -1 && chunk.length > this.maxSendMessageSize) {
this.cancelWithStatus(Status.RESOURCE_EXHAUSTED, `Server failed to send message of size ${chunk.length} > max size ${this.maxSendMessageSize}`);
this.sendError({
code: Status.RESOURCE_EXHAUSTED,
details: `Server failed to send message of size ${chunk.length} > max size ${this.maxSendMessageSize}`
});
return;
}
this.sendMetadata();
@ -605,7 +608,11 @@ export class Http2ServerCallStream<
for (const message of messages) {
if (this.maxReceiveMessageSize !== -1 && message.length > this.maxReceiveMessageSize) {
this.cancelWithStatus(Status.RESOURCE_EXHAUSTED, `Server received message of size ${message.length} > max size ${this.maxReceiveMessageSize}`);
this.sendError({
code: Status.RESOURCE_EXHAUSTED,
details: `Server received message of size ${message.length} > max size ${this.maxReceiveMessageSize}`
});
return;
}
this.pushOrBufferMessage(readable, message);
}

View File

@ -144,9 +144,9 @@ describe(`${anyGrpc.clientName} client -> ${anyGrpc.serverName} server`, functio
done();
});
});
describe.only('max message size', function() {
describe('max message size', function() {
// A size that is larger than the default limit
const largeMessageSize = 6 * 1024 * 1024;
const largeMessageSize = 8 * 1024 * 1024;
const largeMessage = Buffer.alloc(largeMessageSize);
it('should get an error when sending a large message', function(done) {
done = multiDone(done, 2);
@ -257,27 +257,28 @@ describe(`${anyGrpc.clientName} client -> ${anyGrpc.serverName} server`, functio
restrictedServer.forceShutdown();
});
it('should get an error when sending a large message', function(done) {
done = multiDone(done, 2);
restrictedServerClient.unaryCall({payload: {body: largeMessage}}, (error, result) => {
console.log(error.message);
assert(error);
assert.strictEqual(error.code, grpc.status.RESOURCE_EXHAUSTED);
done();
});
const stream = restrictedServerClient.fullDuplexCall();
stream.write({payload: {body: largeMessage}});
stream.end();
stream.on('data', () => {});
stream.on('status', (status) => {
assert.strictEqual(status.code, grpc.status.RESOURCE_EXHAUSTED);
done();
});
stream.on('error', (error) => {
const stream = restrictedServerClient.fullDuplexCall();
stream.write({payload: {body: largeMessage}});
stream.end();
stream.on('data', () => {});
stream.on('status', (status) => {
console.log(status.details);
assert.strictEqual(status.code, grpc.status.RESOURCE_EXHAUSTED);
done();
});
stream.on('error', (error) => {
});
});
});
it('should get an error when requesting a large message', function(done) {
done = multiDone(done, 2);
restrictedServerClient.unaryCall({response_size: largeMessageSize}, (error, result) => {
assert(error);
console.log(error.message);
assert.strictEqual(error.code, grpc.status.RESOURCE_EXHAUSTED);
done();
});