Search in sources :

Example 16 with BackOff

use of io.strimzi.operator.common.BackOff in project strimzi-kafka-operator by strimzi.

the class ZookeeperLeaderFinderTest method test1PodClusterReturnsOnlyPodAsLeader.

@Test
public void test1PodClusterReturnsOnlyPodAsLeader(VertxTestContext context) {
    ZookeeperLeaderFinder finder = new ZookeeperLeaderFinder(vertx, this::backoff);
    Checkpoint a = context.checkpoint();
    int firstPodIndex = 0;
    finder.findZookeeperLeader(Reconciliation.DUMMY_RECONCILIATION, Set.of(createPodWithId(firstPodIndex)), dummySecret(), dummySecret()).onComplete(context.succeeding(leader -> {
        context.verify(() -> assertThat(leader, is("my-cluster-kafka-0")));
        a.flag();
    }));
}
Also used : CoreMatchers.is(org.hamcrest.CoreMatchers.is) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) BiFunction(java.util.function.BiFunction) AfterAll(org.junit.jupiter.api.AfterAll) CoreMatchers.instanceOf(org.hamcrest.CoreMatchers.instanceOf) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) PodBuilder(io.fabric8.kubernetes.api.model.PodBuilder) KafkaResources(io.strimzi.api.kafka.model.KafkaResources) Ca(io.strimzi.operator.cluster.model.Ca) BeforeAll(org.junit.jupiter.api.BeforeAll) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) SecretOperator(io.strimzi.operator.common.operator.resource.SecretOperator) Set(java.util.Set) VertxExtension(io.vertx.junit5.VertxExtension) Future(io.vertx.core.Future) NetClientOptions(io.vertx.core.net.NetClientOptions) Test(org.junit.jupiter.api.Test) CountDownLatch(java.util.concurrent.CountDownLatch) NetServerOptions(io.vertx.core.net.NetServerOptions) List(java.util.List) Labels(io.strimzi.operator.common.model.Labels) Logger(org.apache.logging.log4j.Logger) Secret(io.fabric8.kubernetes.api.model.Secret) Checkpoint(io.vertx.junit5.Checkpoint) Mockito.mock(org.mockito.Mockito.mock) VertxTestContext(io.vertx.junit5.VertxTestContext) BackOff(io.strimzi.operator.common.BackOff) SelfSignedCertificate(io.vertx.core.net.SelfSignedCertificate) ZookeeperCluster(io.strimzi.operator.cluster.model.ZookeeperCluster) Function(java.util.function.Function) Supplier(java.util.function.Supplier) TreeSet(java.util.TreeSet) ArrayList(java.util.ArrayList) ClusterOperator(io.strimzi.operator.cluster.ClusterOperator) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) TestUtils.map(io.strimzi.test.TestUtils.map) Collections.emptyMap(java.util.Collections.emptyMap) Collections.emptySet(java.util.Collections.emptySet) Promise(io.vertx.core.Promise) Vertx(io.vertx.core.Vertx) Pod(io.fabric8.kubernetes.api.model.Pod) Mockito.when(org.mockito.Mockito.when) Integer.parseInt(java.lang.Integer.parseInt) TimeUnit(java.util.concurrent.TimeUnit) Reconciliation(io.strimzi.operator.common.Reconciliation) Mockito(org.mockito.Mockito) AfterEach(org.junit.jupiter.api.AfterEach) NetServer(io.vertx.core.net.NetServer) SecretBuilder(io.fabric8.kubernetes.api.model.SecretBuilder) LogManager(org.apache.logging.log4j.LogManager) Checkpoint(io.vertx.junit5.Checkpoint) Checkpoint(io.vertx.junit5.Checkpoint) Test(org.junit.jupiter.api.Test)

Example 17 with BackOff

use of io.strimzi.operator.common.BackOff in project strimzi-kafka-operator by strimzi.

the class KafkaConnectApiMockTest method testStatusWithBackOffOtherExceptionStillFails.

