@iopipe/iopipe
Version:
The IOpipe agent and plugins
90 lines (76 loc) • 2.29 kB
JavaScript
import _ from 'lodash';
import mockContext from 'aws-lambda-mock-context';
import iopipe from '.';
beforeEach(() => {
delete process.env.IOPIPE_TOKEN;
});
test('lib warns correctly for getContext methods', () => {
const { mark: { start, end }, metric, label } = iopipe;
const messages = [
start('test-mark'),
end('try-mark'),
metric('test-metric-key', 'test-metric-value'),
label('great-label')
];
expect(messages).toMatchSnapshot();
});
describe('iopipe kitchen sink', () => {
it('has trace, event info and profiler plugins pre-bundled', done => {
let invocation;
iopipe({
clientId: 'foobar',
plugins: [inv => (invocation = inv) && { meta: { name: 'wow' } }]
})((event, context) => {
try {
const { config } = context.iopipe;
expect(invocation.plugins).toHaveLength(4);
expect(invocation.plugins.map(p => p.meta.name)).toEqual([
'wow',
'@iopipe/trace',
'@iopipe/event-info',
'@iopipe/profiler'
]);
expect(_.isFunction(config.plugins[0])).toBe(true);
expect(_.isFunction(context.iopipe.mark.start)).toBe(true);
done();
} catch (err) {
console.log(err); // eslint-disable-line
}
})({}, {});
});
});
test('lib has mark, metric, label methods', async () => {
const ctx = mockContext({ functionName: 'mark' });
let invocation;
iopipe({ token: 'trace', plugins: [inv => (invocation = inv)] })((e, c) => {
const { mark: { start, end }, metric, label } = iopipe;
start('trace-test');
metric('foobar', 100);
label('animals');
label('cats');
setTimeout(() => {
end('trace-test');
c.succeed(200);
}, 101);
})({}, ctx);
const val = await ctx.Promise;
expect(val).toBe(200);
const {
performanceEntries,
labels,
custom_metrics: metrics
} = invocation.report.report;
expect(_.map(performanceEntries, 'name')).toEqual([
'start:trace-test',
'measure:trace-test',
'end:trace-test'
]);
expect(performanceEntries[1].duration).toBeGreaterThan(0);
expect(metrics).toEqual([{ name: 'foobar', n: 100, s: undefined }]);
expect(labels).toEqual([
'@iopipe/metrics',
'animals',
'cats',
'@iopipe/plugin-trace'
]);
});