blob: 76188f362d408dd57b4d05e8d6b2283e60b15867 [file] [log] [blame]
/*
* 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.management.internal.configuration;
import static java.nio.file.Files.createDirectories;
import static java.nio.file.Files.createFile;
import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
import static org.apache.geode.distributed.ConfigurationProperties.USE_CLUSTER_CONFIGURATION;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Properties;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Rule;
import org.apache.geode.management.internal.configuration.utils.ZipUtils;
import org.apache.geode.test.compiler.ClassBuilder;
import org.apache.geode.test.junit.rules.FolderRule;
public abstract class ClusterConfigTestBase {
protected String clusterConfigZipPath;
protected Path rootFolder;
public static final ConfigGroup CLUSTER = new ConfigGroup("cluster")
.regions("regionForCluster")
.jars("cluster.jar")
.maxLogFileSize("5000")
.configFiles("cluster.properties", "cluster.xml");
public static final ConfigGroup GROUP1 = new ConfigGroup("group1")
.regions("regionForGroup1")
.jars("group1.jar")
.maxLogFileSize("6000")
.configFiles("group1.properties", "group1.xml");
public static final ConfigGroup GROUP2 = new ConfigGroup("group2")
.regions("regionForGroup2")
.jars("group2.jar")
.maxLogFileSize("7000")
.configFiles("group2.properties", "group2.xml");
protected static final ClusterConfig CONFIG_FROM_ZIP = new ClusterConfig(CLUSTER, GROUP1, GROUP2);
protected static final ClusterConfig REPLICATED_CONFIG_FROM_ZIP = new ClusterConfig(
new ConfigGroup("cluster")
.maxLogFileSize("5000")
.jars("cluster.jar")
.regions("regionForCluster"),
new ConfigGroup("group1")
.maxLogFileSize("6000")
.jars("group1.jar")
.regions("regionForGroup1"),
new ConfigGroup("group2")
.maxLogFileSize("7000")
.jars("group2.jar")
.regions("regionForGroup2"));
@Rule
public FolderRule folderRule = new FolderRule();
protected Properties locatorProps;
protected Properties serverProps;
@Before
public void beforeClusterConfigTestBase() throws Exception {
rootFolder = folderRule.getFolder().toPath().toAbsolutePath();
clusterConfigZipPath = buildClusterZipFile();
locatorProps = new Properties();
serverProps = new Properties();
// the following are default values, we don't need to set them. We do it for clarity purpose
locatorProps.setProperty(ENABLE_CLUSTER_CONFIGURATION, "true");
serverProps.setProperty(USE_CLUSTER_CONFIGURATION, "true");
}
private String buildClusterZipFile() throws Exception {
File clusterConfigDir = createDirectories(rootFolder.resolve("cluster_config")).toFile();
File clusterDir = new File(clusterConfigDir, "cluster");
String clusterXml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
+ "<cache xmlns=\"http://geode.apache.org/schema/cache\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" copy-on-read=\"false\" is-server=\"false\" lock-lease=\"120\" lock-timeout=\"60\" search-timeout=\"300\" version=\"1.0\" xsi:schemaLocation=\"http://geode.apache.org/schema/cache http://geode.apache.org/schema/cache/cache-1.0.xsd\">\n"
+ "<region name=\"regionForCluster\">\n"
+ " <region-attributes data-policy=\"replicate\" scope=\"distributed-ack\"/>\n"
+ " </region>\n" + "</cache>\n";
writeFile(clusterDir, "cluster.xml", clusterXml);
writeFile(clusterDir, "cluster.properties", "log-file-size-limit=5000");
createJarFileWithClass("Cluster", "cluster.jar", clusterDir);
File group1Dir = new File(clusterConfigDir, "group1");
String group1Xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
+ "<cache xmlns=\"http://geode.apache.org/schema/cache\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" copy-on-read=\"false\" is-server=\"false\" lock-lease=\"120\" lock-timeout=\"60\" search-timeout=\"300\" version=\"1.0\" xsi:schemaLocation=\"http://geode.apache.org/schema/cache http://geode.apache.org/schema/cache/cache-1.0.xsd\">\n"
+ "<region name=\"regionForGroup1\">\n"
+ " <region-attributes data-policy=\"replicate\" scope=\"distributed-ack\"/>\n"
+ " </region>\n" + "</cache>\n";
writeFile(group1Dir, "group1.xml", group1Xml);
writeFile(group1Dir, "group1.properties", "log-file-size-limit=6000");
createJarFileWithClass("Group1", "group1.jar", group1Dir);
File group2Dir = new File(clusterConfigDir, "group2");
String group2Xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
+ "<cache xmlns=\"http://geode.apache.org/schema/cache\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" copy-on-read=\"false\" is-server=\"false\" lock-lease=\"120\" lock-timeout=\"60\" search-timeout=\"300\" version=\"1.0\" xsi:schemaLocation=\"http://geode.apache.org/schema/cache http://geode.apache.org/schema/cache/cache-1.0.xsd\">\n"
+ "<region name=\"regionForGroup2\">\n"
+ " <region-attributes data-policy=\"replicate\" scope=\"distributed-ack\"/>\n"
+ " </region>\n" + "</cache>\n";
writeFile(group2Dir, "group2.xml", group2Xml);
writeFile(group2Dir, "group2.properties", "log-file-size-limit=7000");
createJarFileWithClass("Group2", "group2.jar", group2Dir);
File clusterConfigZip = createFile(rootFolder.resolve("cluster_config.zip")).toFile();
ZipUtils.zipDirectory(clusterConfigDir.getCanonicalPath(), clusterConfigZip.getCanonicalPath());
FileUtils.deleteDirectory(clusterConfigDir);
return clusterConfigZip.getCanonicalPath();
}
private File writeFile(File dir, String fileName, String content) throws IOException {
dir.mkdirs();
File file = new File(dir, fileName);
FileUtils.writeStringToFile(file, content);
return file;
}
protected static String createJarFileWithClass(String className, String jarName, File dir)
throws IOException {
File jarFile = new File(dir, jarName);
new ClassBuilder().writeJarFromName(className, jarFile);
return jarFile.getCanonicalPath();
}
}