test('sets the authenticatedAt timer', async () => { const error = new Error('not connected') const timer = process.hrtime() broker.authenticatedAt = timer broker.connection.connect = jest.fn(() => { throw error }) expect(broker.authenticatedAt).toEqual(timer) await expect(broker.connect()).rejects.toEqual(error) expect(broker.authenticatedAt).toBe(null) })
beforeEach(() => { connection = { authenticate: jest.fn(), sasl: { username: 'user', password: 'pencil' }, } saslAuthenticate = ({ request, response, authExpectResponse }) => connection.authenticate({ request, response, authExpectResponse }) logger = { debug: jest.fn() } logger.namespace = () => logger })
jest.mock('../retry', () => { const spy = jest.fn().mockImplementation(jest.requireActual('../retry')) retrySpy = spy return spy })
test('emits connection events', async () => { producer = createProducer({ cluster: createCluster(), logger: newLogger() }) const connectListener = jest.fn().mockName('connect') const disconnectListener = jest.fn().mockName('disconnect') producer.on(producer.events.CONNECT, connectListener) producer.on(producer.events.DISCONNECT, disconnectListener) await producer.connect() expect(connectListener).toHaveBeenCalled() await producer.disconnect() expect(disconnectListener).toHaveBeenCalled() })
it('calls onCrash for any other errors', async () => { const unknownError = new KafkaJSProtocolError(createErrorFromCode(UNKNOWN)) consumerGroup.join .mockImplementationOnce(() => { throw unknownError }) .mockImplementationOnce(() => true) runner.scheduleFetch = jest.fn() await runner.start() // scheduleFetch in runner#start is async, and we never wait for it, // so we have to wait a bit to give the callback a chance of being executed await sleep(100) expect(runner.scheduleFetch).not.toHaveBeenCalled() expect(onCrash).toHaveBeenCalledWith(unknownError) })
jest.fn(() => http.__mockServer)
it('retries on LEADER_NOT_AVAILABLE errors', async () => { const leaderNotAvailableError = new KafkaJSProtocolError({ message: 'LEADER_NOT_AVAILABLE', type: 'LEADER_NOT_AVAILABLE', code: 5, }) brokerPool.findConnectedBroker = jest.fn(() => brokerPool.seedBroker) jest.spyOn(brokerPool.seedBroker, 'metadata').mockImplementationOnce(() => { throw leaderNotAvailableError }) expect(brokerPool.metadata).toEqual(null) await brokerPool.refreshMetadata([topicName]) expect(brokerPool.metadata).not.toEqual(null) })
beforeEach(() => { broker = { initProducerId: jest.fn().mockReturnValue(mockInitProducerIdResponse), addPartitionsToTxn: jest.fn(), endTxn: jest.fn(), addOffsetsToTxn: jest.fn(), txnOffsetCommit: jest.fn(), } cluster = { refreshMetadataIfNecessary: jest.fn(), findGroupCoordinator: jest.fn().mockReturnValue(broker), findControllerBroker: jest.fn().mockReturnValue(broker), } })
jest.fn((cb) => cb && cb(null))
jest.mock('../../utils/shuffle', () => jest.fn())
it('emits connection events', async () => { const connectListener = jest.fn().mockName('connect') const disconnectListener = jest.fn().mockName('disconnect') const stopListener = jest.fn().mockName('stop') consumer = createTestConsumer() consumer.on(consumer.events.CONNECT, connectListener) consumer.on(consumer.events.DISCONNECT, disconnectListener) consumer.on(consumer.events.STOP, stopListener) await consumer.connect() expect(connectListener).toHaveBeenCalled() await consumer.run() await consumer.disconnect() expect(stopListener).toHaveBeenCalled() expect(disconnectListener).toHaveBeenCalled() })
it('emits connection events', async () => { const admin = createAdmin({ cluster: createCluster(), logger: newLogger(), }) const connectListener = jest.fn().mockName('connect') const disconnectListener = jest.fn().mockName('disconnect') admin.on(admin.events.CONNECT, connectListener) admin.on(admin.events.DISCONNECT, disconnectListener) await admin.connect() expect(connectListener).toHaveBeenCalled() await admin.disconnect() expect(disconnectListener).toHaveBeenCalled() })
jest.fn((cb) => cb && cb(null))