blob: c0a8b173d9909df89e67d4d4bc20bc121ed5a033 [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 org.assertj.core.api.Assertions.assertThat;
import java.io.File;
import java.nio.charset.Charset;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.apache.geode.cache.Region;
import org.apache.geode.management.internal.cli.domain.MyCacheListener;
import org.apache.geode.management.internal.cli.domain.MyCacheWriter;
import org.apache.geode.management.internal.configuration.utils.ZipUtils;
import org.apache.geode.test.dunit.rules.ClusterStartupRule;
import org.apache.geode.test.dunit.rules.MemberVM;
import org.apache.geode.test.junit.rules.GfshCommandRule;
public class ClusterConfigWithCallbacksDUnitTest {
@Rule
public ClusterStartupRule cluster = new ClusterStartupRule();
@Rule
public GfshCommandRule gfsh = new GfshCommandRule();
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();
private MemberVM locator, server;
private File clusterConfigZip;
@Before
public void buildClusterConfigZip() throws Exception {
File clusterConfigDir = tempFolder.newFolder("cluster_config");
File clusterDir = new File(clusterConfigDir, "cluster");
clusterDir.mkdir();
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"
+ " <cache-writer><class-name>org.apache.geode.management.internal.cli.domain.MyCacheWriter</class-name><parameter name=\"key\"><string>value</string></parameter></cache-writer>\n"
+ " <cache-listener><class-name>org.apache.geode.management.internal.cli.domain.MyCacheListener</class-name><parameter name=\"key\"><string>value</string></parameter></cache-listener>\n"
+ " </region-attributes>\n" + "</region></cache>";
File xmlFile = new File(clusterDir, "cluster.xml");
FileUtils.writeStringToFile(xmlFile, clusterXml, Charset.defaultCharset());
clusterConfigZip = new File(tempFolder.getRoot(), "cluster_config.zip");
ZipUtils.zipDirectory(clusterConfigDir.getAbsolutePath(), clusterConfigZip.getAbsolutePath());
}
@Test
public void importCCWithCallbacks() throws Exception {
locator = cluster.startLocatorVM(0);
server = cluster.startServerVM(1, locator.getPort());
gfsh.connectAndVerify(locator);
// import cluster configuration with a running server
gfsh.executeAndAssertThat(
"import cluster-configuration --zip-file-name=" + clusterConfigZip.getAbsolutePath())
.statusIsSuccess().containsOutput("Configure the servers in 'cluster' group");
// assert that the callbacks are properly hooked up with the region
server.invoke(() -> {
Region region = ClusterStartupRule.getCache().getRegion("/regionForCluster");
MyCacheWriter writer = (MyCacheWriter) region.getAttributes().getCacheWriter();
MyCacheListener listener = (MyCacheListener) region.getAttributes().getCacheListeners()[0];
assertThat(writer.getProperties().getProperty("key")).isEqualTo("value");
assertThat(listener.getProperties().getProperty("key")).isEqualTo("value");
});
}
}