Created
November 6, 2014 20:26
-
-
Save dwaligora/15be8a84493f34c6693d to your computer and use it in GitHub Desktop.
a
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var expect = require('chai').expect, | |
server = null, | |
request = require('request'), | |
config = require('../../../config.json'), | |
serverStub = require('../../stubs/http/server'), | |
brainHttpAgent = require('../../../app/http/brain_agent'); | |
function requestOpts(address, path, mth) { | |
return { | |
host: '127.0.0.1', | |
port: address.port, | |
path: path, | |
method: mth | |
}; | |
} | |
describe('BrainHTTPAgent', function () { | |
before(function() { | |
server = serverStub.create(brainHttpAgent, 1025); | |
}); | |
after(function() { | |
server.close(); | |
}); | |
describe('/POST api/jobs', function () { | |
it('should return 200', function (done) { | |
request({ | |
method: 'POST', | |
uri: 'http://0.0.0.1:1025/api/jobs', | |
json: {} | |
}, function(error, response, body) { | |
if (error || 200 !== response.statusCode) { | |
return; | |
} | |
return done(); | |
}); | |
}); | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*jshint node: true*/ | |
'use strict'; | |
var app = module.exports = require('express')(), | |
bodyParser = require('body-parser'), | |
STATUS = require('../statuses.json'), | |
config = app.config = require('../../config.json'), | |
hashids = require('../services/hashids'), | |
logger = require('../services/logger'), | |
brainResult = require('../services/brain_result'), | |
jobManager = require('../managers/job'); | |
/** | |
* Accept new job. | |
* | |
* @param {Request} req Request | |
* @param {Response} res Response | |
*/ | |
app.post('/api/jobs', | |
bodyParser.json(), | |
function (req, res) { | |
var datasetUrl = req.param('url'), | |
fileId = req.param('file_id'); | |
logger.info('Received new job request'); | |
// trained dataset url is required | |
if (!datasetUrl) { | |
logger.error('New job request did not contain trained dataset URL.'); | |
res.writeHead(400, {'Content-Type': 'application/json'}); | |
res.write(JSON.stringify({ | |
error: 'Trained dataset file URL is required!' | |
})); | |
res.end(); | |
return; | |
} | |
// add new job to mysql so that Brain can trigger it when ready | |
jobManager.create({ | |
dataset_url: datasetUrl, | |
uid: fileId, | |
status: STATUS.NEW, | |
updated_at: parseInt(Date.now() / 1000, 10), | |
created_at: parseInt(Date.now() / 1000, 10) | |
}).then(function (insertId) { | |
logger.info('Added new job for dataset %s with id %s (uniqueId: "%s")', datasetUrl, insertId, fileId); | |
// generate result files urls | |
var response = brainResult.generateResultsUrls(fileId); | |
response["url"] = datasetUrl; | |
// encode the table row ID | |
response["job_id"] = hashids.encode(insertId[0]); | |
// respond with some meta data | |
res.writeHead(200, {'Content-Type': 'application/json'}); | |
res.write(JSON.stringify(response)); | |
res.end(); | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
module.exports = { | |
create: function(app, port) { | |
return createServer(app, port); | |
} | |
}; | |
function createServer(app, port) { | |
var server = require('http').createServer(app); | |
return server.listen(port || 1025, function(error) { | |
if (error) { | |
return error; | |
} | |
console.log('Test HTTP server listening on %s:%s', server.address().address, server.address().port); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment