/* * node-rdkafka - Node.js wrapper for RdKafka C/C++ library * * Copyright (c) 2016 Blizzard Entertainment * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE.txt file for details. */ var addon = require('bindings')('node-librdkafka'); var t = require('assert'); var client; var defaultConfig = { 'client.id': 'kafka-mocha', 'group.id': 'kafka-mocha-grp', 'metadata.broker.list': 'localhost:9092' }; module.exports = { 'Consumer': { 'afterEach': function() { client = null; }, 'cannot be set without a topic config': function() { t.throws(function() { client = new addon.KafkaConsumer(defaultConfig); }); }, 'can be given a topic config': function() { client = new addon.KafkaConsumer(defaultConfig, {}); }, 'throws us an error if we provide an invalid configuration value': function() { t.throws(function() { client = new addon.KafkaConsumer({ 'foo': 'bar' }); }, 'should throw because the key is invalid1'); }, 'throws us an error if topic config is given something invalid': function() { t.throws(function() { client = new addon.KafkaConsumer(defaultConfig, { 'foo': 'bar' }); }); }, 'ignores function arguments for global configuration': function() { client = new addon.KafkaConsumer({ 'event_cb': function() {}, 'group.id': 'mocha-test' }, {}); t.ok(client); }, 'ignores function arguments for topic configuration': function() { client = new addon.KafkaConsumer(defaultConfig, { 'partitioner_cb': function() {} }); } }, 'KafkaConsumer client': { 'beforeEach': function() { client = new addon.KafkaConsumer(defaultConfig, {}); }, 'afterEach': function() { client = null; }, 'is an object': function() { t.equal(typeof(client), 'object'); }, 'requires configuration': function() { t.throws(function() { return new addon.KafkaConsumer(); }); }, 'has necessary methods from superclass': function() { var methods = ['connect', 'disconnect', 'configureCallbacks', 'getMetadata']; methods.forEach(function(m) { t.equal(typeof(client[m]), 'function', 'Client is missing ' + m + ' method'); }); }, 'has necessary bindings for librdkafka 1:1 binding': function() { var methods = ['assign', 'unassign', 'subscribe']; methods.forEach(function(m) { t.equal(typeof(client[m]), 'function', 'Client is missing ' + m + ' method'); }); } }, };