extracting base class for tests, adding readEvent tests, fixing typed error in related operations, adding a file logger
This commit is contained in:
@ -1,46 +1,12 @@
|
||||
var uuid = require('uuid');
|
||||
var client = require('../src/client');
|
||||
|
||||
var settings = {};
|
||||
if (process.env.TESTS_VERBOSE_LOGGING === '1') {
|
||||
settings.verboseLogging = true;
|
||||
var FileLogger = require('../src/common/log/fileLogger');
|
||||
settings.log = new FileLogger('appendToStream_test.log');
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
setUp: function(cb) {
|
||||
this.testStreamName = 'test-' + uuid.v4();
|
||||
var connected = false;
|
||||
this.conn = client.EventStoreConnection.create(settings, {host: 'localhost', port: 1113});
|
||||
this.conn.connect()
|
||||
.then(function() {
|
||||
//Doesn't mean anything, connection is just initiated
|
||||
})
|
||||
.catch(function(err) {
|
||||
cb(err);
|
||||
});
|
||||
this.conn.on('closed', function(reason){
|
||||
if (connected) return;
|
||||
cb(new Error("Connection failed: " + reason));
|
||||
});
|
||||
this.conn.on('connected', function() {
|
||||
connected = true;
|
||||
cb();
|
||||
});
|
||||
},
|
||||
tearDown: function(cb) {
|
||||
this.conn.close();
|
||||
this.conn.on('closed', function() {
|
||||
cb();
|
||||
});
|
||||
this.conn = null;
|
||||
},
|
||||
'Append One Event To Stream Happy Path': function(test) {
|
||||
var event = client.createJsonEventData(uuid.v4(), {a: Math.random(), b: uuid.v4()}, null, 'testEvent');
|
||||
this.conn.appendToStream(this.testStreamName, client.expectedVersion.any, event)
|
||||
.then(function(result) {
|
||||
test.ok(result.nextExpectedVersion === 0, "Expected nextExpectedVersion === 0, but was " + result.nextExpectedVersion);
|
||||
test.areEqual("nextExpectedVersion", result.nextExpectedVersion, 0);
|
||||
test.ok(result.logPosition, "No log position in result.");
|
||||
test.done();
|
||||
})
|
||||
@ -55,7 +21,7 @@ module.exports = {
|
||||
];
|
||||
this.conn.appendToStream(this.testStreamName, client.expectedVersion.any, events)
|
||||
.then(function(result) {
|
||||
test.ok(result.nextExpectedVersion === 1, "Expected nextExpectedVersion === 1, but was " + result.nextExpectedVersion);
|
||||
test.areEqual("result.nextExpectedVersion", result.nextExpectedVersion, 1);
|
||||
test.ok(result.logPosition, "No log position in result.");
|
||||
test.done();
|
||||
})
|
||||
@ -67,17 +33,14 @@ module.exports = {
|
||||
var event = client.createJsonEventData(uuid.v4(), {a: Math.random(), b: uuid.v4()}, null, 'testEvent');
|
||||
this.conn.appendToStream(this.testStreamName, 10, event)
|
||||
.then(function(result) {
|
||||
test.ok(false, "Append succeeded but should have failed.");
|
||||
test.fail("Append succeeded but should have failed.");
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
var isWrongExpectedVersion = err instanceof client.WrongExpectedVersionError;
|
||||
test.ok(isWrongExpectedVersion, "Expected WrongExpectedVersionError, got " + err.constructor.name);
|
||||
if (!isWrongExpectedVersion) {
|
||||
test.done(err);
|
||||
return;
|
||||
}
|
||||
test.done();
|
||||
if (isWrongExpectedVersion) return test.done();
|
||||
test.done(err);
|
||||
});
|
||||
},
|
||||
'Append To Stream Deleted': function(test) {
|
||||
@ -88,17 +51,14 @@ module.exports = {
|
||||
return self.conn.appendToStream(self.testStreamName, client.expectedVersion.any, event)
|
||||
})
|
||||
.then(function(result) {
|
||||
test.ok(false, "Append succeeded but should have failed.");
|
||||
test.fail("Append succeeded but should have failed.");
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
var isStreamDeleted = err instanceof client.StreamDeletedError;
|
||||
test.ok(isStreamDeleted, "Expected StreamDeletedError, got " + err.constructor.name);
|
||||
if (!isStreamDeleted) {
|
||||
test.done(err);
|
||||
return;
|
||||
}
|
||||
test.done();
|
||||
if (isStreamDeleted) return test.done();
|
||||
test.done(err);
|
||||
});
|
||||
},
|
||||
'Append To Stream Access Denied': function(test) {
|
||||
@ -110,17 +70,16 @@ module.exports = {
|
||||
return self.conn.appendToStream(self.testStreamName, client.expectedVersion.any, event)
|
||||
})
|
||||
.then(function(result) {
|
||||
test.ok(false, "Append succeeded but should have failed.");
|
||||
test.fail("Append succeeded but should have failed.");
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
var isStreamDeleted = err instanceof client.AccessDeniedError;
|
||||
test.ok(isStreamDeleted, "Expected AccessDeniedError, got " + err.constructor.name);
|
||||
if (!isStreamDeleted) {
|
||||
test.done(err);
|
||||
return;
|
||||
}
|
||||
test.done();
|
||||
if (isStreamDeleted) return test.done();
|
||||
test.done(err);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
require('./common/base_test').init(module.exports);
|
||||
|
109
test/common/base_test.js
Normal file
109
test/common/base_test.js
Normal file
@ -0,0 +1,109 @@
|
||||
var util = require('util');
|
||||
var uuid = require('uuid');
|
||||
var client = require('../../src/client');
|
||||
var FileLogger = require('../../src/common/log/fileLogger');
|
||||
var NoopLogger = require('../../src/common/log/noopLogger');
|
||||
|
||||
var settings = {
|
||||
log: new NoopLogger()
|
||||
};
|
||||
if (process.env.TESTS_VERBOSE_LOGGING === '1') {
|
||||
settings.verboseLogging = true;
|
||||
settings.log = new FileLogger('test-verbose.log');
|
||||
}
|
||||
|
||||
var tcpEndPoint = {host: 'localhost', port: 1113};
|
||||
|
||||
function setUp(cb) {
|
||||
this.log = settings.log;
|
||||
this.testStreamName = 'test-' + uuid.v4();
|
||||
var connected = false;
|
||||
this.conn = client.EventStoreConnection.create(settings, tcpEndPoint);
|
||||
this.conn.connect()
|
||||
.then(function () {
|
||||
//Doesn't mean anything, connection is just initiated
|
||||
settings.log.debug("Connection to %j initialized.", tcpEndPoint);
|
||||
})
|
||||
.catch(function (err) {
|
||||
settings.log.error(err, "Initializing connection to %j failed.", tcpEndPoint);
|
||||
cb(err);
|
||||
});
|
||||
this.conn.on('closed', function (reason) {
|
||||
if (connected) return;
|
||||
var error = new Error("Connection failed: " + reason);
|
||||
settings.log.error(error, "Connection to %j failed.", tcpEndPoint);
|
||||
cb(error);
|
||||
});
|
||||
this.conn.on('connected', function () {
|
||||
settings.log.debug("Connected to %j.", tcpEndPoint);
|
||||
connected = true;
|
||||
cb();
|
||||
});
|
||||
}
|
||||
|
||||
function tearDown(cb) {
|
||||
this.conn.close();
|
||||
this.conn.on('closed', function() {
|
||||
cb();
|
||||
});
|
||||
this.conn = null;
|
||||
}
|
||||
|
||||
var areEqual = function(name, actual, expected) {
|
||||
if (typeof expected !== 'object' || expected === null)
|
||||
this.strictEqual(actual, expected, util.format("Failed %s === %s, got %s.", name, expected, actual));
|
||||
else
|
||||
this.deepEqual(actual, expected, util.format("Failed %s deepEqual %j, got %j.", name, expected, actual));
|
||||
};
|
||||
|
||||
var fail = function(reason) {
|
||||
this.ok(false, reason);
|
||||
};
|
||||
|
||||
var _ = {
|
||||
'setUp': setUp,
|
||||
'tearDown': tearDown
|
||||
};
|
||||
|
||||
function wrap(name, testFunc) {
|
||||
var base = _[name];
|
||||
if (base === undefined) {
|
||||
return function(test) {
|
||||
settings.log.debug('--- %s ---', name);
|
||||
test.areEqual = areEqual.bind(test);
|
||||
test.fail = fail.bind(test);
|
||||
return testFunc.call(this, test);
|
||||
}
|
||||
}
|
||||
return function(cb) {
|
||||
var self = this;
|
||||
base.call(this, function(err) {
|
||||
if (err) return cb(err);
|
||||
return testFunc.call(self, cb);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.init = function(testSuite, addSetUpTearDownIfNotPresent) {
|
||||
var thisObj = {};
|
||||
if (addSetUpTearDownIfNotPresent === undefined) addSetUpTearDownIfNotPresent = true;
|
||||
for(var k in testSuite) {
|
||||
if (testSuite.hasOwnProperty(k)) {
|
||||
testSuite[k] = wrap(k, testSuite[k]).bind(thisObj);
|
||||
}
|
||||
}
|
||||
if (!addSetUpTearDownIfNotPresent) return;
|
||||
if (!testSuite.hasOwnProperty('setUp')) testSuite['setUp'] = setUp.bind(thisObj);
|
||||
if (!testSuite.hasOwnProperty('tearDown')) testSuite['tearDown'] = tearDown.bind(thisObj);
|
||||
};
|
||||
module.exports.settings = function(settingsOverride) {
|
||||
var obj = {};
|
||||
for(var prop in settings) {
|
||||
obj[prop] = settings[prop];
|
||||
}
|
||||
if (!settingsOverride) return obj;
|
||||
for(var prop in settingsOverride) {
|
||||
obj[prop] = settingsOverride[prop];
|
||||
}
|
||||
return obj;
|
||||
};
|
@ -1,53 +1,40 @@
|
||||
var util = require('util');
|
||||
var client = require('../src/client.js');
|
||||
|
||||
var consoleLogger = {
|
||||
debug: function() {
|
||||
var msg = util.format.apply(util, Array.prototype.slice.call(arguments));
|
||||
util.log(msg);
|
||||
},
|
||||
info: function() {},
|
||||
error: function() {}
|
||||
};
|
||||
|
||||
var settings = {};//verboseLogging: true, log: consoleLogger};
|
||||
var testBase = require('./common/base_test');
|
||||
|
||||
module.exports = {
|
||||
'Connect To Endpoint Happy Path': function(test) {
|
||||
var tcpEndpoint = {hostname: 'localhost', port: 1113};
|
||||
var conn = client.EventStoreConnection.create({}, tcpEndpoint);
|
||||
var conn = client.EventStoreConnection.create(testBase.settings(), tcpEndpoint);
|
||||
conn.connect()
|
||||
.catch(function(e) {
|
||||
test.done(e);
|
||||
.catch(function(err) {
|
||||
test.done(err);
|
||||
});
|
||||
conn.on('connected', function(endPoint){
|
||||
test.deepEqual(endPoint, tcpEndpoint);
|
||||
test.areEqual("connected endPoint", endPoint, tcpEndpoint);
|
||||
done();
|
||||
});
|
||||
conn.on('error', done);
|
||||
|
||||
function done(e) {
|
||||
function done(err) {
|
||||
conn.close();
|
||||
if (e) {
|
||||
test.done(e);
|
||||
return;
|
||||
}
|
||||
if (err) return test.done(err);
|
||||
test.done();
|
||||
}
|
||||
},
|
||||
'Connect To Endpoint That Don\'t Exist': function(test) {
|
||||
var tcpEndpoint = {hostname: 'localhost', port: 1114};
|
||||
var conn = client.EventStoreConnection.create({maxReconnections: 1}, tcpEndpoint);
|
||||
var conn = client.EventStoreConnection.create(testBase.settings({maxReconnections:1}), tcpEndpoint);
|
||||
conn.connect()
|
||||
.catch(function (e) {
|
||||
test.done(e);
|
||||
.catch(function (err) {
|
||||
test.done(err);
|
||||
});
|
||||
conn.on('connected', function () {
|
||||
test.ok(false, "Should not be able to connect.");
|
||||
test.fail("Should not be able to connect.");
|
||||
test.done();
|
||||
});
|
||||
conn.on('error', function (e) {
|
||||
test.done(e);
|
||||
conn.on('error', function (err) {
|
||||
test.done(err);
|
||||
});
|
||||
conn.on('closed', function(reason) {
|
||||
test.ok(reason.indexOf("Reconnection limit reached") === 0, "Wrong expected reason.");
|
||||
@ -55,3 +42,5 @@ module.exports = {
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
testBase.init(module.exports, false);
|
@ -1,49 +1,17 @@
|
||||
var uuid = require('uuid');
|
||||
var client = require('../src/client');
|
||||
|
||||
var settings = {};
|
||||
if (process.env.TESTS_VERBOSE_LOGGING === '1') {
|
||||
settings.verboseLogging = true;
|
||||
var FileLogger = require('../src/common/log/fileLogger');
|
||||
settings.log = new FileLogger('deleteStream_test.log');
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
setUp: function(cb) {
|
||||
this.testStreamName = 'test-' + uuid.v4();
|
||||
var connected = false;
|
||||
this.conn = client.EventStoreConnection.create(settings, {host: 'localhost', port: 1113});
|
||||
this.conn.connect()
|
||||
var events = [
|
||||
client.createJsonEventData(uuid.v4(), {a: Math.random(), b: uuid.v4()}, null, 'testEvent'),
|
||||
client.createJsonEventData(uuid.v4(), {a: Math.random(), b: uuid.v4()}, null, 'testEvent')
|
||||
];
|
||||
this.conn.appendToStream(this.testStreamName, client.expectedVersion.noStream, events)
|
||||
.then(function() {
|
||||
//Doesn't mean anything, connection is just initiated
|
||||
cb();
|
||||
})
|
||||
.catch(function(err) {
|
||||
cb(err);
|
||||
});
|
||||
this.conn.on('closed', function(reason){
|
||||
if (connected) return;
|
||||
cb(new Error("Connection failed: " + reason));
|
||||
});
|
||||
var self = this;
|
||||
this.conn.on('connected', function() {
|
||||
connected = true;
|
||||
var events = [
|
||||
client.createJsonEventData(uuid.v4(), {a: Math.random(), b: uuid.v4()}, null, 'testEvent'),
|
||||
client.createJsonEventData(uuid.v4(), {a: Math.random(), b: uuid.v4()}, null, 'testEvent')
|
||||
];
|
||||
self.conn.appendToStream(self.testStreamName, client.expectedVersion.noStream, events)
|
||||
.then(function() {
|
||||
cb();
|
||||
})
|
||||
.catch(cb);
|
||||
});
|
||||
},
|
||||
tearDown: function(cb) {
|
||||
this.conn.close();
|
||||
this.conn.on('closed', function() {
|
||||
cb();
|
||||
});
|
||||
this.conn = null;
|
||||
.catch(cb);
|
||||
},
|
||||
'Test Delete Stream Soft Happy Path': function(test) {
|
||||
var self = this;
|
||||
@ -53,8 +21,8 @@ module.exports = {
|
||||
return self.conn.getStreamMetadataRaw(self.testStreamName);
|
||||
})
|
||||
.then(function(metadata) {
|
||||
test.ok(metadata.stream === self.testStreamName, "Metadata stream doesn't match.");
|
||||
test.ok(metadata.isStreamDeleted === false, "Metadata says stream is deleted.");
|
||||
test.areEqual("metadata.stream", metadata.stream, self.testStreamName);
|
||||
test.areEqual("metadata.isStreamDeleted", metadata.isStreamDeleted, false);
|
||||
test.ok(metadata.streamMetadata.$tb, "Expected Truncate Before to be set");
|
||||
test.done();
|
||||
})
|
||||
@ -62,12 +30,6 @@ module.exports = {
|
||||
test.done(err);
|
||||
});
|
||||
},
|
||||
/*
|
||||
This test fails because of a protobufjs error.
|
||||
Client.ReadEventCompleted fails to decode because ResolvedIndexedEvent.event is null and it's marked as required.
|
||||
Test will pass if messages.proto is modified so that ResolvedIndexedEvent.event is optional.
|
||||
Unsure if it's a protobufjs issue or a GES issue. Need to duplicate this test with .Net Client.
|
||||
|
||||
'Test Delete Stream Hard Happy Path': function(test) {
|
||||
var self = this;
|
||||
this.conn.deleteStream(this.testStreamName, 1, true)
|
||||
@ -76,15 +38,62 @@ module.exports = {
|
||||
return self.conn.getStreamMetadataRaw(self.testStreamName);
|
||||
})
|
||||
.then(function(metadata) {
|
||||
test.ok(metadata.stream === self.testStreamName, "Metadata stream doesn't match.");
|
||||
test.ok(metadata.isStreamDeleted === true, "Metadata says stream is deleted.");
|
||||
test.ok(metadata.streamMetadata === null, "Expected streamMetadata to be null.");
|
||||
test.areEqual("metadata.stream", metadata.stream, self.testStreamName);
|
||||
test.areEqual("metadata.isStreamDeleted", metadata.isStreamDeleted, true);
|
||||
test.areEqual("metadata.streamMetadata", metadata.streamMetadata, null);
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
test.done(err);
|
||||
});
|
||||
},
|
||||
'Test Delete Stream With Wrong Expected Version': function(test) {
|
||||
this.conn.deleteStream(this.testStreamName, 10)
|
||||
.then(function(result) {
|
||||
test.fail("Delete succeeded but should have failed.");
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
var isWrongExpectedVersion = err instanceof client.WrongExpectedVersionError;
|
||||
test.ok(isWrongExpectedVersion, "Expected WrongExpectedVersionError, but got " + err.constructor.name);
|
||||
if (isWrongExpectedVersion) return test.done();
|
||||
test.done(err);
|
||||
});
|
||||
},
|
||||
'Test Delete Stream With No Access': function(test) {
|
||||
var self = this;
|
||||
this.conn.setStreamMetadataRaw(this.testStreamName, client.expectedVersion.any, {$acl: {$d: "$admins"}})
|
||||
.then(function() {
|
||||
return self.conn.deleteStream(self.testStreamName, 10);
|
||||
})
|
||||
.then(function(result) {
|
||||
test.fail("Delete succeeded but should have failed.");
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
var isAccessDenied = err instanceof client.AccessDeniedError;
|
||||
test.ok(isAccessDenied, "Expected AccessDeniedError, but got " + err.constructor.name);
|
||||
if (isAccessDenied) return test.done();
|
||||
test.done(err);
|
||||
});
|
||||
},
|
||||
'Test Delete Stream Hard When Already Deleted': function(test) {
|
||||
var self = this;
|
||||
this.conn.deleteStream(this.testStreamName, 1, true)
|
||||
.then(function() {
|
||||
return self.conn.deleteStream(self.testStreamName, 1, true);
|
||||
})
|
||||
.then(function(result) {
|
||||
test.fail("Delete succeeded but should have failed.");
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
var isStreamDeleted = err instanceof client.StreamDeletedError;
|
||||
test.ok(isStreamDeleted, "Expected StreamDeletedError, but got " + err.constructor.name);
|
||||
if (isStreamDeleted) return test.done();
|
||||
test.done(err);
|
||||
});
|
||||
}
|
||||
*/
|
||||
|
||||
};
|
||||
|
||||
require('./common/base_test').init(module.exports);
|
102
test/readEvent_test.js
Normal file
102
test/readEvent_test.js
Normal file
@ -0,0 +1,102 @@
|
||||
var util = require('util');
|
||||
var uuid = require('uuid');
|
||||
var client = require('../src/client');
|
||||
|
||||
|
||||
module.exports = {
|
||||
setUp: function(cb) {
|
||||
this.expectedEvent = {a: uuid.v4(), b: Math.random()};
|
||||
this.expectedEventType = 'anEvent';
|
||||
this.expectedEventId = uuid.v4();
|
||||
var event = client.createJsonEventData(this.expectedEventId, this.expectedEvent, null, this.expectedEventType);
|
||||
this.conn.appendToStream(this.testStreamName, client.expectedVersion.noStream, event)
|
||||
.then(function() {
|
||||
cb();
|
||||
})
|
||||
.catch(cb);
|
||||
},
|
||||
'Read Event Happy Path': function(test) {
|
||||
var self = this;
|
||||
this.conn.readEvent(this.testStreamName, 0)
|
||||
.then(function(result) {
|
||||
test.areEqual('status', result.status, client.eventReadStatus.Success);
|
||||
test.areEqual('stream', result.stream, self.testStreamName);
|
||||
test.areEqual('eventNumber', result.eventNumber, 0);
|
||||
test.ok(result.event !== null, "event is null.");
|
||||
test.ok(result.event.originalEvent !== null, "event.originalEvent is null.");
|
||||
var event = JSON.parse(result.event.originalEvent.data.toString());
|
||||
test.areEqual('event.eventId', result.event.originalEvent.eventId, self.expectedEventId);
|
||||
test.areEqual('event.eventType', result.event.originalEvent.eventType, self.expectedEventType);
|
||||
test.areEqual('decoded event.data', event, self.expectedEvent);
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
test.done(err);
|
||||
})
|
||||
},
|
||||
'Read Event From Non-Existing Stream': function(test) {
|
||||
var anotherStream = 'test' + uuid.v4();
|
||||
this.conn.readEvent(anotherStream, 0)
|
||||
.then(function(result) {
|
||||
test.areEqual('status', result.status, client.eventReadStatus.NoStream);
|
||||
test.areEqual('stream', result.stream, anotherStream);
|
||||
test.areEqual('eventNumber', result.eventNumber, 0);
|
||||
test.areEqual('event', result.event, null);
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
test.done(err);
|
||||
});
|
||||
},
|
||||
'Read Event From Deleted Stream': function(test) {
|
||||
var self = this;
|
||||
this.conn.deleteStream(this.testStreamName, 0, true)
|
||||
.then(function() {
|
||||
return self.conn.readEvent(self.testStreamName, 0)
|
||||
})
|
||||
.then(function(result) {
|
||||
test.areEqual('status', result.status, client.eventReadStatus.StreamDeleted);
|
||||
test.areEqual('stream', result.stream, self.testStreamName);
|
||||
test.areEqual('eventNumber', result.eventNumber, 0);
|
||||
test.areEqual('event', result.event, null);
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
test.done(err);
|
||||
});
|
||||
},
|
||||
'Read Event With Inexisting Version': function(test) {
|
||||
var self = this;
|
||||
return self.conn.readEvent(self.testStreamName, 1)
|
||||
.then(function(result) {
|
||||
test.areEqual('status', result.status, client.eventReadStatus.NotFound);
|
||||
test.areEqual('stream', result.stream, self.testStreamName);
|
||||
test.areEqual('eventNumber', result.eventNumber, 1);
|
||||
test.areEqual('event', result.event, null);
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
test.done(err);
|
||||
});
|
||||
},
|
||||
'Read Event With No Access': function(test) {
|
||||
var self = this;
|
||||
var metadata = {$acl: {$r: '$admins'}};
|
||||
this.conn.setStreamMetadataRaw(self.testStreamName, client.expectedVersion.noStream, metadata)
|
||||
.then(function(){
|
||||
return self.conn.readEvent(self.testStreamName, 0);
|
||||
})
|
||||
.then(function(result) {
|
||||
test.fail("readEvent succeeded but should have failed.");
|
||||
test.done();
|
||||
})
|
||||
.catch(function(err) {
|
||||
var isAccessDenied = err instanceof client.AccessDeniedError;
|
||||
test.ok(isAccessDenied, "readEvent should have failed with AccessDeniedError, got " + err.constructor.name);
|
||||
if (isAccessDenied) return test.done();
|
||||
test.done(err);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
require('./common/base_test').init(module.exports);
|
Reference in New Issue
Block a user