/* * Copyright 2002-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.function.execution; import static org.assertj.core.api.Assertions.assertThat; import org.apache.geode.cache.CacheClosedException; import org.apache.geode.cache.Region; import org.apache.geode.cache.client.ClientCache; import org.apache.geode.cache.client.ClientCacheFactory; import org.apache.geode.cache.client.ClientRegionShortcut; import org.apache.geode.cache.client.Pool; import org.apache.geode.cache.client.PoolManager; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.data.gemfire.fork.FunctionCacheServerProcess; import org.springframework.data.gemfire.process.ProcessWrapper; import org.springframework.data.gemfire.test.support.ClientServerIntegrationTestsSupport; /** * @author David Turanski * @author John Blum */ public class FunctionExecutionIntegrationTests extends ClientServerIntegrationTestsSupport { private static int availablePort; private static ProcessWrapper gemfireServer; private ClientCache gemfireCache = null; private Pool gemfirePool = null; private Region<String, String> gemfireRegion = null; @BeforeClass public static void startGemFireServer() throws Exception { availablePort = findAvailablePort(); gemfireServer = run(FunctionCacheServerProcess.class, String.format("-D%s=%d", GEMFIRE_CACHE_SERVER_PORT_PROPERTY, availablePort)); waitForServerToStart(DEFAULT_HOSTNAME, availablePort); System.setProperty(GEMFIRE_CACHE_SERVER_PORT_PROPERTY, String.valueOf(availablePort)); } @AfterClass public static void stopGemFireServer() { System.clearProperty(GEMFIRE_CACHE_SERVER_PORT_PROPERTY); stop(gemfireServer); } @Before public void setupGemFireClient() { gemfireCache = new ClientCacheFactory() .set("name", "FunctionExecutionIntegrationTests") .set("log-level", "warning") .setPoolSubscriptionEnabled(true) .addPoolServer("localhost", availablePort) .create(); gemfirePool = PoolManager.find("DEFAULT"); gemfireRegion = gemfireCache.<String, String>createClientRegionFactory(ClientRegionShortcut.PROXY) .create("test-function"); } @After public void tearDownGemFireClient() { if (gemfireCache != null) { try { gemfireCache.close(); } catch (CacheClosedException ignore) { } } } @Test public void basicFunctionExecutionsAreCorrect() { verifyFunctionExecution(new PoolServerFunctionExecution(gemfirePool)); verifyFunctionExecution(new RegionFunctionExecution(gemfireRegion)); verifyFunctionExecution(new ServerFunctionExecution(gemfireCache)); verifyFunctionExecution(new ServersFunctionExecution(gemfireCache)); } private void verifyFunctionExecution(AbstractFunctionExecution functionExecution) { Iterable<String> results = functionExecution.setArgs("1", "2", "3").setFunctionId("echoFunction").execute(); int count = 1; for (String result : results) { assertThat(result).isEqualTo(String.valueOf(count++)); } } }