@Test
public void testStatusWithBackOffOtherExceptionStillFails(VertxTestContext context) {
    Queue<Future<Map<String, Object>>> statusResults = new ArrayBlockingQueue<>(1);
    statusResults.add(Future.failedFuture(new ConnectRestException(null, null, 500, null, null)));
    KafkaConnectApi api = new MockKafkaConnectApi(vertx, statusResults);
    Checkpoint async = context.checkpoint();
    api.statusWithBackOff(Reconciliation.DUMMY_RECONCILIATION, backOff, "some-host", 8083, "some-connector").onComplete(context.failing(res -> async.flag()));
}
Also used : VertxTestContext(io.vertx.junit5.VertxTestContext) BackOff(io.strimzi.operator.common.BackOff) Vertx(io.vertx.core.Vertx) VertxExtension(io.vertx.junit5.VertxExtension) Future(io.vertx.core.Future) AfterAll(org.junit.jupiter.api.AfterAll) Test(org.junit.jupiter.api.Test) Reconciliation(io.strimzi.operator.common.Reconciliation) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) BeforeAll(org.junit.jupiter.api.BeforeAll) Map(java.util.Map) Checkpoint(io.vertx.junit5.Checkpoint) Queue(java.util.Queue) Collections(java.util.Collections) Checkpoint(io.vertx.junit5.Checkpoint) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) Future(io.vertx.core.Future) Test(org.junit.jupiter.api.Test)

Example 18 with BackOff

use of io.strimzi.operator.common.BackOff in project strimzi-kafka-operator by strimzi.

the class KafkaConnectApiMockTest method testStatusWithBackOffSuccedingEventually.

@Test
public void testStatusWithBackOffSuccedingEventually(VertxTestContext context) {
    Queue<Future<Map<String, Object>>> statusResults = new ArrayBlockingQueue<>(3);
    statusResults.add(Future.failedFuture(new ConnectRestException(null, null, 404, null, null)));
    statusResults.add(Future.failedFuture(new ConnectRestException(null, null, 404, null, null)));
    statusResults.add(Future.succeededFuture(Collections.emptyMap()));
    KafkaConnectApi api = new MockKafkaConnectApi(vertx, statusResults);
    Checkpoint async = context.checkpoint();
    api.statusWithBackOff(Reconciliation.DUMMY_RECONCILIATION, backOff, "some-host", 8083, "some-connector").onComplete(context.succeeding(res -> async.flag()));
}
Also used : VertxTestContext(io.vertx.junit5.VertxTestContext) BackOff(io.strimzi.operator.common.BackOff) Vertx(io.vertx.core.Vertx) VertxExtension(io.vertx.junit5.VertxExtension) Future(io.vertx.core.Future) AfterAll(org.junit.jupiter.api.AfterAll) Test(org.junit.jupiter.api.Test) Reconciliation(io.strimzi.operator.common.Reconciliation) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) BeforeAll(org.junit.jupiter.api.BeforeAll) Map(java.util.Map) Checkpoint(io.vertx.junit5.Checkpoint) Queue(java.util.Queue) Collections(java.util.Collections) Checkpoint(io.vertx.junit5.Checkpoint) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) Future(io.vertx.core.Future) Test(org.junit.jupiter.api.Test)

Example 19 with BackOff

use of io.strimzi.operator.common.BackOff in project strimzi-kafka-operator by strimzi.

the class KafkaConnectApiMockTest method testStatusWithBackOffFailingRepeatedly.

