You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2016/10/11 20:50:54 UTC
incubator-geode git commit: Function deployment test
Repository: incubator-geode
Updated Branches:
refs/heads/feature/e2e-testing 6d097230a -> aa9b675fb
Function deployment test
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/aa9b675f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/aa9b675f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/aa9b675f
Branch: refs/heads/feature/e2e-testing
Commit: aa9b675fb312e2e515586c62dd277c1d206c01d3
Parents: 6d09723
Author: Jens Deppe <jd...@pivotal.io>
Authored: Tue Oct 11 13:50:49 2016 -0700
Committer: Jens Deppe <jd...@pivotal.io>
Committed: Tue Oct 11 13:50:49 2016 -0700
----------------------------------------------------------------------
.../java/org/apache/geode/e2e/GetPutSteps.java | 30 +++++++++++-
.../geode/e2e/container/DockerCluster.java | 48 +++++++++++++++++---
.../org/apache/geode/e2e/get_put.story | 3 ++
3 files changed, 73 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/aa9b675f/geode-core/src/test/java/org/apache/geode/e2e/GetPutSteps.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/e2e/GetPutSteps.java b/geode-core/src/test/java/org/apache/geode/e2e/GetPutSteps.java
index 115dd69..e07ee34 100644
--- a/geode-core/src/test/java/org/apache/geode/e2e/GetPutSteps.java
+++ b/geode-core/src/test/java/org/apache/geode/e2e/GetPutSteps.java
@@ -1,13 +1,23 @@
package org.apache.geode.e2e;
+import static junit.framework.TestCase.assertNotNull;
import static org.junit.Assert.assertEquals;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
import com.spotify.docker.client.exceptions.DockerException;
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.execute.Execution;
+import org.apache.geode.cache.execute.FunctionService;
+import org.apache.geode.cache.execute.ResultCollector;
import org.apache.geode.e2e.container.DockerCluster;
import org.jbehave.core.annotations.AfterScenario;
import org.jbehave.core.annotations.BeforeScenario;
@@ -27,7 +37,7 @@ public class GetPutSteps {
}
@BeforeScenario
- public void beforeScenario() {
+ public void beforeScenario() throws IOException {
cluster = new DockerCluster("test-cluster");
}
@@ -94,5 +104,23 @@ public class GetPutSteps {
return cache;
}
+
+ @Given("function $fnName is deployed")
+ public void deployFunction(String fnClass) throws Exception {
+ String jar = cluster.injectScratchFile(Utils.getJarForClassName(fnClass));
+ cluster.gfshCommand("deploy --jar=" + jar);
+ }
+
+ @When("I call function with id $fnId on region $regionName with argument $arg it returns $returns")
+ public void foo(String fnId, String regionName, String arg, int returns) {
+ ClientCache cache = getClientCache();
+ Region region = cache.getRegion(regionName);
+ Execution exe = FunctionService.onServers(region.getRegionService());
+ ResultCollector rs = exe.withArgs(regionName).execute(fnId);
+ List<Integer> results = (List<Integer>) rs.getResult();
+
+ assertEquals(returns, results.stream().mapToInt(i -> i.intValue()).sum());
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/aa9b675f/geode-core/src/test/java/org/apache/geode/e2e/container/DockerCluster.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/e2e/container/DockerCluster.java b/geode-core/src/test/java/org/apache/geode/e2e/container/DockerCluster.java
index 96dae81..f1cd4e9 100644
--- a/geode-core/src/test/java/org/apache/geode/e2e/container/DockerCluster.java
+++ b/geode-core/src/test/java/org/apache/geode/e2e/container/DockerCluster.java
@@ -2,6 +2,11 @@ package org.apache.geode.e2e.container;
import static com.google.common.base.Charsets.*;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -29,8 +34,21 @@ public class DockerCluster {
private List<String> nodeIds;
private String locatorHost;
private int locatorPort;
+ private final String geodeHome;
+ private final String scratchDir;
+
+ private static final String SCRATCH_DIR_BASENAME = "scratch";
+
+ public DockerCluster(String name) throws IOException {
+ geodeHome = System.getenv("GEODE_HOME");
+ if (geodeHome == null) {
+ throw new IllegalStateException("GEODE_HOME environment variable is not set");
+ }
+
+ Path scratch = Files.createDirectory(Paths.get(geodeHome, SCRATCH_DIR_BASENAME));
+ scratch.toFile().deleteOnExit();
+ scratchDir = scratch.toString();
- public DockerCluster(String name) {
docker = DefaultDockerClient.builder().
uri("unix:///var/run/docker.sock").build();
@@ -46,6 +64,25 @@ public class DockerCluster {
this.locatorCount = count;
}
+ public String getScratchDir() {
+ return scratchDir;
+ }
+
+ /**
+ * Given a file on the local host's filesystem, copy that file into the cluster's
+ * global scratch area. The scratch file is deleted on exit.
+ * @param hostFile
+ * @return the cluster relative file name - for example /tmp/work/scratch/foo.zip
+ */
+ public String injectScratchFile(String hostFile) throws IOException {
+ Path localPath = Paths.get(hostFile);
+ Path scratchFile = Paths.get(getScratchDir(), localPath.getFileName().toString());
+ Files.copy(localPath, scratchFile);
+ scratchFile.toFile().deleteOnExit();
+
+ return Paths.get("/", "tmp", "work", SCRATCH_DIR_BASENAME, scratchFile.getFileName().toString()).toString();
+ }
+
public void start() throws Exception {
startLocators();
startServers();
@@ -56,12 +93,8 @@ public class DockerCluster {
}
public String startContainer(int index, Map<String, List<PortBinding>> portBindings) throws DockerException, InterruptedException {
- String geodeHome = System.getenv("GEODE_HOME");
- if (geodeHome == null) {
- throw new IllegalStateException("GEODE_HOME environment variable is not set");
- }
-
String vol = String.format("%s:/tmp/work", geodeHome);
+ String hostname = String.format("%s-%d", name, index);
HostConfig hostConfig = HostConfig.
builder().
@@ -73,13 +106,14 @@ public class DockerCluster {
image("gemfire/ubuntu-gradle").
openStdin(true).
exposedPorts(portBindings.keySet()).
- hostname(String.format("%s-%d", name, index)).
+ hostname(hostname).
hostConfig(hostConfig).
workingDir("/tmp").
build();
ContainerCreation creation = docker.createContainer(config);
String id = creation.id();
+// docker.renameContainer(id, hostname);
docker.startContainer(id);
docker.inspectContainer(id);
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/aa9b675f/geode-core/src/test/resources/org/apache/geode/e2e/get_put.story
----------------------------------------------------------------------
diff --git a/geode-core/src/test/resources/org/apache/geode/e2e/get_put.story b/geode-core/src/test/resources/org/apache/geode/e2e/get_put.story
index 9a451fc..b6651de 100644
--- a/geode-core/src/test/resources/org/apache/geode/e2e/get_put.story
+++ b/geode-core/src/test/resources/org/apache/geode/e2e/get_put.story
@@ -9,6 +9,9 @@ Given region BAR is created as PARTITION_REDUNDANT with redundancy 1
When I put 100 entries into region BAR
Then I can get 100 entries from region BAR
+Given function org.apache.geode.e2e.FnGetPrimaryBucketSize is deployed
+When I call function with id org.apache.geode.e2e.FnGetPrimaryBucketSize on region BAR with argument BAZ it returns 100
+
Given server 0 is killed
Then I can get 100 entries from region FOO
Then I can get 100 entries from region BAR