@Test public void shouldThrowOnInitTransactionIfProducerAlreadyInitializedForTransactions() { buildMockProducer(true); producer.initTransactions(); try { producer.initTransactions(); fail("Should have thrown as producer is already initialized"); } catch (IllegalStateException e) { } }
@Test public void shouldCountCommittedTransaction() { buildMockProducer(true); producer.initTransactions(); producer.beginTransaction(); assertThat(producer.commitCount(), equalTo(0L)); producer.commitTransaction(); assertThat(producer.commitCount(), equalTo(1L)); }
@Test public void shouldThrowOnNullConsumerGroupIdWhenSendOffsetsToTransaction() { buildMockProducer(true); producer.initTransactions(); producer.beginTransaction(); try { producer.sendOffsetsToTransaction(Collections.<TopicPartition, OffsetAndMetadata>emptyMap(), null); fail("Should have thrown NullPointerException"); } catch (NullPointerException e) { } }
@Test public void shouldInitTransactions() { buildMockProducer(true); producer.initTransactions(); assertTrue(producer.transactionInitialized()); }
@Test public void shouldThrowOnSendOffsetsToTransactionTransactionIfNoTransactionGotStarted() { buildMockProducer(true); producer.initTransactions(); try { producer.sendOffsetsToTransaction(null, null); fail("Should have thrown as producer has no open transaction"); } catch (IllegalStateException e) { } }
@Test public void shouldThrowOnCommitTransactionIfNoTransactionGotStarted() { buildMockProducer(true); producer.initTransactions(); try { producer.commitTransaction(); fail("Should have thrown as producer has no open transaction"); } catch (IllegalStateException e) { } }
@Test public void shouldThrowOnAbortForNonAutoCompleteIfTransactionsAreEnabled() throws Exception { buildMockProducer(false); producer.initTransactions(); producer.beginTransaction(); Future<RecordMetadata> md1 = producer.send(record1); assertFalse(md1.isDone()); producer.abortTransaction(); assertTrue(md1.isDone()); }
@Test public void shouldThrowOnInitTransactionIfProducerIsClosed() { buildMockProducer(true); producer.close(); try { producer.initTransactions(); fail("Should have thrown as producer is already closed"); } catch (IllegalStateException e) { } }
@Test public void shouldNotCountAbortedTransaction() { buildMockProducer(true); producer.initTransactions(); producer.beginTransaction(); producer.abortTransaction(); producer.beginTransaction(); producer.commitTransaction(); assertThat(producer.commitCount(), equalTo(1L)); }
@Test public void shouldThrowOnAbortTransactionIfNoTransactionGotStarted() { buildMockProducer(true); producer.initTransactions(); try { producer.abortTransaction(); fail("Should have thrown as producer has no open transaction"); } catch (IllegalStateException e) { } }
@Test public void shouldFlushOnCommitForNonAutoCompleteIfTransactionsAreEnabled() { buildMockProducer(false); producer.initTransactions(); producer.beginTransaction(); Future<RecordMetadata> md1 = producer.send(record1); Future<RecordMetadata> md2 = producer.send(record2); assertFalse(md1.isDone()); assertFalse(md2.isDone()); producer.commitTransaction(); assertTrue(md1.isDone()); assertTrue(md2.isDone()); }
@Test public void shouldIgnoreEmptyOffsetsWhenSendOffsetsToTransaction() { buildMockProducer(true); producer.initTransactions(); producer.beginTransaction(); producer.sendOffsetsToTransaction(Collections.<TopicPartition, OffsetAndMetadata>emptyMap(), "groupId"); assertFalse(producer.sentOffsets()); }
@Test public void shouldThrowOnCommitTransactionIfProducerGotFenced() { buildMockProducer(true); producer.initTransactions(); producer.fenceProducer(); try { producer.commitTransaction(); fail("Should have thrown as producer is fenced off"); } catch (ProducerFencedException e) { } }
@Test public void shouldBeginTransactions() { buildMockProducer(true); producer.initTransactions(); producer.beginTransaction(); assertTrue(producer.transactionInFlight()); }
@Test public void shouldThrowOnBeginTransactionsIfProducerGotFenced() { buildMockProducer(true); producer.initTransactions(); producer.fenceProducer(); try { producer.beginTransaction(); fail("Should have thrown as producer is fenced off"); } catch (ProducerFencedException e) { } }
@Test public void shouldThrowOnAbortTransactionIfProducerGotFenced() { buildMockProducer(true); producer.initTransactions(); producer.fenceProducer(); try { producer.abortTransaction(); fail("Should have thrown as producer is fenced off"); } catch (ProducerFencedException e) { } }
@Test public void shouldThrowOnSendOffsetsToTransactionIfProducerGotFenced() { buildMockProducer(true); producer.initTransactions(); producer.fenceProducer(); try { producer.sendOffsetsToTransaction(null, null); fail("Should have thrown as producer is fenced off"); } catch (ProducerFencedException e) { } }
@Test public void shouldThrowOnSendIfProducerGotFenced() { buildMockProducer(true); producer.initTransactions(); producer.fenceProducer(); try { producer.send(null); fail("Should have thrown as producer is fenced off"); } catch (KafkaException e) { assertTrue("The root cause of the exception should be ProducerFenced", e.getCause() instanceof ProducerFencedException); } }
@Test public void shouldAbortEmptyTransaction() { buildMockProducer(true); producer.initTransactions(); producer.beginTransaction(); producer.abortTransaction(); assertFalse(producer.transactionInFlight()); assertTrue(producer.transactionAborted()); assertFalse(producer.transactionCommitted()); }
@Test public void shouldCommitEmptyTransaction() { buildMockProducer(true); producer.initTransactions(); producer.beginTransaction(); producer.commitTransaction(); assertFalse(producer.transactionInFlight()); assertTrue(producer.transactionCommitted()); assertFalse(producer.transactionAborted()); }