@Test
public void testStatusWithBackOffFailingRepeatedly(VertxTestContext context) {
    Queue<Future<Map<String, Object>>> statusResults = new ArrayBlockingQueue<>(4);
    statusResults.add(Future.failedFuture(new ConnectRestException(null, null, 404, null, null)));
    statusResults.add(Future.failedFuture(new ConnectRestException(null, null, 404, null, null)));
    statusResults.add(Future.failedFuture(new ConnectRestException(null, null, 404, null, null)));
    statusResults.add(Future.failedFuture(new ConnectRestException(null, null, 404, null, null)));
    KafkaConnectApi api = new MockKafkaConnectApi(vertx, statusResults);
    Checkpoint async = context.checkpoint();
    api.statusWithBackOff(Reconciliation.DUMMY_RECONCILIATION, backOff, "some-host", 8083, "some-connector").onComplete(context.failing(res -> async.flag()));
}
Also used : VertxTestContext(io.vertx.junit5.VertxTestContext) BackOff(io.strimzi.operator.common.BackOff) Vertx(io.vertx.core.Vertx) VertxExtension(io.vertx.junit5.VertxExtension) Future(io.vertx.core.Future) AfterAll(org.junit.jupiter.api.AfterAll) Test(org.junit.jupiter.api.Test) Reconciliation(io.strimzi.operator.common.Reconciliation) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) BeforeAll(org.junit.jupiter.api.BeforeAll) Map(java.util.Map) Checkpoint(io.vertx.junit5.Checkpoint) Queue(java.util.Queue) Collections(java.util.Collections) Checkpoint(io.vertx.junit5.Checkpoint) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) Future(io.vertx.core.Future) Test(org.junit.jupiter.api.Test)

Example 20 with BackOff

use of io.strimzi.operator.common.BackOff in project strimzi-kafka-operator by strimzi.

the class KafkaConnectApiTest method test.

