/*
* Copyright 2015 Red Hat, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php
*
* You may elect to redistribute this code under either of these licenses.
*/
package io.vertx.test.core;
import io.vertx.core.impl.VertxInternal;
import io.vertx.core.net.impl.ServerID;
import io.vertx.core.spi.cluster.AsyncMultiMap;
import io.vertx.core.spi.cluster.ClusterManager;
import org.junit.Test;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
/**
* @author <a href="http://tfox.org">Tim Fox</a>
*/
public class AsyncMultiMapTest extends VertxTestBase {
protected ClusterManager clusterManager;
protected volatile AsyncMultiMap<String, ServerID> map;
@Override
public void setUp() throws Exception {
super.setUp();
startNodes(1);
clusterManager = ((VertxInternal) vertices[0]).getClusterManager();
CountDownLatch latch = new CountDownLatch(1);
clusterManager.<String, ServerID>getAsyncMultiMap("mymap", onSuccess(res -> {
map = res;
latch.countDown();
}));
awaitLatch(latch);
}
@Test
public void testMapAddGet() {
ServerID serverID1 = new ServerID(1234, "foo.com");
map.add("some-sub", serverID1, onSuccess(res -> {
assertNull(res);
ServerID serverID2 = new ServerID(4321, "blah.com");
map.add("some-sub", serverID2, onSuccess(res2 -> {
assertNull(res2);
ServerID serverID3 = new ServerID(5432, "quux.com");
map.add("some-sub2", serverID3, onSuccess(res3 -> {
assertNull(res3);
map.get("some-sub", onSuccess(res4 -> {
Set<ServerID> set = new HashSet<>();
for (ServerID sid : res4) {
set.add(sid);
}
assertEquals(2, set.size());
assertTrue(set.contains(serverID1));
assertTrue(set.contains(serverID2));
map.get("some-sub2", onSuccess(res5 -> {
Set<ServerID> set2 = new HashSet<>();
for (ServerID sid : res5) {
set2.add(sid);
}
assertEquals(1, set2.size());
assertTrue(set2.contains(serverID3));
testComplete();
}));
}));
}));
}));
}));
await();
}
@Test
public void testMapRemove() {
ServerID serverID1 = new ServerID(1234, "foo.com");
map.add("some-sub", serverID1, onSuccess(res -> {
assertNull(res);
ServerID serverID2 = new ServerID(4321, "blah.com");
map.add("some-sub", serverID2, onSuccess(res2 -> {
assertNull(res2);
ServerID serverID3 = new ServerID(5432, "quux.com");
map.add("some-sub2", serverID3, onSuccess(res3 -> {
assertNull(res3);
map.get("some-sub", onSuccess(res4 -> {
Set<ServerID> set = new HashSet<>();
for (ServerID sid : res4) {
set.add(sid);
}
assertEquals(2, set.size());
assertTrue(set.contains(serverID1));
assertTrue(set.contains(serverID2));
map.get("some-sub2", onSuccess(res5 -> {
Set<ServerID> set2 = new HashSet<>();
for (ServerID sid : res5) {
set2.add(sid);
}
assertEquals(1, set2.size());
assertTrue(set2.contains(serverID3));
map.remove("some-sub2", serverID1, onSuccess(res6 -> {
assertFalse(res6);
map.remove("some-sub2", serverID3, onSuccess(res7 -> {
map.get("some-sub2", onSuccess(res8 -> {
Set<ServerID> set3 = new HashSet<>();
for (ServerID sid : res8) {
set3.add(sid);
}
assertEquals(0, set3.size());
testComplete();
}));
}));
}));
}));
}));
}));
}));
}));
await();
}
@Test
public void testRemoveAllForValue() {
ServerID serverID1 = new ServerID(1234, "foo.com");
map.add("some-sub", serverID1, onSuccess(res -> {
assertNull(res);
ServerID serverID2 = new ServerID(4321, "blah.com");
map.add("some-sub", serverID2, onSuccess(res2 -> {
assertNull(res2);
map.add("some-sub2", serverID1, onSuccess(res3 -> {
assertNull(res3);
map.removeAllForValue(serverID1, onSuccess(res4 -> {
assertNull(res4);
map.get("some-sub", onSuccess(res5 -> {
Set<ServerID> set = new HashSet<>();
for (ServerID sid : res5) {
set.add(sid);
}
assertEquals(1, set.size());
assertTrue(set.contains(serverID2));
assertFalse(set.contains(serverID1));
map.get("some-sub2", onSuccess(res6 -> {
Set<ServerID> set2 = new HashSet<>();
for (ServerID sid : res6) {
set2.add(sid);
}
assertEquals(0, set2.size());
testComplete();
}));
}));
}));
}));
}));
}));
await();
}
}