mirror of https://github.com/grpc/grpc-node.git
Add incompressible responses and status echoing to Node interop server
This commit is contained in:
parent
fced2ef963
commit
3bd267355b
|
@ -44,6 +44,9 @@ var testProto = grpc.load({
|
|||
var ECHO_INITIAL_KEY = 'x-grpc-test-echo-initial';
|
||||
var ECHO_TRAILING_KEY = 'x-grpc-test-echo-trailing-bin';
|
||||
|
||||
var incompressible_data = fs.readFileSync(
|
||||
__dirname + '/../../../test/cpp/interop/rnd.dat');
|
||||
|
||||
/**
|
||||
* Create a buffer filled with size zeroes
|
||||
* @param {number} size The length of the buffer
|
||||
|
@ -83,6 +86,19 @@ function getEchoTrailer(call) {
|
|||
return response_trailer;
|
||||
}
|
||||
|
||||
function getPayload(payload_type, size) {
|
||||
if (payload_type === 'RANDOM') {
|
||||
payload_type = ['COMPRESSABLE',
|
||||
'UNCOMPRESSABLE'][Math.random() < 0.5 ? 0 : 1];
|
||||
}
|
||||
var body;
|
||||
switch (payload_type) {
|
||||
case 'COMPRESSABLE': body = zeroBuffer(size); break;
|
||||
case 'UNCOMPRESSABLE': incompressible_data.slice(size); break;
|
||||
}
|
||||
return {type: payload_type, body: body};
|
||||
}
|
||||
|
||||
/**
|
||||
* Respond to an empty parameter with an empty response.
|
||||
* NOTE: this currently does not work due to issue #137
|
||||
|
@ -104,13 +120,14 @@ function handleEmpty(call, callback) {
|
|||
function handleUnary(call, callback) {
|
||||
echoHeader(call);
|
||||
var req = call.request;
|
||||
var zeros = zeroBuffer(req.response_size);
|
||||
var payload_type = req.response_type;
|
||||
if (payload_type === 'RANDOM') {
|
||||
payload_type = ['COMPRESSABLE',
|
||||
'UNCOMPRESSABLE'][Math.random() < 0.5 ? 0 : 1];
|
||||
if (req.response_status) {
|
||||
var status = req.response_status;
|
||||
status.metadata = getEchoTrailer(call);
|
||||
callback(status);
|
||||
return;
|
||||
}
|
||||
callback(null, {payload: {type: payload_type, body: zeros}},
|
||||
var payload = getPayload(req.response_type, req.response_size);
|
||||
callback(null, {payload: payload},
|
||||
getEchoTrailer(call));
|
||||
}
|
||||
|
||||
|
@ -139,18 +156,14 @@ function handleStreamingInput(call, callback) {
|
|||
function handleStreamingOutput(call) {
|
||||
echoHeader(call);
|
||||
var req = call.request;
|
||||
var payload_type = req.response_type;
|
||||
if (payload_type === 'RANDOM') {
|
||||
payload_type = ['COMPRESSABLE',
|
||||
'UNCOMPRESSABLE'][Math.random() < 0.5 ? 0 : 1];
|
||||
if (req.response_status) {
|
||||
var status = req.response_status;
|
||||
status.metadata = getEchoTrailer(call);
|
||||
call.emit('error', status);
|
||||
return;
|
||||
}
|
||||
_.each(req.response_parameters, function(resp_param) {
|
||||
call.write({
|
||||
payload: {
|
||||
body: zeroBuffer(resp_param.size),
|
||||
type: payload_type
|
||||
}
|
||||
});
|
||||
call.write({payload: getPayload(req.response_type, resp_param.size)});
|
||||
});
|
||||
call.end(getEchoTrailer(call));
|
||||
}
|
||||
|
@ -163,18 +176,14 @@ function handleStreamingOutput(call) {
|
|||
function handleFullDuplex(call) {
|
||||
echoHeader(call);
|
||||
call.on('data', function(value) {
|
||||
var payload_type = value.response_type;
|
||||
if (payload_type === 'RANDOM') {
|
||||
payload_type = ['COMPRESSABLE',
|
||||
'UNCOMPRESSABLE'][Math.random() < 0.5 ? 0 : 1];
|
||||
if (value.response_status) {
|
||||
var status = value.response_status;
|
||||
status.metadata = getEchoTrailer(call);
|
||||
call.emit('error', status);
|
||||
return;
|
||||
}
|
||||
_.each(value.response_parameters, function(resp_param) {
|
||||
call.write({
|
||||
payload: {
|
||||
body: zeroBuffer(resp_param.size),
|
||||
type: payload_type
|
||||
}
|
||||
});
|
||||
call.write({payload: getPayload(value.response_type, resp_param.size)});
|
||||
});
|
||||
});
|
||||
call.on('end', function() {
|
||||
|
@ -188,7 +197,7 @@ function handleFullDuplex(call) {
|
|||
* @param {Call} call Call to handle
|
||||
*/
|
||||
function handleHalfDuplex(call) {
|
||||
throw new Error('HalfDuplexCall not yet implemented');
|
||||
call.emit('error', Error('HalfDuplexCall not yet implemented'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue