UNPKG

lambda-stash

Version:

AWS Lambda script for shipping data from S3 or other cloud data sources to data stores, like Elasticsearch

180 lines (171 loc) 4.94 kB
/* global beforeEach, describe, it */ var assert = require("assert"); var handler; describe('handler/shipElasticsearch.js', function() { describe('#process()', function() { beforeEach(function() { // Clear the module cache to reset overridden functions. delete require.cache[require.resolve('../handlers/shipElasticsearch')]; handler = require('../handlers/shipElasticsearch'); }); it('should split data by the maxChunkSize', function(done) { var passVal1 = false; var passVal2 = false; var es = require('elasticsearch'); es.Client = function(config) { assert.strictEqual(config.host, 'http://mock', 'host param provided'); return { bulk: function(params, callback) { if (params.body[1].value === '1') { passVal1 = true; } else if (params.body[1].value === '2') { passVal2 = true; } callback(null, {errors: false}); } }; }; var config = { elasticsearch: { host: 'http://mock', index: 'index', type: 'type', maxChunkSize: 1 }, data: [ { value: '1' }, { value: '2' } ], test: 'test' }; handler.process(config) .then(function(result) { assert.ok(passVal1, 'chunk 1 shipped'); assert.ok(passVal2, 'chunk 2 shipped'); assert.strictEqual(result.test, 'test', 'config data returned'); done(); }); }); it('should accept configuration for AWS Elasticsearch', function(done) { var config = { elasticsearch: { index: 'index', type: 'type', useAWS: true, region: 'us-east-1', accessKey: 'access_key', secretKey: 'shh_secret', requestTimeout: 90000 }, data: [ { value: '1' }, { value: '2' } ], test: 'test' }; var es = require('elasticsearch'); es.Client = function(config) { assert.strictEqual(config.amazonES.region, 'us-east-1', 'region param provided'); assert.strictEqual(config.amazonES.accessKey, 'access_key', 'key param provided'); assert.strictEqual(config.amazonES.secretKey, 'shh_secret', 'secret param provided'); assert.strictEqual(config.requestTimeout, 90000, 'request timeout param provided'); done(); }; handler.process(config); }); it('should allow using AWS environment credentials', function(done) { var config = { elasticsearch: { index: 'index', type: 'type', useAWS: true, region: 'us-east-1' }, data: [ { value: '1' } ], test: 'test' }; var es = require('elasticsearch'); es.Client = function(config) { assert.strictEqual(config.amazonES.credentials.envPrefix, 'AWS', 'environment credentials provided'); assert.strictEqual(config.amazonES.region, 'us-east-1', 'region param provided'); done(); }; handler.process(config); }); it('should fail if Elasticsearch bulk results have an error', function(done) { var es = require('elasticsearch'); es.Client = function() { return { bulk: function(params, callback) { callback(null, {errors: true}); } }; }; var config = { elasticsearch: { index: 'index', type: 'type' }, data: [ { value: '1' } ] }; handler.process(config) .catch(function(err) { assert.ok(err, 'error is thrown'); done(); }); }); it('should fail if Elasticsearch bulk post throws an error', function(done) { var es = require('elasticsearch'); es.Client = function() { return { bulk: function(params, callback) { callback(new Error('test error')); } }; }; var config = { elasticsearch: { index: 'index', type: 'type' }, data: [ { value: '1' } ] }; handler.process(config) .catch(function(err) { assert.ok(err, 'error is thrown'); done(); }); }); }); });