bubpubsub
Version:
a pubsub system with bubbling, replies and persistence
162 lines (126 loc) • 4.53 kB
JavaScript
var sys = require('util');
var pubsub = require('../lib/bubpubsub');
sys.puts("############## bubpubsub TESTs #########");
var myPubSub = new pubsub();
myPubSub.setDefaults({
debugging: 1
});
function report(text) {
sys.puts(text);
}
myPubSub.setDefaults({debugging:1});
var pubsubTests = {
'[1] publish with Bubbles and Persistence': false,
'[2] receive without bubbles': false,
'[3] receive with bubbles': false,
'[4] publish with Bubbles and NO Persistence': false,
'[5] publish with NO Bubbles and Persistence': false,
'[6] retrieve persistent publications': false,
'[7] listing subscribers': false,
}
function myLittleListener(data, currentBranch, publisher) {
sys.puts("---- [2] straight subscription");
sys.puts('[2] subscribed without getBubbles to /politics/europe/germany and received publication on: '+data.originalTopic);
sys.puts('[2] caught this topic: '+currentBranch);
sys.puts('[2] publisher was: '+publisher);
pubsubTests['[2] receive without bubbles'] = true;
};
var myFirstSubscription = myPubSub.subscribe(
'/politics/europe/germany',
myLittleListener,
{ getBubbles: false },
'myLittleListener1'
);
var mySecondSubscription = myPubSub.subscribe(
'/politics',
function(data, currentBranch, publisher) {
sys.puts("---- [3] bubbled subscription");
sys.puts('[3] subscribed with getBubbles to /politics and received publication on: '+data.originalTopic);
sys.puts('[3] caught this topic: '+currentBranch);
sys.puts('[3] publisher was: '+publisher);
pubsubTests['[3] receive with bubbles'] = true;
},
{ getBubbles: true },
'myLittleListener#2'
);
var pubTopic = '/politics/europe/germany';
var pubData = { content: "node module test #1" };
var pubId = 'myTestPublisher';
sys.puts("---- [1] published");
sys.puts('[1] on: '+pubTopic);
sys.puts('[1] with content: '+pubData.content);
sys.puts('[1] as publisher: '+pubId);
sys.puts('[1] allowed bubbling');
sys.puts('[1] WITH persistence1');
myPubSub.publish(
pubTopic,
pubData,
{ bubble:true, persist:true },
pubId
);
pubsubTests['[1] publish with Bubbles and Persistence'] = true;
var pubTopic = '/politics/europe/germany/bavaria';
var pubData = { content: "node module test #4" };
var pubId = 'myTestPublisher4';
sys.puts("---- [4] published");
sys.puts('[4] on: '+pubTopic);
sys.puts('[4] with content: '+pubData.content);
sys.puts('[4] as publisher: '+pubId);
sys.puts('[4] allowed bubbling');
sys.puts('[4] NO persistence');
myPubSub.publish(
pubTopic,
pubData,
{ bubble:true,persist:false },
pubId
);
pubsubTests['[4] publish with Bubbles and NO Persistence'] = true;
var pubTopic = '/politics/europe/germany/bavaria';
var pubData = { content: "node module test #5" };
var pubId = 'myTestPublisher5';
sys.puts("---- [5] published");
sys.puts('[5] on: '+pubTopic);
sys.puts('[5] with content: '+pubData.content);
sys.puts('[5] as publisher: '+pubId);
sys.puts('[5] NO bubbling');
sys.puts('[5] WITH persistence');
myPubSub.publish(
pubTopic,
pubData,
{ bubble:false,persist:true },
pubId
);
pubsubTests['[5] publish with NO Bubbles and Persistence'] = true;
var allPersistentPublications = myPubSub.wasPublishedOnTopic('/politics/', true);
sys.puts("---- [6] allPersistentPublications");
sys.puts('[6] on: /politics');
for (var i in allPersistentPublications) {
sys.puts('.................................................................');
sys.puts('[6-'+i+'] caught this topic: '+allPersistentPublications[i].topic);
sys.puts('[6-'+i+'] as publisher: '+allPersistentPublications[i].publisher);
sys.puts('[6-'+i+'] bubbling: '+allPersistentPublications[i].settings.bubble);
sys.puts('[6-'+i+'] sent at: '+allPersistentPublications[i].timestamp);
}
pubsubTests['[6] retrieve persistent publications'] = true;
sys.puts("---- [7] listing subscribers per topic");
for (var key in myPubSub.publicationChannels) {
for (var receiver in myPubSub.publicationChannels[key]) {
sys.puts('[7] '+key+' = '+myPubSub.publicationChannels[key][receiver].id);
}
}
pubsubTests['[7] listing subscribers'] = true;
sys.puts("---- [8] silent publish");
var pubTopic = '/politics/CENSORED';
var pubData = { content: "node module test #8" };
var pubId = 'myTestPublisher8';
myPubSub.publish(
pubTopic,
pubData,
{ bubble:false, persist:true, silent:true },
pubId
);
pubsubTests['[8] silent publish'] = true;
for (var name in pubsubTests) {
var res = (pubsubTests[name]) ? "PASSED" : "failed";
sys.puts('***** '+res+' ... PubSub test '+name);
}