Skip to content

Instantly share code, notes, and snippets.

@dwaligora
Created November 6, 2014 20:26
Show Gist options
  • Save dwaligora/15be8a84493f34c6693d to your computer and use it in GitHub Desktop.
Save dwaligora/15be8a84493f34c6693d to your computer and use it in GitHub Desktop.
a
'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();
});
});
});
});
/*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();
});
});
'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