You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by dh...@apache.org on 2019/07/22 21:27:50 UTC

[geode] branch extract-jar-rules created (now 1f14fc0)

This is an automated email from the ASF dual-hosted git repository.

dhemery pushed a change to branch extract-jar-rules
in repository https://gitbox.apache.org/repos/asf/geode.git.


      at 1f14fc0  Extract reusable rules from GatewayReceiverMetricsTest

This branch includes the following new commits:

     new 1f14fc0  Extract reusable rules from GatewayReceiverMetricsTest

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[geode] 01/01: Extract reusable rules from GatewayReceiverMetricsTest

Posted by dh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dhemery pushed a commit to branch extract-jar-rules
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 1f14fc0577eb404d7ddab1ef297803ad6e42aee5
Author: Kirk Lund <kl...@apache.org>
AuthorDate: Tue Jul 16 12:58:59 2019 -0700

    Extract reusable rules from GatewayReceiverMetricsTest
---
 .../geode/metrics/GatewayReceiverMetricsTest.java  | 67 ++++------------
 .../rules/MetricsPublishingServiceJarRule.java     | 92 ++++++++++++++++++++++
 .../geode/metrics/rules/SingleFunctionJarRule.java | 65 +++++++++++++++
 3 files changed, 171 insertions(+), 53 deletions(-)

diff --git a/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/GatewayReceiverMetricsTest.java b/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/GatewayReceiverMetricsTest.java
index 3e2931a..2973eb9 100644
--- a/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/GatewayReceiverMetricsTest.java
+++ b/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/GatewayReceiverMetricsTest.java
@@ -18,17 +18,11 @@ package org.apache.geode.metrics;
 import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
 import static org.assertj.core.api.Assertions.assertThat;
 
-import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.jar.JarEntry;
-import java.util.jar.JarOutputStream;
 
 import io.micrometer.core.instrument.Counter;
-import org.apache.commons.io.IOUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -40,7 +34,8 @@ import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.internal.AvailablePortHelper;
-import org.apache.geode.test.compiler.ClassBuilder;
+import org.apache.geode.metrics.rules.MetricsPublishingServiceJarRule;
+import org.apache.geode.metrics.rules.SingleFunctionJarRule;
 import org.apache.geode.test.junit.categories.MetricsTest;
 import org.apache.geode.test.junit.rules.gfsh.GfshRule;
 
