completed testHarness and added testHarness test.
This commit is contained in:
parent
0189a44ee3
commit
4063264542
4 changed files with 180 additions and 81 deletions
|
@ -2,107 +2,165 @@ var ipc = require('../node-ipc'),
|
||||||
cmd = require('node-cmd'),
|
cmd = require('node-cmd'),
|
||||||
fs = require('fs'),
|
fs = require('fs'),
|
||||||
events= require('event-pubsub')(),
|
events= require('event-pubsub')(),
|
||||||
tests = {};
|
tests = {},
|
||||||
|
testCount=0,
|
||||||
|
fails=[],
|
||||||
|
passes=[];
|
||||||
|
|
||||||
ipc.config.id = 'testHarness';
|
ipc.config.id = 'testHarness';
|
||||||
|
|
||||||
events.on(
|
|
||||||
'startFailed',
|
|
||||||
function(test){
|
|
||||||
ipc.log(test.warn," failed to start ".error)
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
ipc.serve(
|
ipc.serve(
|
||||||
function(){
|
function(){
|
||||||
ipc.server.on(
|
|
||||||
'pass',
|
|
||||||
function(data,socket){
|
|
||||||
ipc.log(socket.id.good);
|
|
||||||
socket
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
ipc.server.on(
|
|
||||||
'fail',
|
|
||||||
function(err,socket){
|
|
||||||
ipc.log(socket.id.warn,err);
|
|
||||||
socket
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
ipc.server.on(
|
|
||||||
'start',
|
|
||||||
function(data,socket){
|
|
||||||
ipc.log(socket.id.notice, 'started'.debug);
|
|
||||||
events.trigger(
|
|
||||||
'started-test-'+socket.id,
|
|
||||||
socket.id
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
ipc.log('TestHarness started.'.debug, 'Loading Tests.'.notice);
|
|
||||||
|
|
||||||
fs.readdir(
|
|
||||||
'tests',
|
|
||||||
function(err,tests){
|
|
||||||
if(err){
|
|
||||||
ipc.log('You must execute the testHarness from the testHarness directory')
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for(var i =0; i<tests.length; i++){
|
|
||||||
tests[tests[i]]={
|
|
||||||
started : false,
|
|
||||||
pass : false,
|
|
||||||
fail : true,
|
|
||||||
delay : setTimeout(
|
|
||||||
(
|
|
||||||
function(test){
|
|
||||||
return function(){
|
|
||||||
events.trigger(
|
|
||||||
'startFailed',
|
|
||||||
test
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)(tests[i]),
|
|
||||||
1000
|
|
||||||
)
|
|
||||||
};
|
|
||||||
runTests(tests[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
ipc.server.define.listen['pass']='This event should be called when a test has passed';
|
ipc.server.on(
|
||||||
ipc.server.define.listen['fail']='This event should be called when a test has failed, it accepts an argument for error conditions';
|
'pass',
|
||||||
|
function(test,socket){
|
||||||
|
ipc.log(socket.id.good,'passed',test.data);
|
||||||
|
tests[socket.id].pass.push(test);
|
||||||
|
passes.push(test);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
ipc.server.on(
|
||||||
|
'fail',
|
||||||
|
function(test,socket){
|
||||||
|
ipc.log(socket.id.warn,'failed',test.data);
|
||||||
|
tests[socket.id].fail.push(test);
|
||||||
|
fails.push(test);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
ipc.server.on(
|
||||||
|
'start.test',
|
||||||
|
function(data,socket){
|
||||||
|
|
||||||
|
socket.id=data.id;
|
||||||
|
|
||||||
|
if(!data.id){
|
||||||
|
ipc.log('start.test duration not passed for unknown test, so failing test'.error);
|
||||||
|
socket.destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!data.duration){
|
||||||
|
ipc.log(data.id.notice, 'start.test duration not passed, so failing test'.error);
|
||||||
|
ipc.disconnect(data.id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ipc.log(data.id.notice, 'started'.debug);
|
||||||
|
|
||||||
|
tests[data.id].started=true;
|
||||||
|
clearTimeout(
|
||||||
|
tests[data.id].delay
|
||||||
|
);
|
||||||
|
|
||||||
|
tests[data.id].delay=setTimeout(
|
||||||
|
(
|
||||||
|
function(test){
|
||||||
|
return function(){
|
||||||
|
ipc.log(test.warn," failed to complete ".error);
|
||||||
|
tests[test].fail.push('end.test');
|
||||||
|
fails.push(test+' >> end.test');
|
||||||
|
testCount--;
|
||||||
|
tests[socket.id].delay=null;
|
||||||
|
checkComplete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)(data.id),
|
||||||
|
data.duration
|
||||||
|
)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
ipc.server.on(
|
||||||
|
'end.test',
|
||||||
|
function(data,socket){
|
||||||
|
ipc.log(socket.id.notice, 'completed'.debug);
|
||||||
|
|
||||||
|
clearTimeout(
|
||||||
|
tests[socket.id].delay
|
||||||
|
);
|
||||||
|
|
||||||
|
tests[socket.id].delay=null;
|
||||||
|
|
||||||
|
testCount--;
|
||||||
|
checkComplete();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
ipc.log('TestHarness started.'.debug, 'Loading Tests.'.notice);
|
||||||
|
|
||||||
|
ipc.server.define.listen['start.test']='This event should be called when a test is starting. It accepts an object with test details including the test id and duration';
|
||||||
|
ipc.server.define.listen['end.test']='This event should be called when a test is completed.';
|
||||||
|
ipc.server.define.listen['pass']='This event should be called when a test has passed, it accepts the name of the test portion which passed';
|
||||||
|
ipc.server.define.listen['fail']='This event should be called when a test has failed, it accepts the name of the test portion which failed';
|
||||||
|
|
||||||
ipc.server.start();
|
ipc.server.start();
|
||||||
|
|
||||||
|
fs.readdir(
|
||||||
|
'tests',
|
||||||
|
function(err,testFolders){
|
||||||
|
if(err){
|
||||||
|
ipc.log(err,'You must execute the testHarness from the testHarness directory'.error)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
testCount=testFolders.length;
|
||||||
|
|
||||||
|
for(var i =0; i<testFolders.length; i++){
|
||||||
|
tests[testFolders[i]]={
|
||||||
|
started : false,
|
||||||
|
pass : [],
|
||||||
|
fail : [],
|
||||||
|
delay : setTimeout(
|
||||||
|
(
|
||||||
|
function(test){
|
||||||
|
return function(){
|
||||||
|
ipc.log(test.warn," failed to start ".error);
|
||||||
|
tests[test].fail.push('start.test');
|
||||||
|
fails.push(test+' >> start.test');
|
||||||
|
testCount--;
|
||||||
|
checkComplete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)(testFolders[i]),
|
||||||
|
1000
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
runTests(testFolders[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
function runTests(dir){
|
function runTests(dir){
|
||||||
fs.readdir(
|
fs.readdir(
|
||||||
'tests/'+dir,
|
'tests/'+dir,
|
||||||
function(err,tests){
|
function(err,testFiles){
|
||||||
if(err){
|
if(err){
|
||||||
ipc.log('You must execute the testHarness from the testHarness directory')
|
ipc.log(err,'You must execute the testHarness from the testHarness directory'.error)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for(var i =0; i<tests.length; i++){
|
for(var i =0; i<testFiles.length; i++){
|
||||||
events.on(
|
cmd.run(
|
||||||
'started-test-'+tests[i],
|
'node tests/'+dir+'/'+testFiles[i]
|
||||||
function(id){
|
|
||||||
tests[id].started=true;
|
|
||||||
clearTimeout(
|
|
||||||
tests[id].delay
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
cmd.run('node '+tests[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkComplete(){
|
||||||
|
if(testCount)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ipc.log('####################################\n\n RESULTS\n\n####################################\n\n'.rainbow,tests,'\n\n');
|
||||||
|
ipc.log('####################################\n\n PASSES\n\n####################################\n\n'.good,passes.join('\n').good,'\n\n');
|
||||||
|
ipc.log('####################################\n\n FAILS\n\n####################################\n\n'.warn,fails.join('\n').warn,'\n\n');
|
||||||
|
ipc.log('####################################\n\n COUNT\n\n####################################\n\n'.data,(passes.length+' ').good,(fails.length+' ').warn,'\n\n');
|
||||||
|
|
||||||
|
process.exit(0);
|
||||||
|
}
|
41
testHarness/tests/test-harness-test/testHarnessClient.js
Normal file
41
testHarness/tests/test-harness-test/testHarnessClient.js
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
var ipc = require('../../../node-ipc');
|
||||||
|
|
||||||
|
ipc.config.id = __dirname.split('/');
|
||||||
|
ipc.config.id = ipc.config.id[ipc.config.id.length-1]
|
||||||
|
ipc.config.maxRetries=1;
|
||||||
|
|
||||||
|
ipc.connectTo(
|
||||||
|
'testHarness',
|
||||||
|
function(){
|
||||||
|
ipc.of.testHarness.on(
|
||||||
|
'connect',
|
||||||
|
function(){
|
||||||
|
ipc.of.testHarness.emit(
|
||||||
|
'start.test',
|
||||||
|
{
|
||||||
|
id : ipc.config.id,
|
||||||
|
duration: 1000
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ipc.of.testHarness.emit(
|
||||||
|
'pass',
|
||||||
|
'test-harness-pass-test'
|
||||||
|
);
|
||||||
|
ipc.of.testHarness.emit(
|
||||||
|
'fail',
|
||||||
|
'test-harness-fail-test'
|
||||||
|
);
|
||||||
|
setTimeout(
|
||||||
|
function(){
|
||||||
|
//delay exit incase you want to test failure of start.test by modifying event name
|
||||||
|
ipc.of.testHarness.emit(
|
||||||
|
'end.test'
|
||||||
|
);
|
||||||
|
ipc.of.testHarness.disconnect();
|
||||||
|
},
|
||||||
|
1000
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
Loading…
Reference in a new issue