This is an automated email from the ASF dual-hosted git repository.
jensdeppe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 6820a3f GEODE-6364: Deploy of invalid jar file does not write file
contents to config on locator (#3164)
6820a3f is described below
commit 6820a3f1744ea017e5181f364caf578557e80886
Author: Jens Deppe <[email protected]>
AuthorDate: Thu Feb 7 06:52:17 2019 -0800
GEODE-6364: Deploy of invalid jar file does not write file contents to
config on locator (#3164)
---
.../ClusterConfigDeployJarDUnitTest.java | 32 ++++++++++++++++++++++
.../internal/cli/commands/DeployCommand.java | 13 +++++++++
2 files changed, 45 insertions(+)
diff --git
a/geode-core/src/distributedTest/java/org/apache/geode/management/internal/configuration/ClusterConfigDeployJarDUnitTest.java
b/geode-core/src/distributedTest/java/org/apache/geode/management/internal/configuration/ClusterConfigDeployJarDUnitTest.java
index 185cf14..3d3e225 100644
---
a/geode-core/src/distributedTest/java/org/apache/geode/management/internal/configuration/ClusterConfigDeployJarDUnitTest.java
+++
b/geode-core/src/distributedTest/java/org/apache/geode/management/internal/configuration/ClusterConfigDeployJarDUnitTest.java
@@ -18,10 +18,14 @@ import static
org.apache.geode.distributed.ConfigurationProperties.GROUPS;
import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
import static org.assertj.core.api.Assertions.assertThat;
+import java.io.File;
+import java.io.FileWriter;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
+import org.apache.geode.test.dunit.IgnoredException;
import org.apache.geode.test.dunit.rules.ClusterStartupRule;
import org.apache.geode.test.dunit.rules.MemberVM;
import org.apache.geode.test.junit.rules.GfshCommandRule;
@@ -133,6 +137,34 @@ public class ClusterConfigDeployJarDUnitTest extends
ClusterConfigTestBase {
}
@Test
+ public void testInvalidJarDeploy() throws Exception {
+ IgnoredException.addIgnoredException(IllegalArgumentException.class);
+
+ // set up the locator/servers
+ MemberVM locator = lsRule.startLocatorVM(0, locatorProps);
+ // server1 in no group
+ MemberVM server1 = lsRule.startServerVM(1, serverProps, locator.getPort());
+
+ gfshConnector.connect(locator);
+ assertThat(gfshConnector.isConnected()).isTrue();
+
+ File junkFile = temporaryFolder.newFile("junk");
+ FileWriter writer = new FileWriter(junkFile);
+ writer.write("this is not a real jar");
+ writer.close();
+
+ // We want to ensure that a mix of good and bad jars does not produce a
'partial' deploy.
+ gfshConnector.executeAndAssertThat("deploy --jar=" + clusterJar + ","
+ + junkFile.getAbsolutePath()).statusIsError();
+ gfshConnector.executeAndAssertThat("list deployed").statusIsSuccess()
+ .containsOutput("No JAR Files Found");
+
+ ConfigGroup cluster = new ConfigGroup("cluster").jars();
+ ClusterConfig expectedClusterConfig = new ClusterConfig(cluster);
+ expectedClusterConfig.verify(locator);
+ }
+
+ @Test
public void testUndeploy() throws Exception {
// set up the locator/servers
MemberVM locator = lsRule.startLocatorVM(0, locatorProps);
diff --git
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DeployCommand.java
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DeployCommand.java
index 39efca0..090f73a 100644
---
a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DeployCommand.java
+++
b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DeployCommand.java
@@ -37,6 +37,7 @@ import org.springframework.shell.core.annotation.CliOption;
import org.apache.geode.cache.execute.ResultCollector;
import org.apache.geode.distributed.DistributedMember;
import
org.apache.geode.distributed.internal.InternalConfigurationPersistenceService;
+import org.apache.geode.internal.DeployedJar;
import org.apache.geode.management.cli.CliMetaData;
import org.apache.geode.management.cli.ConverterHint;
import org.apache.geode.management.cli.Result;
@@ -84,6 +85,8 @@ public class DeployCommand extends InternalGfshCommand {
List<String> jarFullPaths = CommandExecutionContext.getFilePathFromShell();
+ verifyJarContent(jarFullPaths);
+
Set<DistributedMember> targetMembers;
targetMembers = findMembers(groups, null);
@@ -148,6 +151,16 @@ public class DeployCommand extends InternalGfshCommand {
return result;
}
+ private void verifyJarContent(List<String> jarNames) {
+ for (String jarName : jarNames) {
+ File jar = new File(jarName);
+ if (!DeployedJar.hasValidJarContent(jar)) {
+ throw new IllegalArgumentException(
+ "File does not contain valid JAR content: " + jar.getName());
+ }
+ }
+ }
+
/**
* Interceptor used by gfsh to intercept execution of deploy command at
"shell".
*/