|
|
|
@ -36,6 +36,27 @@ |
|
|
|
|
var assert = require('assert'); |
|
|
|
|
var grpc = require('bindings')('grpc.node'); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* This is used for testing functions with multiple asynchronous calls that |
|
|
|
|
* can happen in different orders. This should be passed the number of async |
|
|
|
|
* function invocations that can occur last, and each of those should call this |
|
|
|
|
* function's return value |
|
|
|
|
* @param {function()} done The function that should be called when a test is |
|
|
|
|
* complete. |
|
|
|
|
* @param {number} count The number of calls to the resulting function if the |
|
|
|
|
* test passes. |
|
|
|
|
* @return {function()} The function that should be called at the end of each |
|
|
|
|
* sequence of asynchronous functions. |
|
|
|
|
*/ |
|
|
|
|
function multiDone(done, count) { |
|
|
|
|
return function() { |
|
|
|
|
count -= 1; |
|
|
|
|
if (count <= 0) { |
|
|
|
|
done(); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
describe('channel', function() { |
|
|
|
|
describe('constructor', function() { |
|
|
|
|
it('should require a string for the first argument', function() { |
|
|
|
@ -73,14 +94,16 @@ describe('channel', function() { |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
describe('close', function() { |
|
|
|
|
var channel; |
|
|
|
|
beforeEach(function() { |
|
|
|
|
channel = new grpc.Channel('hostname', {}); |
|
|
|
|
}); |
|
|
|
|
it('should succeed silently', function() { |
|
|
|
|
var channel = new grpc.Channel('hostname', {}); |
|
|
|
|
assert.doesNotThrow(function() { |
|
|
|
|
channel.close(); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
it('should be idempotent', function() { |
|
|
|
|
var channel = new grpc.Channel('hostname', {}); |
|
|
|
|
assert.doesNotThrow(function() { |
|
|
|
|
channel.close(); |
|
|
|
|
channel.close(); |
|
|
|
@ -88,9 +111,68 @@ describe('channel', function() { |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
describe('getTarget', function() { |
|
|
|
|
var channel; |
|
|
|
|
beforeEach(function() { |
|
|
|
|
channel = new grpc.Channel('hostname', {}); |
|
|
|
|
}); |
|
|
|
|
it('should return a string', function() { |
|
|
|
|
var channel = new grpc.Channel('localhost', {}); |
|
|
|
|
assert.strictEqual(typeof channel.getTarget(), 'string'); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
describe('getConnectivityState', function() { |
|
|
|
|
var channel; |
|
|
|
|
beforeEach(function() { |
|
|
|
|
channel = new grpc.Channel('hostname', {}); |
|
|
|
|
}); |
|
|
|
|
it('should return IDLE for a new channel', function() { |
|
|
|
|
assert.strictEqual(channel.getConnectivityState(), |
|
|
|
|
grpc.connectivityState.IDLE); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
describe('watchConnectivityState', function() { |
|
|
|
|
var channel; |
|
|
|
|
beforeEach(function() { |
|
|
|
|
channel = new grpc.Channel('localhost', {}); |
|
|
|
|
}); |
|
|
|
|
afterEach(function() { |
|
|
|
|
channel.close(); |
|
|
|
|
}); |
|
|
|
|
it('should time out if called alone', function(done) { |
|
|
|
|
var old_state = channel.getConnectivityState(); |
|
|
|
|
var deadline = new Date(); |
|
|
|
|
deadline.setSeconds(deadline.getSeconds() + 1); |
|
|
|
|
channel.watchConnectivityState(old_state, deadline, function(err, value) { |
|
|
|
|
assert(err); |
|
|
|
|
done(); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
it('should complete if a connection attempt is forced', function(done) { |
|
|
|
|
var old_state = channel.getConnectivityState(); |
|
|
|
|
var deadline = new Date(); |
|
|
|
|
deadline.setSeconds(deadline.getSeconds() + 1); |
|
|
|
|
channel.watchConnectivityState(old_state, deadline, function(err, value) { |
|
|
|
|
assert.ifError(err); |
|
|
|
|
assert.notEqual(value.new_state, old_state); |
|
|
|
|
done(); |
|
|
|
|
}); |
|
|
|
|
channel.getConnectivityState(true); |
|
|
|
|
}); |
|
|
|
|
it('should complete twice if called twice', function(done) { |
|
|
|
|
done = multiDone(done, 2); |
|
|
|
|
var old_state = channel.getConnectivityState(); |
|
|
|
|
var deadline = new Date(); |
|
|
|
|
deadline.setSeconds(deadline.getSeconds() + 1); |
|
|
|
|
channel.watchConnectivityState(old_state, deadline, function(err, value) { |
|
|
|
|
assert.ifError(err); |
|
|
|
|
assert.notEqual(value.new_state, old_state); |
|
|
|
|
done(); |
|
|
|
|
}); |
|
|
|
|
channel.watchConnectivityState(old_state, deadline, function(err, value) { |
|
|
|
|
assert.ifError(err); |
|
|
|
|
assert.notEqual(value.new_state, old_state); |
|
|
|
|
done(); |
|
|
|
|
}); |
|
|
|
|
channel.getConnectivityState(true); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|