/* * Copyright 2010-2013 the original author or authors. * * Licensed 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.springframework.data.gemfire.config.xml; import static org.assertj.core.api.Assertions.assertThat; import java.util.Iterator; import org.apache.geode.cache.client.Pool; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.data.gemfire.TestUtils; import org.springframework.data.gemfire.client.PoolAdapter; import org.springframework.data.gemfire.client.PoolFactoryBean; import org.springframework.data.gemfire.support.ConnectionEndpoint; import org.springframework.data.gemfire.support.ConnectionEndpointList; import org.springframework.data.gemfire.test.GemfireTestApplicationContextInitializer; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * Integration tests for {@link PoolParser} and {@link PoolFactoryBean}. * * @author Costin Leau * @author John Blum * @see org.junit.Test * @see org.springframework.data.gemfire.client.PoolAdapter * @see org.springframework.data.gemfire.client.PoolFactoryBean * @see org.springframework.data.gemfire.config.xml.PoolParser * @see org.springframework.data.gemfire.test.GemfireTestApplicationContextInitializer * @see org.apache.geode.cache.client.Pool */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "pool-ns.xml", initializers = GemfireTestApplicationContextInitializer.class) @SuppressWarnings("unused") public class PoolNamespaceTest { @Autowired private ApplicationContext applicationContext; protected void assertConnectionEndpoint(ConnectionEndpointList connectionEndpoints, String expectedHost, int expectedPort) { assertThat(connectionEndpoints).isNotNull(); assertThat(connectionEndpoints.size()).isEqualTo(1); assertConnectionEndpoint(connectionEndpoints.get(0), expectedHost, expectedPort); } protected void assertConnectionEndpoint(ConnectionEndpoint connectionEndpoint, String expectedHost, int expectedPort) { assertThat(connectionEndpoint).isNotNull(); assertThat(connectionEndpoint.getHost()).isEqualTo(expectedHost); assertThat(connectionEndpoint.getPort()).isEqualTo(expectedPort); } protected void assertNoConnectionEndpoints(ConnectionEndpointList connectionEndpoints) { assertThat(connectionEndpoints).isNotNull(); assertThat(connectionEndpoints.isEmpty()).isTrue(); } @Test public void gemfirePoolIsConfiguredProperly() throws Exception { assertThat(applicationContext.containsBean("gemfirePool")).isTrue(); assertThat(applicationContext.containsBean("gemfire-pool")).isTrue(); PoolFactoryBean poolFactoryBean = applicationContext.getBean("&gemfirePool", PoolFactoryBean.class); ConnectionEndpointList locators = TestUtils.readField("locators", poolFactoryBean); assertConnectionEndpoint(locators, "localhost", 40403); } @Test public void simplePoolIsConfiguredProperly() throws Exception { assertThat(applicationContext.containsBean("simple")).isTrue(); PoolFactoryBean poolFactoryBean = applicationContext.getBean("&simple", PoolFactoryBean.class); ConnectionEndpointList servers = TestUtils.readField("servers", poolFactoryBean); assertConnectionEndpoint(servers, PoolParser.DEFAULT_HOST, PoolParser.DEFAULT_SERVER_PORT); ConnectionEndpointList locators = TestUtils.readField("locators", poolFactoryBean); assertNoConnectionEndpoints(locators); } @Test public void locatorPoolIsConfiguredProperly() throws Exception { assertThat(applicationContext.containsBean("locator")).isTrue(); PoolFactoryBean poolFactoryBean = applicationContext.getBean("&locator", PoolFactoryBean.class); ConnectionEndpointList locators = TestUtils.readField("locators", poolFactoryBean); assertThat(locators).isNotNull(); assertThat(locators.size()).isEqualTo(2); Iterator<ConnectionEndpoint> it = locators.iterator(); assertConnectionEndpoint(it.next(), "skullbox", PoolParser.DEFAULT_LOCATOR_PORT); assertConnectionEndpoint(it.next(), "ghostrider", 12480); ConnectionEndpointList servers = TestUtils.readField("servers", poolFactoryBean); assertNoConnectionEndpoints(servers); } @Test public void serverPoolIsConfiguredProperly() throws Exception { assertThat(applicationContext.containsBean("server")).isTrue(); PoolFactoryBean poolFactoryBean = applicationContext.getBean("&server", PoolFactoryBean.class); Pool pool = poolFactoryBean.getPool(); assertThat(pool).isInstanceOf(PoolAdapter.class); assertThat(pool.getFreeConnectionTimeout()).isEqualTo(2000); assertThat(pool.getIdleTimeout()).isEqualTo(20000L); assertThat(pool.getLoadConditioningInterval()).isEqualTo(10000); assertThat(Boolean.TRUE.equals(TestUtils.readField("keepAlive", poolFactoryBean))).isTrue(); assertThat(pool.getMaxConnections()).isEqualTo(100); assertThat(pool.getMinConnections()).isEqualTo(5); assertThat(pool.getMultiuserAuthentication()).isTrue(); assertThat(pool.getPingInterval()).isEqualTo(5000L); assertThat(pool.getPRSingleHopEnabled()).isFalse(); assertThat(pool.getReadTimeout()).isEqualTo(500); assertThat(pool.getRetryAttempts()).isEqualTo(5); assertThat(pool.getServerGroup()).isEqualTo("TestGroup"); assertThat(pool.getSocketBufferSize()).isEqualTo(65536); assertThat(pool.getStatisticInterval()).isEqualTo(250); assertThat(pool.getSubscriptionAckInterval()).isEqualTo(250); assertThat(pool.getSubscriptionEnabled()).isTrue(); assertThat(pool.getSubscriptionMessageTrackingTimeout()).isEqualTo(30000); assertThat(pool.getSubscriptionRedundancy()).isEqualTo(2); assertThat(pool.getThreadLocalConnections()).isFalse(); ConnectionEndpointList servers = TestUtils.readField("servers", poolFactoryBean); assertThat(servers).isNotNull(); assertThat(servers.size()).isEqualTo(2); Iterator<ConnectionEndpoint> serversIterator = servers.iterator(); assertConnectionEndpoint(serversIterator.next(), "localhost", 40404); assertConnectionEndpoint(serversIterator.next(), "localhost", 50505); } @Test public void locatorsPoolIsConfiguredProperly() throws Exception { assertThat(applicationContext.containsBean("locators")).isTrue(); PoolFactoryBean poolFactoryBean = applicationContext.getBean("&locators", PoolFactoryBean.class); ConnectionEndpointList locators = TestUtils.readField("locators", poolFactoryBean); assertThat(locators).isNotNull(); assertThat(locators.size()).isEqualTo(4); Iterator<ConnectionEndpoint> locatorIterator = locators.iterator(); assertConnectionEndpoint(locatorIterator.next(), "earth", 54321); assertConnectionEndpoint(locatorIterator.next(), "venus", 11235); assertConnectionEndpoint(locatorIterator.next(), "mars", 10334); assertConnectionEndpoint(locatorIterator.next(), "localhost", 12480); } @Test public void serversPoolIsConfiguredProperly() throws Exception { assertThat(applicationContext.containsBean("servers")).isTrue(); PoolFactoryBean poolFactoryBean = applicationContext.getBean("&servers", PoolFactoryBean.class); ConnectionEndpointList servers = TestUtils.readField("servers", poolFactoryBean); assertThat(servers).isNotNull(); assertThat(servers.size()).isEqualTo(3); Iterator<ConnectionEndpoint> serverIterator = servers.iterator(); assertConnectionEndpoint(serverIterator.next(), "duke", 21480); assertConnectionEndpoint(serverIterator.next(), "nukem", 51515); assertConnectionEndpoint(serverIterator.next(), "skullbox", 9110); } }