mirror of https://github.com/grpc/grpc-node.git
test: move interop tests from bind() to bindAsync()
This commit migrates the interop tests from bind() to bindAsync() in order to support the pure JavaScript server, which cannot implement a synchronous bind().
This commit is contained in:
parent
22b258bc4e
commit
0a306fa983
|
@ -62,14 +62,18 @@ describe('Reconnection', function() {
|
|||
let server1;
|
||||
let server2;
|
||||
let port;
|
||||
before(function() {
|
||||
before(function(done) {
|
||||
server1 = new serverGrpc.Server();
|
||||
server1.addService(TestService, serviceImpl);
|
||||
server2 = new serverGrpc.Server();
|
||||
server2.addService(TestService, serviceImpl);
|
||||
port = server1.bind('localhost:0', serverCreds);
|
||||
server1.start();
|
||||
client = new TestServiceClient(`localhost:${port}`, clientCreds);
|
||||
server1.bindAsync('localhost:0', serverCreds, (err, _port) => {
|
||||
assert.ifError(err);
|
||||
server1.start();
|
||||
port = _port;
|
||||
client = new TestServiceClient(`localhost:${port}`, clientCreds);
|
||||
done();
|
||||
});
|
||||
});
|
||||
after(function() {
|
||||
server1.forceShutdown();
|
||||
|
@ -78,6 +82,7 @@ describe('Reconnection', function() {
|
|||
it('Should end with either OK or UNAVAILABLE when querying a server that is shutting down', function(done) {
|
||||
let pendingCalls = 0;
|
||||
let testDone = false;
|
||||
let callInterval;
|
||||
function maybeDone() {
|
||||
if (testDone && pendingCalls === 0) {
|
||||
done();
|
||||
|
@ -86,16 +91,18 @@ describe('Reconnection', function() {
|
|||
client.unary({}, (err, data) => {
|
||||
assert.ifError(err);
|
||||
server1.tryShutdown(() => {
|
||||
server2.bind(`localhost:${port}`, serverCreds);
|
||||
server2.start();
|
||||
client.unary({}, (err, data) => {
|
||||
server2.bindAsync(`localhost:${port}`, serverCreds, (err) => {
|
||||
assert.ifError(err);
|
||||
clearInterval(callInterval);
|
||||
testDone = true;
|
||||
maybeDone();
|
||||
server2.start();
|
||||
client.unary({}, (err, data) => {
|
||||
assert.ifError(err);
|
||||
clearInterval(callInterval);
|
||||
testDone = true;
|
||||
maybeDone();
|
||||
});
|
||||
});
|
||||
});
|
||||
let callInterval = setInterval(() => {
|
||||
callInterval = setInterval(() => {
|
||||
pendingCalls += 1;
|
||||
client.unary({}, (err, data) => {
|
||||
pendingCalls -= 1;
|
||||
|
@ -107,4 +114,4 @@ describe('Reconnection', function() {
|
|||
}, 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -37,7 +37,7 @@ describe('Client malformed response handling', function() {
|
|||
var server;
|
||||
var client;
|
||||
var badArg = Buffer.from([0xFF]);
|
||||
before(function() {
|
||||
before(function(done) {
|
||||
var malformed_test_service = {
|
||||
unary: {
|
||||
path: '/TestService/Unary',
|
||||
|
@ -93,9 +93,12 @@ describe('Client malformed response handling', function() {
|
|||
});
|
||||
}
|
||||
});
|
||||
var port = server.bind('localhost:0', serverInsecureCreds);
|
||||
client = new TestServiceClient('localhost:' + port, clientInsecureCreds);
|
||||
server.start();
|
||||
server.bindAsync('localhost:0', serverInsecureCreds, (err, port) => {
|
||||
assert.ifError(err);
|
||||
client = new TestServiceClient('localhost:' + port, clientInsecureCreds);
|
||||
server.start();
|
||||
done();
|
||||
});
|
||||
});
|
||||
after(function() {
|
||||
server.forceShutdown();
|
||||
|
@ -141,7 +144,7 @@ describe('Client malformed response handling', function() {
|
|||
}
|
||||
var client;
|
||||
var server;
|
||||
before(function() {
|
||||
before(function(done) {
|
||||
var malformed_test_service = {
|
||||
unary: {
|
||||
path: '/TestService/Unary',
|
||||
|
@ -197,9 +200,12 @@ describe('Client malformed response handling', function() {
|
|||
});
|
||||
}
|
||||
});
|
||||
var port = server.bind('localhost:0', serverInsecureCreds);
|
||||
client = new TestServiceClient('localhost:' + port, clientInsecureCreds);
|
||||
server.start();
|
||||
server.bindAsync('localhost:0', serverInsecureCreds, (err, port) => {
|
||||
assert.ifError(err);
|
||||
client = new TestServiceClient('localhost:' + port, clientInsecureCreds);
|
||||
server.start();
|
||||
done();
|
||||
});
|
||||
});
|
||||
after(function() {
|
||||
server.forceShutdown();
|
||||
|
@ -244,7 +250,7 @@ describe('Client malformed response handling', function() {
|
|||
var client;
|
||||
var server;
|
||||
var port;
|
||||
before(function() {
|
||||
before(function(done) {
|
||||
server = new serverGrpc.Server();
|
||||
var trailer_metadata = new serverGrpc.Metadata();
|
||||
trailer_metadata.add('trailer-present', 'yes');
|
||||
|
@ -323,9 +329,13 @@ describe('Client malformed response handling', function() {
|
|||
});
|
||||
}
|
||||
});
|
||||
port = server.bind('localhost:0', serverInsecureCreds);
|
||||
client = new TestServiceClient('localhost:' + port, clientInsecureCreds);
|
||||
server.start();
|
||||
server.bindAsync('localhost:0', serverInsecureCreds, (err, _port) => {
|
||||
assert.ifError(err);
|
||||
port = _port;
|
||||
client = new TestServiceClient('localhost:' + port, clientInsecureCreds);
|
||||
server.start();
|
||||
done();
|
||||
});
|
||||
});
|
||||
after(function() {
|
||||
server.forceShutdown();
|
||||
|
|
|
@ -18,12 +18,15 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
const assert = require('assert');
|
||||
const interopServer = require('../../interop/interop_server.js');
|
||||
|
||||
const serverObj = interopServer.getServer(0, true);
|
||||
serverObj.server.start();
|
||||
process.send({port: serverObj.port});
|
||||
// The only message from the driver should be to stop the server
|
||||
process.on('message', (message) => {
|
||||
serverObj.server.forceShutdown();
|
||||
interopServer.getServer(0, true, (err, serverObj) => {
|
||||
assert.ifError(err);
|
||||
serverObj.server.start();
|
||||
process.send({port: serverObj.port});
|
||||
// The only message from the driver should be to stop the server
|
||||
process.on('message', (message) => {
|
||||
serverObj.server.forceShutdown();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -58,8 +58,7 @@ const clientOptions = {
|
|||
|
||||
describe('Sending metadata', function() {
|
||||
let server;
|
||||
let port;
|
||||
before(function() {
|
||||
before(function(done) {
|
||||
server = new serverGrpc.Server();
|
||||
server.addService(TestService, {
|
||||
unary: function(call, cb) {
|
||||
|
@ -81,9 +80,12 @@ describe('Sending metadata', function() {
|
|||
});
|
||||
}
|
||||
});
|
||||
port = server.bind('localhost:0', serverCreds);
|
||||
server.start();
|
||||
client = new TestServiceClient(`localhost:${port}`, combinedClientCreds, clientOptions);
|
||||
server.bindAsync('localhost:0', serverCreds, (err, port) => {
|
||||
assert.ifError(err);
|
||||
server.start();
|
||||
client = new TestServiceClient(`localhost:${port}`, combinedClientCreds, clientOptions);
|
||||
done();
|
||||
});
|
||||
});
|
||||
after(function() {
|
||||
server.forceShutdown();
|
||||
|
@ -98,4 +100,4 @@ describe('Sending metadata', function() {
|
|||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
var assert = require('assert');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var _ = require('lodash');
|
||||
|
@ -199,10 +200,10 @@ function handleHalfDuplex(call) {
|
|||
* Get a server object bound to the given port
|
||||
* @param {string} port Port to which to bind
|
||||
* @param {boolean} tls Indicates that the bound port should use TLS
|
||||
* @return {{server: Server, port: number}} Server object bound to the support,
|
||||
* and port number that the server is bound to
|
||||
* @param {function(Error, {{server: Server, port: number}})} callback Callback
|
||||
* to call with result or error
|
||||
*/
|
||||
function getServer(port, tls) {
|
||||
function getServer(port, tls, callback) {
|
||||
// TODO(mlumish): enable TLS functionality
|
||||
var options = {};
|
||||
var server_creds;
|
||||
|
@ -227,8 +228,13 @@ function getServer(port, tls) {
|
|||
fullDuplexCall: handleFullDuplex,
|
||||
halfDuplexCall: handleHalfDuplex
|
||||
});
|
||||
var port_num = server.bind('0.0.0.0:' + port, server_creds);
|
||||
return {server: server, port: port_num};
|
||||
server.bindAsync('0.0.0.0:' + port, server_creds, (err, port_num) => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
callback(null, {server: server, port: port_num});
|
||||
});
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
|
@ -236,9 +242,11 @@ if (require.main === module) {
|
|||
var argv = parseArgs(process.argv, {
|
||||
string: ['port', 'use_tls']
|
||||
});
|
||||
var server_obj = getServer(argv.port, argv.use_tls === 'true');
|
||||
console.log('Server attaching to port ' + argv.port);
|
||||
server_obj.server.start();
|
||||
getServer(argv.port, argv.use_tls === 'true', (err, server_obj) => {
|
||||
assert.ifError(err);
|
||||
console.log('Server attaching to port ' + argv.port);
|
||||
server_obj.server.start();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
var assert = require('assert');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var EventEmitter = require('events');
|
||||
|
@ -129,7 +130,7 @@ function BenchmarkServer(host, port, tls, generic, response_size) {
|
|||
};
|
||||
|
||||
var server = new grpc.Server(options);
|
||||
this.port = server.bind(host + ':' + port, server_creds);
|
||||
|
||||
if (generic) {
|
||||
server.addService(genericService, {
|
||||
unaryCall: makeUnaryGenericCall(response_size),
|
||||
|
@ -142,6 +143,9 @@ function BenchmarkServer(host, port, tls, generic, response_size) {
|
|||
});
|
||||
}
|
||||
this.server = server;
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
this.creds = server_creds;
|
||||
}
|
||||
|
||||
util.inherits(BenchmarkServer, EventEmitter);
|
||||
|
@ -150,10 +154,13 @@ util.inherits(BenchmarkServer, EventEmitter);
|
|||
* Start the benchmark server.
|
||||
*/
|
||||
BenchmarkServer.prototype.start = function() {
|
||||
this.server.start();
|
||||
this.last_wall_time = process.hrtime();
|
||||
this.last_usage = process.cpuUsage();
|
||||
this.emit('started');
|
||||
this.server.bindAsync(this.host + ':' + this.port, this.creds, (err) => {
|
||||
assert.ifError(err);
|
||||
this.server.start();
|
||||
this.last_wall_time = process.hrtime();
|
||||
this.last_usage = process.cpuUsage();
|
||||
this.emit('started');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
var assert = require('assert');
|
||||
var console = require('console');
|
||||
var WorkerServiceImpl = require('./worker_service_impl');
|
||||
|
||||
|
@ -32,16 +33,21 @@ var protoPackage = protoLoader.loadSync(
|
|||
includeDirs: [__dirname + '/../../packages/grpc-native-core/deps/grpc']});
|
||||
var serviceProto = grpc.loadPackageDefinition(protoPackage).grpc.testing;
|
||||
|
||||
function runServer(port, benchmark_impl) {
|
||||
function runServer(port, benchmark_impl, callback) {
|
||||
var server_creds = grpc.ServerCredentials.createInsecure();
|
||||
var server = new grpc.Server();
|
||||
server.addService(serviceProto.WorkerService.service,
|
||||
new WorkerServiceImpl(benchmark_impl, server));
|
||||
var address = '0.0.0.0:' + port;
|
||||
server.bind(address, server_creds);
|
||||
server.start();
|
||||
console.log('running QPS worker on %s', address);
|
||||
return server;
|
||||
server.bindAsync(address, server_creds, (err) => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
server.start();
|
||||
console.log('running QPS worker on %s', address);
|
||||
callback(null, server);
|
||||
});
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
|
@ -50,7 +56,9 @@ if (require.main === module) {
|
|||
var argv = parseArgs(process.argv, {
|
||||
string: ['driver_port', 'benchmark_impl']
|
||||
});
|
||||
runServer(argv.driver_port, argv.benchmark_impl);
|
||||
runServer(argv.driver_port, argv.benchmark_impl, (err, server) => {
|
||||
assert.ifError(err);
|
||||
});
|
||||
}
|
||||
|
||||
exports.runServer = runServer;
|
||||
|
|
Loading…
Reference in New Issue