Adding tests
This commit is contained in:
parent
b2504749ce
commit
4ea996781f
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -33,4 +33,6 @@ node_modules
|
||||||
.node_repl_history
|
.node_repl_history
|
||||||
|
|
||||||
# InteliJ
|
# InteliJ
|
||||||
.idea
|
.idea
|
||||||
|
|
||||||
|
lib/
|
5
index.js
5
index.js
|
@ -3,9 +3,4 @@
|
||||||
* see README.md for more details
|
* see README.md for more details
|
||||||
* see LICENSE for license info
|
* see LICENSE for license info
|
||||||
*/
|
*/
|
||||||
/**
|
|
||||||
* TODO:
|
|
||||||
* library is heavy on number of files so it could have negative impact on load time
|
|
||||||
* we need a compiled (single file) version of the library
|
|
||||||
*/
|
|
||||||
module.exports = require('./lib/dist.js');
|
module.exports = require('./lib/dist.js');
|
||||||
|
|
5939
lib/dist.js
5939
lib/dist.js
File diff suppressed because it is too large
Load Diff
19
package.json
19
package.json
|
@ -3,7 +3,14 @@
|
||||||
"version": "0.0.2",
|
"version": "0.0.2",
|
||||||
"description": "A port of the EventStore .Net ClientAPI to Node.js",
|
"description": "A port of the EventStore .Net ClientAPI to Node.js",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
"directories": {
|
||||||
|
"lib": "lib",
|
||||||
|
"test": "test"
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"clean": "rm lib/dist.js",
|
||||||
|
"build": "webpack",
|
||||||
|
"pretest": "npm run build",
|
||||||
"test": "nodeunit"
|
"test": "nodeunit"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -22,12 +29,16 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/nicdex/eventstore-node#readme",
|
"homepage": "https://github.com/nicdex/eventstore-node#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"long": "^3.0.3",
|
"long": "^3.2",
|
||||||
"protobufjs": "^5.0.1",
|
"protobufjs": "^5.0",
|
||||||
"uuid": "^2.0.1"
|
"uuid": "^2.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.12"
|
"node": ">=0.12"
|
||||||
},
|
},
|
||||||
"engineStrict": true
|
"engineStrict": true,
|
||||||
|
"devDependencies": {
|
||||||
|
"nodeunit": "^0.10.2",
|
||||||
|
"webpack": "^1.13.2"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,7 +189,6 @@ SubscriptionOperation.prototype.dropSubscription = function(reason, err, connect
|
||||||
if (reason !== SubscriptionDropReason.UserInitiated && this._subscription === null)
|
if (reason !== SubscriptionDropReason.UserInitiated && this._subscription === null)
|
||||||
{
|
{
|
||||||
if (err === null) throw new Error(util.format("No exception provided for subscription drop reason '%s", reason));
|
if (err === null) throw new Error(util.format("No exception provided for subscription drop reason '%s", reason));
|
||||||
//TODO: this should be last thing to execute
|
|
||||||
this._cb(err);
|
this._cb(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ var BufferSegment = require('../common/bufferSegment');
|
||||||
var InspectionDecision = require('../systemData/inspectionDecision');
|
var InspectionDecision = require('../systemData/inspectionDecision');
|
||||||
var InspectionResult = require('./../systemData/inspectionResult');
|
var InspectionResult = require('./../systemData/inspectionResult');
|
||||||
var results = require('../results');
|
var results = require('../results');
|
||||||
var VolatileEventStoreSubscription = require('../volatileEventStoreConnection');
|
var VolatileEventStoreSubscription = require('../volatileEventStoreSubscription');
|
||||||
|
|
||||||
function VolatileSubscriptionOperation(
|
function VolatileSubscriptionOperation(
|
||||||
log, cb, streamId, resolveLinkTos, userCredentials, eventAppeared,
|
log, cb, streamId, resolveLinkTos, userCredentials, eventAppeared,
|
||||||
|
|
|
@ -43,13 +43,21 @@ function merge(a,b) {
|
||||||
/**
|
/**
|
||||||
* Create an EventStore connection
|
* Create an EventStore connection
|
||||||
* @param {object} settings
|
* @param {object} settings
|
||||||
* @param {object} tcpEndPoint
|
* @param {string|object} endPoint
|
||||||
* @param {string} [connectionName]
|
* @param {string} [connectionName]
|
||||||
* @returns {EventStoreNodeConnection}
|
* @returns {EventStoreNodeConnection}
|
||||||
*/
|
*/
|
||||||
module.exports.create = function(settings, tcpEndPoint, connectionName) {
|
module.exports.create = function(settings, endPoint, connectionName) {
|
||||||
//TODO: cluster connection
|
if (typeof endPoint === 'object') {
|
||||||
var mergedSettings = merge(defaultConnectionSettings, settings || {});
|
var mergedSettings = merge(defaultConnectionSettings, settings || {});
|
||||||
var endpointDiscoverer = new StaticEndpointDiscoverer(tcpEndPoint, settings.useSslConnection);
|
var endpointDiscoverer = new StaticEndpointDiscoverer(endPoint, settings.useSslConnection);
|
||||||
return new EventStoreNodeConnection(mergedSettings, endpointDiscoverer, connectionName || null);
|
return new EventStoreNodeConnection(mergedSettings, endpointDiscoverer, connectionName || null);
|
||||||
|
}
|
||||||
|
if (typeof endPoint === 'string') {
|
||||||
|
//TODO: tcpEndpoint represented as tcp://hostname:port
|
||||||
|
//TODO: cluster discovery via dns represented as discover://dns:?port
|
||||||
|
throw new Error('Not implemented.');
|
||||||
|
}
|
||||||
|
//TODO: cluster discovery via gossip seeds in settings
|
||||||
|
throw new Error('Not implemented.');
|
||||||
};
|
};
|
|
@ -381,8 +381,10 @@ EventStoreNodeConnection.prototype.readAllEventsBackward = function(
|
||||||
EventStoreNodeConnection.prototype.subscribeToStream = function(
|
EventStoreNodeConnection.prototype.subscribeToStream = function(
|
||||||
stream, resolveLinkTos, eventAppeared, subscriptionDropped, userCredentials
|
stream, resolveLinkTos, eventAppeared, subscriptionDropped, userCredentials
|
||||||
) {
|
) {
|
||||||
if (typeof stream !== 'string' || stream === '') throw new TypeError("stream must be a non-empty string.");
|
ensure.notNullOrEmpty(stream, "stream");
|
||||||
if (typeof eventAppeared !== 'function') throw new TypeError("eventAppeared must be a function.");
|
ensure.isTypeOf(Function, eventAppeared, "eventAppeared");
|
||||||
|
if (subscriptionDropped)
|
||||||
|
ensure.isTypeOf(Function, subscriptionDropped, "subscriptionDropped");
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
return new Promise(function(resolve,reject) {
|
return new Promise(function(resolve,reject) {
|
||||||
|
|
|
@ -10,15 +10,15 @@ var EventStoreSubsription = require('./eventStoreSubscription');
|
||||||
* @constructor
|
* @constructor
|
||||||
* @augments {EventStoreSubscription}
|
* @augments {EventStoreSubscription}
|
||||||
*/
|
*/
|
||||||
function VolatileEventStoreConnection(subscriptionOperation, streamId, lastCommitPosition, lastEventNumber) {
|
function VolatileEventStoreSubscription(subscriptionOperation, streamId, lastCommitPosition, lastEventNumber) {
|
||||||
EventStoreSubsription.call(this, streamId, lastCommitPosition, lastEventNumber);
|
EventStoreSubsription.call(this, streamId, lastCommitPosition, lastEventNumber);
|
||||||
|
|
||||||
this._subscriptionOperation = subscriptionOperation;
|
this._subscriptionOperation = subscriptionOperation;
|
||||||
}
|
}
|
||||||
util.inherits(VolatileEventStoreConnection, EventStoreSubsription);
|
util.inherits(VolatileEventStoreSubscription, EventStoreSubsription);
|
||||||
|
|
||||||
VolatileEventStoreConnection.prototype.unsubscribe = function() {
|
VolatileEventStoreSubscription.prototype.unsubscribe = function() {
|
||||||
this._subscriptionOperation.unsubscribe();
|
this._subscriptionOperation.unsubscribe();
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = VolatileEventStoreConnection;
|
module.exports = VolatileEventStoreSubscription;
|
|
@ -163,7 +163,7 @@ module.exports = {
|
||||||
.catch(function(err) {
|
.catch(function(err) {
|
||||||
test.done(err);
|
test.done(err);
|
||||||
});
|
});
|
||||||
},*/
|
},
|
||||||
'Test Subscribe to Stream': function(test) {
|
'Test Subscribe to Stream': function(test) {
|
||||||
var done = false;
|
var done = false;
|
||||||
function eventAppeared() {
|
function eventAppeared() {
|
||||||
|
@ -188,7 +188,7 @@ module.exports = {
|
||||||
done = true;
|
done = true;
|
||||||
test.done(err);
|
test.done(err);
|
||||||
})
|
})
|
||||||
},
|
}
|
||||||
'Test Subscribe to All': function(test) {
|
'Test Subscribe to All': function(test) {
|
||||||
var done = false;
|
var done = false;
|
||||||
function eventAppeared() {
|
function eventAppeared() {
|
||||||
|
@ -233,11 +233,12 @@ module.exports = {
|
||||||
self.conn.appendToStream(testStreamName, client.expectedVersion.any, events);
|
self.conn.appendToStream(testStreamName, client.expectedVersion.any, events);
|
||||||
}
|
}
|
||||||
function subscriptionDropped(connection, reason, error) {
|
function subscriptionDropped(connection, reason, error) {
|
||||||
|
console.log(reason);
|
||||||
test.ok(liveEvents.length === 1, "Expecting 1 live event, got " + liveEvents.length);
|
test.ok(liveEvents.length === 1, "Expecting 1 live event, got " + liveEvents.length);
|
||||||
test.ok(catchUpEvents.length >= 1, "Expecting at least 1 catchUp event, got " + catchUpEvents.length);
|
test.ok(catchUpEvents.length >= 1, "Expecting at least 1 catchUp event, got " + catchUpEvents.length);
|
||||||
test.done(error);
|
test.done(error);
|
||||||
}
|
}
|
||||||
//this.conn.appendToStream()
|
this.conn.appendToStream(testStreamName, client.expectedVersion.noStream, )
|
||||||
var subscription = this.conn.subscribeToStreamFrom(testStreamName, null, false, eventAppeared, liveProcessingStarted, subscriptionDropped);
|
var subscription = this.conn.subscribeToStreamFrom(testStreamName, null, false, eventAppeared, liveProcessingStarted, subscriptionDropped);
|
||||||
},
|
},
|
||||||
'Test Subscribe to All From': function(test) {
|
'Test Subscribe to All From': function(test) {
|
||||||
|
@ -264,55 +265,8 @@ module.exports = {
|
||||||
test.done(error);
|
test.done(error);
|
||||||
}
|
}
|
||||||
var subscription = this.conn.subscribeToAllFrom(null, false, eventAppeared, liveProcessingStarted, subscriptionDropped, userCredentialsForAll);
|
var subscription = this.conn.subscribeToAllFrom(null, false, eventAppeared, liveProcessingStarted, subscriptionDropped, userCredentialsForAll);
|
||||||
},
|
},*/
|
||||||
'Test Set Stream Metadata Raw': function(test) {
|
/*,
|
||||||
this.conn.setStreamMetadataRaw(testStreamName, client.expectedVersion.emptyStream, {$maxCount: 100})
|
|
||||||
.then(function(result) {
|
|
||||||
test.done();
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
test.done(err);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
'Test Get Stream Metadata Raw': function(test) {
|
|
||||||
this.conn.getStreamMetadataRaw(testStreamName)
|
|
||||||
.then(function(result) {
|
|
||||||
test.done();
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
test.done(err);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
'Test Create Persistent Subscription': function(test) {
|
|
||||||
var settings = client.PersistentSubscriptionSettings.create();
|
|
||||||
this.conn.createPersistentSubscription(testStreamName, 'consumer-1', settings, userCredentialsForAll)
|
|
||||||
.then(function(result) {
|
|
||||||
test.done();
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
test.done(err);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
//TODO: Update Persistent Subscription
|
|
||||||
'Test ConnectTo Persistent Subscription': function(test) {
|
|
||||||
function eventAppeared(s, e) {
|
|
||||||
s.stop();
|
|
||||||
}
|
|
||||||
function subscriptionDropped(connection, reason, error) {
|
|
||||||
test.done(error);
|
|
||||||
}
|
|
||||||
var subscription = this.conn.connectToPersistentSubscription(testStreamName, 'consumer-1', eventAppeared, subscriptionDropped);
|
|
||||||
this.conn.appendToStream(testStreamName, client.expectedVersion.any, [createRandomEvent()]);
|
|
||||||
},
|
|
||||||
'Test Delete Persistent Subscription': function(test) {
|
|
||||||
this.conn.deletePersistentSubscription(testStreamName, 'consumer-1', userCredentialsForAll)
|
|
||||||
.then(function(result) {
|
|
||||||
test.done();
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
test.done(err);
|
|
||||||
});
|
|
||||||
}/*,
|
|
||||||
'Test Delete Stream': function(test) {
|
'Test Delete Stream': function(test) {
|
||||||
this.conn.deleteStream(testStreamName, client.expectedVersion.any)
|
this.conn.deleteStream(testStreamName, client.expectedVersion.any)
|
||||||
.then(function(result) {
|
.then(function(result) {
|
||||||
|
|
|
@ -17,6 +17,7 @@ var tcpEndPoint = {host: 'localhost', port: 1113};
|
||||||
function setUp(cb) {
|
function setUp(cb) {
|
||||||
this.log = settings.log;
|
this.log = settings.log;
|
||||||
this.testStreamName = 'test-' + uuid.v4();
|
this.testStreamName = 'test-' + uuid.v4();
|
||||||
|
this.log.info('A', this.testStreamName);
|
||||||
var connected = false;
|
var connected = false;
|
||||||
this.conn = client.EventStoreConnection.create(settings, tcpEndPoint);
|
this.conn = client.EventStoreConnection.create(settings, tcpEndPoint);
|
||||||
this.conn.connect()
|
this.conn.connect()
|
||||||
|
|
|
@ -22,7 +22,7 @@ module.exports = {
|
||||||
test.done();
|
test.done();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'Connect To Endpoint That Don\'t Exist': function(test) {
|
'Connect To Endpoint That Doesn\'t Exist': function(test) {
|
||||||
var tcpEndpoint = {hostname: 'localhost', port: 1114};
|
var tcpEndpoint = {hostname: 'localhost', port: 1114};
|
||||||
var conn = client.EventStoreConnection.create(testBase.settings({maxReconnections:1}), tcpEndpoint);
|
var conn = client.EventStoreConnection.create(testBase.settings({maxReconnections:1}), tcpEndpoint);
|
||||||
conn.connect()
|
conn.connect()
|
||||||
|
|
26
test/metadata_test.js
Normal file
26
test/metadata_test.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
var util = require('util');
|
||||||
|
var uuid = require('uuid');
|
||||||
|
var client = require('../src/client');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
'Test Set Stream Metadata Raw': function(test) {
|
||||||
|
this.conn.setStreamMetadataRaw(this.testStreamName, client.expectedVersion.emptyStream, {$maxCount: 100})
|
||||||
|
.then(function(result) {
|
||||||
|
test.done();
|
||||||
|
})
|
||||||
|
.catch(function(err) {
|
||||||
|
test.done(err);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
'Test Get Stream Metadata Raw': function(test) {
|
||||||
|
this.conn.getStreamMetadataRaw(this.testStreamName)
|
||||||
|
.then(function(result) {
|
||||||
|
test.done();
|
||||||
|
})
|
||||||
|
.catch(function(err) {
|
||||||
|
test.done(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
require('./common/base_test').init(module.exports);
|
46
test/persistentSubscription_test.js
Normal file
46
test/persistentSubscription_test.js
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
var util = require('util');
|
||||||
|
var uuid = require('uuid');
|
||||||
|
var client = require('../src/client');
|
||||||
|
const adminCredentials = new client.UserCredentials("admin", "changeit");
|
||||||
|
|
||||||
|
function createRandomEvent() {
|
||||||
|
return client.createJsonEventData(uuid.v4(), {a: uuid.v4(), b: Math.random()}, {createdAt: Date.now()}, 'testEvent');
|
||||||
|
}
|
||||||
|
|
||||||
|
var testStreamName = 'test' + uuid.v4();
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
'Test Create Persistent Subscription': function(test) {
|
||||||
|
var settings = client.PersistentSubscriptionSettings.create();
|
||||||
|
this.conn.createPersistentSubscription(testStreamName, 'consumer-1', settings, adminCredentials)
|
||||||
|
.then(function(result) {
|
||||||
|
test.done();
|
||||||
|
})
|
||||||
|
.catch(function(err) {
|
||||||
|
test.done(err);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//TODO: Update Persistent Subscription
|
||||||
|
'Test ConnectTo Persistent Subscription': function(test) {
|
||||||
|
function eventAppeared(s, e) {
|
||||||
|
s.stop();
|
||||||
|
}
|
||||||
|
function subscriptionDropped(connection, reason, error) {
|
||||||
|
test.done(error);
|
||||||
|
}
|
||||||
|
var subscription = this.conn.connectToPersistentSubscription(testStreamName, 'consumer-1', eventAppeared, subscriptionDropped);
|
||||||
|
this.log.info('ABC', subscription);
|
||||||
|
this.conn.appendToStream(testStreamName, client.expectedVersion.any, [createRandomEvent()]);
|
||||||
|
},
|
||||||
|
'Test Delete Persistent Subscription': function(test) {
|
||||||
|
this.conn.deletePersistentSubscription(testStreamName, 'consumer-1', adminCredentials)
|
||||||
|
.then(function(result) {
|
||||||
|
test.done();
|
||||||
|
})
|
||||||
|
.catch(function(err) {
|
||||||
|
test.done(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
require('./common/base_test').init(module.exports);
|
38
test/subscribeToAllFrom_test.js
Normal file
38
test/subscribeToAllFrom_test.js
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
var util = require('util');
|
||||||
|
var uuid = require('uuid');
|
||||||
|
var client = require('../src/client');
|
||||||
|
const allCredentials = new client.UserCredentials("admin", "changeit");
|
||||||
|
|
||||||
|
function createRandomEvent() {
|
||||||
|
return client.createJsonEventData(uuid.v4(), {a: uuid.v4(), b: Math.random()}, {createdAt: Date.now()}, 'testEvent');
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
'Test Subscribe to All From': function(test) {
|
||||||
|
var self = this;
|
||||||
|
var liveProcessing = false;
|
||||||
|
var catchUpEvents = [];
|
||||||
|
var liveEvents = [];
|
||||||
|
function eventAppeared(s, e) {
|
||||||
|
if (liveProcessing) {
|
||||||
|
liveEvents.push(e);
|
||||||
|
s.stop();
|
||||||
|
} else {
|
||||||
|
catchUpEvents.push(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function liveProcessingStarted() {
|
||||||
|
liveProcessing = true;
|
||||||
|
var events = [createRandomEvent()];
|
||||||
|
self.conn.appendToStream(self.testStreamName, client.expectedVersion.any, events);
|
||||||
|
}
|
||||||
|
function subscriptionDropped(connection, reason, error) {
|
||||||
|
test.ok(liveEvents.length === 1, "Expecting 1 live event, got " + liveEvents.length);
|
||||||
|
test.ok(catchUpEvents.length > 1, "Expecting at least 1 catchUp event, got " + catchUpEvents.length);
|
||||||
|
test.done(error);
|
||||||
|
}
|
||||||
|
var subscription = this.conn.subscribeToAllFrom(null, false, eventAppeared, liveProcessingStarted, subscriptionDropped, allCredentials);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
require('./common/base_test').init(module.exports);
|
44
test/subscribeToAll_test.js
Normal file
44
test/subscribeToAll_test.js
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
const uuid = require('uuid');
|
||||||
|
const client = require('../src/client');
|
||||||
|
const allCredentials = new client.UserCredentials("admin", "changeit");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
'Test Subscribe To All Happy Path': function(test) {
|
||||||
|
const resolveLinkTos = false;
|
||||||
|
const numberOfPublishedEvents = 5;
|
||||||
|
var publishedEvents = [];
|
||||||
|
for(var i=0;i<numberOfPublishedEvents;i++)
|
||||||
|
publishedEvents.push(client.createJsonEventData(uuid.v4(), {a: Math.random(), b: uuid.v4()}, null, 'anEvent'));
|
||||||
|
|
||||||
|
function testAllPublishedEventsAppeared() {
|
||||||
|
test.areEqual("receivedEvents.length", receivedEvents.length, numberOfPublishedEvents);
|
||||||
|
}
|
||||||
|
function testEventsAppearedInCorrectOrder() {
|
||||||
|
for (var j = 0; j < numberOfPublishedEvents; j++)
|
||||||
|
test.ok(receivedEvents[j].originalEvent.eventId === publishedEvents[j].eventId,
|
||||||
|
"receivedEvents[" + j + "] != publishedEvents[" + j + "]");
|
||||||
|
}
|
||||||
|
|
||||||
|
var receivedEvents = [];
|
||||||
|
function eventAppeared(subscription, event) {
|
||||||
|
receivedEvents.push(event);
|
||||||
|
if (receivedEvents.length === numberOfPublishedEvents) subscription.close();
|
||||||
|
}
|
||||||
|
function subscriptionDropped(subscription, reason, error) {
|
||||||
|
if (error) return test.done(error);
|
||||||
|
testAllPublishedEventsAppeared();
|
||||||
|
testEventsAppearedInCorrectOrder();
|
||||||
|
test.done();
|
||||||
|
}
|
||||||
|
var self = this;
|
||||||
|
this.conn.subscribeToAll(resolveLinkTos, eventAppeared, subscriptionDropped, allCredentials)
|
||||||
|
.then(function(subscription) {
|
||||||
|
test.areEqual("subscription.isSubscribedToAll", subscription.isSubscribedToAll, true);
|
||||||
|
|
||||||
|
return self.conn.appendToStream(self.testStreamName, client.expectedVersion.emptyStream, publishedEvents);
|
||||||
|
})
|
||||||
|
.catch(test.done)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
require('./common/base_test').init(module.exports);
|
47
test/subscribeToStreamFrom_test.js
Normal file
47
test/subscribeToStreamFrom_test.js
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
var util = require('util');
|
||||||
|
var uuid = require('uuid');
|
||||||
|
var client = require('../src/client');
|
||||||
|
|
||||||
|
function createRandomEvent() {
|
||||||
|
return client.createJsonEventData(uuid.v4(), {a: uuid.v4(), b: Math.random()}, {createdAt: Date.now()}, 'testEvent');
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
'Test Subscribe to Stream From Happy Path': function(test) {
|
||||||
|
var self = this;
|
||||||
|
var liveProcessing = false;
|
||||||
|
var catchUpEvents = [];
|
||||||
|
var liveEvents = [];
|
||||||
|
function eventAppeared(s, e) {
|
||||||
|
if (liveProcessing) {
|
||||||
|
liveEvents.push(e);
|
||||||
|
s.stop();
|
||||||
|
} else {
|
||||||
|
catchUpEvents.push(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function liveProcessingStarted() {
|
||||||
|
liveProcessing = true;
|
||||||
|
var events = [createRandomEvent()];
|
||||||
|
self.conn.appendToStream(self.testStreamName, client.expectedVersion.any, events);
|
||||||
|
}
|
||||||
|
function subscriptionDropped(connection, reason, error) {
|
||||||
|
test.ok(liveEvents.length === 1, "Expecting 1 live event, got " + liveEvents.length);
|
||||||
|
test.ok(catchUpEvents.length >= 1, "Expecting at least 1 catchUp event, got " + catchUpEvents.length);
|
||||||
|
test.done(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
var events = [createRandomEvent()];
|
||||||
|
this.conn.appendToStream(self.testStreamName, client.expectedVersion.noStream, events)
|
||||||
|
.then(function() {
|
||||||
|
var subscription = self.conn.subscribeToStreamFrom(self.testStreamName, null, false, eventAppeared, liveProcessingStarted, subscriptionDropped);
|
||||||
|
|
||||||
|
test.areEqual("subscription.streamId", subscription.streamId, self.testStreamName);
|
||||||
|
test.areEqual("subscription.isSubscribedToAll", subscription.isSubscribedToAll, false);
|
||||||
|
test.areEqual("subscription.readBatchSize", subscription.readBatchSize, 500);
|
||||||
|
test.areEqual("subscription.maxPushQueueSize", subscription.maxPushQueueSize, 10000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
require('./common/base_test').init(module.exports);
|
45
test/subscribeToStream_test.js
Normal file
45
test/subscribeToStream_test.js
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
const uuid = require('uuid');
|
||||||
|
const client = require('../src/client');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
'Test Subscribe To Stream Happy Path': function(test) {
|
||||||
|
const resolveLinkTos = false;
|
||||||
|
const numberOfPublishedEvents = 5;
|
||||||
|
var publishedEvents = [];
|
||||||
|
for(var i=0;i<numberOfPublishedEvents;i++)
|
||||||
|
publishedEvents.push(client.createJsonEventData(uuid.v4(), {a: Math.random(), b: uuid.v4()}, null, 'anEvent'));
|
||||||
|
|
||||||
|
function testAllPublishedEventsAppeared() {
|
||||||
|
test.areEqual("receivedEvents.length", receivedEvents.length, numberOfPublishedEvents);
|
||||||
|
}
|
||||||
|
function testEventsAppearedInCorrectOrder() {
|
||||||
|
for (var j = 0; j < numberOfPublishedEvents; j++)
|
||||||
|
test.ok(receivedEvents[j].originalEvent.eventId === publishedEvents[j].eventId,
|
||||||
|
"receivedEvents[" + j + "] != publishedEvents[" + j + "]");
|
||||||
|
}
|
||||||
|
|
||||||
|
var receivedEvents = [];
|
||||||
|
function eventAppeared(subscription, event) {
|
||||||
|
receivedEvents.push(event);
|
||||||
|
if (receivedEvents.length === numberOfPublishedEvents) subscription.close();
|
||||||
|
}
|
||||||
|
function subscriptionDropped(subscription, reason, error) {
|
||||||
|
if (error) return test.done(error);
|
||||||
|
testAllPublishedEventsAppeared();
|
||||||
|
testEventsAppearedInCorrectOrder();
|
||||||
|
test.done();
|
||||||
|
}
|
||||||
|
var self = this;
|
||||||
|
this.conn.subscribeToStream(this.testStreamName, resolveLinkTos, eventAppeared, subscriptionDropped)
|
||||||
|
.then(function(subscription) {
|
||||||
|
test.areEqual("subscription.streamId", subscription.streamId, self.testStreamName);
|
||||||
|
test.areEqual("subscription.isSubscribedToAll", subscription.isSubscribedToAll, false);
|
||||||
|
test.areEqual("subscription.lastEventNumber", subscription.lastEventNumber, client.expectedVersion.emptyStream);
|
||||||
|
|
||||||
|
return self.conn.appendToStream(self.testStreamName, client.expectedVersion.emptyStream, publishedEvents);
|
||||||
|
})
|
||||||
|
.catch(test.done)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
require('./common/base_test').init(module.exports);
|
Loading…
Reference in New Issue
Block a user