@@ -53,12 +48,22 @@ public class GatewayReceiverMetricsTest {
   @Rule
   public TemporaryFolder temporaryFolder = new TemporaryFolder();
 
+  @Rule
+  public MetricsPublishingServiceJarRule metricsPublishingServiceJarRule =
+      new MetricsPublishingServiceJarRule("metrics-publishing-service.jar",
+          SimpleMetricsPublishingService.class);
+
+  @Rule
+  public SingleFunctionJarRule functionJarRule =
+      new SingleFunctionJarRule("function.jar", GetEventsReceivedCountFunction.class);
+
   private static final String SENDER_LOCATOR_NAME = "sender-locator";
   private static final String RECEIVER_LOCATOR_NAME = "receiver-locator";
   private static final String SENDER_SERVER_NAME = "sender-server";
   private static final String RECEIVER_SERVER_NAME = "receiver-server";
   private static final String REGION_NAME = "region";
   private static final String GFSH_COMMAND_SEPARATOR = " ";
+
   private String senderLocatorFolder;
   private String receiverLocatorFolder;
   private String senderServerFolder;
@@ -119,17 +124,13 @@ public class GatewayReceiverMetricsTest {
         "--server-port=" + senderServerPort,
         "--J=-Dgemfire.distributed-system-id=" + senderSystemId);
 
-    String metricsPublishingServiceJarPath =
-        newJarForMetricsPublishingServiceClass(SimpleMetricsPublishingService.class,
-            "metrics-publishing-service.jar");
-
     String startReceiverServerCommand = String.join(GFSH_COMMAND_SEPARATOR,
         "start server",
         "--name=" + RECEIVER_SERVER_NAME,
         "--dir=" + receiverServerFolder,
         "--locators=localhost[" + receiverLocatorPort + "]",
         "--server-port=" + receiverServerPort,
-        "--classpath=" + metricsPublishingServiceJarPath,
+        "--classpath=" + metricsPublishingServiceJarRule.absolutePath(),
         "--J=-Dgemfire.distributed-system-id=" + receiverSystemId);
 
     gfshRule.execute(startSenderLocatorCommand, startReceiverLocatorCommand,
@@ -166,9 +167,7 @@ public class GatewayReceiverMetricsTest {
         createReceiverRegionCommand);
 
     // Deploy function to members
-    String functionJarPath =
-        newJarForFunctionClass(GetEventsReceivedCountFunction.class, "function.jar");
-    String deployCommand = "deploy --jar=" + functionJarPath;
+    String deployCommand = functionJarRule.deployCommand();
     String listFunctionsCommand = "list functions";
 
     gfshRule.execute(connectToReceiverLocatorCommand, deployCommand, listFunctionsCommand);
@@ -229,44 +228,6 @@ public class GatewayReceiverMetricsTest {
     return temporaryFolder.newFolder(folderName).getAbsolutePath();
   }
 
-  private String newJarForFunctionClass(Class clazz, String jarName) throws IOException {
-    File jar = temporaryFolder.newFile(jarName);
-    new ClassBuilder().writeJarFromClass(clazz, jar);
-    return jar.getAbsolutePath();
-  }
-
-  private String newJarForMetricsPublishingServiceClass(Class clazz, String jarName)
-      throws IOException {
-    File jar = temporaryFolder.newFile(jarName);
-
-    String className = clazz.getName();
-    String classAsPath = className.replace('.', '/') + ".class";
-    InputStream stream = clazz.getClassLoader().getResourceAsStream(classAsPath);
-    byte[] bytes = IOUtils.toByteArray(stream);
-    try (FileOutputStream out = new FileOutputStream(jar)) {
-      JarOutputStream jarOutputStream = new JarOutputStream(out);
-
-      // Add the class file to the JAR file
-      JarEntry classEntry = new JarEntry(classAsPath);
-      classEntry.setTime(System.currentTimeMillis());
-      jarOutputStream.putNextEntry(classEntry);
-      jarOutputStream.write(bytes);
-      jarOutputStream.closeEntry();
-
-      String metaInfPath = "META-INF/services/org.apache.geode.metrics.MetricsPublishingService";
-
-      JarEntry metaInfEntry = new JarEntry(metaInfPath);
-      metaInfEntry.setTime(System.currentTimeMillis());
-      jarOutputStream.putNextEntry(metaInfEntry);
-      jarOutputStream.write(className.getBytes());
-      jarOutputStream.closeEntry();
-
-      jarOutputStream.close();
-    }
-
-    return jar.getAbsolutePath();
-  }
-
   public static class GetEventsReceivedCountFunction implements Function<Void> {
     static final String ID = "GetEventsReceivedCountFunction";
 
diff --git a/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/rules/MetricsPublishingServiceJarRule.java b/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/rules/MetricsPublishingServiceJarRule.java
new file mode 100644
index 0000000..52948a5
--- /dev/null
+++ b/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/rules/MetricsPublishingServiceJarRule.java
@@ -0,0 +1,92 @@
+/*
+ * 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.geode.metrics.rules;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Path;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.rules.ExternalResource;
+
+import org.apache.geode.metrics.MetricsPublishingService;
+import org.apache.geode.test.junit.rules.accessible.AccessibleTemporaryFolder;
+
+public class MetricsPublishingServiceJarRule extends ExternalResource {
+
+  private final AccessibleTemporaryFolder temporaryFolder;
+  private final String jarName;
+  private final Class<? extends MetricsPublishingService> serviceClass;
+
+  private Path jarPath;
+
+  public MetricsPublishingServiceJarRule(String jarName,
+      Class<? extends MetricsPublishingService> serviceClass) {
+    temporaryFolder = new AccessibleTemporaryFolder();
+    this.jarName = jarName;
+    this.serviceClass = serviceClass;
+  }
+
+  @Override
+  protected void before() throws Throwable {
+    temporaryFolder.before();
+    jarPath = newJar(jarName, serviceClass);
+  }
+
+  @Override
+  protected void after() {
+    temporaryFolder.after();
+  }
+
+  public String absolutePath() {
+    return jarPath.toAbsolutePath().toString();
+  }
+
+  private Path newJar(String jarName, Class<? extends MetricsPublishingService> serviceClass)
+      throws IOException {
+    File jar = temporaryFolder.newFile(jarName);
+
+    String className = serviceClass.getName();
+    String classAsPath = className.replace('.', '/') + ".class";
+    InputStream stream = serviceClass.getClassLoader().getResourceAsStream(classAsPath);
+    byte[] bytes = IOUtils.toByteArray(stream);
+    try (FileOutputStream out = new FileOutputStream(jar)) {
+      JarOutputStream jarOutputStream = new JarOutputStream(out);
+
+      // Add the class file to the JAR file
+      JarEntry classEntry = new JarEntry(classAsPath);
+      classEntry.setTime(System.currentTimeMillis());
+      jarOutputStream.putNextEntry(classEntry);
+      jarOutputStream.write(bytes);
+      jarOutputStream.closeEntry();
+
+      String metaInfPath = "META-INF/services/org.apache.geode.metrics.MetricsPublishingService";
+
+      JarEntry metaInfEntry = new JarEntry(metaInfPath);
+      metaInfEntry.setTime(System.currentTimeMillis());
+      jarOutputStream.putNextEntry(metaInfEntry);
+      jarOutputStream.write(className.getBytes());
+      jarOutputStream.closeEntry();
+
+      jarOutputStream.close();
+    }
+
+    return jar.toPath();
+  }
+}
diff --git a/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/rules/SingleFunctionJarRule.java b/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/rules/SingleFunctionJarRule.java
new file mode 100644
index 0000000..0d4b205
--- /dev/null
+++ b/geode-assembly/src/acceptanceTest/java/org/apache/geode/metrics/rules/SingleFunctionJarRule.java
@@ -0,0 +1,65 @@
+/*
+ * 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.geode.metrics.rules;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+
+import org.junit.rules.ExternalResource;
+
+import org.apache.geode.cache.execute.Function;
+import org.apache.geode.test.compiler.ClassBuilder;
+import org.apache.geode.test.junit.rules.accessible.AccessibleTemporaryFolder;
+
+public class SingleFunctionJarRule extends ExternalResource {
+
+  private final AccessibleTemporaryFolder temporaryFolder;
+  private final String jarName;
+  private final Class<? extends Function> functionClass;
+
+  private Path jarPath;
+
+  public SingleFunctionJarRule(String jarName, Class<? extends Function> functionClass) {
+    temporaryFolder = new AccessibleTemporaryFolder();
+    this.functionClass = functionClass;
+    this.jarName = jarName;
+  }
+
+  @Override
+  protected void before() throws Throwable {
+    temporaryFolder.before();
+    jarPath = newJar(jarName, functionClass);
+  }
+
+  @Override
+  protected void after() {
+    temporaryFolder.after();
+  }
+
+  public String absolutePath() {
+    return jarPath.toAbsolutePath().toString();
+  }
+
+  public String deployCommand() {
+    return "deploy --jar=" + absolutePath();
+  }
+
+  private Path newJar(String jarName, Class<? extends Function> functionClass) throws IOException {
+    File jar = temporaryFolder.newFile(jarName);
+    new ClassBuilder().writeJarFromClass(functionClass, jar);
+    return jar.toPath();
+  }
+}