@IsolatedTest
@SuppressWarnings({ "unchecked", "checkstyle:MethodLength", "checkstyle:NPathComplexity" })
public void test(VertxTestContext context) {
    KafkaConnectApi client = new KafkaConnectApiImpl(vertx);
    Checkpoint async = context.checkpoint();
    client.listConnectorPlugins(Reconciliation.DUMMY_RECONCILIATION, "localhost", PORT).onComplete(context.succeeding(connectorPlugins -> context.verify(() -> {
        assertThat(connectorPlugins.size(), greaterThanOrEqualTo(2));
        ConnectorPlugin fileSink = connectorPlugins.stream().filter(connector -> "org.apache.kafka.connect.file.FileStreamSinkConnector".equals(connector.getConnectorClass())).findFirst().orElse(null);
        assertNotNull(fileSink);
        assertThat(fileSink.getType(), is("sink"));
        assertThat(fileSink.getVersion(), is(not(emptyString())));
        ConnectorPlugin fileSource = connectorPlugins.stream().filter(connector -> "org.apache.kafka.connect.file.FileStreamSourceConnector".equals(connector.getConnectorClass())).findFirst().orElse(null);
        assertNotNull(fileSource);
        assertThat(fileSource.getType(), is("source"));
        assertThat(fileSource.getVersion(), is(not(emptyString())));
    }))).compose(connectorPlugins -> client.list("localhost", PORT)).onComplete(context.succeeding(connectorNames -> context.verify(() -> assertThat(connectorNames, is(empty()))))).compose(connectorNames -> {
        JsonObject o = new JsonObject().put("connector.class", "FileStreamSource").put("tasks.max", "1").put("file", "/dev/null").put("topic", "my-topic");
        return client.createOrUpdatePutRequest(Reconciliation.DUMMY_RECONCILIATION, "localhost", PORT, "test", o);
    }).onComplete(context.succeeding()).compose(created -> {
        Promise<Map<String, Object>> promise = Promise.promise();
        Handler<Long> handler = new Handler<Long>() {

            @Override
            public void handle(Long timerId) {
                client.status(Reconciliation.DUMMY_RECONCILIATION, "localhost", PORT, "test").onComplete(result -> {
                    if (result.succeeded()) {
                        Map<String, Object> status = result.result();
                        if ("RUNNING".equals(((Map) status.getOrDefault("connector", emptyMap())).get("state"))) {
                            promise.complete(status);
                            return;
                        } else {
                            System.err.println(status);
                        }
                    } else {
                        result.cause().printStackTrace();
                    }
                    vertx.setTimer(1000, this);
                });
            }
        };
        vertx.setTimer(1000, handler);
        return promise.future();
    }).onComplete(context.succeeding(status -> context.verify(() -> {
        assertThat(status.get("name"), is("test"));
        Map<String, Object> connectorStatus = (Map<String, Object>) status.getOrDefault("connector", emptyMap());
        assertThat(connectorStatus.get("state"), is("RUNNING"));
        assertThat(connectorStatus.get("worker_id"), is("localhost:18083"));
        System.out.println("help " + connectorStatus);
        List<Map> tasks = (List<Map>) status.get("tasks");
        for (Map an : tasks) {
            assertThat(an.get("state"), is("RUNNING"));
            assertThat(an.get("worker_id"), is("localhost:18083"));
        }
    }))).compose(status -> client.getConnectorConfig(Reconciliation.DUMMY_RECONCILIATION, new BackOff(10), "localhost", PORT, "test")).onComplete(context.succeeding(config -> context.verify(() -> {
        assertThat(config, is(TestUtils.map("connector.class", "FileStreamSource", "file", "/dev/null", "tasks.max", "1", "name", "test", "topic", "my-topic")));
    }))).compose(config -> client.getConnectorConfig(Reconciliation.DUMMY_RECONCILIATION, new BackOff(10), "localhost", PORT, "does-not-exist")).onComplete(context.failing(error -> context.verify(() -> {
        assertThat(error, instanceOf(ConnectRestException.class));
        assertThat(((ConnectRestException) error).getStatusCode(), is(404));
    }))).recover(error -> Future.succeededFuture()).compose(ignored -> client.pause("localhost", PORT, "test")).onComplete(context.succeeding()).compose(ignored -> client.resume("localhost", PORT, "test")).onComplete(context.succeeding()).compose(ignored -> client.restart("localhost", PORT, "test")).onComplete(context.succeeding()).compose(ignored -> client.restartTask("localhost", PORT, "test", 0)).onComplete(context.succeeding()).compose(ignored -> {
        JsonObject o = new JsonObject().put("connector.class", "ThisConnectorDoesNotExist").put("tasks.max", "1").put("file", "/dev/null").put("topic", "my-topic");
        return client.createOrUpdatePutRequest(Reconciliation.DUMMY_RECONCILIATION, "localhost", PORT, "broken", o);
    }).onComplete(context.failing(error -> context.verify(() -> {
        assertThat(error, instanceOf(ConnectRestException.class));
        assertThat(error.getMessage(), containsString("Failed to find any class that implements Connector and which name matches ThisConnectorDoesNotExist"));
    }))).recover(e -> Future.succeededFuture()).compose(ignored -> {
        JsonObject o = new JsonObject().put("connector.class", "FileStreamSource").put("tasks.max", "dog").put("file", "/dev/null").put("topic", "my-topic");
        return client.createOrUpdatePutRequest(Reconciliation.DUMMY_RECONCILIATION, "localhost", PORT, "broken2", o);
    }).onComplete(context.failing(error -> context.verify(() -> {
        assertThat(error, instanceOf(ConnectRestException.class));
        assertThat(error.getMessage(), containsString("Invalid value dog for configuration tasks.max: Not a number of type INT"));
    }))).recover(e -> Future.succeededFuture()).compose(createResponse -> client.list("localhost", PORT)).onComplete(context.succeeding(connectorNames -> context.verify(() -> assertThat(connectorNames, is(singletonList("test")))))).compose(connectorNames -> client.delete(Reconciliation.DUMMY_RECONCILIATION, "localhost", PORT, "test")).onComplete(context.succeeding()).compose(deletedConnector -> client.list("localhost", PORT)).onComplete(context.succeeding(connectorNames -> assertThat(connectorNames, is(empty())))).compose(connectorNames -> client.delete(Reconciliation.DUMMY_RECONCILIATION, "localhost", PORT, "never-existed")).onComplete(context.failing(error -> {
        assertThat(error, instanceOf(ConnectRestException.class));
        assertThat(error.getMessage(), containsString("Connector never-existed not found"));
        async.flag();
    }));
}
Also used : VertxTestContext(io.vertx.junit5.VertxTestContext) BeforeEach(org.junit.jupiter.api.BeforeEach) Assertions.assertNotNull(org.junit.jupiter.api.Assertions.assertNotNull) OrderedProperties(io.strimzi.operator.common.model.OrderedProperties) BackOff(io.strimzi.operator.common.BackOff) Matchers.emptyString(org.hamcrest.Matchers.emptyString) Matchers.not(org.hamcrest.Matchers.not) HashMap(java.util.HashMap) Collections.singletonList(java.util.Collections.singletonList) AfterAll(org.junit.jupiter.api.AfterAll) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) BeforeAll(org.junit.jupiter.api.BeforeAll) IsolatedTest(io.strimzi.test.annotations.IsolatedTest) Map(java.util.Map) TestUtils(io.strimzi.test.TestUtils) JsonObject(io.vertx.core.json.JsonObject) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) Assertions.assertEquals(org.junit.jupiter.api.Assertions.assertEquals) StrimziKafkaCluster(io.strimzi.test.container.StrimziKafkaCluster) Collections.emptyMap(java.util.Collections.emptyMap) Matchers.empty(org.hamcrest.Matchers.empty) Matchers.greaterThanOrEqualTo(org.hamcrest.Matchers.greaterThanOrEqualTo) Files(java.nio.file.Files) Promise(io.vertx.core.Promise) Vertx(io.vertx.core.Vertx) IOException(java.io.IOException) ConnectorPlugin(io.strimzi.api.kafka.model.connect.ConnectorPlugin) VertxExtension(io.vertx.junit5.VertxExtension) Future(io.vertx.core.Future) File(java.io.File) Matchers.instanceOf(org.hamcrest.Matchers.instanceOf) CountDownLatch(java.util.concurrent.CountDownLatch) Reconciliation(io.strimzi.operator.common.Reconciliation) List(java.util.List) AfterEach(org.junit.jupiter.api.AfterEach) Checkpoint(io.vertx.junit5.Checkpoint) Connect(org.apache.kafka.connect.runtime.Connect) Matchers.is(org.hamcrest.Matchers.is) Handler(io.vertx.core.Handler) Matchers.containsString(org.hamcrest.Matchers.containsString) ConnectDistributed(org.apache.kafka.connect.cli.ConnectDistributed) JsonObject(io.vertx.core.json.JsonObject) Handler(io.vertx.core.Handler) Matchers.emptyString(org.hamcrest.Matchers.emptyString) Matchers.containsString(org.hamcrest.Matchers.containsString) BackOff(io.strimzi.operator.common.BackOff) ConnectorPlugin(io.strimzi.api.kafka.model.connect.ConnectorPlugin) Checkpoint(io.vertx.junit5.Checkpoint) JsonObject(io.vertx.core.json.JsonObject) Collections.singletonList(java.util.Collections.singletonList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map) Collections.emptyMap(java.util.Collections.emptyMap) IsolatedTest(io.strimzi.test.annotations.IsolatedTest)

Aggregations

BackOff (io.strimzi.operator.common.BackOff)34 Reconciliation (io.strimzi.operator.common.Reconciliation)34 Future (io.vertx.core.Future)32 Vertx (io.vertx.core.Vertx)32 Checkpoint (io.vertx.junit5.Checkpoint)32 VertxExtension (io.vertx.junit5.VertxExtension)32 VertxTestContext (io.vertx.junit5.VertxTestContext)32 ExtendWith (org.junit.jupiter.api.extension.ExtendWith)32 AfterAll (org.junit.jupiter.api.AfterAll)30 BeforeAll (org.junit.jupiter.api.BeforeAll)30 Test (org.junit.jupiter.api.Test)30 List (java.util.List)24 MatcherAssert.assertThat (org.hamcrest.MatcherAssert.assertThat)24 AfterEach (org.junit.jupiter.api.AfterEach)24 Promise (io.vertx.core.Promise)22 LogManager (org.apache.logging.log4j.LogManager)22 Logger (org.apache.logging.log4j.Logger)22 CoreMatchers.is (org.hamcrest.CoreMatchers.is)22 Mockito.mock (org.mockito.Mockito.mock)22 Mockito.when (org.mockito.Mockito.when)22