/*
 * Copyright 2021 Red Hat, Inc.
 *
 * Red Hat licenses this file to you under the Apache License, version 2.0
 * (the "License"); you may not use this file except in compliance with the
 * License.  You may obtain a copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package io.vertx.it.core;

import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.core.impl.VertxInternal;
import io.vertx.ext.cluster.infinispan.InfinispanClusterManager;
import org.junit.Test;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

import static org.junit.Assert.assertTrue;

public class ServiceProviderTest {

  @Test
  public void testDiscovery() throws Exception {
    CompletableFuture<Void> result = new CompletableFuture<>();
    Vertx v1 = Vertx.clusteredVertx(new VertxOptions()).toCompletionStage().toCompletableFuture().get(30, TimeUnit.SECONDS);
    Vertx v2 = Vertx.clusteredVertx(new VertxOptions()).toCompletionStage().toCompletableFuture().get(30, TimeUnit.SECONDS);
    assertTrue(((VertxInternal) v1).getClusterManager() instanceof InfinispanClusterManager);
    assertTrue(((VertxInternal) v2).getClusterManager() instanceof InfinispanClusterManager);
    v1.eventBus().consumer("the-address", msg -> {
      if ("ping".equals(msg.body())) {
        result.complete(null);
      } else {
        result.completeExceptionally(new Exception());
      }
    }).completionHandler(ar -> {
      if (ar.succeeded()) {
        v2.eventBus().send("the-address", "ping");
      } else {
        result.completeExceptionally(ar.cause());
      }
    });
    result.get(30, TimeUnit.SECONDS);
  }
}
