### Question:
CounterResource implements ResourceHandler { private CompletionStage<RestResponse> createCounter(RestRequest request) throws RestResponseException { NettyRestResponse.Builder responseBuilder = new NettyRestResponse.Builder(); String counterName = request.variables().get("counterName"); String contents = request.contents().asString(); if (contents == null || contents.length() == 0) { responseBuilder.status(HttpResponseStatus.BAD_REQUEST); responseBuilder.entity("Configuration not provided"); return completedFuture(responseBuilder.build()); } CounterConfiguration configuration = createCounterConfiguration(contents); if (configuration == null) { responseBuilder.status(HttpResponseStatus.BAD_REQUEST).entity("Invalid configuration"); return completedFuture(responseBuilder.build()); } return counterManager.defineCounterAsync(counterName, configuration).thenApply(r -> responseBuilder.build()); } CounterResource(InvocationHelper invocationHelper); @Override Invocations getInvocations();  }### Answer:
@Test public void testWeakCounterLifecycle() { CounterConfiguration counterConfig = CounterConfiguration.builder(CounterType.WEAK) .initialValue(5).storage(Storage.VOLATILE).concurrencyLevel(6).build(); createCounter("sample-counter", counterConfig); RestCounterClient counterClient = client.counter("sample-counter"); RestResponse response = join(counterClient.configuration(APPLICATION_JSON_TYPE)); Json jsonNode = Json.read(response.getBody()); Json config = jsonNode.at("weak-counter"); assertEquals(config.at("initial-value").asInteger(), 5); assertEquals(config.at("storage").asString(), "VOLATILE"); assertEquals(config.at("concurrency-level").asInteger(), 6); response = join(counterClient.delete()); assertThat(response).isOk(); response = join(counterClient.configuration()); assertThat(response).isNotFound(); }
@Test public void testWeakCounterOps() { String name = "weak-test"; createCounter(name, CounterConfiguration.builder(CounterType.WEAK).initialValue(5).build()); RestCounterClient counterClient = client.counter(name); CompletionStage<RestResponse> response = counterClient.increment(); assertThat(response).hasNoContent(); waitForCounterToReach(name, 6); response = counterClient.increment(); assertThat(response).hasNoContent(); waitForCounterToReach(name, 7); response = counterClient.decrement(); assertThat(response).hasNoContent(); waitForCounterToReach(name, 6); response = counterClient.decrement(); assertThat(response).hasNoContent(); waitForCounterToReach(name, 5); response = counterClient.add(10); assertThat(response).hasNoContent(); waitForCounterToReach(name, 15); response = counterClient.reset(); assertThat(response).hasNoContent(); waitForCounterToReach(name, 5); }
@Test public void testStrongCounterOps() { String name = "strong-test"; createCounter(name, CounterConfiguration.builder(CounterType.BOUNDED_STRONG).lowerBound(0).upperBound(100) .initialValue(0).build()); RestCounterClient counterClient = client.counter(name); CompletionStage<RestResponse> response = counterClient.increment(); assertThat(response).hasReturnedText("1"); response = counterClient.increment(); assertThat(response).hasReturnedText("2"); response = counterClient.decrement(); assertThat(response).hasReturnedText("1"); response = counterClient.decrement(); assertThat(response).hasReturnedText("0"); response = counterClient.add(35); assertThat(response).hasReturnedText("35"); waitForCounterToReach(name, 35); response = counterClient.compareAndSet(5, 32); assertThat(response).hasReturnedText("false"); response = counterClient.compareAndSet(35, 50); assertThat(response).hasReturnedText("true"); waitForCounterToReach(name, 50); response = counterClient.compareAndSwap(50, 90); assertThat(response).hasReturnedText("50"); response = counterClient.get(); assertThat(response).hasReturnedText("90"); }