/* * 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.serviceproxy.testmodel.impl; import io.vertx.core.AsyncResult; import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; import io.vertx.core.VertxException; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import io.vertx.serviceproxy.ServiceException; import io.vertx.serviceproxy.test.ServiceProxyTest; import io.vertx.serviceproxy.testmodel.MyServiceException; import io.vertx.serviceproxy.testmodel.SomeEnum; import io.vertx.serviceproxy.testmodel.TestConnection; import io.vertx.serviceproxy.testmodel.TestConnectionWithCloseFuture; import io.vertx.serviceproxy.testmodel.TestDataObject; import io.vertx.serviceproxy.testmodel.TestService; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import static org.junit.Assert.*; /** * @author <a href="http://tfox.org">Tim Fox</a> */ public class TestServiceImpl implements TestService { private final Vertx vertx; public TestServiceImpl(Vertx vertx) { this.vertx = vertx; } @Override public void createConnection(String str, Handler<AsyncResult<TestConnection>> resultHandler) { resultHandler.handle(Future.succeededFuture(new TestConnectionImpl(vertx, str))); } @Override public void createConnectionWithCloseFuture(Handler<AsyncResult<TestConnectionWithCloseFuture>> resultHandler) { resultHandler.handle(Future.succeededFuture(new TestConnectionWithCloseFutureImpl(vertx))); } @Override public void noParams() { vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void basicTypes(String str, byte b, short s, int i, long l, float f, double d, char c, boolean bool) { assertEquals("foo", str); assertEquals((byte)123, b); assertEquals((short)1234, s); assertEquals(12345, i); assertEquals(123456l, l); assertEquals(12345, i); assertEquals(12.34f, f, 0); assertEquals(12.3456d, d, 0); assertEquals('X', c); assertEquals(true, bool); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void basicBoxedTypes(String str, Byte b, Short s, Integer i, Long l, Float f, Double d, Character c, Boolean bool) { basicTypes(str, b, s, i, l, f, d, c, bool); } @Override public void basicBoxedTypesNull(String str, Byte b, Short s, Integer i, Long l, Float f, Double d, Character c, Boolean bool) { assertNull(str); assertNull(b); assertNull(s); assertNull(i); assertNull(l); assertNull(f); assertNull(d); assertNull(c); assertNull(bool); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void jsonTypes(JsonObject jsonObject, JsonArray jsonArray) { assertEquals("bar", jsonObject.getString("foo")); assertEquals("wibble", jsonArray.getString(0)); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void jsonTypesNull(JsonObject jsonObject, JsonArray jsonArray) { assertNull(jsonObject); assertNull(jsonArray); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void enumType(SomeEnum someEnum) { assertEquals(SomeEnum.WIBBLE, someEnum); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void enumTypeNull(SomeEnum someEnum) { assertNull(someEnum); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void enumTypeAsResult(Handler<AsyncResult<SomeEnum>> handler) { handler.handle(Future.succeededFuture(SomeEnum.WIBBLE)); } @Override public void enumTypeAsResultNull(Handler<AsyncResult<SomeEnum>> handler) { handler.handle(Future.succeededFuture(null)); } @Override public void dataObjectType(TestDataObject options) { assertEquals(new TestDataObject().setString("foo").setNumber(123).setBool(true), options); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void dataObjectTypeNull(TestDataObject options) { assertNull(options); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void listParams(List<String> listString, List<Byte> listByte, List<Short> listShort, List<Integer> listInt, List<Long> listLong, List<JsonObject> listJsonObject, List<JsonArray> listJsonArray, List<TestDataObject> listDataObject) { assertEquals("foo", listString.get(0)); assertEquals("bar", listString.get(1)); assertEquals((byte)12, listByte.get(0).byteValue()); assertEquals((byte)13, listByte.get(1).byteValue()); assertEquals((short)123, listShort.get(0).shortValue()); assertEquals((short)134, listShort.get(1).shortValue()); assertEquals(1234, listInt.get(0).intValue()); assertEquals(1235, listInt.get(1).intValue()); assertEquals(12345l, listLong.get(0).longValue()); assertEquals(12346l, listLong.get(1).longValue()); assertEquals(new JsonObject().put("foo", "bar"), listJsonObject.get(0)); assertEquals(new JsonObject().put("blah", "eek"), listJsonObject.get(1)); assertEquals(new JsonArray().add("foo"), listJsonArray.get(0)); assertEquals(new JsonArray().add("blah"), listJsonArray.get(1)); assertEquals(new JsonObject().put("number", 1).put("string", "String 1").put("bool", false), listDataObject.get(0).toJson()); assertEquals(new JsonObject().put("number", 2).put("string", "String 2").put("bool", true), listDataObject.get(1).toJson()); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void setParams(Set<String> setString, Set<Byte> setByte, Set<Short> setShort, Set<Integer> setInt, Set<Long> setLong, Set<JsonObject> setJsonObject, Set<JsonArray> setJsonArray, Set<TestDataObject> setDataObject) { assertEquals(2, setString.size()); assertTrue(setString.contains("foo")); assertTrue(setString.contains("bar")); assertEquals(2, setByte.size()); assertTrue(setByte.contains((byte)12)); assertTrue(setByte.contains((byte)13)); assertEquals(2, setShort.size()); assertTrue(setShort.contains((short)123)); assertTrue(setShort.contains((short)134)); assertEquals(2, setInt.size()); assertTrue(setInt.contains(1234)); assertTrue(setInt.contains(1235)); assertEquals(2, setLong.size()); assertTrue(setLong.contains(12345l)); assertTrue(setLong.contains(12346l)); assertEquals(2, setJsonObject.size()); assertTrue(setJsonObject.contains(new JsonObject().put("foo", "bar"))); assertTrue(setJsonObject.contains(new JsonObject().put("blah", "eek"))); assertEquals(2, setJsonArray.size()); assertTrue(setJsonArray.contains(new JsonArray().add("foo"))); assertTrue(setJsonArray.contains(new JsonArray().add("blah"))); assertEquals(2, setDataObject.size()); Set<JsonObject> setDataObjectJson = setDataObject.stream().map(d -> d.toJson()).collect(Collectors.toSet()); assertTrue(setDataObjectJson.contains(new JsonObject().put("number", 1).put("string", "String 1").put("bool", false))); assertTrue(setDataObjectJson.contains(new JsonObject().put("number", 2).put("string", "String 2").put("bool", true))); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void mapParams(Map<String, String> mapString, Map<String, Byte> mapByte, Map<String, Short> mapShort, Map<String, Integer> mapInt, Map<String, Long> mapLong, Map<String, JsonObject> mapJsonObject, Map<String, JsonArray> mapJsonArray) { assertEquals("foo", mapString.get("eek")); assertEquals("bar", mapString.get("wob")); assertEquals((byte)12, mapByte.get("eek").byteValue()); assertEquals((byte)13, mapByte.get("wob").byteValue()); assertEquals((short)123, mapShort.get("eek").shortValue()); assertEquals((short)134, mapShort.get("wob").shortValue()); assertEquals(1234, mapInt.get("eek").intValue()); assertEquals(1235, mapInt.get("wob").intValue()); assertEquals(12345l, mapLong.get("eek").longValue()); assertEquals(12356l, mapLong.get("wob").longValue()); assertEquals(new JsonObject().put("foo", "bar"), mapJsonObject.get("eek")); assertEquals(new JsonObject().put("blah", "eek"), mapJsonObject.get("wob")); assertEquals(new JsonArray().add("foo"), mapJsonArray.get("eek")); assertEquals(new JsonArray().add("blah"), mapJsonArray.get("wob")); vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "ok"); } @Override public void stringHandler(Handler<AsyncResult<String>> resultHandler) { resultHandler.handle(Future.succeededFuture("foobar")); } @Override public void stringNullHandler(Handler<AsyncResult<String>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void byteHandler(Handler<AsyncResult<Byte>> resultHandler) { resultHandler.handle(Future.succeededFuture((byte)123)); } @Override public void byteNullHandler(Handler<AsyncResult<Byte>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void shortHandler(Handler<AsyncResult<Short>> resultHandler) { resultHandler.handle(Future.succeededFuture((short)1234)); } @Override public void shortNullHandler(Handler<AsyncResult<Short>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void intHandler(Handler<AsyncResult<Integer>> resultHandler) { resultHandler.handle(Future.succeededFuture(12345)); } @Override public void intNullHandler(Handler<AsyncResult<Integer>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void longHandler(Handler<AsyncResult<Long>> resultHandler) { resultHandler.handle(Future.succeededFuture(123456l)); } @Override public void longNullHandler(Handler<AsyncResult<Long>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void floatHandler(Handler<AsyncResult<Float>> resultHandler) { resultHandler.handle(Future.succeededFuture(12.34f)); } @Override public void floatNullHandler(Handler<AsyncResult<Float>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void doubleHandler(Handler<AsyncResult<Double>> resultHandler) { resultHandler.handle(Future.succeededFuture(12.3456d)); } @Override public void doubleNullHandler(Handler<AsyncResult<Double>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void charHandler(Handler<AsyncResult<Character>> resultHandler) { resultHandler.handle(Future.succeededFuture('X')); } @Override public void charNullHandler(Handler<AsyncResult<Character>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void booleanHandler(Handler<AsyncResult<Boolean>> resultHandler) { resultHandler.handle(Future.succeededFuture(true)); } @Override public void booleanNullHandler(Handler<AsyncResult<Boolean>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void jsonObjectHandler(Handler<AsyncResult<JsonObject>> resultHandler) { resultHandler.handle(Future.succeededFuture(new JsonObject().put("blah", "wibble"))); } @Override public void jsonObjectNullHandler(Handler<AsyncResult<JsonObject>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void jsonArrayHandler(Handler<AsyncResult<JsonArray>> resultHandler) { resultHandler.handle(Future.succeededFuture(new JsonArray().add("blurrg"))); } @Override public void jsonArrayNullHandler(Handler<AsyncResult<JsonArray>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void dataObjectHandler(Handler<AsyncResult<TestDataObject>> resultHandler) { resultHandler.handle(Future.succeededFuture(new TestDataObject().setString("foo").setNumber(123).setBool(true))); } @Override public void dataObjectNullHandler(Handler<AsyncResult<TestDataObject>> resultHandler) { resultHandler.handle(Future.succeededFuture(null)); } @Override public void voidHandler(Handler<AsyncResult<Void>> resultHandler) { resultHandler.handle(Future.succeededFuture((Void) null)); } @Override public TestService fluentMethod(String str, Handler<AsyncResult<String>> resultHandler) { assertEquals("foo", str); resultHandler.handle(Future.succeededFuture("bar")); return this; } @Override public TestService fluentNoParams() { vertx.eventBus().send("fluentReceived", "ok"); return this; } @Override public void failingMethod(Handler<AsyncResult<JsonObject>> resultHandler) { resultHandler.handle(Future.failedFuture(new VertxException("wibble"))); } @Override public void invokeWithMessage(JsonObject object, String str, int i, char chr, SomeEnum senum, Handler<AsyncResult<String>> resultHandler) { assertEquals("bar", object.getString("foo")); assertEquals("blah", str); assertEquals(1234, i); assertEquals('X', chr); assertEquals(SomeEnum.BAR, senum); resultHandler.handle(Future.succeededFuture("goats")); } @Override public void listStringHandler(Handler<AsyncResult<List<String>>> resultHandler) { List<String> list = Arrays.asList("foo", "bar", "wibble"); resultHandler.handle(Future.succeededFuture(list)); } @Override public void listByteHandler(Handler<AsyncResult<List<Byte>>> resultHandler) { List<Byte> list = Arrays.asList((byte)1, (byte)2, (byte)3); resultHandler.handle(Future.succeededFuture(list)); } @Override public void listShortHandler(Handler<AsyncResult<List<Short>>> resultHandler) { List<Short> list = Arrays.asList((short)11, (short)12, (short)13); resultHandler.handle(Future.succeededFuture(list)); } @Override public void listIntHandler(Handler<AsyncResult<List<Integer>>> resultHandler) { List<Integer> list = Arrays.asList(100, 101, 102); resultHandler.handle(Future.succeededFuture(list)); } @Override public void listLongHandler(Handler<AsyncResult<List<Long>>> resultHandler) { List<Long> list = Arrays.asList(1000l, 1001l, 1002l); resultHandler.handle(Future.succeededFuture(list)); } @Override public void listFloatHandler(Handler<AsyncResult<List<Float>>> resultHandler) { List<Float> list = Arrays.asList(1.1f, 1.2f, 1.3f); resultHandler.handle(Future.succeededFuture(list)); } @Override public void listDoubleHandler(Handler<AsyncResult<List<Double>>> resultHandler) { List<Double> list = Arrays.asList(1.11d, 1.12d, 1.13d); resultHandler.handle(Future.succeededFuture(list)); } @Override public void listCharHandler(Handler<AsyncResult<List<Character>>> resultHandler) { List<Character> list = Arrays.asList('X', 'Y', 'Z'); resultHandler.handle(Future.succeededFuture(list)); } @Override public void listBoolHandler(Handler<AsyncResult<List<Boolean>>> resultHandler) { List<Boolean> list = Arrays.asList(true, false, true); resultHandler.handle(Future.succeededFuture(list)); } @Override public void listJsonObjectHandler(Handler<AsyncResult<List<JsonObject>>> resultHandler) { List<JsonObject> list = Arrays.asList(new JsonObject().put("a", "foo"), new JsonObject().put("b", "bar"), new JsonObject().put("c", "wibble")); resultHandler.handle(Future.succeededFuture(list)); } @Override public void listJsonArrayHandler(Handler<AsyncResult<List<JsonArray>>> resultHandler) { List<JsonArray> list = Arrays.asList(new JsonArray().add("foo"), new JsonArray().add("bar"), new JsonArray().add("wibble")); resultHandler.handle(Future.succeededFuture(list)); } @Override public void setStringHandler(Handler<AsyncResult<Set<String>>> resultHandler) { Set<String> set = new LinkedHashSet<>(Arrays.asList("foo", "bar", "wibble")); resultHandler.handle(Future.succeededFuture(set)); } @Override public void setByteHandler(Handler<AsyncResult<Set<Byte>>> resultHandler) { Set<Byte> set = new LinkedHashSet<>(Arrays.asList((byte)1, (byte)2, (byte)3)); resultHandler.handle(Future.succeededFuture(set)); } @Override public void setShortHandler(Handler<AsyncResult<Set<Short>>> resultHandler) { Set<Short> set = new LinkedHashSet<>(Arrays.asList((short)11, (short)12, (short)13)); resultHandler.handle(Future.succeededFuture(set)); } @Override public void setIntHandler(Handler<AsyncResult<Set<Integer>>> resultHandler) { Set<Integer> set = new LinkedHashSet<>(Arrays.asList(100, 101, 102)); resultHandler.handle(Future.succeededFuture(set)); } @Override public void setLongHandler(Handler<AsyncResult<Set<Long>>> resultHandler) { Set<Long> set = new LinkedHashSet<>(Arrays.asList(1000l, 1001l, 1002l)); resultHandler.handle(Future.succeededFuture(set)); } @Override public void setFloatHandler(Handler<AsyncResult<Set<Float>>> resultHandler) { Set<Float> set = new LinkedHashSet<>(Arrays.asList(1.1f, 1.2f, 1.3f)); resultHandler.handle(Future.succeededFuture(set)); } @Override public void setDoubleHandler(Handler<AsyncResult<Set<Double>>> resultHandler) { Set<Double> set = new LinkedHashSet<>(Arrays.asList(1.11d, 1.12d, 1.13d)); resultHandler.handle(Future.succeededFuture(set)); } @Override public void setCharHandler(Handler<AsyncResult<Set<Character>>> resultHandler) { Set<Character> set = new LinkedHashSet<>(Arrays.asList('X', 'Y', 'Z')); resultHandler.handle(Future.succeededFuture(set)); } @Override public void setBoolHandler(Handler<AsyncResult<Set<Boolean>>> resultHandler) { Set<Boolean> set = new LinkedHashSet<>(Arrays.asList(true, false, true)); resultHandler.handle(Future.succeededFuture(set)); } @Override public void setJsonObjectHandler(Handler<AsyncResult<Set<JsonObject>>> resultHandler) { Set<JsonObject> set = new LinkedHashSet<>(Arrays.asList(new JsonObject().put("a", "foo"), new JsonObject().put("b", "bar"), new JsonObject().put("c", "wibble"))); resultHandler.handle(Future.succeededFuture(set)); } @Override public void setJsonArrayHandler(Handler<AsyncResult<Set<JsonArray>>> resultHandler) { Set<JsonArray> set = new LinkedHashSet<>(Arrays.asList(new JsonArray().add("foo"), new JsonArray().add("bar"), new JsonArray().add("wibble"))); resultHandler.handle(Future.succeededFuture(set)); } @Override public void ignoredMethod() { vertx.eventBus().send(ServiceProxyTest.TEST_ADDRESS, "called"); } @Override public void listDataObjectHandler(Handler<AsyncResult<List<TestDataObject>>> resultHandler) { List<TestDataObject> list = Arrays.asList(new TestDataObject().setNumber(1).setString("String 1").setBool(false), new TestDataObject().setNumber(2).setString("String 2").setBool(true)); resultHandler.handle(Future.succeededFuture(list)); } @Override public void setDataObjectHandler(Handler<AsyncResult<Set<TestDataObject>>> resultHandler) { Set<TestDataObject> set = new LinkedHashSet<>(Arrays.asList(new TestDataObject().setNumber(1).setString("String 1").setBool(false), new TestDataObject().setNumber(2).setString("String 2").setBool(true))); resultHandler.handle(Future.succeededFuture(set)); } @Override public void longDeliverySuccess(Handler<AsyncResult<String>> resultHandler) { vertx.setTimer(10*1000L, tid -> { resultHandler.handle(Future.succeededFuture("blah")); }); } @Override public void longDeliveryFailed(Handler<AsyncResult<String>> resultHandler) { vertx.setTimer(30*1000L, tid -> { resultHandler.handle(Future.succeededFuture("blah")); }); } @Override public void failingCall(String value, Handler<AsyncResult<JsonObject>> resultHandler) { if (value.equals("Fail")) { resultHandler.handle(ServiceException.fail(25, "Call has failed", new JsonObject().put("test", "val"))); } else if (value.equals("Fail subclass")) { resultHandler.handle(MyServiceException.fail(25, "Call has failed", "some extra")); } else { resultHandler.handle(Future.succeededFuture(new JsonObject())); } } }