diff --git a/common/function-test-support/pom.xml b/common/function-test-support/pom.xml
index 40b9b20f..4ef1608b 100644
--- a/common/function-test-support/pom.xml
+++ b/common/function-test-support/pom.xml
@@ -16,7 +16,6 @@
1.6.01.1.1
- 1.2.7.RELEASE4.0.3
@@ -28,12 +27,6 @@
compile
-
- org.springframework.data
- spring-data-geode
- true
-
-
org.springframework.integrationspring-integration-ftp
diff --git a/common/function-test-support/src/main/java/org/springframework/cloud/fn/test/support/geode/GeodeContainer.java b/common/function-test-support/src/main/java/org/springframework/cloud/fn/test/support/geode/GeodeContainer.java
deleted file mode 100644
index b00ff406..00000000
--- a/common/function-test-support/src/main/java/org/springframework/cloud/fn/test/support/geode/GeodeContainer.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright 2020-2020 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
- *
- * https://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.cloud.fn.test.support.geode;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.Future;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.containers.GenericContainer;
-
-import org.springframework.lang.NonNull;
-import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
-
-/**
- * A Test Container that starts a Geode Locator and Server on configured ports. This also
- * provides methods for executing one or more Gfsh commands.
- */
-public class GeodeContainer extends GenericContainer {
- private static Logger logger = LoggerFactory.getLogger(GeodeContainer.class);
-
- private final int locatorPort;
-
- private final int cacheServerPort;
-
- private final boolean useLocator;
-
- /**
- * Create a Geode container from a Docker image.
- * @param dockerImageName the name of the image.
- * @param locatorPort the locator port.
- * @param cacheServerPort the cache server port.
- * @param useLocator set to use a locator.
- */
- public GeodeContainer(@NonNull String dockerImageName, int locatorPort, int cacheServerPort, boolean useLocator) {
- super(dockerImageName);
- this.locatorPort = locatorPort;
- this.cacheServerPort = cacheServerPort;
- this.useLocator = useLocator;
- }
-
- public GeodeContainer(@NonNull String dockerImageName, int locatorPort, int cacheServerPort) {
- this(dockerImageName, locatorPort, cacheServerPort, false);
- }
-
- /**
- * Create a Geode Container from a {@code Future}. Test containers provides some
- * implementations as image builders, such as
- * {@link org.testcontainers.images.builder.ImageFromDockerfile}.
- * @param image the image builder.
- * @param locatorPort the locator port.
- * @param cacheServerPort the server port.
- * @param useLocator set to use a locator.
- */
- public GeodeContainer(@NonNull Future image, int locatorPort, int cacheServerPort, boolean useLocator) {
- super(image);
- this.locatorPort = locatorPort;
- this.cacheServerPort = cacheServerPort;
- this.useLocator = useLocator;
- }
-
- public GeodeContainer(@NonNull Future image, int locatorPort, int cacheServerPort) {
- this(image, locatorPort, cacheServerPort, false);
- }
-
- /**
- * A convenience method to connect to a locator with Gfsh.
- * @return the connect command String.
- */
- public String connect() {
- return useLocator ? "connect --locator=" + locators() : "connect --jmx-manager=localhost[1099]";
- }
-
- /**
- * Get the locator port.
- * @return the locator port.
- */
- public int getLocatorPort() {
- return locatorPort;
- }
-
- /**
- * Get the cache server port.
- * @return the cache server port.
- */
- public int getCacheServerPort() {
- return cacheServerPort;
- }
-
- /**
- *
- * @return Geode locators as host[port],...
- */
- public String locators() {
- return "localhost[" + locatorPort + "]";
- }
-
- /**
- * Invoke the `gfsh` shell, Connect to the locator and execute the commands.
- * @param command a list of commands to execute in a single `gfsh` invocation.
- * @return the {@link org.testcontainers.containers.Container.ExecResult}
- */
- public ExecResult connectAndExecGfsh(String... command) {
- ArrayList args = new ArrayList<>(Arrays.asList(command));
- args.add(0, connect());
- return execInContainer(Gfsh.command(args.toArray(new String[args.size()])).commandParts());
- }
-
- /**
- * Invoke the `gfsh` shell, and execute the commands.
- * @param command a list of commands to execute in a single `gfsh` invocation.
- * @return the {@link org.testcontainers.containers.Container.ExecResult}
- */
- public ExecResult execGfsh(String... command) {
- return execInContainer(Gfsh.command(command).commandParts());
- }
-
- /**
- * Executes a command in the container, logging stdout and stderr and wrapping checked
- * exceptions.
- * @see GenericContainer#execInContainer(String...)
- * @param command the command to execute.
- * @return the {@link org.testcontainers.containers.Container.ExecResult}
- */
- @Override
- public ExecResult execInContainer(String... command) {
- try {
- ExecResult execResult = super.execInContainer(command);
- logger.debug("stdout: {}", execResult.getStdout());
- if (execResult.getExitCode() != 0) {
- logger.warn("stdout: {}", execResult.getStdout());
- logger.warn("stderr: {}", execResult.getStderr());
- }
- return execResult;
- }
- catch (IOException e) {
- throw new RuntimeException(e.getMessage(), e);
- }
- catch (InterruptedException e) {
- throw new RuntimeException(e.getMessage(), e);
- }
- }
-
- /**
- * Builds a Gfsh command.
- */
- public final static class Gfsh {
-
- public static Command command(String... gfshCommands) {
- return new Command(gfshCommands);
- }
-
- public final static class Command {
- private final List commandParts = new LinkedList<>();
-
- private Command(String... gfshCommands) {
- Assert.notEmpty(gfshCommands, "at least one command is required");
- for (String gfshCommand : gfshCommands) {
- Assert.hasText(gfshCommand, "command must contain text");
- if (commandParts.size() == 0) {
- commandParts.add("gfsh");
- }
- commandParts.add("-e");
- commandParts.add(gfshCommand);
- }
- }
-
- public String[] commandParts() {
- return commandParts.toArray(new String[commandParts.size()]);
- }
-
- public String toString() {
- return StringUtils.collectionToDelimitedString(commandParts, ",");
- }
- }
- }
-
-}
diff --git a/common/function-test-support/src/main/java/org/springframework/cloud/fn/test/support/geode/GeodeContainerIntializer.java b/common/function-test-support/src/main/java/org/springframework/cloud/fn/test/support/geode/GeodeContainerIntializer.java
deleted file mode 100644
index c01b6618..00000000
--- a/common/function-test-support/src/main/java/org/springframework/cloud/fn/test/support/geode/GeodeContainerIntializer.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2020-2020 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
- *
- * https://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.cloud.fn.test.support.geode;
-
-import java.util.Optional;
-import java.util.function.Consumer;
-
-import com.github.dockerjava.api.command.CreateContainerCmd;
-import com.github.dockerjava.api.model.ExposedPort;
-import com.github.dockerjava.api.model.HostConfig;
-import com.github.dockerjava.api.model.PortBinding;
-import com.github.dockerjava.api.model.Ports;
-import org.testcontainers.images.builder.ImageFromDockerfile;
-
-import org.springframework.util.SocketUtils;
-
-/**
- * Creates and starts a {@link GeodeContainer} using available random ports for locator
- * and server. Runs a {@code Consumer} post processor if provided.
- * @author David Turanski
- */
-public class GeodeContainerIntializer {
-
- private int locatorPort;
-
- private int cacheServerPort;
-
- private GeodeContainer geode;
-
- private Optional> postProcessor;
-
- private final boolean useLocator;
-
- /**
- * Create, start, and perform post processing on a {@link GeodeContainer}.
- * @param postProcessor a {@code Consumer} to run after the container is
- * started.
- */
- public GeodeContainerIntializer(Consumer postProcessor) {
- this(postProcessor, false);
- }
-
- public GeodeContainerIntializer(Consumer postProcessor, boolean useLocator) {
- this.useLocator = useLocator;
-
- cacheServerPort = SocketUtils.findAvailableTcpPort();
-
- locatorPort = SocketUtils.findAvailableTcpPort();
-
- this.postProcessor = Optional.ofNullable(postProcessor);
-
- geode = new GeodeContainer(new ImageFromDockerfile()
- .withFileFromClasspath("Dockerfile", "geode/Dockerfile")
- .withBuildArg("CACHE_SERVER_PORT", String.valueOf(cacheServerPort))
- .withBuildArg("LOCATOR_PORT", String.valueOf(locatorPort)),
- locatorPort, cacheServerPort, useLocator);
- startContainer();
- }
-
- /**
- * Create and start a {@link GeodeContainer}.
- */
- public GeodeContainerIntializer() {
- this(null, false);
- }
-
- private void startContainer() {
- // There is apparently no way to initialize Geode with random port mapping. Ports
- // must be the same on client and server.
- Consumer cmd = e -> {
- e.withHostConfig(new HostConfig().withPortBindings(
- new PortBinding(Ports.Binding.bindPort(cacheServerPort), new ExposedPort(cacheServerPort)),
- new PortBinding(Ports.Binding.bindPort(locatorPort), new ExposedPort(locatorPort))));
- };
-
- // Wait forever
-
- geode.withCommand("tail", "-f", "/dev/null").withCreateContainerCmdModifier(cmd).start();
-
- if (useLocator) {
- geode.execGfsh("start locator --name=Locator1 --hostname-for-clients=localhost --port=" + locatorPort);
- geode.execGfsh(geode.connect(),
- "start server --name=Server1 --hostname-for-clients=localhost --server-port=" + cacheServerPort);
- }
- else {
- geode.execGfsh(
- "start server --name=Server1 --hostname-for-clients=localhost --server-port=" + cacheServerPort +
- " --J=-Dgemfire.jmx-manager=true --J=-Dgemfire.jmx-manager-start=true");
- }
- postProcessor.ifPresent(geodeContainerConsumer -> geodeContainerConsumer.accept(geode));
- }
-
- /**
- * @return the {@link GeodeContainer} instance.
- */
- public GeodeContainer geodeContainer() {
- return geode;
- }
-
-}
diff --git a/common/function-test-support/src/main/resources/geode/Dockerfile b/common/function-test-support/src/main/resources/geode/Dockerfile
deleted file mode 100644
index df5847e5..00000000
--- a/common/function-test-support/src/main/resources/geode/Dockerfile
+++ /dev/null
@@ -1,22 +0,0 @@
-# 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.
-
-FROM apachegeode/geode:1.12.0
-
-ARG CACHE_SERVER_PORT=40404
-ARG LOCATOR_PORT=10334
-
-EXPOSE ${LOCATOR_PORT} ${CACHE_SERVER_PORT}
diff --git a/consumer/geode-consumer/pom.xml b/consumer/geode-consumer/pom.xml
index 279086c2..dd249b38 100644
--- a/consumer/geode-consumer/pom.xml
+++ b/consumer/geode-consumer/pom.xml
@@ -31,11 +31,10 @@
config-common${project.version}
-
- org.springframework.cloud.fn
- function-test-support
- ${revision}
+ org.springframework.data
+ spring-data-geode-test
+ ${spring-data-geode-test.version}test
diff --git a/consumer/geode-consumer/src/test/java/org/springframework/cloud/fn/consumer/geode/GeodeConsumerApplicationTests.java b/consumer/geode-consumer/src/test/java/org/springframework/cloud/fn/consumer/geode/GeodeConsumerApplicationTests.java
index 59f0b8a1..cc551a07 100644
--- a/consumer/geode-consumer/src/test/java/org/springframework/cloud/fn/consumer/geode/GeodeConsumerApplicationTests.java
+++ b/consumer/geode-consumer/src/test/java/org/springframework/cloud/fn/consumer/geode/GeodeConsumerApplicationTests.java
@@ -16,6 +16,7 @@
package org.springframework.cloud.fn.consumer.geode;
+import java.io.IOException;
import java.util.function.Consumer;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -24,14 +25,15 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.geode.cache.Region;
import org.apache.geode.pdx.PdxInstance;
+import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
-import org.springframework.cloud.fn.test.support.geode.GeodeContainer;
-import org.springframework.cloud.fn.test.support.geode.GeodeContainerIntializer;
+import org.springframework.cloud.fn.consumer.geodeserver.GeodeServerTestConfiguration;
+import org.springframework.data.gemfire.tests.integration.ForkingClientServerIntegrationTestsSupport;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.GenericMessage;
@@ -39,24 +41,23 @@ import static org.assertj.core.api.Assertions.assertThat;
@Tag("integration")
public class GeodeConsumerApplicationTests {
-
private static ApplicationContextRunner applicationContextRunner;
- private static GeodeContainer geode;
-
private ObjectMapper objectMapper = new ObjectMapper();
@BeforeAll
- static void setup() {
- GeodeContainerIntializer initializer = new GeodeContainerIntializer(
- geodeContainer -> {
- geodeContainer.connectAndExecGfsh("create region --name=Stocks --type=REPLICATE");
- });
+ static void setup() throws IOException {
+ ForkingClientServerIntegrationTestsSupport.startGemFireServer(
+ GeodeServerTestConfiguration.class);
applicationContextRunner = new ApplicationContextRunner()
.withUserConfiguration(GeodeConsumerTestApplication.class);
+ }
- geode = initializer.geodeContainer();
+ @AfterAll
+ static void stopServer() {
+ ForkingClientServerIntegrationTestsSupport.stopGemFireServer();
+ ForkingClientServerIntegrationTestsSupport.clearCacheServerPortAndPoolPortProperties();
}
@Test
@@ -67,7 +68,7 @@ public class GeodeConsumerApplicationTests {
"geode.consumer.json=true",
"geode.consumer.key-expression=payload.getField('symbol')",
"geode.pool.connectType=server",
- "geode.pool.hostAddresses=" + "localhost:" + geode.getCacheServerPort())
+ "geode.pool.hostAddresses=" + "localhost:" + System.getProperty("spring.data.gemfire.cache.server.port"))
.run(context -> {
Consumer> geodeConsumer = context.getBean("geodeConsumer", Consumer.class);
@@ -88,7 +89,7 @@ public class GeodeConsumerApplicationTests {
"geode.region.regionName=Stocks",
"geode.consumer.key-expression='key'",
"geode.pool.connectType=server",
- "geode.pool.hostAddresses=" + "localhost:" + geode.getCacheServerPort())
+ "geode.pool.hostAddresses=" + "localhost:" + System.getProperty("spring.data.gemfire.cache.server.port"))
.run(context -> {
Consumer> geodeConsumer = context.getBean("geodeConsumer", Consumer.class);
diff --git a/consumer/geode-consumer/src/test/java/org/springframework/cloud/fn/consumer/geodeserver/GeodeServerTestConfiguration.java b/consumer/geode-consumer/src/test/java/org/springframework/cloud/fn/consumer/geodeserver/GeodeServerTestConfiguration.java
new file mode 100644
index 00000000..4ad3a629
--- /dev/null
+++ b/consumer/geode-consumer/src/test/java/org/springframework/cloud/fn/consumer/geodeserver/GeodeServerTestConfiguration.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2020-2020 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
+ *
+ * https://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.cloud.fn.consumer.geodeserver;
+
+import org.apache.geode.cache.GemFireCache;
+
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.gemfire.ReplicatedRegionFactoryBean;
+import org.springframework.data.gemfire.config.annotation.CacheServerApplication;
+
+@CacheServerApplication
+public class GeodeServerTestConfiguration {
+
+ public static void main(String[] args) {
+
+ AnnotationConfigApplicationContext applicationContext =
+ new AnnotationConfigApplicationContext(GeodeServerTestConfiguration.class);
+
+ applicationContext.registerShutdownHook();
+ }
+
+ @Bean("Stocks")
+ public ReplicatedRegionFactoryBean
- org.springframework.cloud.fn
- function-test-support
- ${project.version}
+ org.springframework.data
+ spring-data-geode-test
+ ${spring-data-geode-test.version}test
diff --git a/supplier/geode-supplier/src/test/java/org/springframework/cloud/fn/supplier/geode/GeodeSupplierApplicationTests.java b/supplier/geode-supplier/src/test/java/org/springframework/cloud/fn/supplier/geode/GeodeSupplierApplicationTests.java
index 0178cd2d..e07e0816 100644
--- a/supplier/geode-supplier/src/test/java/org/springframework/cloud/fn/supplier/geode/GeodeSupplierApplicationTests.java
+++ b/supplier/geode-supplier/src/test/java/org/springframework/cloud/fn/supplier/geode/GeodeSupplierApplicationTests.java
@@ -16,6 +16,7 @@
package org.springframework.cloud.fn.supplier.geode;
+import java.io.IOException;
import java.time.Duration;
import java.util.function.Supplier;
@@ -27,6 +28,7 @@ import lombok.NoArgsConstructor;
import org.apache.geode.cache.EntryEvent;
import org.apache.geode.cache.Region;
import org.apache.geode.pdx.PdxInstance;
+import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@@ -36,8 +38,8 @@ import reactor.test.StepVerifier;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.cloud.fn.common.geode.JsonPdxFunctions;
-import org.springframework.cloud.fn.test.support.geode.GeodeContainer;
-import org.springframework.cloud.fn.test.support.geode.GeodeContainerIntializer;
+import org.springframework.cloud.fn.supplier.geodeserver.GeodeServerTestConfiguration;
+import org.springframework.data.gemfire.tests.integration.ForkingClientServerIntegrationTestsSupport;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
@@ -47,21 +49,21 @@ public class GeodeSupplierApplicationTests {
private static ApplicationContextRunner applicationContextRunner;
- private static GeodeContainer geode;
-
private final ObjectMapper objectMapper = new ObjectMapper();
@BeforeAll
- static void setup() {
- GeodeContainerIntializer initializer = new GeodeContainerIntializer(
- geodeContainer -> {
- geodeContainer.connectAndExecGfsh("create region --name=myRegion --type=REPLICATE");
- });
+ static void setup() throws IOException {
+ ForkingClientServerIntegrationTestsSupport.startGemFireServer(
+ GeodeServerTestConfiguration.class);
applicationContextRunner = new ApplicationContextRunner()
.withUserConfiguration(GeodeSupplierTestApplication.class);
+ }
- geode = initializer.geodeContainer();
+ @AfterAll
+ static void stopServer() {
+ ForkingClientServerIntegrationTestsSupport.stopGemFireServer();
+ ForkingClientServerIntegrationTestsSupport.clearCacheServerPortAndPoolPortProperties();
}
@Test
@@ -70,7 +72,7 @@ public class GeodeSupplierApplicationTests {
.withPropertyValues("geode.region.regionName=myRegion",
"geode.supplier.event-expression=#root",
"geode.pool.connectType=server",
- "geode.pool.hostAddresses=" + "localhost:" + geode.getCacheServerPort())
+ "geode.pool.hostAddresses=" + "localhost:" + System.getProperty("spring.data.gemfire.cache.server.port"))
.run(context -> {
Region region = context.getBean(Region.class);
region.put("hello", "world");
@@ -103,7 +105,7 @@ public class GeodeSupplierApplicationTests {
"geode.region.regionName=myRegion",
"geode.client.pdx-read-serialized=true",
"geode.pool.connectType=server",
- "geode.pool.hostAddresses=" + "localhost:" + geode.getCacheServerPort())
+ "geode.pool.hostAddresses=" + "localhost:" + System.getProperty("spring.data.gemfire.cache.server.port"))
.run(context -> {
Supplier> geodeSupplier = context.getBean("geodeSupplier", Supplier.class);
// Using local region here
@@ -132,7 +134,7 @@ public class GeodeSupplierApplicationTests {
"geode.client.pdx-read-serialized=true",
"geode.supplier.query=Select * from /myRegion where symbol='XXX' and price > 140",
"geode.pool.connectType=server",
- "geode.pool.hostAddresses=" + "localhost:" + geode.getCacheServerPort())
+ "geode.pool.hostAddresses=" + "localhost:" + System.getProperty("spring.data.gemfire.cache.server.port"))
.run(context -> {
Supplier> geodeCqSupplier = context.getBean("geodeSupplier", Supplier.class);
// Using local region here
diff --git a/supplier/geode-supplier/src/test/java/org/springframework/cloud/fn/supplier/geodeserver/GeodeServerTestConfiguration.java b/supplier/geode-supplier/src/test/java/org/springframework/cloud/fn/supplier/geodeserver/GeodeServerTestConfiguration.java
new file mode 100644
index 00000000..f517b42e
--- /dev/null
+++ b/supplier/geode-supplier/src/test/java/org/springframework/cloud/fn/supplier/geodeserver/GeodeServerTestConfiguration.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2020-2020 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
+ *
+ * https://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.cloud.fn.supplier.geodeserver;
+
+import org.apache.geode.cache.GemFireCache;
+import org.apache.geode.cache.Scope;
+
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.data.gemfire.ReplicatedRegionFactoryBean;
+import org.springframework.data.gemfire.config.annotation.CacheServerApplication;
+
+@CacheServerApplication
+public class GeodeServerTestConfiguration {
+
+ public static void main(String[] args) {
+
+ AnnotationConfigApplicationContext applicationContext =
+ new AnnotationConfigApplicationContext(GeodeServerTestConfiguration.class);
+
+ applicationContext.registerShutdownHook();
+ }
+
+ @Bean("myRegion")
+ public ReplicatedRegionFactoryBean myRegion(GemFireCache gemfireCache) {
+
+ ReplicatedRegionFactoryBean regionFactoryBean = new ReplicatedRegionFactoryBean<>();
+ regionFactoryBean.setScope(Scope.DISTRIBUTED_ACK);
+ regionFactoryBean.setCache(gemfireCache);
+
+ return regionFactoryBean;
+ }
+}