/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.etcd; import mousio.etcd4j.responses.EtcdLeaderStatsResponse; import mousio.etcd4j.responses.EtcdSelfStatsResponse; import mousio.etcd4j.responses.EtcdStoreStatsResponse; import org.apache.camel.Exchange; import org.apache.camel.Predicate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.junit.Test; public class EtcdStatsTest extends EtcdTestSupport { @Test public void testStats() throws Exception { testStatsConsumer("mock:stats-leader-consumer", EtcdConstants.ETCD_LEADER_STATS_PATH, EtcdLeaderStatsResponse.class); testStatsConsumer("mock:stats-self-consumer", EtcdConstants.ETCD_SELF_STATS_PATH, EtcdSelfStatsResponse.class); testStatsConsumer("mock:stats-store-consumer", EtcdConstants.ETCD_STORE_STATS_PATH, EtcdStoreStatsResponse.class); testStatsProducer("direct:stats-leader", "mock:stats-leader-producer", EtcdConstants.ETCD_LEADER_STATS_PATH, EtcdLeaderStatsResponse.class); testStatsProducer("direct:stats-self", "mock:stats-self-producer", EtcdConstants.ETCD_SELF_STATS_PATH, EtcdSelfStatsResponse.class); testStatsProducer("direct:stats-store", "mock:stats-store-producer", EtcdConstants.ETCD_STORE_STATS_PATH, EtcdStoreStatsResponse.class); } protected void testStatsConsumer(String mockEnpoint, String expectedPath, final Class<?> expectedType) throws Exception { MockEndpoint mock = getMockEndpoint(mockEnpoint); mock.expectedMinimumMessageCount(1); mock.expectedHeaderReceived(EtcdConstants.ETCD_NAMESPACE, EtcdNamespace.stats.name()); mock.expectedHeaderReceived(EtcdConstants.ETCD_PATH, expectedPath); mock.expectedMessagesMatches(new Predicate() { @Override public boolean matches(Exchange exchange) { return exchange.getIn().getBody().getClass() == expectedType; } }); assertMockEndpointsSatisfied(); } protected void testStatsProducer(String producerEnpoint, String mockEnpoint, String expectedPath, final Class<?> expectedType) throws Exception { sendBody(producerEnpoint, ""); testStatsConsumer(mockEnpoint, expectedPath, expectedType); } @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { public void configure() { // CONSUMER from("etcd:stats/leader?delay=50&initialDelay=0") .to("mock:stats-leader-consumer"); from("etcd:stats/self?delay=50&initialDelay=0") .to("mock:stats-self-consumer"); from("etcd:stats/store?delay=50&initialDelay=0") .to("mock:stats-store-consumer"); // PRODUCER from("direct:stats-leader") .to("etcd:stats/leader") .to("mock:stats-leader-producer"); from("direct:stats-self") .to("etcd:stats/self") .to("mock:stats-self-producer"); from("direct:stats-store") .to("etcd:stats/store") .to("mock:stats-store-producer"); } }; } }