mirror of
https://github.com/Hopiu/webapi-eca.git
synced 2026-03-17 06:20:23 +00:00
Major improevements in testing, eventually got rid of a random error that seems to come from an inconsistent persistence state
This commit is contained in:
parent
3dc35827b2
commit
47cabfaa31
22 changed files with 654 additions and 783 deletions
|
|
@ -27,7 +27,7 @@ events = require 'events'
|
|||
###
|
||||
Module call
|
||||
-----------
|
||||
Initializes the HTTP listener and its request handler.
|
||||
Initializes the Components Manager and constructs a new Event Emitter.
|
||||
|
||||
@param {Object} args
|
||||
###
|
||||
|
|
@ -72,7 +72,7 @@ containing the HTTP response code and a corresponding message.
|
|||
@param {function} callback
|
||||
###
|
||||
|
||||
exports.processRequest = ( user, oReq, callback ) =>
|
||||
exports.processRequest = ( user, oReq, callback ) ->
|
||||
if not oReq.payload
|
||||
oReq.payload = '{}'
|
||||
try
|
||||
|
|
@ -88,121 +88,88 @@ exports.processRequest = ( user, oReq, callback ) =>
|
|||
code: 404
|
||||
message: 'What do you want from me?'
|
||||
|
||||
hasRequiredParams = ( arrParams, oReq ) ->
|
||||
hasRequiredParams = ( arrParams, oPayload ) ->
|
||||
answ =
|
||||
code: 400
|
||||
message: "Your request didn't contain all necessary fields! id and params required"
|
||||
return answ for param in arrParams when not oReq[param]
|
||||
return answ for param in arrParams when not oPayload[param]
|
||||
answ.code = 200
|
||||
answ.message = 'All required properties found'
|
||||
answ
|
||||
|
||||
getModules = ( user, oPayload, dbMod, callback ) ->
|
||||
dbMod.getAvailableModuleIds user.username, ( err, arrNames ) ->
|
||||
oRes = {}
|
||||
answReq = () ->
|
||||
callback
|
||||
code: 200
|
||||
message: JSON.stringify oRes
|
||||
sem = arrNames.length
|
||||
if sem is 0
|
||||
answReq()
|
||||
else
|
||||
fGetFunctions = ( id ) =>
|
||||
dbMod.getModule id, ( err, oModule ) =>
|
||||
if oModule
|
||||
oRes[id] = JSON.parse oModule.functions
|
||||
if --sem is 0
|
||||
answReq()
|
||||
fGetFunctions id for id in arrNames
|
||||
|
||||
getModuleParams = ( user, oPayload, dbMod, callback ) ->
|
||||
answ = hasRequiredParams [ 'id' ], oPayload
|
||||
if answ.code isnt 200
|
||||
callback answ
|
||||
else
|
||||
dbMod.getModuleParams oPayload.id, ( err, oPayload ) ->
|
||||
answ.message = oPayload
|
||||
callback answ
|
||||
|
||||
forgeModule = ( user, oPayload, dbMod, callback ) ->
|
||||
answ = hasRequiredParams [ 'id', 'params', 'lang', 'data' ], oPayload
|
||||
if answ.code isnt 200
|
||||
callback answ
|
||||
else
|
||||
dbMod.getModule oPayload.id, ( err, mod ) =>
|
||||
if mod
|
||||
answ.code = 409
|
||||
answ.message = 'Event Poller module name already existing: ' + oPayload.id
|
||||
else
|
||||
src = oPayload.data
|
||||
cm = dynmod.compileString src, oPayload.id, {}, oPayload.lang
|
||||
answ = cm.answ
|
||||
if answ.code is 200
|
||||
funcs = []
|
||||
funcs.push name for name, id of cm.module
|
||||
@log.info "CM | Storing new module with functions #{ funcs }"
|
||||
answ.message =
|
||||
"Event Poller module successfully stored! Found following function(s): #{ funcs }"
|
||||
oPayload.functions = JSON.stringify funcs
|
||||
dbMod.storeModule user.username, oPayload
|
||||
if oPayload.public is 'true'
|
||||
dbMod.publish oPayload.id
|
||||
callback answ
|
||||
|
||||
commandFunctions =
|
||||
forge_event_poller: ( user, oReq, cb ) =>
|
||||
answ = hasRequiredParams [ 'id', 'params', 'lang', 'data' ], oReq
|
||||
if answ.code isnt 200
|
||||
cb answ
|
||||
else
|
||||
db.eventPollers.getModule oReq.id, ( err, mod ) =>
|
||||
if mod
|
||||
answ.code = 409
|
||||
answ.message = 'Event Poller module name already existing: ' + oReq.id
|
||||
else
|
||||
src = oReq.data
|
||||
cm = dynmod.compileString src, oReq.id, {}, oReq.lang
|
||||
answ = cm.answ
|
||||
if answ.code is 200
|
||||
events = []
|
||||
events.push name for name, id of cm.module
|
||||
@log.info "CM | Storing new eventpoller with events #{ events }"
|
||||
answ.message =
|
||||
"Event Poller module successfully stored! Found following event(s): #{ events }"
|
||||
oReq.events = JSON.stringify events
|
||||
db.eventPollers.storeModule oReq.id, user.username, oReq
|
||||
if oReq.public is 'true'
|
||||
db.eventPollers.publish oReq.id
|
||||
cb answ
|
||||
get_event_pollers: ( user, oPayload, callback ) ->
|
||||
getModules user, oPayload, db.eventPollers, callback
|
||||
|
||||
get_event_pollers: ( user, oReq, cb ) ->
|
||||
db.eventPollers.getAvailableModuleIds user.username, ( err, arrNames ) ->
|
||||
oRes = {}
|
||||
answReq = () ->
|
||||
cb
|
||||
code: 200
|
||||
message: oRes
|
||||
sem = arrNames.length
|
||||
if sem is 0
|
||||
answReq()
|
||||
else
|
||||
fGetEvents = ( id ) ->
|
||||
db.eventPollers.getModule id, ( err, oModule ) ->
|
||||
oRes[id] = oModule.events
|
||||
if --sem is 0
|
||||
answReq()
|
||||
fGetEvents id for id in arrNames
|
||||
get_action_invokers: ( user, oPayload, callback ) ->
|
||||
getModules user, oPayload, db.actionInvokers, callback
|
||||
|
||||
get_event_poller_params: ( user, oReq, cb ) ->
|
||||
answ = hasRequiredParams [ 'id' ], oReq
|
||||
if answ.code isnt 200
|
||||
cb answ
|
||||
else
|
||||
db.eventPollers.getModuleParams oReq.id, ( err, oReq ) ->
|
||||
answ.message = oReq
|
||||
cb answ
|
||||
get_event_poller_params: ( user, oPayload, callback ) ->
|
||||
getModuleParams user, oPayload, db.eventPollers, callback
|
||||
|
||||
get_action_invoker_params: ( user, oPayload, callback ) ->
|
||||
getModuleParams user, oPayload, db.actionInvokers, callback
|
||||
|
||||
forge_event_poller: ( user, oPayload, callback ) ->
|
||||
forgeModule user, oPayload, db.eventPollers, callback
|
||||
|
||||
forge_action_invoker: ( user, oPayload, callback ) ->
|
||||
forgeModule user, oPayload, db.actionInvokers, callback
|
||||
|
||||
get_action_invokers: ( user, oReq, cb ) ->
|
||||
db.actionInvokers.getAvailableModuleIds user.username, ( err, arrNames ) ->
|
||||
oRes = {}
|
||||
answReq = () ->
|
||||
cb
|
||||
code: 200
|
||||
message: oRes
|
||||
sem = arrNames.length
|
||||
if sem is 0
|
||||
answReq()
|
||||
else
|
||||
fGetActions = ( id ) ->
|
||||
db.actionInvokers.getModule id, ( err, oModule ) ->
|
||||
oRes[id] = oModule.actions
|
||||
if --sem is 0
|
||||
answReq()
|
||||
fGetActions id for id in arrNames
|
||||
|
||||
get_action_invoker_params: ( user, oReq, cb ) ->
|
||||
answ = hasRequiredParams [ 'id' ], oReq
|
||||
if answ.code isnt 200
|
||||
cb answ
|
||||
else
|
||||
db.actionInvokers.getModuleParams oReq.id, ( err, oReq ) ->
|
||||
answ.message = oReq
|
||||
cb answ
|
||||
|
||||
forge_action_invoker: ( user, oReq, cb ) =>
|
||||
answ = hasRequiredParams [ 'id', 'params', 'lang', 'data' ], oReq
|
||||
if answ.code isnt 200
|
||||
cb answ
|
||||
else
|
||||
db.actionInvokers.getModule oReq.id, ( err, mod ) =>
|
||||
if mod
|
||||
answ.code = 409
|
||||
answ.message = 'Action Invoker module name already existing: ' + oReq.id
|
||||
else
|
||||
src = oReq.data
|
||||
cm = dynmod.compileString src, oReq.id, {}, oReq.lang
|
||||
answ = cm.answ
|
||||
if answ.code is 200
|
||||
actions = []
|
||||
actions.push name for name, id of cm.module
|
||||
@log.info "CM | Storing new eventpoller with actions #{ actions }"
|
||||
answ.message =
|
||||
"Action Invoker module successfully stored! Found following action(s): #{ actions }"
|
||||
oReq.actions = JSON.stringify actions
|
||||
db.actionInvokers.storeModule oReq.id, user.username, oReq
|
||||
if oReq.public is 'true'
|
||||
db.actionInvokers.publish oReq.id
|
||||
cb answ
|
||||
|
||||
get_rules: ( user, oReq, cb ) ->
|
||||
get_rules: ( user, oPayload, callback ) ->
|
||||
console.log 'CM | Implement get_rules'
|
||||
|
||||
# A rule needs to be in following format:
|
||||
|
|
@ -210,41 +177,32 @@ commandFunctions =
|
|||
# - event
|
||||
# - conditions
|
||||
# - actions
|
||||
forge_rule: ( user, oReq, cb ) =>
|
||||
console.log oReq
|
||||
db.getRule oReq.id, ( err, oExisting ) =>
|
||||
if oExisting isnt null
|
||||
answ =
|
||||
code: 409
|
||||
message: 'Rule name already existing!'
|
||||
else
|
||||
if not oReq.id or not oReq.event or
|
||||
not oReq.conditions or not oReq.actions
|
||||
forge_rule: ( user, oPayload, callback ) =>
|
||||
answ = hasRequiredParams [ 'id', 'event', 'conditions', 'actions' ], oPayload
|
||||
if answ.code isnt 200
|
||||
callback answ
|
||||
else
|
||||
db.getRule oPayload.id, ( err, oExisting ) =>
|
||||
if oExisting isnt null
|
||||
answ =
|
||||
code: 400
|
||||
message: 'Missing properties in rule!'
|
||||
code: 409
|
||||
message: 'Rule name already existing!'
|
||||
else
|
||||
try
|
||||
rule =
|
||||
id: oReq.id
|
||||
event: oReq.event
|
||||
conditions: JSON.parse oReq.conditions
|
||||
actions: JSON.parse oReq.actions
|
||||
strRule = JSON.stringify rule
|
||||
db.storeRule rule.id, strRule
|
||||
db.linkRule rule.id, user.username
|
||||
db.activateRule rule.id, user.username
|
||||
if oReq.event_params
|
||||
db.eventPollers.storeUserParams ep.module, user.username, oReq.event_params
|
||||
arrParams = JSON.parse oReq.action_params
|
||||
db.actionInvokers.storeUserParams id, user.username, JSON.stringify params for id, params of arrParams
|
||||
@ee.emit 'newRule', strRule
|
||||
answ =
|
||||
code: 200
|
||||
message: 'Rule stored and activated!'
|
||||
catch err
|
||||
answ =
|
||||
code: 400
|
||||
message: 'bad bad request...'
|
||||
console.log err
|
||||
cb answ
|
||||
rule =
|
||||
id: oPayload.id
|
||||
event: oPayload.event
|
||||
conditions: oPayload.conditions
|
||||
actions: oPayload.actions
|
||||
strRule = JSON.stringify rule
|
||||
db.storeRule rule.id, strRule
|
||||
db.linkRule rule.id, user.username
|
||||
db.activateRule rule.id, user.username
|
||||
if oPayload.event_params
|
||||
db.eventPollers.storeUserParams ep.module, user.username, oPayload.event_params
|
||||
arrParams = oPayload.action_params
|
||||
db.actionInvokers.storeUserParams id, user.username, JSON.stringify params for id, params of arrParams
|
||||
@ee.emit 'newRule', strRule
|
||||
answ =
|
||||
code: 200
|
||||
message: 'Rule stored and activated!'
|
||||
callback answ
|
||||
|
|
@ -52,7 +52,7 @@ exports.compileString = ( src, id, params, lang ) =>
|
|||
err.location.first_line
|
||||
#FIXME not log but debug module is required to provide information to the user
|
||||
sandbox =
|
||||
id: id
|
||||
id: id #TODO the ID needs to be a combination of the module id and the user name
|
||||
params: params
|
||||
needle: needle
|
||||
log: console.log
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ Initializes the DB connection with the given `db-port` property in the `args` ob
|
|||
exports = module.exports = ( args ) =>
|
||||
if not @db
|
||||
#TODO we need to have a secure concept here, private keys per user
|
||||
#FIXME get rid of crpto
|
||||
if not args[ 'db-port' ]
|
||||
args[ 'db-port' ] = 6379
|
||||
@log = args.logger
|
||||
|
|
@ -247,18 +248,18 @@ class IndexedModules
|
|||
|
||||
|
||||
###
|
||||
@private storeModule( *mId, userId, data* )
|
||||
@param {String} mId
|
||||
Stores a module and links it to the user.
|
||||
@private storeModule( *userId, oModule* )
|
||||
@param {String} userId
|
||||
@param {object} data
|
||||
@param {object} oModule
|
||||
###
|
||||
storeModule: ( mId, userId, data ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.storeModule( #{ mId }, #{ userId }, data )"
|
||||
@db.sadd "#{ @setname }s", mId,
|
||||
replyHandler "sadd '#{ mId }' to '#{ @setname }'"
|
||||
@db.hmset "#{ @setname }:#{ mId }", data,
|
||||
replyHandler "hmset properties in hash '#{ @setname }:#{ mId }'"
|
||||
@linkModule mId, userId
|
||||
storeModule: ( userId, oModule ) =>
|
||||
@log.info "DB | (IdxedMods) #{ @setname }.storeModule( #{ userId }, oModule )"
|
||||
@db.sadd "#{ @setname }s", oModule.id,
|
||||
replyHandler "sadd '#{ oModule.id }' to '#{ @setname }'"
|
||||
@db.hmset "#{ @setname }:#{ oModule.id }", oModule,
|
||||
replyHandler "hmset properties in hash '#{ @setname }:#{ oModule.id }'"
|
||||
@linkModule oModule.id, userId
|
||||
|
||||
#TODO add testing
|
||||
linkModule: ( mId, userId ) =>
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ objects.*
|
|||
@public handleEvent( *req, resp* )
|
||||
###
|
||||
exports.handleEvent = ( req, resp ) ->
|
||||
console.log 'handleEvent'
|
||||
body = ''
|
||||
req.on 'data', ( data ) ->
|
||||
body += data
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ Components Manager
|
|||
|
||||
|
||||
(function() {
|
||||
var commandFunctions, db, dynmod, events, exports, fs, hasRequiredParams, path, vm,
|
||||
var commandFunctions, db, dynmod, events, exports, forgeModule, fs, getModuleParams, getModules, hasRequiredParams, path, vm,
|
||||
_this = this;
|
||||
|
||||
db = require('./persistence');
|
||||
|
|
@ -28,7 +28,7 @@ Components Manager
|
|||
/*
|
||||
Module call
|
||||
-----------
|
||||
Initializes the HTTP listener and its request handler.
|
||||
Initializes the Components Manager and constructs a new Event Emitter.
|
||||
|
||||
@param {Object} args
|
||||
*/
|
||||
|
|
@ -110,7 +110,7 @@ Components Manager
|
|||
}
|
||||
};
|
||||
|
||||
hasRequiredParams = function(arrParams, oReq) {
|
||||
hasRequiredParams = function(arrParams, oPayload) {
|
||||
var answ, param, _i, _len;
|
||||
answ = {
|
||||
code: 400,
|
||||
|
|
@ -118,7 +118,7 @@ Components Manager
|
|||
};
|
||||
for (_i = 0, _len = arrParams.length; _i < _len; _i++) {
|
||||
param = arrParams[_i];
|
||||
if (!oReq[param]) {
|
||||
if (!oPayload[param]) {
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
|
@ -127,219 +127,155 @@ Components Manager
|
|||
return answ;
|
||||
};
|
||||
|
||||
commandFunctions = {
|
||||
forge_event_poller: function(user, oReq, cb) {
|
||||
var answ;
|
||||
answ = hasRequiredParams(['id', 'params', 'lang', 'data'], oReq);
|
||||
if (answ.code !== 200) {
|
||||
return cb(answ);
|
||||
} else {
|
||||
return db.eventPollers.getModule(oReq.id, function(err, mod) {
|
||||
var cm, id, name, src, _ref;
|
||||
if (mod) {
|
||||
answ.code = 409;
|
||||
answ.message = 'Event Poller module name already existing: ' + oReq.id;
|
||||
} else {
|
||||
src = oReq.data;
|
||||
cm = dynmod.compileString(src, oReq.id, {}, oReq.lang);
|
||||
answ = cm.answ;
|
||||
if (answ.code === 200) {
|
||||
events = [];
|
||||
_ref = cm.module;
|
||||
for (name in _ref) {
|
||||
id = _ref[name];
|
||||
events.push(name);
|
||||
}
|
||||
_this.log.info("CM | Storing new eventpoller with events " + events);
|
||||
answ.message = "Event Poller module successfully stored! Found following event(s): " + events;
|
||||
oReq.events = JSON.stringify(events);
|
||||
db.eventPollers.storeModule(oReq.id, user.username, oReq);
|
||||
if (oReq["public"] === 'true') {
|
||||
db.eventPollers.publish(oReq.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
return cb(answ);
|
||||
getModules = function(user, oPayload, dbMod, callback) {
|
||||
return dbMod.getAvailableModuleIds(user.username, function(err, arrNames) {
|
||||
var answReq, fGetFunctions, id, oRes, sem, _i, _len, _results,
|
||||
_this = this;
|
||||
oRes = {};
|
||||
answReq = function() {
|
||||
return callback({
|
||||
code: 200,
|
||||
message: JSON.stringify(oRes)
|
||||
});
|
||||
}
|
||||
},
|
||||
get_event_pollers: function(user, oReq, cb) {
|
||||
return db.eventPollers.getAvailableModuleIds(user.username, function(err, arrNames) {
|
||||
var answReq, fGetEvents, id, oRes, sem, _i, _len, _results;
|
||||
oRes = {};
|
||||
answReq = function() {
|
||||
return cb({
|
||||
code: 200,
|
||||
message: oRes
|
||||
};
|
||||
sem = arrNames.length;
|
||||
if (sem === 0) {
|
||||
return answReq();
|
||||
} else {
|
||||
fGetFunctions = function(id) {
|
||||
return dbMod.getModule(id, function(err, oModule) {
|
||||
if (oModule) {
|
||||
oRes[id] = JSON.parse(oModule.functions);
|
||||
}
|
||||
if (--sem === 0) {
|
||||
return answReq();
|
||||
}
|
||||
});
|
||||
};
|
||||
sem = arrNames.length;
|
||||
if (sem === 0) {
|
||||
return answReq();
|
||||
} else {
|
||||
fGetEvents = function(id) {
|
||||
return db.eventPollers.getModule(id, function(err, oModule) {
|
||||
oRes[id] = oModule.events;
|
||||
if (--sem === 0) {
|
||||
return answReq();
|
||||
}
|
||||
});
|
||||
};
|
||||
_results = [];
|
||||
for (_i = 0, _len = arrNames.length; _i < _len; _i++) {
|
||||
id = arrNames[_i];
|
||||
_results.push(fGetEvents(id));
|
||||
}
|
||||
return _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = arrNames.length; _i < _len; _i++) {
|
||||
id = arrNames[_i];
|
||||
_results.push(fGetFunctions(id));
|
||||
}
|
||||
});
|
||||
},
|
||||
get_event_poller_params: function(user, oReq, cb) {
|
||||
var answ;
|
||||
answ = hasRequiredParams(['id'], oReq);
|
||||
if (answ.code !== 200) {
|
||||
return cb(answ);
|
||||
} else {
|
||||
return db.eventPollers.getModuleParams(oReq.id, function(err, oReq) {
|
||||
answ.message = oReq;
|
||||
return cb(answ);
|
||||
});
|
||||
return _results;
|
||||
}
|
||||
},
|
||||
get_action_invokers: function(user, oReq, cb) {
|
||||
return db.actionInvokers.getAvailableModuleIds(user.username, function(err, arrNames) {
|
||||
var answReq, fGetActions, id, oRes, sem, _i, _len, _results;
|
||||
oRes = {};
|
||||
answReq = function() {
|
||||
return cb({
|
||||
code: 200,
|
||||
message: oRes
|
||||
});
|
||||
};
|
||||
sem = arrNames.length;
|
||||
if (sem === 0) {
|
||||
return answReq();
|
||||
} else {
|
||||
fGetActions = function(id) {
|
||||
return db.actionInvokers.getModule(id, function(err, oModule) {
|
||||
oRes[id] = oModule.actions;
|
||||
if (--sem === 0) {
|
||||
return answReq();
|
||||
}
|
||||
});
|
||||
};
|
||||
_results = [];
|
||||
for (_i = 0, _len = arrNames.length; _i < _len; _i++) {
|
||||
id = arrNames[_i];
|
||||
_results.push(fGetActions(id));
|
||||
}
|
||||
return _results;
|
||||
}
|
||||
});
|
||||
},
|
||||
get_action_invoker_params: function(user, oReq, cb) {
|
||||
var answ;
|
||||
answ = hasRequiredParams(['id'], oReq);
|
||||
if (answ.code !== 200) {
|
||||
return cb(answ);
|
||||
} else {
|
||||
return db.actionInvokers.getModuleParams(oReq.id, function(err, oReq) {
|
||||
answ.message = oReq;
|
||||
return cb(answ);
|
||||
});
|
||||
}
|
||||
},
|
||||
forge_action_invoker: function(user, oReq, cb) {
|
||||
var answ;
|
||||
answ = hasRequiredParams(['id', 'params', 'lang', 'data'], oReq);
|
||||
if (answ.code !== 200) {
|
||||
return cb(answ);
|
||||
} else {
|
||||
return db.actionInvokers.getModule(oReq.id, function(err, mod) {
|
||||
var actions, cm, id, name, src, _ref;
|
||||
if (mod) {
|
||||
answ.code = 409;
|
||||
answ.message = 'Action Invoker module name already existing: ' + oReq.id;
|
||||
} else {
|
||||
src = oReq.data;
|
||||
cm = dynmod.compileString(src, oReq.id, {}, oReq.lang);
|
||||
answ = cm.answ;
|
||||
if (answ.code === 200) {
|
||||
actions = [];
|
||||
_ref = cm.module;
|
||||
for (name in _ref) {
|
||||
id = _ref[name];
|
||||
actions.push(name);
|
||||
}
|
||||
_this.log.info("CM | Storing new eventpoller with actions " + actions);
|
||||
answ.message = "Action Invoker module successfully stored! Found following action(s): " + actions;
|
||||
oReq.actions = JSON.stringify(actions);
|
||||
db.actionInvokers.storeModule(oReq.id, user.username, oReq);
|
||||
if (oReq["public"] === 'true') {
|
||||
db.actionInvokers.publish(oReq.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
return cb(answ);
|
||||
});
|
||||
}
|
||||
},
|
||||
get_rules: function(user, oReq, cb) {
|
||||
return console.log('CM | Implement get_rules');
|
||||
},
|
||||
forge_rule: function(user, oReq, cb) {
|
||||
console.log(oReq);
|
||||
return db.getRule(oReq.id, function(err, oExisting) {
|
||||
var answ, arrParams, id, params, rule, strRule;
|
||||
if (oExisting !== null) {
|
||||
answ = {
|
||||
code: 409,
|
||||
message: 'Rule name already existing!'
|
||||
};
|
||||
} else {
|
||||
if (!oReq.id || !oReq.event || !oReq.conditions || !oReq.actions) {
|
||||
answ = {
|
||||
code: 400,
|
||||
message: 'Missing properties in rule!'
|
||||
};
|
||||
} else {
|
||||
try {
|
||||
rule = {
|
||||
id: oReq.id,
|
||||
event: oReq.event,
|
||||
conditions: JSON.parse(oReq.conditions),
|
||||
actions: JSON.parse(oReq.actions)
|
||||
};
|
||||
strRule = JSON.stringify(rule);
|
||||
db.storeRule(rule.id, strRule);
|
||||
db.linkRule(rule.id, user.username);
|
||||
db.activateRule(rule.id, user.username);
|
||||
if (oReq.event_params) {
|
||||
db.eventPollers.storeUserParams(ep.module, user.username, oReq.event_params);
|
||||
}
|
||||
arrParams = JSON.parse(oReq.action_params);
|
||||
for (id in arrParams) {
|
||||
params = arrParams[id];
|
||||
db.actionInvokers.storeUserParams(id, user.username, JSON.stringify(params));
|
||||
}
|
||||
_this.ee.emit('newRule', strRule);
|
||||
answ = {
|
||||
code: 200,
|
||||
message: 'Rule stored and activated!'
|
||||
};
|
||||
} catch (_error) {
|
||||
err = _error;
|
||||
answ = {
|
||||
code: 400,
|
||||
message: 'bad bad request...'
|
||||
};
|
||||
console.log(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
return cb(answ);
|
||||
});
|
||||
};
|
||||
|
||||
getModuleParams = function(user, oPayload, dbMod, callback) {
|
||||
var answ;
|
||||
answ = hasRequiredParams(['id'], oPayload);
|
||||
if (answ.code !== 200) {
|
||||
return callback(answ);
|
||||
} else {
|
||||
return dbMod.getModuleParams(oPayload.id, function(err, oPayload) {
|
||||
answ.message = oPayload;
|
||||
return callback(answ);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
forgeModule = function(user, oPayload, dbMod, callback) {
|
||||
var answ,
|
||||
_this = this;
|
||||
answ = hasRequiredParams(['id', 'params', 'lang', 'data'], oPayload);
|
||||
if (answ.code !== 200) {
|
||||
return callback(answ);
|
||||
} else {
|
||||
return dbMod.getModule(oPayload.id, function(err, mod) {
|
||||
var cm, funcs, id, name, src, _ref;
|
||||
if (mod) {
|
||||
answ.code = 409;
|
||||
answ.message = 'Event Poller module name already existing: ' + oPayload.id;
|
||||
} else {
|
||||
src = oPayload.data;
|
||||
cm = dynmod.compileString(src, oPayload.id, {}, oPayload.lang);
|
||||
answ = cm.answ;
|
||||
if (answ.code === 200) {
|
||||
funcs = [];
|
||||
_ref = cm.module;
|
||||
for (name in _ref) {
|
||||
id = _ref[name];
|
||||
funcs.push(name);
|
||||
}
|
||||
_this.log.info("CM | Storing new module with functions " + funcs);
|
||||
answ.message = "Event Poller module successfully stored! Found following function(s): " + funcs;
|
||||
oPayload.functions = JSON.stringify(funcs);
|
||||
dbMod.storeModule(user.username, oPayload);
|
||||
if (oPayload["public"] === 'true') {
|
||||
dbMod.publish(oPayload.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
return callback(answ);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
commandFunctions = {
|
||||
get_event_pollers: function(user, oPayload, callback) {
|
||||
return getModules(user, oPayload, db.eventPollers, callback);
|
||||
},
|
||||
get_action_invokers: function(user, oPayload, callback) {
|
||||
return getModules(user, oPayload, db.actionInvokers, callback);
|
||||
},
|
||||
get_event_poller_params: function(user, oPayload, callback) {
|
||||
return getModuleParams(user, oPayload, db.eventPollers, callback);
|
||||
},
|
||||
get_action_invoker_params: function(user, oPayload, callback) {
|
||||
return getModuleParams(user, oPayload, db.actionInvokers, callback);
|
||||
},
|
||||
forge_event_poller: function(user, oPayload, callback) {
|
||||
return forgeModule(user, oPayload, db.eventPollers, callback);
|
||||
},
|
||||
forge_action_invoker: function(user, oPayload, callback) {
|
||||
return forgeModule(user, oPayload, db.actionInvokers, callback);
|
||||
},
|
||||
get_rules: function(user, oPayload, callback) {
|
||||
return console.log('CM | Implement get_rules');
|
||||
},
|
||||
forge_rule: function(user, oPayload, callback) {
|
||||
var answ;
|
||||
answ = hasRequiredParams(['id', 'event', 'conditions', 'actions'], oPayload);
|
||||
if (answ.code !== 200) {
|
||||
return callback(answ);
|
||||
} else {
|
||||
return db.getRule(oPayload.id, function(err, oExisting) {
|
||||
var arrParams, id, params, rule, strRule;
|
||||
if (oExisting !== null) {
|
||||
answ = {
|
||||
code: 409,
|
||||
message: 'Rule name already existing!'
|
||||
};
|
||||
} else {
|
||||
rule = {
|
||||
id: oPayload.id,
|
||||
event: oPayload.event,
|
||||
conditions: oPayload.conditions,
|
||||
actions: oPayload.actions
|
||||
};
|
||||
strRule = JSON.stringify(rule);
|
||||
db.storeRule(rule.id, strRule);
|
||||
db.linkRule(rule.id, user.username);
|
||||
db.activateRule(rule.id, user.username);
|
||||
if (oPayload.event_params) {
|
||||
db.eventPollers.storeUserParams(ep.module, user.username, oPayload.event_params);
|
||||
}
|
||||
arrParams = oPayload.action_params;
|
||||
for (id in arrParams) {
|
||||
params = arrParams[id];
|
||||
db.actionInvokers.storeUserParams(id, user.username, JSON.stringify(params));
|
||||
}
|
||||
_this.ee.emit('newRule', strRule);
|
||||
answ = {
|
||||
code: 200,
|
||||
message: 'Rule stored and activated!'
|
||||
};
|
||||
}
|
||||
return callback(answ);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}).call(this);
|
||||
|
|
|
|||
|
|
@ -328,18 +328,18 @@ Persistence
|
|||
};
|
||||
|
||||
/*
|
||||
@private storeModule( *mId, userId, data* )
|
||||
@param {String} mId
|
||||
Stores a module and links it to the user.
|
||||
@private storeModule( *userId, oModule* )
|
||||
@param {String} userId
|
||||
@param {object} data
|
||||
@param {object} oModule
|
||||
*/
|
||||
|
||||
|
||||
IndexedModules.prototype.storeModule = function(mId, userId, data) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".storeModule( " + mId + ", " + userId + ", data )");
|
||||
this.db.sadd("" + this.setname + "s", mId, replyHandler("sadd '" + mId + "' to '" + this.setname + "'"));
|
||||
this.db.hmset("" + this.setname + ":" + mId, data, replyHandler("hmset properties in hash '" + this.setname + ":" + mId + "'"));
|
||||
return this.linkModule(mId, userId);
|
||||
IndexedModules.prototype.storeModule = function(userId, oModule) {
|
||||
this.log.info("DB | (IdxedMods) " + this.setname + ".storeModule( " + userId + ", oModule )");
|
||||
this.db.sadd("" + this.setname + "s", oModule.id, replyHandler("sadd '" + oModule.id + "' to '" + this.setname + "'"));
|
||||
this.db.hmset("" + this.setname + ":" + oModule.id, oModule, replyHandler("hmset properties in hash '" + this.setname + ":" + oModule.id + "'"));
|
||||
return this.linkModule(oModule.id, userId);
|
||||
};
|
||||
|
||||
IndexedModules.prototype.linkModule = function(mId, userId) {
|
||||
|
|
|
|||
|
|
@ -70,7 +70,6 @@ Request Handler
|
|||
|
||||
exports.handleEvent = function(req, resp) {
|
||||
var body;
|
||||
console.log('handleEvent');
|
||||
body = '';
|
||||
req.on('data', function(data) {
|
||||
return body += data;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@
|
|||
"event": "test_1",
|
||||
"payload": {
|
||||
"property": "test_1",
|
||||
"nestedProperty": "really nested"
|
||||
"nestedProperty": {
|
||||
"more": "really nested"
|
||||
}
|
||||
}
|
||||
},
|
||||
"eventTwo":{
|
||||
|
|
@ -12,13 +14,21 @@
|
|||
}
|
||||
},
|
||||
"eps": {
|
||||
"ep1": {
|
||||
"code": "unit-test event poller 1 content",
|
||||
"reqparams": "[param11,param12]"
|
||||
"epOne": {
|
||||
"id":"epOne",
|
||||
"lang":"0",
|
||||
"data":"\n#\n# EmailYak EVENT POLLER\n#\n# Requires user params:\n# - apikey: The user's EmailYak API key\n#\n\nurl = 'https://api.emailyak.com/v1/' + params.apikey + '/json/get/new/email/'\n\nexports.newMail = ( pushEvent ) ->\n needle.get url, ( err, resp, body ) ->\n if not err and resp.statusCode is 200\n mails = JSON.parse( body ).Emails\n pushEvent mail for mail in mails\n else\n log.error 'Error in EmailYak EM newMail: ' + err.message\n\n",
|
||||
"public":"false",
|
||||
"params":"[\"apikey\"]",
|
||||
"functions":"[\"newMail\"]"
|
||||
},
|
||||
"ep2": {
|
||||
"code": "unit-test event poller 2 content",
|
||||
"reqparams": "[param21,param22]"
|
||||
"epTwo": {
|
||||
"id":"epTwo",
|
||||
"lang":"0",
|
||||
"data":"\nurl = 'https://api.emailyak.com/v1/' + params.firstparam + '/json/get/new/email/'\n\nexports.newEvent = ( pushEvent ) ->\n needle.get url, ( err, resp, body ) ->\n if not err and resp.statusCode is 200\n mails = JSON.parse( body ).Emails\n pushEvent mail for mail in mails\n else\n log.error 'Error in EmailYak EM newMail: ' + err.message\n\nexports.randomNess = ( pushEvent ) ->\n console.log 'test runs: ' + params.secondparam\n",
|
||||
"public":"true",
|
||||
"params":"[\"firstparam\",\"secondparam\"]",
|
||||
"functions":"[\"newEvent\",\"randomNess\"]"
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ catch err
|
|||
console.log 'Error fetching standard objects file: ' + err.message
|
||||
|
||||
logger = require path.join '..', 'js-coffee', 'logging'
|
||||
log = logger.getLogger
|
||||
nolog: true
|
||||
log = logger.getLogger()
|
||||
# nolog: true
|
||||
|
||||
cm = require path.join '..', 'js-coffee', 'components-manager'
|
||||
opts =
|
||||
|
|
@ -21,100 +21,96 @@ cm opts
|
|||
db = require path.join '..', 'js-coffee', 'persistence'
|
||||
db opts
|
||||
|
||||
oUser = objects.users.userOne
|
||||
oRuleOne = objects.rules.ruleOne
|
||||
oRuleTwo = objects.rules.ruleTwo
|
||||
|
||||
exports.testEmptyPayload = ( test ) =>
|
||||
test.expect 1
|
||||
exports.tearDown = ( cb ) ->
|
||||
db.deleteRule oRuleOne.id
|
||||
db.deleteRule oRuleTwo.id
|
||||
cb()
|
||||
|
||||
oUser = objects.users.userOne
|
||||
request =
|
||||
command: 'get_event_pollers'
|
||||
exports.requestProcessing =
|
||||
testEmptyPayload: ( test ) =>
|
||||
test.expect 1
|
||||
|
||||
cm.processRequest oUser, request, ( answ ) =>
|
||||
test.equals 200, answ.code, 'testListener failed: ' + answ.message
|
||||
test.done()
|
||||
request =
|
||||
command: 'get_event_pollers'
|
||||
|
||||
cm.processRequest oUser, request, ( answ ) =>
|
||||
test.strictEqual 200, answ.code, 'Empty payload did not return 200'
|
||||
test.done()
|
||||
|
||||
testCorruptPayload: ( test ) =>
|
||||
test.expect 1
|
||||
|
||||
request =
|
||||
command: 'get_event_pollers'
|
||||
payload: 'no-json'
|
||||
|
||||
cm.processRequest oUser, request, ( answ ) =>
|
||||
test.strictEqual 404, answ.code, 'Corrupt payload did not return 404'
|
||||
test.done()
|
||||
|
||||
exports.testListener = ( test ) =>
|
||||
test.expect 2
|
||||
|
||||
oUser = objects.users.userOne
|
||||
oRuleOne = objects.rules.ruleOne
|
||||
oRuleTwo = objects.rules.ruleTwo
|
||||
db.storeRule 'test-cm-rule', JSON.stringify oRuleOne
|
||||
db.storeRule oRuleOne.id, JSON.stringify oRuleOne
|
||||
request =
|
||||
command: 'forge_rule'
|
||||
payload: JSON.stringify oRuleTwo
|
||||
|
||||
cm.addListener 'newRule', ( evt ) =>
|
||||
console.log 'got new rule!'
|
||||
test.deepEqual evt, oRuleTwo, 'Event is not the same!'
|
||||
try
|
||||
newRule = JSON.parse evt
|
||||
catch err
|
||||
test.ok false, 'Failed to parse the newRule event'
|
||||
test.deepEqual newRule, oRuleTwo, 'New Rule is not the same!'
|
||||
test.done()
|
||||
|
||||
console.log 'new rule listener added'
|
||||
cm.addListener 'init', ( evt ) =>
|
||||
test.deepEqual evt, oRuleOne, 'Event is not the same!'
|
||||
console.log 'got and checked init'
|
||||
try
|
||||
initRule = JSON.parse evt
|
||||
catch err
|
||||
test.ok false, 'Failed to parse the newRule event'
|
||||
test.deepEqual initRule, oRuleOne, 'Init Rule is not the same!'
|
||||
|
||||
cm.processRequest oUser, request, ( answ ) =>
|
||||
console.log answ
|
||||
if answ.code isnt 200
|
||||
test.ok false, 'testListener failed: ' + answ.message
|
||||
fWaitForInit = ->
|
||||
cm.processRequest oUser, request, ( answ ) =>
|
||||
if answ.code isnt 200
|
||||
test.ok false, 'testListener failed: ' + answ.message
|
||||
test.done()
|
||||
|
||||
setTimeout fWaitForInit, 200
|
||||
|
||||
exports.moduleHandling =
|
||||
testGetModules: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
oModule = objects.eps.epOne
|
||||
db.eventPollers.storeModule oUser.username, oModule
|
||||
request =
|
||||
command: 'get_event_pollers'
|
||||
|
||||
cm.processRequest oUser, request, ( answ ) =>
|
||||
test.strictEqual 200, answ.code, 'GetModules failed...'
|
||||
oExpected = {}
|
||||
oExpected[oModule.id] = JSON.parse oModule.functions
|
||||
test.strictEqual JSON.stringify(oExpected), answ.message,
|
||||
'GetModules retrieved modules is not what we expected'
|
||||
|
||||
console.log answ
|
||||
test.done()
|
||||
|
||||
console.log 'init listener added'
|
||||
# testGetModuleParams: ( test ) ->
|
||||
# test.expect 1
|
||||
|
||||
exports.testListener = ( test ) =>
|
||||
test.expect 2
|
||||
|
||||
oUser = objects.users.userOne
|
||||
oRuleOne = objects.rules.ruleOne
|
||||
oRuleTwo = objects.rules.ruleTwo
|
||||
db.storeRule 'test-cm-rule', JSON.stringify oRuleOne
|
||||
request =
|
||||
command: 'forge_rule'
|
||||
payload: JSON.stringify oRuleTwo
|
||||
|
||||
cm.addListener 'newRule', ( evt ) =>
|
||||
console.log 'got new rule!'
|
||||
test.deepEqual evt, oRuleTwo, 'Event is not the same!'
|
||||
test.done()
|
||||
|
||||
console.log 'new rule listener added'
|
||||
cm.addListener 'init', ( evt ) =>
|
||||
test.deepEqual evt, oRuleOne, 'Event is not the same!'
|
||||
console.log 'got and checked init'
|
||||
|
||||
cm.processRequest oUser, request, ( answ ) =>
|
||||
console.log answ
|
||||
if answ.code isnt 200
|
||||
test.ok false, 'testListener failed: ' + answ.message
|
||||
test.done()
|
||||
|
||||
console.log 'init listener added'
|
||||
exports.testListener = ( test ) =>
|
||||
test.expect 2
|
||||
|
||||
oUser = objects.users.userOne
|
||||
oRuleOne = objects.rules.ruleOne
|
||||
oRuleTwo = objects.rules.ruleTwo
|
||||
db.storeRule 'test-cm-rule', JSON.stringify oRuleOne
|
||||
request =
|
||||
command: 'forge_rule'
|
||||
payload: JSON.stringify oRuleTwo
|
||||
|
||||
cm.addListener 'newRule', ( evt ) =>
|
||||
console.log 'got new rule!'
|
||||
test.deepEqual evt, oRuleTwo, 'Event is not the same!'
|
||||
test.done()
|
||||
|
||||
console.log 'new rule listener added'
|
||||
cm.addListener 'init', ( evt ) =>
|
||||
test.deepEqual evt, oRuleOne, 'Event is not the same!'
|
||||
console.log 'got and checked init'
|
||||
|
||||
cm.processRequest oUser, request, ( answ ) =>
|
||||
console.log answ
|
||||
if answ.code isnt 200
|
||||
test.ok false, 'testListener failed: ' + answ.message
|
||||
test.done()
|
||||
|
||||
console.log 'init listener added'
|
||||
# oModule = objects.eps.epOne
|
||||
# db.eventPollers.storeModule oUser.username, oModule
|
||||
# request =
|
||||
# command: 'get_event_pollers'
|
||||
|
||||
# cm.processRequest oUser, request, ( answ ) =>
|
||||
# test.strictEqual 200, answ.code, 'Empty payload did not return 200'
|
||||
# console.log answ
|
||||
# test.done()
|
||||
|
|
|
|||
|
|
@ -1,46 +1,43 @@
|
|||
path = require 'path'
|
||||
logger = require path.join '..', 'js-coffee', 'logging'
|
||||
log = logger.getLogger
|
||||
nolog: true
|
||||
conf = require path.join '..', 'js-coffee', 'config'
|
||||
conf
|
||||
logger: log
|
||||
|
||||
exports.setUp = ( cb ) =>
|
||||
logger = require path.join '..', 'js-coffee', 'logging'
|
||||
log = logger.getLogger
|
||||
nolog: true
|
||||
@conf = require path.join '..', 'js-coffee', 'config'
|
||||
@conf
|
||||
logger: log
|
||||
cb()
|
||||
|
||||
exports.testRequire = ( test ) =>
|
||||
exports.testRequire = ( test ) ->
|
||||
test.expect 1
|
||||
test.ok @conf.isReady(), 'File does not exist!'
|
||||
test.ok conf.isReady(), 'File does not exist!'
|
||||
test.done()
|
||||
|
||||
exports.testParameters = ( test ) =>
|
||||
exports.testParameters = ( test ) ->
|
||||
reqProp = [
|
||||
'mode'
|
||||
'io-level'
|
||||
'file-level'
|
||||
]
|
||||
test.expect 3 + reqProp.length
|
||||
test.ok @conf.getHttpPort(), 'HTTP port does not exist!'
|
||||
test.ok @conf.getDbPort(), 'DB port does not exist!'
|
||||
logconf = @conf.getLogConf()
|
||||
test.ok conf.getHttpPort(), 'HTTP port does not exist!'
|
||||
test.ok conf.getDbPort(), 'DB port does not exist!'
|
||||
logconf = conf.getLogConf()
|
||||
test.ok logconf, 'Log config does not exist!'
|
||||
for prop in reqProp
|
||||
test.ok logconf[prop], "Log conf property #{ prop } does not exist!"
|
||||
test.done()
|
||||
|
||||
exports.testDifferentConfigFile = ( test ) =>
|
||||
exports.testDifferentConfigFile = ( test ) ->
|
||||
test.expect 1
|
||||
@conf
|
||||
conf
|
||||
# nolog: true
|
||||
configPath: path.join 'testing', 'files', 'jsonTestConfig.json'
|
||||
test.ok @conf.isReady(), 'Different path not loaded!'
|
||||
test.ok conf.isReady(), 'Different path not loaded!'
|
||||
test.done()
|
||||
|
||||
exports.testNoConfigFile = ( test ) =>
|
||||
exports.testNoConfigFile = ( test ) ->
|
||||
test.expect 1
|
||||
@conf
|
||||
conf
|
||||
nolog: true
|
||||
configPath: 'wrongpath.file'
|
||||
test.strictEqual @conf.isReady(), false, 'Wrong path still loaded!'
|
||||
test.strictEqual conf.isReady(), false, 'Wrong path still loaded!'
|
||||
test.done()
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
path = require 'path'
|
||||
fs = require 'fs'
|
||||
stdPath = path.resolve __dirname, '..', 'logs', 'server.log'
|
||||
logger = require path.join '..', 'js-coffee', 'logging'
|
||||
|
||||
getLog = ( strPath, cb ) ->
|
||||
fWait = =>
|
||||
fWait = ->
|
||||
# cb fs.readFileSync path, 'utf-8'
|
||||
str = fs.readFileSync path.resolve( strPath ), 'utf-8'
|
||||
arrStr = str.split "\n"
|
||||
|
|
@ -13,17 +15,12 @@ getLog = ( strPath, cb ) ->
|
|||
cb arrStr.slice 0, arrStr.length - 1
|
||||
setTimeout fWait, 100
|
||||
|
||||
exports.setUp = ( cb ) =>
|
||||
@stdPath = path.resolve __dirname, '..', 'logs', 'server.log'
|
||||
exports.setUp = ( cb ) ->
|
||||
try
|
||||
fs.unlinkSync @stdPath
|
||||
@logger = require path.join '..', 'js-coffee', 'logging'
|
||||
fs.unlinkSync stdPath
|
||||
cb()
|
||||
|
||||
# exports.tearDown = ( cb ) =>
|
||||
# cb()
|
||||
|
||||
exports.testCreate = ( test ) =>
|
||||
exports.testCreate = ( test ) ->
|
||||
test.expect 2
|
||||
arrLogs = [
|
||||
'TL | testInitIO - info'
|
||||
|
|
@ -32,12 +29,12 @@ exports.testCreate = ( test ) =>
|
|||
]
|
||||
args = {}
|
||||
args[ 'io-level' ] = 'error'
|
||||
log = @logger.getLogger args
|
||||
log = logger.getLogger args
|
||||
log.info arrLogs[0]
|
||||
log.warn arrLogs[1]
|
||||
log.error arrLogs[2]
|
||||
test.ok fs.existsSync( @stdPath ), 'Log file does not exist!'
|
||||
getLog @stdPath, ( arr ) ->
|
||||
test.ok fs.existsSync( stdPath ), 'Log file does not exist!'
|
||||
getLog stdPath, ( arr ) ->
|
||||
allCorrect = true
|
||||
for o,i in arr
|
||||
if o.msg is not arrLogs[i]
|
||||
|
|
@ -45,20 +42,20 @@ exports.testCreate = ( test ) =>
|
|||
test.ok allCorrect, 'Log file does not contain the correct entries!'
|
||||
test.done()
|
||||
|
||||
exports.testNoLog = ( test ) =>
|
||||
exports.testNoLog = ( test ) ->
|
||||
test.expect 1
|
||||
|
||||
log = @logger.getLogger
|
||||
log = logger.getLogger
|
||||
nolog: true
|
||||
log.info 'TL | test 1'
|
||||
|
||||
fWait = () =>
|
||||
test.ok !fs.existsSync( @stdPath ), 'Log file does still exist!'
|
||||
fWait = () ->
|
||||
test.ok !fs.existsSync( stdPath ), 'Log file does still exist!'
|
||||
test.done()
|
||||
|
||||
setTimeout fWait, 100
|
||||
|
||||
exports.testCustomPath = ( test ) =>
|
||||
exports.testCustomPath = ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
strInfo = 'TL | custom path test 1'
|
||||
|
|
@ -67,10 +64,10 @@ exports.testCustomPath = ( test ) =>
|
|||
args[ 'file-path' ] = strPath
|
||||
args[ 'io-level' ] = 'error'
|
||||
|
||||
log = @logger.getLogger args
|
||||
log = logger.getLogger args
|
||||
log.info strInfo
|
||||
|
||||
fWait = () =>
|
||||
fWait = () ->
|
||||
test.ok fs.existsSync( strPath ), 'Custom log file does not exist!'
|
||||
getLog strPath, ( arr ) ->
|
||||
test.ok arr[0].msg is strInfo, 'Custom log file not correct!'
|
||||
|
|
@ -80,7 +77,7 @@ exports.testCustomPath = ( test ) =>
|
|||
|
||||
setTimeout fWait, 100
|
||||
|
||||
exports.testWrongPath = ( test ) =>
|
||||
exports.testWrongPath = ( test ) ->
|
||||
empty = [
|
||||
'trace'
|
||||
'debug'
|
||||
|
|
@ -96,7 +93,7 @@ exports.testWrongPath = ( test ) =>
|
|||
args = {}
|
||||
args[ 'file-path' ] = strPath
|
||||
args[ 'io-level' ] = 'error'
|
||||
log = @logger.getLogger args
|
||||
log = logger.getLogger args
|
||||
test.ok prop in empty, "#{ prop } shouldn't be here" for prop of log
|
||||
test.done()
|
||||
|
||||
|
|
|
|||
|
|
@ -18,23 +18,36 @@ opts =
|
|||
opts[ 'db-port' ] = 6379
|
||||
db opts
|
||||
|
||||
|
||||
oEvtOne = objects.events.eventOne
|
||||
oEvtTwo = objects.events.eventTwo
|
||||
oUser = objects.users.userOne
|
||||
oEpOne = objects.eps.epOne
|
||||
oEpTwo = objects.eps.epTwo
|
||||
oRuleOne = objects.rules.ruleOne
|
||||
oRuleTwo = objects.rules.ruleTwo
|
||||
|
||||
exports.tearDown = ( cb ) ->
|
||||
db.deleteUser oUser.username
|
||||
setTimeout cb, 100
|
||||
|
||||
# ###
|
||||
# # Test AVAILABILITY
|
||||
# ###
|
||||
exports.Availability =
|
||||
testRequire: ( test ) =>
|
||||
testRequire: ( test ) ->
|
||||
test.expect 1
|
||||
test.ok db, 'DB interface loaded'
|
||||
test.done()
|
||||
|
||||
testConnect: ( test ) =>
|
||||
testConnect: ( test ) ->
|
||||
test.expect 1
|
||||
db.isConnected ( err ) ->
|
||||
test.ifError err, 'Connection failed!'
|
||||
test.done()
|
||||
|
||||
# We cannot test for no db-port, since node-redis then assumes standard port
|
||||
testWrongDbPort: ( test ) =>
|
||||
testWrongDbPort: ( test ) ->
|
||||
test.expect 1
|
||||
|
||||
db.initPort 13410
|
||||
|
|
@ -43,38 +56,37 @@ exports.Availability =
|
|||
db.initPort 6379
|
||||
test.done()
|
||||
|
||||
testPurgeQueue: ( test ) =>
|
||||
testPurgeQueue: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
db.pushEvent objects.events.eventOne
|
||||
db.pushEvent oEvtOne
|
||||
db.purgeEventQueue()
|
||||
db.popEvent ( err, obj ) =>
|
||||
db.popEvent ( err, obj ) ->
|
||||
test.ifError err, 'Error during pop after purging!'
|
||||
test.strictEqual obj, null, 'There was an event in the queue!?'
|
||||
test.done()
|
||||
|
||||
|
||||
###
|
||||
# Test EVENT QUEUE
|
||||
###
|
||||
exports.EventQueue =
|
||||
|
||||
testEmptyPopping: ( test ) =>
|
||||
testEmptyPopping: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
db.purgeEventQueue()
|
||||
db.popEvent ( err, obj ) =>
|
||||
db.popEvent ( err, obj ) ->
|
||||
test.ifError err,
|
||||
'Error during pop after purging!'
|
||||
test.strictEqual obj, null,
|
||||
'There was an event in the queue!?'
|
||||
test.done()
|
||||
|
||||
testEmptyPushing: ( test ) =>
|
||||
testEmptyPushing: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
db.pushEvent null
|
||||
db.popEvent ( err, obj ) =>
|
||||
db.popEvent ( err, obj ) ->
|
||||
test.ifError err,
|
||||
'Error during non-empty pushing!'
|
||||
test.strictEqual obj, null,
|
||||
|
|
@ -82,21 +94,21 @@ exports.EventQueue =
|
|||
|
||||
test.done()
|
||||
|
||||
testNonEmptyPopping: ( test ) =>
|
||||
testNonEmptyPopping: ( test ) ->
|
||||
test.expect 3
|
||||
|
||||
db.pushEvent objects.events.eventOne
|
||||
db.popEvent ( err, obj ) =>
|
||||
db.pushEvent oEvtOne
|
||||
db.popEvent ( err, obj ) ->
|
||||
test.ifError err,
|
||||
'Error during non-empty popping!'
|
||||
test.notStrictEqual obj, null,
|
||||
'There was no event in the queue!'
|
||||
test.deepEqual objects.events.eventOne, obj,
|
||||
test.deepEqual oEvtOne, obj,
|
||||
'Wrong event in queue!'
|
||||
|
||||
test.done()
|
||||
|
||||
testMultiplePushAndPops: ( test ) =>
|
||||
testMultiplePushAndPops: ( test ) ->
|
||||
test.expect 6
|
||||
|
||||
semaphore = 2
|
||||
|
|
@ -105,23 +117,23 @@ exports.EventQueue =
|
|||
|
||||
test.done()
|
||||
|
||||
db.pushEvent objects.events.eventOne
|
||||
db.pushEvent objects.events.eventTwo
|
||||
db.pushEvent oEvtOne
|
||||
db.pushEvent oEvtTwo
|
||||
# eventually it would be wise to not care about the order of events
|
||||
db.popEvent ( err, obj ) =>
|
||||
db.popEvent ( err, obj ) ->
|
||||
test.ifError err,
|
||||
'Error during multiple push and pop!'
|
||||
test.notStrictEqual obj, null,
|
||||
'There was no event in the queue!'
|
||||
test.deepEqual objects.events.eventOne, obj,
|
||||
test.deepEqual oEvtOne, obj,
|
||||
'Wrong event in queue!'
|
||||
forkEnds()
|
||||
db.popEvent ( err, obj ) =>
|
||||
db.popEvent ( err, obj ) ->
|
||||
test.ifError err,
|
||||
'Error during multiple push and pop!'
|
||||
test.notStrictEqual obj, null,
|
||||
'There was no event in the queue!'
|
||||
test.deepEqual objects.events.eventTwo, obj,
|
||||
test.deepEqual oEvtTwo, obj,
|
||||
'Wrong event in queue!'
|
||||
forkEnds()
|
||||
|
||||
|
|
@ -131,110 +143,106 @@ exports.EventQueue =
|
|||
# since Action Invoker uses the same class
|
||||
###
|
||||
exports.EventPoller =
|
||||
setUp: ( cb ) =>
|
||||
@userId = 'tester1'
|
||||
@event1id = 'test-event-poller_1'
|
||||
@event2id = 'test-event-poller_2'
|
||||
cb()
|
||||
|
||||
tearDown: ( cb ) =>
|
||||
db.eventPollers.unlinkModule @event1id, @userId
|
||||
db.eventPollers.deleteModule @event1id
|
||||
db.eventPollers.unlinkModule @event2id, @userId
|
||||
db.eventPollers.deleteModule @event2id
|
||||
tearDown: ( cb ) ->
|
||||
# db.eventPollers.unlinkModule oEpOne.id, oUser.username
|
||||
db.eventPollers.deleteModule oEpOne.id
|
||||
# db.eventPollers.unlinkModule oEpTwo.id, oUser.username
|
||||
db.eventPollers.deleteModule oEpTwo.id
|
||||
cb()
|
||||
|
||||
testCreateAndRead: ( test ) =>
|
||||
testCreateAndRead: ( test ) ->
|
||||
test.expect 3
|
||||
db.eventPollers.storeModule @event1id, @userId, objects.eps.ep1
|
||||
db.eventPollers.storeModule oUser.username, oEpOne
|
||||
|
||||
# test that the ID shows up in the set
|
||||
db.eventPollers.getModuleIds ( err , obj ) =>
|
||||
test.ok @event1id in obj,
|
||||
db.eventPollers.getModuleIds ( err , obj ) ->
|
||||
test.ok oEpOne.id in obj,
|
||||
'Expected key not in event-pollers set'
|
||||
|
||||
# the retrieved object really is the one we expected
|
||||
db.eventPollers.getModule @event1id, ( err , obj ) =>
|
||||
test.deepEqual obj, objects.eps.ep1,
|
||||
db.eventPollers.getModule oEpOne.id, ( err , obj ) ->
|
||||
test.deepEqual obj, oEpOne,
|
||||
'Retrieved Event Poller is not what we expected'
|
||||
|
||||
# Ensure the event poller is in the list of all existing ones
|
||||
db.eventPollers.getModules ( err , obj ) =>
|
||||
test.deepEqual objects.eps.ep1, obj[@event1id],
|
||||
db.eventPollers.getModules ( err , obj ) ->
|
||||
test.deepEqual oEpOne, obj[oEpOne.id],
|
||||
'Event Poller ist not in result set'
|
||||
|
||||
|
||||
test.done()
|
||||
|
||||
testUpdate: ( test ) =>
|
||||
testUpdate: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
oTmp = {}
|
||||
oTmp[key] = val for key, val of oEpOne
|
||||
oTmp.public = 'true'
|
||||
|
||||
# store an entry to start with
|
||||
db.eventPollers.storeModule @event1id, @userId, objects.eps.ep1
|
||||
db.eventPollers.storeModule @event1id, @userId, objects.eps.ep2
|
||||
db.eventPollers.storeModule oUser.username, oEpOne
|
||||
db.eventPollers.storeModule oUser.username, oTmp
|
||||
|
||||
# the retrieved object really is the one we expected
|
||||
db.eventPollers.getModule @event1id, ( err , obj ) =>
|
||||
test.deepEqual obj, objects.eps.ep2,
|
||||
db.eventPollers.getModule oEpOne.id, ( err , obj ) ->
|
||||
test.deepEqual obj, oTmp,
|
||||
'Retrieved Event Poller is not what we expected'
|
||||
|
||||
# Ensure the event poller is in the list of all existing ones
|
||||
db.eventPollers.getModules ( err , obj ) =>
|
||||
test.deepEqual objects.eps.ep2, obj[@event1id],
|
||||
db.eventPollers.getModules ( err , obj ) ->
|
||||
test.deepEqual oTmp, obj[oEpOne.id],
|
||||
'Event Poller ist not in result set'
|
||||
|
||||
test.done()
|
||||
|
||||
testDelete: ( test ) =>
|
||||
testDelete: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
# store an entry to start with
|
||||
db.eventPollers.storeModule @event1id, @userId, objects.eps.ep1
|
||||
db.eventPollers.storeModule oUser.username, oEpOne
|
||||
|
||||
# Ensure the event poller has been deleted
|
||||
db.eventPollers.deleteModule @event1id
|
||||
db.eventPollers.getModule @event1id, ( err , obj ) =>
|
||||
db.eventPollers.deleteModule oEpOne.id
|
||||
db.eventPollers.getModule oEpOne.id, ( err , obj ) ->
|
||||
test.strictEqual obj, null,
|
||||
'Event Poller still exists'
|
||||
|
||||
# Ensure the ID has been removed from the set
|
||||
db.eventPollers.getModuleIds ( err , obj ) =>
|
||||
test.ok @event1id not in obj,
|
||||
db.eventPollers.getModuleIds ( err , obj ) ->
|
||||
test.ok oEpOne.id not in obj,
|
||||
'Event Poller key still exists in set'
|
||||
|
||||
test.done()
|
||||
|
||||
|
||||
testFetchSeveral: ( test ) =>
|
||||
testFetchSeveral: ( test ) ->
|
||||
test.expect 3
|
||||
|
||||
semaphore = 2
|
||||
|
||||
fCheckInvoker = ( modname, mod ) =>
|
||||
fCheckInvoker = ( modname, mod ) ->
|
||||
myTest = test
|
||||
forkEnds = () ->
|
||||
if --semaphore is 0
|
||||
|
||||
myTest.done()
|
||||
( err, obj ) =>
|
||||
( err, obj ) ->
|
||||
myTest.deepEqual mod, obj,
|
||||
"Invoker #{ modname } does not equal the expected one"
|
||||
forkEnds()
|
||||
|
||||
db.eventPollers.storeModule @event1id, @userId, objects.eps.ep1
|
||||
db.eventPollers.storeModule @event2id, @userId, objects.eps.ep2
|
||||
db.eventPollers.getModuleIds ( err, obj ) =>
|
||||
test.ok @event1id in obj and @event2id in obj,
|
||||
db.eventPollers.storeModule oUser.username, oEpOne
|
||||
db.eventPollers.storeModule oUser.username, oEpTwo
|
||||
db.eventPollers.getModuleIds ( err, obj ) ->
|
||||
test.ok oEpOne.id in obj and oEpTwo.id in obj,
|
||||
'Not all event poller Ids in set'
|
||||
db.eventPollers.getModule @event1id, fCheckInvoker @event1id, objects.eps.ep1
|
||||
db.eventPollers.getModule @event2id, fCheckInvoker @event2id, objects.eps.ep2
|
||||
db.eventPollers.getModule oEpOne.id, fCheckInvoker oEpOne.id, oEpOne
|
||||
db.eventPollers.getModule oEpTwo.id, fCheckInvoker oEpTwo.id, oEpTwo
|
||||
|
||||
|
||||
###
|
||||
# Test EVENT POLLER PARAMS
|
||||
###
|
||||
exports.EventPollerParams =
|
||||
testCreateAndRead: ( test ) =>
|
||||
testCreateAndRead: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
userId = 'tester1'
|
||||
|
|
@ -245,18 +253,18 @@ exports.EventPollerParams =
|
|||
db.eventPollers.storeUserParams eventId, userId, params
|
||||
|
||||
# test that the ID shows up in the set
|
||||
db.eventPollers.getUserParamsIds ( err, obj ) =>
|
||||
db.eventPollers.getUserParamsIds ( err, obj ) ->
|
||||
test.ok eventId+':'+userId in obj,
|
||||
'Expected key not in event-params set'
|
||||
|
||||
# the retrieved object really is the one we expected
|
||||
db.eventPollers.getUserParams eventId, userId, ( err, obj ) =>
|
||||
db.eventPollers.getUserParams eventId, userId, ( err, obj ) ->
|
||||
test.strictEqual obj, params,
|
||||
'Retrieved event params is not what we expected'
|
||||
db.eventPollers.deleteUserParams eventId, userId
|
||||
test.done()
|
||||
|
||||
testUpdate: ( test ) =>
|
||||
testUpdate: ( test ) ->
|
||||
test.expect 1
|
||||
|
||||
userId = 'tester1'
|
||||
|
|
@ -269,14 +277,14 @@ exports.EventPollerParams =
|
|||
db.eventPollers.storeUserParams eventId, userId, paramsNew
|
||||
|
||||
# the retrieved object really is the one we expected
|
||||
db.eventPollers.getUserParams eventId, userId, ( err, obj ) =>
|
||||
db.eventPollers.getUserParams eventId, userId, ( err, obj ) ->
|
||||
test.strictEqual obj, paramsNew,
|
||||
'Retrieved event params is not what we expected'
|
||||
db.eventPollers.deleteUserParams eventId, userId
|
||||
|
||||
test.done()
|
||||
|
||||
testDelete: ( test ) =>
|
||||
testDelete: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
userId = 'tester1'
|
||||
|
|
@ -288,11 +296,11 @@ exports.EventPollerParams =
|
|||
db.eventPollers.deleteUserParams eventId, userId
|
||||
|
||||
# Ensure the event params have been deleted
|
||||
db.eventPollers.getUserParams eventId, userId, ( err, obj ) =>
|
||||
db.eventPollers.getUserParams eventId, userId, ( err, obj ) ->
|
||||
test.strictEqual obj, null,
|
||||
'Event params still exists'
|
||||
# Ensure the ID has been removed from the set
|
||||
db.eventPollers.getUserParamsIds ( err, obj ) =>
|
||||
db.eventPollers.getUserParamsIds ( err, obj ) ->
|
||||
test.ok eventId+':'+userId not in obj,
|
||||
'Event Params key still exists in set'
|
||||
|
||||
|
|
@ -303,194 +311,189 @@ exports.EventPollerParams =
|
|||
# Test RULES
|
||||
###
|
||||
exports.Rules =
|
||||
setUp: ( cb ) =>
|
||||
@userId = 'tester-1'
|
||||
@ruleId = 'test-rule_1'
|
||||
tearDown: ( cb ) ->
|
||||
db.deleteRule oRuleOne.id
|
||||
cb()
|
||||
|
||||
tearDown: ( cb ) =>
|
||||
db.deleteRule @ruleId
|
||||
cb()
|
||||
|
||||
testCreateAndRead: ( test ) =>
|
||||
testCreateAndRead: ( test ) ->
|
||||
test.expect 3
|
||||
|
||||
# store an entry to start with
|
||||
db.storeRule @ruleId, JSON.stringify objects.rules.ruleOne
|
||||
db.storeRule oRuleOne.id, JSON.stringify oRuleOne
|
||||
|
||||
# test that the ID shows up in the set
|
||||
db.getRuleIds ( err, obj ) =>
|
||||
test.ok @ruleId in obj,
|
||||
db.getRuleIds ( err, obj ) ->
|
||||
test.ok oRuleOne.id in obj,
|
||||
'Expected key not in rule key set'
|
||||
|
||||
# the retrieved object really is the one we expected
|
||||
db.getRule @ruleId, ( err, obj ) =>
|
||||
test.deepEqual JSON.parse(obj), objects.rules.ruleOne,
|
||||
db.getRule oRuleOne.id, ( err, obj ) ->
|
||||
test.deepEqual JSON.parse(obj), oRuleOne,
|
||||
'Retrieved rule is not what we expected'
|
||||
|
||||
# Ensure the rule is in the list of all existing ones
|
||||
db.getRules ( err , obj ) =>
|
||||
test.deepEqual objects.rules.ruleOne, JSON.parse( obj[@ruleId] ),
|
||||
db.getRules ( err , obj ) ->
|
||||
test.deepEqual oRuleOne, JSON.parse( obj[oRuleOne.id] ),
|
||||
'Rule not in result set'
|
||||
|
||||
test.done()
|
||||
|
||||
testUpdate: ( test ) =>
|
||||
testUpdate: ( test ) ->
|
||||
test.expect 1
|
||||
|
||||
# store an entry to start with
|
||||
db.storeRule @ruleId, JSON.stringify objects.rules.ruleOne
|
||||
db.storeRule @ruleId, JSON.stringify objects.rules.ruleTwo
|
||||
db.storeRule oRuleOne.id, JSON.stringify oRuleOne
|
||||
db.storeRule oRuleOne.id, JSON.stringify oRuleTwo
|
||||
|
||||
# the retrieved object really is the one we expected
|
||||
db.getRule @ruleId, ( err, obj ) =>
|
||||
test.deepEqual JSON.parse(obj), objects.rules.ruleTwo,
|
||||
db.getRule oRuleOne.id, ( err, obj ) ->
|
||||
test.deepEqual JSON.parse(obj), oRuleTwo,
|
||||
'Retrieved rule is not what we expected'
|
||||
|
||||
test.done()
|
||||
|
||||
testDelete: ( test ) =>
|
||||
testDelete: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
# store an entry to start with and delete it right away
|
||||
db.storeRule @ruleId, JSON.stringify objects.rules.ruleOne
|
||||
db.deleteRule @ruleId
|
||||
db.storeRule oRuleOne.id, JSON.stringify oRuleOne
|
||||
db.deleteRule oRuleOne.id
|
||||
|
||||
# Ensure the event params have been deleted
|
||||
db.getRule @ruleId, ( err, obj ) =>
|
||||
db.getRule oRuleOne.id, ( err, obj ) ->
|
||||
test.strictEqual obj, null,
|
||||
'Rule still exists'
|
||||
|
||||
# Ensure the ID has been removed from the set
|
||||
db.getRuleIds ( err, obj ) =>
|
||||
test.ok @ruleId not in obj,
|
||||
db.getRuleIds ( err, obj ) ->
|
||||
test.ok oRuleOne.id not in obj,
|
||||
'Rule key still exists in set'
|
||||
|
||||
test.done()
|
||||
|
||||
testLink: ( test ) =>
|
||||
testLink: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
# link a rule to the user
|
||||
db.linkRule @ruleId, @userId
|
||||
db.linkRule oRuleOne.id, oUser.username
|
||||
|
||||
# Ensure the user is linked to the rule
|
||||
db.getRuleLinkedUsers @ruleId, ( err, obj ) =>
|
||||
test.ok @userId in obj,
|
||||
"Rule not linked to user #{ @userId }"
|
||||
db.getRuleLinkedUsers oRuleOne.id, ( err, obj ) ->
|
||||
test.ok oUser.username in obj,
|
||||
"Rule not linked to user #{ oUser.username }"
|
||||
|
||||
# Ensure the rule is linked to the user
|
||||
db.getUserLinkedRules @userId, ( err, obj ) =>
|
||||
test.ok @ruleId in obj,
|
||||
"User not linked to rule #{ @ruleId }"
|
||||
db.getUserLinkedRules oUser.username, ( err, obj ) ->
|
||||
test.ok oRuleOne.id in obj,
|
||||
"User not linked to rule #{ oRuleOne.id }"
|
||||
|
||||
test.done()
|
||||
|
||||
testUnlink: ( test ) =>
|
||||
testUnlink: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
# link and unlink immediately afterwards
|
||||
db.linkRule @ruleId, @userId
|
||||
db.unlinkRule @ruleId, @userId
|
||||
db.linkRule oRuleOne.id, oUser.username
|
||||
db.unlinkRule oRuleOne.id, oUser.username
|
||||
|
||||
# Ensure the user is linked to the rule
|
||||
db.getRuleLinkedUsers @ruleId, ( err, obj ) =>
|
||||
test.ok @userId not in obj,
|
||||
"Rule still linked to user #{ @userId }"
|
||||
db.getRuleLinkedUsers oRuleOne.id, ( err, obj ) ->
|
||||
test.ok oUser.username not in obj,
|
||||
"Rule still linked to user #{ oUser.username }"
|
||||
|
||||
# Ensure the rule is linked to the user
|
||||
db.getUserLinkedRules @userId, ( err, obj ) =>
|
||||
test.ok @ruleId not in obj,
|
||||
"User still linked to rule #{ @ruleId }"
|
||||
db.getUserLinkedRules oUser.username, ( err, obj ) ->
|
||||
test.ok oRuleOne.id not in obj,
|
||||
"User still linked to rule #{ oRuleOne.id }"
|
||||
|
||||
test.done()
|
||||
|
||||
testActivate: ( test ) =>
|
||||
testActivate: ( test ) ->
|
||||
test.expect 4
|
||||
|
||||
usr =
|
||||
username: "tester-1"
|
||||
password: "tester-1"
|
||||
db.storeUser usr
|
||||
db.activateRule @ruleId, @userId
|
||||
db.activateRule oRuleOne.id, oUser.username
|
||||
# activate a rule for a user
|
||||
|
||||
# Ensure the user is activated to the rule
|
||||
db.getRuleActivatedUsers @ruleId, ( err, obj ) =>
|
||||
test.ok @userId in obj,
|
||||
"Rule not activated for user #{ @userId }"
|
||||
db.getRuleActivatedUsers oRuleOne.id, ( err, obj ) ->
|
||||
test.ok oUser.username in obj,
|
||||
"Rule not activated for user #{ oUser.username }"
|
||||
|
||||
# Ensure the rule is linked to the user
|
||||
db.getUserActivatedRules @userId, ( err, obj ) =>
|
||||
test.ok @ruleId in obj,
|
||||
"User not activated for rule #{ @ruleId }"
|
||||
db.getUserActivatedRules oUser.username, ( err, obj ) ->
|
||||
test.ok oRuleOne.id in obj,
|
||||
"User not activated for rule #{ oRuleOne.id }"
|
||||
|
||||
# Ensure the rule is showing up in all active rules
|
||||
db.getAllActivatedRuleIdsPerUser ( err, obj ) =>
|
||||
test.notStrictEqual obj[@userId], undefined,
|
||||
"User #{ @userId } not in activated rules set"
|
||||
if obj[@userId]
|
||||
test.ok @ruleId in obj[@userId],
|
||||
"Rule #{ @ruleId } not in activated rules set"
|
||||
db.getAllActivatedRuleIdsPerUser ( err, obj ) ->
|
||||
test.notStrictEqual obj[oUser.username], undefined,
|
||||
"User #{ oUser.username } not in activated rules set"
|
||||
if obj[oUser.username]
|
||||
test.ok oRuleOne.id in obj[oUser.username],
|
||||
"Rule #{ oRuleOne.id } not in activated rules set"
|
||||
# else
|
||||
# test.ok true,
|
||||
# "Dummy so we meet the expected num of tests"
|
||||
|
||||
test.done()
|
||||
|
||||
testDeactivate: ( test ) =>
|
||||
testDeactivate: ( test ) ->
|
||||
test.expect 3
|
||||
|
||||
# store an entry to start with and link it to te user
|
||||
db.activateRule @ruleId, @userId
|
||||
db.deactivateRule @ruleId, @userId
|
||||
db.activateRule oRuleOne.id, oUser.username
|
||||
db.deactivateRule oRuleOne.id, oUser.username
|
||||
|
||||
# Ensure the user is linked to the rule
|
||||
db.getRuleActivatedUsers @ruleId, ( err, obj ) =>
|
||||
test.ok @userId not in obj,
|
||||
"Rule still activated for user #{ @userId }"
|
||||
db.getRuleActivatedUsers oRuleOne.id, ( err, obj ) ->
|
||||
test.ok oUser.username not in obj,
|
||||
"Rule still activated for user #{ oUser.username }"
|
||||
|
||||
# Ensure the rule is linked to the user
|
||||
db.getUserActivatedRules @userId, ( err, obj ) =>
|
||||
test.ok @ruleId not in obj,
|
||||
"User still activated for rule #{ @ruleId }"
|
||||
db.getUserActivatedRules oUser.username, ( err, obj ) ->
|
||||
test.ok oRuleOne.id not in obj,
|
||||
"User still activated for rule #{ oRuleOne.id }"
|
||||
|
||||
# Ensure the rule is showing up in all active rules
|
||||
db.getAllActivatedRuleIdsPerUser ( err, obj ) =>
|
||||
if obj[@userId]
|
||||
test.ok @ruleId not in obj[@userId],
|
||||
"Rule #{ @ruleId } still in activated rules set"
|
||||
db.getAllActivatedRuleIdsPerUser ( err, obj ) ->
|
||||
if obj[oUser.username]
|
||||
test.ok oRuleOne.id not in obj[oUser.username],
|
||||
"Rule #{ oRuleOne.id } still in activated rules set"
|
||||
else
|
||||
test.ok true,
|
||||
"We are fine since there are no entries for this user anymore"
|
||||
|
||||
test.done()
|
||||
|
||||
testUnlinkAndDeactivateAfterDeletion: ( test ) =>
|
||||
testUnlinkAndDeactivateAfterDeletion: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
# store an entry to start with and link it to te user
|
||||
db.storeRule @ruleId, JSON.stringify objects.rules.ruleOne
|
||||
db.linkRule @ruleId, @userId
|
||||
db.activateRule @ruleId, @userId
|
||||
db.storeRule oRuleOne.id, JSON.stringify oRuleOne
|
||||
db.linkRule oRuleOne.id, oUser.username
|
||||
db.activateRule oRuleOne.id, oUser.username
|
||||
|
||||
# We need to wait here and there since these calls are asynchronous
|
||||
fWaitForTest = () =>
|
||||
fWaitForTest = () ->
|
||||
|
||||
# Ensure the user is unlinked to the rule
|
||||
db.getUserLinkedRules @userId, ( err, obj ) =>
|
||||
test.ok @ruleId not in obj,
|
||||
"Rule #{ @ruleId } still linked to user #{ @userId }"
|
||||
db.getUserLinkedRules oUser.username, ( err, obj ) ->
|
||||
test.ok oRuleOne.id not in obj,
|
||||
"Rule #{ oRuleOne.id } still linked to user #{ oUser.username }"
|
||||
|
||||
# Ensure the rule is deactivated for the user
|
||||
db.getUserActivatedRules @userId, ( err, obj ) =>
|
||||
test.ok @ruleId not in obj,
|
||||
"Rule #{ @ruleId } still activated for user #{ @userId }"
|
||||
db.getUserActivatedRules oUser.username, ( err, obj ) ->
|
||||
test.ok oRuleOne.id not in obj,
|
||||
"Rule #{ oRuleOne.id } still activated for user #{ oUser.username }"
|
||||
|
||||
test.done()
|
||||
|
||||
fWaitForDeletion = () =>
|
||||
db.deleteRule @ruleId
|
||||
fWaitForDeletion = () ->
|
||||
db.deleteRule oRuleOne.id
|
||||
setTimeout fWaitForTest, 300
|
||||
|
||||
setTimeout fWaitForDeletion, 100
|
||||
|
|
@ -500,12 +503,7 @@ exports.Rules =
|
|||
# Test USER
|
||||
###
|
||||
exports.User =
|
||||
|
||||
tearDown: ( cb ) =>
|
||||
db.deleteUser objects.users.userOne.username
|
||||
cb()
|
||||
|
||||
testCreateInvalid: ( test ) =>
|
||||
testCreateInvalid: ( test ) ->
|
||||
test.expect 4
|
||||
|
||||
oUserInvOne =
|
||||
|
|
@ -517,134 +515,126 @@ exports.User =
|
|||
db.storeUser oUserInvOne
|
||||
db.storeUser oUserInvTwo
|
||||
|
||||
db.getUser oUserInvOne.username, ( err, obj ) =>
|
||||
db.getUser oUserInvOne.username, ( err, obj ) ->
|
||||
test.strictEqual obj, null,
|
||||
'User One was stored!?'
|
||||
|
||||
db.getUser oUserInvTwo.username, ( err, obj ) =>
|
||||
db.getUser oUserInvTwo.username, ( err, obj ) ->
|
||||
test.strictEqual obj, null,
|
||||
'User Two was stored!?'
|
||||
|
||||
db.getUserIds ( err, obj ) =>
|
||||
db.getUserIds ( err, obj ) ->
|
||||
test.ok oUserInvOne.username not in obj,
|
||||
'User key was stored!?'
|
||||
test.ok oUserInvTwo.username not in obj,
|
||||
'User key was stored!?'
|
||||
test.done()
|
||||
|
||||
testDelete: ( test ) =>
|
||||
testDelete: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
oUsr = objects.users.userOne
|
||||
# Store the user
|
||||
db.storeUser oUsr
|
||||
db.storeUser oUser
|
||||
|
||||
db.getUser oUsr.username, ( err, obj ) =>
|
||||
test.deepEqual obj, oUsr,
|
||||
"User #{ objects.users.userOne.username } is not what we expect!"
|
||||
db.getUser oUser.username, ( err, obj ) ->
|
||||
test.deepEqual obj, oUser,
|
||||
"User #{ oUser.username } is not what we expect!"
|
||||
|
||||
db.getUserIds ( err, obj ) =>
|
||||
test.ok oUsr.username in obj,
|
||||
db.getUserIds ( err, obj ) ->
|
||||
test.ok oUser.username in obj,
|
||||
'User key was not stored!?'
|
||||
|
||||
test.done()
|
||||
|
||||
testUpdate: ( test ) =>
|
||||
testUpdate: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
oUsr = objects.users.userOne
|
||||
|
||||
# Store the user
|
||||
db.storeUser oUsr
|
||||
oUsr.password = "password-update"
|
||||
db.storeUser oUsr
|
||||
db.storeUser oUser
|
||||
oUser.password = "password-update"
|
||||
db.storeUser oUser
|
||||
|
||||
db.getUser oUsr.username, ( err, obj ) =>
|
||||
test.deepEqual obj, oUsr,
|
||||
"User #{ oUsr.username } is not what we expect!"
|
||||
db.getUser oUser.username, ( err, obj ) ->
|
||||
test.deepEqual obj, oUser,
|
||||
"User #{ oUser.username } is not what we expect!"
|
||||
|
||||
db.getUserIds ( err, obj ) =>
|
||||
test.ok oUsr.username in obj,
|
||||
db.getUserIds ( err, obj ) ->
|
||||
test.ok oUser.username in obj,
|
||||
'User key was not stored!?'
|
||||
db.deleteUser oUsr.username
|
||||
db.deleteUser oUser.username
|
||||
test.done()
|
||||
|
||||
testDelete: ( test ) =>
|
||||
testDelete: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
oUsr = objects.users.userOne
|
||||
|
||||
# Wait until the user and his rules and roles are deleted
|
||||
fWaitForDeletion = () =>
|
||||
db.getUserIds ( err, obj ) =>
|
||||
test.ok oUsr.username not in obj,
|
||||
fWaitForDeletion = () ->
|
||||
db.getUserIds ( err, obj ) ->
|
||||
test.ok oUser.username not in obj,
|
||||
'User key still in set!'
|
||||
|
||||
db.getUser oUsr.username, ( err, obj ) =>
|
||||
db.getUser oUser.username, ( err, obj ) ->
|
||||
test.strictEqual obj, null,
|
||||
'User key still exists!'
|
||||
test.done()
|
||||
|
||||
# Store the user and make some links
|
||||
db.storeUser oUsr
|
||||
db.deleteUser oUsr.username
|
||||
db.storeUser oUser
|
||||
db.deleteUser oUser.username
|
||||
setTimeout fWaitForDeletion, 100
|
||||
|
||||
|
||||
testDeleteLinks: ( test ) =>
|
||||
testDeleteLinks: ( test ) ->
|
||||
test.expect 4
|
||||
|
||||
oUsr = objects.users.userOne
|
||||
|
||||
# Wait until the user and his rules and roles are stored
|
||||
fWaitForPersistence = () =>
|
||||
db.deleteUser oUsr.username
|
||||
fWaitForPersistence = () ->
|
||||
db.deleteUser oUser.username
|
||||
setTimeout fWaitForDeletion, 200
|
||||
|
||||
# Wait until the user and his rules and roles are deleted
|
||||
fWaitForDeletion = () =>
|
||||
db.getRoleUsers 'tester', ( err, obj ) =>
|
||||
test.ok oUsr.username not in obj,
|
||||
fWaitForDeletion = () ->
|
||||
db.getRoleUsers 'tester', ( err, obj ) ->
|
||||
test.ok oUser.username not in obj,
|
||||
'User key still in role tester!'
|
||||
|
||||
db.getUserRoles oUsr.username, ( err, obj ) =>
|
||||
db.getUserRoles oUser.username, ( err, obj ) ->
|
||||
test.ok obj.length is 0,
|
||||
'User still associated to roles!'
|
||||
|
||||
db.getUserLinkedRules oUsr.username, ( err, obj ) =>
|
||||
db.getUserLinkedRules oUser.username, ( err, obj ) ->
|
||||
test.ok obj.length is 0,
|
||||
'User still associated to rules!'
|
||||
db.getUserActivatedRules oUsr.username, ( err, obj ) =>
|
||||
db.getUserActivatedRules oUser.username, ( err, obj ) ->
|
||||
test.ok obj.length is 0,
|
||||
'User still associated to activated rules!'
|
||||
test.done()
|
||||
|
||||
# Store the user and make some links
|
||||
db.storeUser oUsr
|
||||
db.linkRule 'rule-1', oUsr.username
|
||||
db.linkRule 'rule-2', oUsr.username
|
||||
db.linkRule 'rule-3', oUsr.username
|
||||
db.activateRule 'rule-1', oUsr.username
|
||||
db.storeUserRole oUsr.username, 'tester'
|
||||
db.storeUser oUser
|
||||
db.linkRule 'rule-1', oUser.username
|
||||
db.linkRule 'rule-2', oUser.username
|
||||
db.linkRule 'rule-3', oUser.username
|
||||
db.activateRule 'rule-1', oUser.username
|
||||
db.storeUserRole oUser.username, 'tester'
|
||||
|
||||
setTimeout fWaitForPersistence, 100
|
||||
|
||||
|
||||
testLogin: ( test ) =>
|
||||
testLogin: ( test ) ->
|
||||
test.expect 3
|
||||
|
||||
oUsr = objects.users.userOne
|
||||
# Store the user and make some links
|
||||
db.storeUser oUsr
|
||||
db.loginUser oUsr.username, oUsr.password, ( err, obj ) =>
|
||||
test.deepEqual obj, oUsr,
|
||||
db.storeUser oUser
|
||||
db.loginUser oUser.username, oUser.password, ( err, obj ) ->
|
||||
test.deepEqual obj, oUser,
|
||||
'User not logged in!'
|
||||
|
||||
db.loginUser 'dummyname', oUsr.password, ( err, obj ) =>
|
||||
db.loginUser 'dummyname', oUser.password, ( err, obj ) ->
|
||||
test.strictEqual obj, null,
|
||||
'User logged in?!'
|
||||
|
||||
db.loginUser oUsr.username, 'wrongpass', ( err, obj ) =>
|
||||
db.loginUser oUser.username, 'wrongpass', ( err, obj ) ->
|
||||
test.strictEqual obj, null,
|
||||
'User logged in?!'
|
||||
|
||||
|
|
@ -655,42 +645,37 @@ exports.User =
|
|||
# Test ROLES
|
||||
###
|
||||
exports.Roles =
|
||||
tearDown: ( cb ) =>
|
||||
db.deleteUser objects.users.userOne.username
|
||||
cb()
|
||||
|
||||
testStore: ( test ) =>
|
||||
testStore: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
oUsr = objects.users.userOne
|
||||
db.storeUser oUsr
|
||||
db.storeUserRole oUsr.username, 'tester'
|
||||
db.storeUser oUser
|
||||
db.storeUserRole oUser.username, 'tester'
|
||||
|
||||
db.getUserRoles oUsr.username, ( err, obj ) =>
|
||||
db.getUserRoles oUser.username, ( err, obj ) ->
|
||||
test.ok 'tester' in obj,
|
||||
'User role tester not stored!'
|
||||
|
||||
db.getRoleUsers 'tester', ( err, obj ) =>
|
||||
test.ok oUsr.username in obj,
|
||||
"User #{ oUsr.username } not stored in role tester!"
|
||||
db.getRoleUsers 'tester', ( err, obj ) ->
|
||||
test.ok oUser.username in obj,
|
||||
"User #{ oUser.username } not stored in role tester!"
|
||||
|
||||
test.done()
|
||||
|
||||
testDelete: ( test ) =>
|
||||
testDelete: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
oUsr = objects.users.userOne
|
||||
db.storeUser oUsr
|
||||
db.storeUserRole oUsr.username, 'tester'
|
||||
db.removeUserRole oUsr.username, 'tester'
|
||||
db.storeUser oUser
|
||||
db.storeUserRole oUser.username, 'tester'
|
||||
db.removeUserRole oUser.username, 'tester'
|
||||
|
||||
db.getUserRoles oUsr.username, ( err, obj ) =>
|
||||
db.getUserRoles oUser.username, ( err, obj ) ->
|
||||
test.ok 'tester' not in obj,
|
||||
'User role tester not stored!'
|
||||
|
||||
db.getRoleUsers 'tester', ( err, obj ) =>
|
||||
test.ok oUsr.username not in obj,
|
||||
"User #{ oUsr.username } not stored in role tester!"
|
||||
db.getRoleUsers 'tester', ( err, obj ) ->
|
||||
test.ok oUser.username not in obj,
|
||||
"User #{ oUser.username } not stored in role tester!"
|
||||
|
||||
test.done()
|
||||
# store an entry to start with
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ events = require 'events'
|
|||
cp = require 'child_process'
|
||||
qs = require 'querystring'
|
||||
|
||||
|
||||
try
|
||||
data = fs.readFileSync path.resolve( 'testing', 'files', 'testObjects.json' ), 'utf8'
|
||||
try
|
||||
|
|
@ -21,14 +22,13 @@ opts =
|
|||
opts[ 'db-port' ] = 6379
|
||||
db = require path.join '..', 'js-coffee', 'persistence'
|
||||
db opts
|
||||
|
||||
rh = require path.join '..', 'js-coffee', 'request-handler'
|
||||
args =
|
||||
logger: log
|
||||
args[ 'request-service' ] = ( usr, obj, cb ) ->
|
||||
opts[ 'request-service' ] = ( usr, obj, cb ) ->
|
||||
test.ok false, 'testEvent should not cause a service request call'
|
||||
args[ 'shutdown-function' ] = () ->
|
||||
opts[ 'shutdown-function' ] = () ->
|
||||
test.ok false, 'testEvent should not cause a system shutdown'
|
||||
rh args
|
||||
rh opts
|
||||
|
||||
createRequest = ( query, origUrl ) ->
|
||||
req = new events.EventEmitter()
|
||||
|
|
@ -120,17 +120,18 @@ exports.session =
|
|||
postRequestData req, qs.stringify usr # emit the data post event
|
||||
|
||||
exports.events =
|
||||
setUp: ( cb ) =>
|
||||
setUp: ( cb ) ->
|
||||
db.purgeEventQueue()
|
||||
cb()
|
||||
|
||||
testCorrectEvent: ( test ) =>
|
||||
# This test seems to hang sometimes... maybe it's also happening somewhere else...
|
||||
testCorrectEvent: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
oEvt = objects.events.eventOne
|
||||
|
||||
semaphore = 2
|
||||
fPopEvent = () =>
|
||||
fPopEvent = () ->
|
||||
fCb = ( err, obj ) ->
|
||||
oEvt.eventid = obj.eventid # because the event id is generated by the system
|
||||
test.deepEqual obj, oEvt, 'Caught event is not what we expected'
|
||||
|
|
@ -148,14 +149,14 @@ exports.events =
|
|||
postRequestData req, JSON.stringify oEvt # emit the data post event
|
||||
setTimeout fPopEvent, 200 # try to fetch the db entry
|
||||
|
||||
testIncorrectEvent: ( test ) =>
|
||||
testIncorrectEvent: ( test ) ->
|
||||
test.expect 2
|
||||
|
||||
oEvt =
|
||||
data: 'event misses event type property'
|
||||
|
||||
semaphore = 2
|
||||
fPopEvent = () =>
|
||||
fPopEvent = () ->
|
||||
fCb = ( err, obj ) ->
|
||||
test.deepEqual obj, null, 'We caught an event!?'
|
||||
if --semaphore is 0
|
||||
|
|
@ -172,27 +173,27 @@ exports.events =
|
|||
postRequestData req, qs.stringify oEvt # emit the data post event
|
||||
setTimeout fPopEvent, 200 # try to fetch the db entry
|
||||
|
||||
exports.testLoginOrPage = ( test ) =>
|
||||
exports.testLoginOrPage = ( test ) ->
|
||||
test.expect 3
|
||||
|
||||
req = createRequest()
|
||||
req.query =
|
||||
page: 'forge_event'
|
||||
resp = createResponse ( code, msg ) =>
|
||||
resp = createResponse ( code, msg ) ->
|
||||
|
||||
# Ensure we have to login first
|
||||
test.ok msg.indexOf( 'document.title = \'Login\'' ) > 0, 'Didn\'t get login page?'
|
||||
req = createLoggedInRequest()
|
||||
req.query =
|
||||
page: 'forge_event'
|
||||
resp = createResponse ( code, msg ) =>
|
||||
resp = createResponse ( code, msg ) ->
|
||||
|
||||
# After being logged in we should get the expected page
|
||||
test.ok msg.indexOf( 'document.title = \'Event Forge!\'' ) > 0, 'Didn\' get forge page?'
|
||||
req = createLoggedInRequest()
|
||||
req.query =
|
||||
page: 'wrongpage'
|
||||
resp = createResponse ( code, msg ) =>
|
||||
resp = createResponse ( code, msg ) ->
|
||||
|
||||
# A wrong page request should give back an error page
|
||||
test.ok msg.indexOf( 'document.title = \'Error!\'' ) > 0, 'Didn\' get forge page?'
|
||||
|
|
@ -203,17 +204,17 @@ exports.testLoginOrPage = ( test ) =>
|
|||
rh.handleForge req, resp # set the handler to listening
|
||||
|
||||
|
||||
exports.testUserCommandsNoLogin = ( test ) =>
|
||||
exports.testUserCommandsNoLogin = ( test ) ->
|
||||
test.expect 1
|
||||
|
||||
req = createRequest()
|
||||
resp = createResponse ( code, msg ) =>
|
||||
resp = createResponse ( code, msg ) ->
|
||||
test.strictEqual code, 401, 'Login did not fail?'
|
||||
test.done()
|
||||
rh.handleUserCommand req, resp # set the handler to listening
|
||||
|
||||
|
||||
exports.testUserCommands = ( test ) =>
|
||||
exports.testUserCommands = ( test ) ->
|
||||
test.expect 3
|
||||
|
||||
oReqData =
|
||||
|
|
@ -237,7 +238,7 @@ exports.testUserCommands = ( test ) =>
|
|||
rh args
|
||||
|
||||
req = createLoggedInRequest()
|
||||
resp = createResponse ( code, msg ) =>
|
||||
resp = createResponse ( code, msg ) ->
|
||||
test.strictEqual code, 200, 'Service wasn\'t happy with our request'
|
||||
test.deepEqual msg, oRespData, 'Service didn\'t return expected'
|
||||
test.done()
|
||||
|
|
|
|||
|
|
@ -2,17 +2,10 @@
|
|||
cp = require 'child_process'
|
||||
path = require 'path'
|
||||
|
||||
# exports.setUp = ( cb ) =>
|
||||
# cb()
|
||||
|
||||
# exports.tearDown = ( cb ) =>
|
||||
# @engine.send('die')
|
||||
# cb()
|
||||
|
||||
# TODO test http shutdown command
|
||||
# TODO test wrong/invalid config file
|
||||
|
||||
exports.testShutDown = ( test ) =>
|
||||
exports.testShutDown = ( test ) ->
|
||||
test.expect 1
|
||||
|
||||
isRunning = true
|
||||
|
|
@ -35,11 +28,11 @@ exports.testShutDown = ( test ) =>
|
|||
if isRunning
|
||||
test.ok false, '"testShutDown" Engine didn\'t shut down!'
|
||||
engine.kill()
|
||||
test.done()
|
||||
setTimeout test.done, 100
|
||||
|
||||
setTimeout fWaitForStartup, 1000
|
||||
|
||||
exports.testKill = ( test ) =>
|
||||
exports.testKill = ( test ) ->
|
||||
test.expect 1
|
||||
|
||||
pth = path.resolve 'js-coffee', 'webapi-eca'
|
||||
|
|
@ -62,6 +55,9 @@ exports.testHttpPortAlreadyUsed = ( test ) =>
|
|||
test.expect 1
|
||||
isRunning = true
|
||||
pth = path.resolve 'js-coffee', 'webapi-eca'
|
||||
|
||||
# Strange! why can't we make these variables local without
|
||||
# the tests failing in one of the next tests...
|
||||
@engine_one = cp.fork pth, [ '-n', '-w', '8642' ] # [ '-i' , 'warn' ]
|
||||
@engine_one.on 'error', ( err ) ->
|
||||
console.log err
|
||||
|
|
@ -89,7 +85,7 @@ exports.testHttpPortAlreadyUsed = ( test ) =>
|
|||
|
||||
setTimeout fWaitForFirstStartup, 1000
|
||||
|
||||
exports.testHttpPortInvalid = ( test ) =>
|
||||
exports.testHttpPortInvalid = ( test ) ->
|
||||
test.expect 1
|
||||
|
||||
isRunning = true
|
||||
|
|
@ -103,7 +99,7 @@ exports.testHttpPortInvalid = ( test ) =>
|
|||
console.log err
|
||||
|
||||
# Garbage collect eventually still running process
|
||||
fWaitForDeath = () =>
|
||||
fWaitForDeath = () ->
|
||||
if isRunning
|
||||
test.ok false, '"testHttpPortInvalid" Engine didn\'t shut down!'
|
||||
test.done()
|
||||
|
|
@ -111,7 +107,7 @@ exports.testHttpPortInvalid = ( test ) =>
|
|||
|
||||
setTimeout fWaitForDeath, 1000
|
||||
|
||||
exports.testDbPortInvalid = ( test ) =>
|
||||
exports.testDbPortInvalid = ( test ) ->
|
||||
test.expect 1
|
||||
|
||||
isRunning = true
|
||||
|
|
@ -125,7 +121,7 @@ exports.testDbPortInvalid = ( test ) =>
|
|||
test.done()
|
||||
|
||||
# Garbage collect eventually still running process
|
||||
fWaitForDeath = () =>
|
||||
fWaitForDeath = () ->
|
||||
engine.kill()
|
||||
if isRunning
|
||||
test.ok false, '"testHttpPortInvalid" Engine didn\'t shut down!'
|
||||
|
|
|
|||
|
|
@ -182,10 +182,6 @@ fOnLoad = () ->
|
|||
conditions: {} #TODO Add conditions!
|
||||
actions: acts
|
||||
action_params: ap
|
||||
# event_params: JSON.stringify ep
|
||||
# conditions: JSON.stringify {} #TODO Add conditions!
|
||||
# actions: JSON.stringify acts
|
||||
# action_params: JSON.stringify ap
|
||||
obj.payload = JSON.stringify obj.payload
|
||||
$.post( '/usercommand', obj )
|
||||
.done ( data ) ->
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 1.7.1
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var fOnLoad;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 1.7.1
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var fOnLoad;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 1.7.1
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var fOnLoad;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 1.7.1
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var fOnLoad;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 1.7.1
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var fOnLoad;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 1.7.1
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var fOnLoad;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 1.7.1
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function() {
|
||||
var fOnLoad;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue