/* * Copyright 2014 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.Vertx; import io.vertx.core.shareddata.Counter; import org.junit.Test; import static io.vertx.test.core.TestUtils.assertNullPointerException; /** * @author <a href="http://tfox.org">Tim Fox</a> */ public class SharedCounterTest extends VertxTestBase { protected Vertx getVertx() { return vertx; } @Test public void testIllegalArguments() throws Exception { assertNullPointerException(() -> getVertx().sharedData().getCounter(null, ar -> {})); assertNullPointerException(() -> getVertx().sharedData().getCounter("foo", null)); getVertx().sharedData().getCounter("foo", ar -> { Counter counter = ar.result(); assertNullPointerException(() -> counter.get(null)); assertNullPointerException(() -> counter.incrementAndGet(null)); assertNullPointerException(() -> counter.getAndIncrement(null)); assertNullPointerException(() -> counter.decrementAndGet(null)); assertNullPointerException(() -> counter.addAndGet(1, null)); assertNullPointerException(() -> counter.getAndAdd(1, null)); assertNullPointerException(() -> counter.compareAndSet(1, 1, null)); testComplete(); }); await(); } @Test public void testGet() { getVertx().sharedData().getCounter("foo", ar -> { assertTrue(ar.succeeded()); Counter counter = ar.result(); counter.get(ar2 -> { assertTrue(ar2.succeeded()); assertEquals(0l, ar2.result().longValue()); testComplete(); }); }); await(); } @Test public void testIncrementAndGet() { getVertx().sharedData().getCounter("foo", ar -> { assertTrue(ar.succeeded()); Counter counter = ar.result(); counter.incrementAndGet(ar2 -> { assertTrue(ar2.succeeded()); assertEquals(1l, ar2.result().longValue()); getVertx().sharedData().getCounter("foo", ar3 -> { assertTrue(ar3.succeeded()); Counter counter2 = ar3.result(); counter2.incrementAndGet(ar4 -> { assertTrue(ar4.succeeded()); assertEquals(2l, ar4.result().longValue()); testComplete(); }); }); }); }); await(); } @Test public void testGetAndIncrement() { getVertx().sharedData().getCounter("foo", ar -> { assertTrue(ar.succeeded()); Counter counter = ar.result(); counter.getAndIncrement(ar2 -> { assertTrue(ar2.succeeded()); assertEquals(0l, ar2.result().longValue()); getVertx().sharedData().getCounter("foo", ar3 -> { assertTrue(ar3.succeeded()); Counter counter2 = ar3.result(); counter2.getAndIncrement(ar4 -> { assertTrue(ar4.succeeded()); assertEquals(1l, ar4.result().longValue()); counter2.get(ar5 -> { assertTrue(ar5.succeeded()); assertEquals(2l, ar5.result().longValue()); testComplete(); }); }); }); }); }); await(); } @Test public void testDecrementAndGet() { getVertx().sharedData().getCounter("foo", ar -> { assertTrue(ar.succeeded()); Counter counter = ar.result(); counter.decrementAndGet(ar2 -> { assertTrue(ar2.succeeded()); assertEquals(-1l, ar2.result().longValue()); getVertx().sharedData().getCounter("foo", ar3 -> { assertTrue(ar3.succeeded()); Counter counter2 = ar3.result(); counter2.decrementAndGet(ar4 -> { assertTrue(ar4.succeeded()); assertEquals(-2l, ar4.result().longValue()); testComplete(); }); }); }); }); await(); } @Test public void testAddAndGet() { getVertx().sharedData().getCounter("foo", ar -> { assertTrue(ar.succeeded()); Counter counter = ar.result(); counter.addAndGet(2, ar2 -> { assertTrue(ar2.succeeded()); assertEquals(2l, ar2.result().longValue()); getVertx().sharedData().getCounter("foo", ar3 -> { assertTrue(ar3.succeeded()); Counter counter2 = ar3.result(); counter2.addAndGet(2l, ar4 -> { assertTrue(ar4.succeeded()); assertEquals(4l, ar4.result().longValue()); testComplete(); }); }); }); }); await(); } @Test public void getAndAdd() { getVertx().sharedData().getCounter("foo", ar -> { assertTrue(ar.succeeded()); Counter counter = ar.result(); counter.getAndAdd(2, ar2 -> { assertTrue(ar2.succeeded()); assertEquals(0l, ar2.result().longValue()); getVertx().sharedData().getCounter("foo", ar3 -> { assertTrue(ar3.succeeded()); Counter counter2 = ar3.result(); counter2.getAndAdd(2l, ar4 -> { assertTrue(ar4.succeeded()); assertEquals(2l, ar4.result().longValue()); counter2.get(ar5 -> { assertTrue(ar5.succeeded()); assertEquals(4l, ar5.result().longValue()); testComplete(); }); }); }); }); }); await(); } @Test public void testCompareAndSet() { getVertx().sharedData().getCounter("foo", ar -> { assertTrue(ar.succeeded()); Counter counter = ar.result(); counter.compareAndSet(0l, 2l, onSuccess(result -> { getVertx().sharedData().getCounter("foo", ar3 -> { assertTrue(ar3.succeeded()); Counter counter2 = ar3.result(); counter2.compareAndSet(2l, 4l, ar4 -> { assertTrue(ar4.succeeded()); assertTrue(ar4.result()); counter2.compareAndSet(3l, 5l, ar5 -> { assertTrue(ar5.succeeded()); assertFalse(ar5.result()); testComplete(); }); }); }); })); }); await(); } @Test public void testDifferentCounters() { getVertx().sharedData().getCounter("foo", ar -> { assertTrue(ar.succeeded()); Counter counter = ar.result(); counter.incrementAndGet(onSuccess(res -> { assertEquals(1l, res.longValue()); getVertx().sharedData().getCounter("bar", ar3 -> { assertTrue(ar3.succeeded()); Counter counter2 = ar3.result(); counter2.incrementAndGet(ar4 -> { assertEquals(1l, ar4.result().longValue()); counter.incrementAndGet(ar5 -> { assertEquals(2l, ar5.result().longValue()); testComplete(); }); }); }); })); }); await(); } }