UNPKG

decentralized-internet

Version:

An NPM library of programs to create decentralized web and distributed computing projects

1 lines 4.2 kB
var request=require("request"),fs=require("fs"),Promise=require("bluebird"),path=require("path"),_=require("underscore"),qs=require("querystring");const Joi=require("@hapi/joi"),Lab=require("lab"),lab=exports.lab=Lab.script();var clusterpost=require("clusterpost-lib"),clustermodel=require("clusterpost-model");const getConfigFile=function(e,t){try{return require(t+"/conf.my."+e+".json")}catch(r){return require(t+"/conf."+e+".json")}};var env=process.env.NODE_ENV;if(!env)throw"Please set NODE_ENV variable.";var conf=getConfigFile(env,"./"),agentOptions={};conf.tls&&conf.tls.cert&&(agentOptions.ca=fs.readFileSync(conf.tls.cert)),clusterpost.setClusterPostServer(conf.uri),clusterpost.setAgentOptions(agentOptions);var jobids,token,inputs=["./data/gravitational-waves-simulation.jpg"],updateJobStatusRec=function(e,t){var r=Joi.object().keys({jobid:Joi.number(),status:Joi.string().valid(t),downloadstatus:Joi.array().items(Joi.object().keys({path:Joi.string(),status:Joi.boolean().valid(!0)})),uploadstatus:Joi.array().items(Joi.object())});return new Promise(function(e,t){setTimeout(e,65e3)}).then(function(){return clusterpost.updateJobStatus(e).then(function(e){return Joi.assert(e,r),e}).catch(function(t){return updateJobStatusRec(e)})})},job={executable:"cksum",parameters:[{flag:"",name:"gravitational-waves-simulation.jpg"}],inputs:[{name:"gravitational-waves-simulation.jpg"}],outputs:[{type:"directory",name:"./"},{type:"tar.gz",name:"./"},{type:"file",name:"stdout.out"},{type:"file",name:"stderr.err"}],type:"job",userEmail:"algiedi85@gmail.com"},user={email:"algiedi85@gmail.com",name:"Alpha Capricorni",password:"Some808Password!"},user1={email:"algiedi85_1@gmail.com",name:"Alpha Capricorni",password:"Some808Password!"},joiokres=Joi.object().keys({ok:Joi.boolean().valid(!0),id:Joi.string(),rev:Joi.string()});lab.experiment("Test clusterpost",function(){lab.test("returns true when new users are created.",function(){return clusterpost.createUser(user).then(function(e){return Joi.assert(e.token,Joi.string().required()),clusterpost.createUser(user1)}).then(function(e){Joi.assert(e.token,Joi.string().required())})}),lab.test("returns true when user1 is logged in.",function(){return clusterpost.userLogin({email:user.email,password:user.password}).then(function(e){Joi.assert(e.token,Joi.string().required())})}),lab.test('returns true when the scope "clusterpost" is added manually to both users, note that the db used for this is clusterjobstest',function(){return new Promise(function(e,t){var r={uri:"http://localhost:5984/clusterjobstest/_design/user/_view/info?"+qs.stringify({key:'"algiedi85@gmail.com"',include_docs:!0}),method:"GET"};request(r,function(r,s,o){var i=_.pluck(JSON.parse(o).rows,"doc")[0];i.scope.push("clusterpost");var n={uri:"http://localhost:5984/clusterjobstest/_design/user/_view/info?"+qs.stringify({key:'"algiedi85_1@gmail.com"',include_docs:!0}),method:"GET"};request(n,function(r,s,o){var n=_.pluck(JSON.parse(o).rows,"doc")[0];n.scope.push("clusterpost"),request({uri:"http://localhost:5984/clusterjobstest/_bulk_docs",method:"POST",json:{docs:[i,n]}},function(r,s,o){r?t(r):o.error?t(o.error):e(o)})})})})}),lab.test("returns true when document is created",function(){var e=_.clone(job);return e.name="jobEmailShared",e.shared=[{userEmail:user1.email}],clusterpost.getExecutionServers().then(function(t){return e.executionserver=t[0].name,j1.executionserver=t[0].name,Promise.map([e,j1],clusterpost.createDocument)}).then(function(e){Joi.assert(e,Joi.array().items(joiokres)),jobids=_.pluck(e,"id"),console.info("JOBID:",jobids)})}),lab.test("returns true if the document is deleted",function(){return Promise.map(jobids,clusterpost.deleteJob).then(function(e){Joi.assert(e,Joi.array().items(joiokres))})}),lab.test("returns true when valid user deletes itself.",function(){return clusterpost.deleteUser().then(function(e){return Joi.assert(e,Joi.object().keys({ok:Joi.boolean(),id:Joi.string(),rev:Joi.string()})),clusterpost.userLogin({email:user1.email,password:user1.password}).then(function(e){return clusterpost.deleteUser()}).then(function(e){Joi.assert(e,Joi.object().keys({ok:Joi.boolean(),id:Joi.string(),rev:Joi.string()}))})})})});