mirror of https://github.com/grpc/grpc-node.git
107 lines
2.9 KiB
JavaScript
107 lines
2.9 KiB
JavaScript
/*
|
|
*
|
|
* Copyright 2015 gRPC authors.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var childProcess = require('child_process');
|
|
const anyGrpc = require('../any_grpc');
|
|
|
|
var port;
|
|
|
|
var name_override = 'foo.test.google.fr';
|
|
|
|
var serverProcess;
|
|
|
|
const testCases = [
|
|
'empty_unary',
|
|
'large_unary',
|
|
'client_streaming',
|
|
'server_streaming',
|
|
'ping_pong',
|
|
'empty_stream',
|
|
'cancel_after_begin',
|
|
'cancel_after_first_response',
|
|
'timeout_on_sleeping_server',
|
|
'custom_metadata',
|
|
'status_code_and_message',
|
|
'special_status_message',
|
|
'unimplemented_service',
|
|
'unimplemented_method'
|
|
];
|
|
|
|
var childExecArgv = [];
|
|
|
|
describe(`${anyGrpc.clientName} client -> ${anyGrpc.serverName} server`, function() {
|
|
describe('Interop tests', function() {
|
|
this.timeout(4000);
|
|
before(function(done) {
|
|
for (let arg of process.argv) {
|
|
if (arg.startsWith('--require=')) {
|
|
childExecArgv.push('--require');
|
|
childExecArgv.push(arg.substring('--require='.length));
|
|
}
|
|
}
|
|
serverProcess = childProcess.fork(`${__dirname}/interop_helper/server.js`, {
|
|
execArgv: childExecArgv
|
|
});
|
|
serverProcess.on('message', (message) => {
|
|
port = message.port;
|
|
done();
|
|
});
|
|
serverProcess.on('exit', (code, signal) => {
|
|
if (code !== 0) {
|
|
if (code !== null) {
|
|
throw new Error(`Server exited with error code ${code}`);
|
|
} else {
|
|
throw new Error(`Server exited with signal ${signal}`);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
after(function() {
|
|
serverProcess.send({});
|
|
});
|
|
for (let testName of testCases) {
|
|
it(`should pass ${testName}`, function(done) {
|
|
/* We need to run a client process per test to most closely match
|
|
* how the main interop test suite works */
|
|
let clientProcess = childProcess.fork(`${__dirname}/../interop/interop_client`, [
|
|
'--server_host=localhost',
|
|
`--server_port=${port}`,
|
|
`--server_host_override=${name_override}`,
|
|
`--test_case=${testName}`,
|
|
'--use_tls=true',
|
|
'--use_test_ca=true'
|
|
], {
|
|
execArgv: childExecArgv
|
|
});
|
|
clientProcess.on('exit', (code, signal) => {
|
|
if (code === 0) {
|
|
done();
|
|
} else {
|
|
if (code !== null) {
|
|
done(new Error(`Client exited with error code ${code}`));
|
|
} else {
|
|
done(new Error(`Client exited with signal ${signal}`));
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
});
|
|
}); |