test('throws an error trying to create partition if topic does not exists', async () => { admin = createAdmin({ cluster: createCluster(), logger: newLogger() }) await admin.connect() await expect( admin.createPartitions({ topicPartitions: [{ topic: topicName + 'x', count: 2 }], }) ).rejects.toHaveProperty('message', 'This server does not host this topic-partition') })
describe('Protocol > Requests > FindCoordinator > v0', () => { test('request', async () => { const groupId = 'test-topic' const { buffer } = await RequestV0Protocol({ groupId }).encode() expect(buffer).toEqual(Buffer.from(require('../fixtures/v0_request.json'))) }) })
test('describe all configs', async () => { await createTopic({ topic: topicName }) admin = createAdmin({ cluster: createCluster(), logger: newLogger() }) await admin.connect() const response = await admin.describeConfigs({ resources: [{ type: RESOURCE_TYPES.TOPIC, name: topicName }], }) expect(getConfigEntries(response).length).toBeGreaterThan(1) })
test('on throws an error when provided with an invalid event name', () => { consumer = createTestConsumer() expect(() => consumer.on('NON_EXISTENT_EVENT', () => {})).toThrow( /Event name should be one of consumer.events./ ) })
describe('Protocol > Requests > LeaveGroup > v1', () => { test('response', async () => { const data = await decode(Buffer.from(require('../fixtures/v1_response.json'))) expect(data).toEqual({ throttleTime: 0, errorCode: 0 }) await expect(parse(data)).resolves.toBeTruthy() }) })
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() })
test(`authenticate with SASL ${e.name} if configured`, async () => { broker = new Broker({ connection: createConnection(e.opts()), logger: newLogger(), }) expect(broker.isConnected()).toEqual(false) await broker.connect() expect(broker.isConnected()).toEqual(true) })
test('it should allow sending an empty list of messages', async () => { const cluster = createCluster({ createPartitioner: createModPartitioner, }) await createTopic({ topic: topicName }) producer = createProducer({ cluster, logger: newLogger(), idempotent }) await producer.connect() await expect(producer.send({ acks, topic: topicName, messages: [] })).toResolve() })
test('throws an error if there are blank resource names', async () => { admin = createAdmin({ cluster: createCluster(), logger: newLogger() }) const resources = [ { type: RESOURCE_TYPES.TOPIC, name: 'abc' }, { type: RESOURCE_TYPES.TOPIC, name: null }, ] await expect(admin.describeConfigs({ resources })).rejects.toHaveProperty( 'message', 'Invalid resource name null: {"type":2,"name":null}' ) })
test('on throws an error when provided with an invalid event name', () => { const admin = createAdmin({ cluster: createCluster(), logger: newLogger(), }) expect(() => admin.on('NON_EXISTENT_EVENT', () => {})).toThrow( /Event name should be one of admin.events./ ) })
test('create the new topics and return true', async () => { admin = createAdmin({ cluster: createCluster(), logger: newLogger() }) await admin.connect() await expect( admin.createTopics({ waitForLeaders: false, topics: [{ topic: topicName }], }) ).resolves.toEqual(true) })
test('throws an error if there are invalid resource types', async () => { admin = createAdmin({ cluster: createCluster(), logger: newLogger() }) const resources = [{ type: RESOURCE_TYPES.TOPIC }, { type: 1999 }] await expect(admin.describeConfigs({ resources })).rejects.toHaveProperty( 'message', 'Invalid resource type 1999: {"type":1999}' ) })
test('throws an error if there are invalid resource names', async () => { admin = createAdmin({ cluster: createCluster(), logger: newLogger() }) const resources = [ { type: RESOURCE_TYPES.TOPIC, name: 'abc' }, { type: RESOURCE_TYPES.TOPIC, name: 123 }, ] await expect(admin.alterConfigs({ resources })).rejects.toHaveProperty( 'message', 'Invalid resource name 123: {"type":2,"name":123}' ) })
describe('Protocol > Requests > OffsetCommit > v0', () => { test('response', async () => { const data = await decode(Buffer.from(require('../fixtures/v0_response.json'))) expect(data).toEqual({ responses: [ { topic: 'test-topic-eb1a285cda2e9f9a1021', partitions: [{ partition: 0, errorCode: 0 }] }, ], }) await expect(parse(data)).resolves.toBeTruthy() }) })
test('throws an error if there are invalid resource configEntries', async () => { admin = createAdmin({ cluster: createCluster(), logger: newLogger() }) const resources = [ { type: RESOURCE_TYPES.TOPIC, name: 'abc', configEntries: [] }, { type: RESOURCE_TYPES.TOPIC, name: 'def', configEntries: 123 }, ] await expect(admin.alterConfigs({ resources })).rejects.toHaveProperty( 'message', 'Invalid resource configEntries 123: {"type":2,"name":"def","configEntries":123}' ) })