public static void toJson(KeyValueList obj, java.util.Map<String, Object> json) { json.put("index", obj.getIndex()); if (obj.getList() != null) { JsonArray array = new JsonArray(); obj.getList().forEach(item -> array.add(item.toJson())); json.put("list", array); } } }
@Override void wait(long index, Handler<AsyncResult<State<KeyValueList>>> handler) { BlockingQueryOptions options = new BlockingQueryOptions().setWait(BLOCKING_WAIT).setIndex(index); consulClient.getValuesWithOptions(keyPrefix, options, h -> handler.handle(h.map(kv -> new State<KeyValueList>(kv, kv.getIndex())))); } }
private void checkKeyValueList(KeyValueList expected, KeyValueList actual) { assertEquals(expected, actual); assertEquals(expected.hashCode(), actual.hashCode()); assertEquals(expected.getIndex(), actual.getIndex()); List<KeyValue> expectedList = expected.getList(); List<KeyValue> actualList = actual.getList(); assertTrue(expectedList.containsAll(actualList)); assertTrue(actualList.containsAll(expectedList)); }
@Test public void canGetValuesBlocking(TestContext tc) { blockingQuery(tc, (key, h) -> ctx.readClient().getValues(key, tc.asyncAssertSuccess(list -> h.handle(list.getIndex())))); }
@Test public void testKeyValueListCopy() { List<KeyValue> list = new ArrayList<>(); list.add(randomKeyValue()); list.add(randomKeyValue()); KeyValueList kvList = new KeyValueList() .setList(list) .setIndex(randomLong()); checkKeyValueList(kvList, new KeyValueList(kvList)); checkKeyValueList(kvList, new KeyValueList(kvList.toJson())); List<KeyValue> shuffled = new ArrayList<>(); shuffled.add(list.get(1)); shuffled.add(list.get(0)); KeyValueList kvShuffled = new KeyValueList() .setList(shuffled) .setIndex(kvList.getIndex()); checkKeyValueList(kvList, kvShuffled); }
private void blockingQuery(TestContext tc, BiConsumer<String, Handler<Long>> indexSupplier) { String key = randomFooBarAlpha(); String value = randomAlphaString(10); ctx.writeClient() .putValue(key, randomAlphaString(10), tc.asyncAssertSuccess(b1 -> { tc.assertTrue(b1); indexSupplier.accept(key, consulIndex -> { Async async = tc.async(2); vertx.setTimer(TimeUnit.SECONDS.toMillis(2), l -> { ctx.writeClient().putValue(key, value, tc.asyncAssertSuccess(b2 -> { tc.assertTrue(b2); ctx.readClient().getValueWithOptions(key, new BlockingQueryOptions().setIndex(consulIndex), tc.asyncAssertSuccess(kv -> { tc.assertTrue(kv.getModifyIndex() > consulIndex); tc.assertEquals(kv.getValue(), value); async.countDown(); })); ctx.readClient().getValuesWithOptions("foo/bar", new BlockingQueryOptions().setIndex(consulIndex), tc.asyncAssertSuccess(kv -> { tc.assertTrue(kv.getIndex() > consulIndex); tc.assertTrue(kv.getList().size() == 1); async.countDown(); })); })); }); async.handler(v -> ctx.writeClient().deleteValue(key, tc.asyncAssertSuccess())); }); })); } }