    @Test
    public void testSuccessfulSendWithoutCallback() throws InterruptedException, TimeoutException, ExecutionException {

        Fiber<Void> fiber = new Fiber<>(new SuspendableRunnable() {
            @Override
            public void run() throws SuspendExecution, InterruptedException {
                Future<RecordMetadata> f = fiberProducer.send(new ProducerRecord<>("Topic", "Key".getBytes(), "Value".getBytes()));
                Future<RecordMetadata> f2 = fiberProducer.send(new ProducerRecord<>("Topic", "Key".getBytes(), "Value".getBytes()));
                phaser.arrive();
                try {
                    RecordMetadata recordMetadata = f.get();

                    assertEquals("Topic", recordMetadata.topic());
                    assertEquals(0, recordMetadata.offset());
                    assertEquals(0, recordMetadata.partition());

                    RecordMetadata recordMetadata2 = f2.get();

                    assertEquals("Topic", recordMetadata2.topic());
                    assertEquals(1, recordMetadata2.offset());
                    assertEquals(0, recordMetadata2.partition());
                } catch (ExecutionException e) {
                    fail();
                }
            }
        });
        fiber.start();

        phaser.arriveAndAwaitAdvance();
        mockProducer.completeNext();
        mockProducer.completeNext();

        fiber.join(5000, TimeUnit.MILLISECONDS);
    }