blob: ea383fe4707d6026054d68b92ec12bc8e544fec2 [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.converters;
import static org.apache.geode.lang.Identifiable.find;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.io.File;
import java.net.URL;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Test;
import org.apache.geode.cache.RegionShortcut;
import org.apache.geode.cache.configuration.CacheConfig;
import org.apache.geode.cache.configuration.RegionAttributesDataPolicy;
import org.apache.geode.cache.configuration.RegionAttributesType;
import org.apache.geode.cache.configuration.RegionConfig;
import org.apache.geode.internal.config.JAXBService;
import org.apache.geode.management.configuration.Region;
import org.apache.geode.management.configuration.RegionType;
public class RegionConverterTest {
private RegionConverter converter;
private RegionConfig config;
private Region region;
@Before
public void before() throws Exception {
converter = new RegionConverter();
config = new RegionConfig();
region = new Region();
}
@Test
public void fromXmlWithNameType() throws Exception {
config.setName("test");
config.setRegionAttributes(converter.createRegionAttributesByType("REPLICATE"));
Region region = converter.fromXmlObject(config);
assertThat(region.getName()).isEqualTo("test");
assertThat(region.getType()).isEqualTo(RegionType.REPLICATE);
}
@Test
public void fromXmlWithAll() throws Exception {
config.setName("test");
config.setRegionAttributes(converter.createRegionAttributesByType("PARTITION"));
RegionAttributesType attributesType = config.getRegionAttributes();
attributesType.setValueConstraint("foo");
attributesType.setKeyConstraint("bar");
attributesType.setDiskStoreName("diskstore");
config.setRegionAttributes(attributesType);
RegionAttributesType.PartitionAttributes partitionAttributes =
new RegionAttributesType.PartitionAttributes();
partitionAttributes.setRedundantCopies("2");
attributesType.setPartitionAttributes(partitionAttributes);
Region region = converter.fromXmlObject(config);
assertThat(region.getName()).isEqualTo("test");
assertThat(region.getType()).isEqualTo(RegionType.PARTITION);
assertThat(region.getValueConstraint()).isEqualTo("foo");
assertThat(region.getKeyConstraint()).isEqualTo("bar");
assertThat(region.getDiskStoreName()).isEqualTo("diskstore");
assertThat(region.getRedundantCopies()).isEqualTo(2);
assertThat(region.getExpirations()).isNull();
}
@Test
public void fromXmlWithLocalType() throws Exception {
config.setName("test");
config.setRegionAttributes(converter.createRegionAttributesByType("LOCAL"));
assertThat(converter.fromXmlObject(config).getType()).isEqualTo(RegionType.LEGACY);
}
@Test
public void fromXmlWithNullType() throws Exception {
config.setName("test");
config.setType((String) null);
assertThat(converter.fromXmlObject(config).getType()).isEqualTo(RegionType.LEGACY);
}
@Test
public void fromConfig() throws Exception {
region.setName("test");
region.setType(RegionType.PARTITION);
region.setValueConstraint("foo");
region.setKeyConstraint("bar");
region.setDiskStoreName("diskstore");
region.setRedundantCopies(2);
RegionConfig config = converter.fromConfigObject(region);
assertThat(config.getName()).isEqualTo("test");
assertThat(config.getType()).isEqualTo("PARTITION");
RegionAttributesType regionAttributes = config.getRegionAttributes();
assertThat(regionAttributes.getDataPolicy()).isEqualTo(RegionAttributesDataPolicy.PARTITION);
assertThat(regionAttributes.getKeyConstraint()).isEqualTo("bar");
assertThat(regionAttributes.getValueConstraint()).isEqualTo("foo");
assertThat(regionAttributes.getDiskStoreName()).isEqualTo("diskstore");
assertThat(regionAttributes.getPartitionAttributes().getRedundantCopies()).isEqualTo("2");
assertThat(regionAttributes.isStatisticsEnabled()).isTrue();
assertThat(regionAttributes.getEntryIdleTime()).isNull();
assertThat(regionAttributes.getEntryTimeToLive()).isNull();
}
@Test
public void checkDefaultRegionAttributesForShortcuts() throws Exception {
URL xmlResource = RegionConverterTest.class.getResource("RegionConverterTest.xml");
assertThat(xmlResource).isNotNull();
CacheConfig master =
new JAXBService(CacheConfig.class)
.unMarshall(FileUtils.readFileToString(new File(xmlResource.getFile()), "UTF-8"));
RegionShortcut[] shortcuts = RegionShortcut.values();
for (RegionShortcut shortcut : shortcuts) {
RegionConfig config = new RegionConfig();
config.setType(shortcut.name());
config.setName(shortcut.name());
config.setRegionAttributes(converter.createRegionAttributesByType(shortcut.name()));
RegionConfig masterRegion = find(master.getRegions(), shortcut.name());
assertThat(config).isEqualToComparingFieldByFieldRecursively(masterRegion);
}
}
@Test
public void getRegionType() throws Exception {
assertThat(converter.getRegionType("ABC", null))
.isEqualTo(RegionType.LEGACY);
assertThat(converter.getRegionType(null, null)).isEqualTo(RegionType.LEGACY);
RegionAttributesType regionAttributes = new RegionAttributesType();
assertThat(converter.getRegionType(null, regionAttributes)).isEqualTo(RegionType.LEGACY);
regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PARTITION);
assertThat(converter.getRegionType(null, regionAttributes)).isEqualTo(RegionType.PARTITION);
RegionAttributesType.PartitionAttributes pAttributes =
new RegionAttributesType.PartitionAttributes();
pAttributes.setLocalMaxMemory("20000");
regionAttributes.setPartitionAttributes(pAttributes);
assertThat(converter.getRegionType(null, regionAttributes)).isEqualTo(RegionType.PARTITION);
assertThat(converter.getRegionType("PARTITION_REDUNDANT", regionAttributes))
.isEqualTo(RegionType.PARTITION);
pAttributes.setLocalMaxMemory("0");
assertThat(converter.getRegionType(null, regionAttributes))
.isEqualTo(RegionType.PARTITION_PROXY);
assertThat(converter.getRegionType("PARTITION_PROXY_REDUNDANT", regionAttributes))
.isEqualTo(RegionType.PARTITION_PROXY);
assertThat(converter.getRegionType("PARTITION_PROXY", regionAttributes))
.isEqualTo(RegionType.PARTITION_PROXY);
regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PERSISTENT_PARTITION);
assertThat(converter.getRegionType(null, regionAttributes))
.isEqualTo(RegionType.PARTITION_PERSISTENT);
regionAttributes.setDataPolicy(RegionAttributesDataPolicy.REPLICATE);
assertThat(converter.getRegionType(null, regionAttributes)).isEqualTo(RegionType.REPLICATE);
regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PERSISTENT_REPLICATE);
assertThat(converter.getRegionType(null, regionAttributes))
.isEqualTo(RegionType.REPLICATE_PERSISTENT);
regionAttributes.setDataPolicy(RegionAttributesDataPolicy.EMPTY);
assertThat(converter.getRegionType(null, regionAttributes))
.isEqualTo(RegionType.REPLICATE_PROXY);
regionAttributes.setDataPolicy(RegionAttributesDataPolicy.NORMAL);
assertThat(converter.getRegionType(null, regionAttributes)).isEqualTo(RegionType.LEGACY);
regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PRELOADED);
assertThat(converter.getRegionType(null, regionAttributes)).isEqualTo(RegionType.LEGACY);
}
@Test
public void fromXmlWithPartitionRedundantType() throws Exception {
config.setName("test");
config.setType("PARTITION_REDUNDANT");
RegionAttributesType attributesType = new RegionAttributesType();
attributesType.setDataPolicy(RegionAttributesDataPolicy.PARTITION);
attributesType.setRedundantCopy("3");
config.setRegionAttributes(attributesType);
region = converter.fromXmlObject(config);
assertThat(region.getType()).isEqualTo(RegionType.PARTITION);
assertThat(region.getRedundantCopies()).isEqualTo(3);
}
@Test
public void fromXmlWithPartitionRedundantPersistentType() throws Exception {
config.setName("test");
config.setType("PARTITION_REDUNDANT_PERSISTENT");
RegionAttributesType attributesType = new RegionAttributesType();
attributesType.setDataPolicy(RegionAttributesDataPolicy.PERSISTENT_PARTITION);
attributesType.setRedundantCopy("3");
config.setRegionAttributes(attributesType);
region = converter.fromXmlObject(config);
assertThat(region.getType()).isEqualTo(RegionType.PARTITION_PERSISTENT);
assertThat(region.getRedundantCopies()).isEqualTo(3);
}
@Test
public void fromXmlWithPartitionProxyRedundantType() throws Exception {
config.setName("test");
config.setType("PARTITION_PROXY_REDUNDANT");
RegionAttributesType attributesType = new RegionAttributesType();
config.setRegionAttributes(attributesType);
attributesType.setDataPolicy(RegionAttributesDataPolicy.PARTITION);
attributesType.setRedundantCopy("3");
attributesType.setLocalMaxMemory("0");
region = converter.fromXmlObject(config);
assertThat(region.getType()).isEqualTo(RegionType.PARTITION_PROXY);
assertThat(region.getRedundantCopies()).isEqualTo(3);
}
@Test
public void createRegionAttributesByInvalidType() throws Exception {
assertThatThrownBy(() -> converter.createRegionAttributesByType("abc"))
.isInstanceOf(IllegalArgumentException.class);
}
@Test
public void convertRegionExpirationFromXml() throws Exception {
config.setType("REPLICATE");
config.setName("test");
RegionAttributesType attributes = new RegionAttributesType();
attributes.setEntryTimeToLive(
new RegionAttributesType.ExpirationAttributesType(10, "destroy", null, null));
attributes.setEntryIdleTime(
new RegionAttributesType.ExpirationAttributesType(100, "local-destroy", null, null));
attributes.setRegionIdleTime(
new RegionAttributesType.ExpirationAttributesType(101, "invalidate", null, null));
attributes.setRegionTimeToLive(
new RegionAttributesType.ExpirationAttributesType(102, "local-invalidate", null, null));
config.setRegionAttributes(attributes);
Region region = converter.fromXmlObject(config);
List<Region.Expiration> expirations = region.getExpirations();
assertThat(expirations).hasSize(4);
assertThat(expirations.get(0).getTimeInSeconds()).isEqualTo(100);
assertThat(expirations.get(0).getAction()).isEqualTo(Region.ExpirationAction.LEGACY);
assertThat(expirations.get(0).getType()).isEqualTo(Region.ExpirationType.ENTRY_IDLE_TIME);
assertThat(expirations.get(1).getTimeInSeconds()).isEqualTo(10);
assertThat(expirations.get(1).getAction()).isEqualTo(Region.ExpirationAction.DESTROY);
assertThat(expirations.get(1).getType()).isEqualTo(Region.ExpirationType.ENTRY_TIME_TO_LIVE);
assertThat(expirations.get(2).getTimeInSeconds()).isEqualTo(101);
assertThat(expirations.get(2).getAction()).isEqualTo(Region.ExpirationAction.INVALIDATE);
assertThat(expirations.get(2).getType()).isEqualTo(Region.ExpirationType.LEGACY);
assertThat(expirations.get(3).getTimeInSeconds()).isEqualTo(102);
assertThat(expirations.get(3).getAction()).isEqualTo(Region.ExpirationAction.LEGACY);
assertThat(expirations.get(3).getType()).isEqualTo(Region.ExpirationType.LEGACY);
}
@Test
public void convertRegionExpirationFromConfig() throws Exception {
region.setName("test");
region.setType(RegionType.REPLICATE);
region.addExpiry(Region.ExpirationType.ENTRY_IDLE_TIME, 100, null);
region.addExpiry(Region.ExpirationType.ENTRY_TIME_TO_LIVE, 101,
Region.ExpirationAction.INVALIDATE);
RegionConfig regionConfig = converter.fromConfigObject(region);
RegionAttributesType regionAttributes = regionConfig.getRegionAttributes();
assertThat(regionAttributes.getEntryIdleTime().getTimeout()).isEqualTo("100");
assertThat(regionAttributes.getEntryIdleTime().getAction()).isEqualTo("destroy");
assertThat(regionAttributes.getEntryIdleTime().getCustomExpiry()).isNull();
assertThat(regionAttributes.getEntryTimeToLive().getTimeout()).isEqualTo("101");
assertThat(regionAttributes.getEntryTimeToLive().getAction()).isEqualTo("invalidate");
assertThat(regionAttributes.getEntryTimeToLive().getCustomExpiry()).isNull();
}
@Test
public void convertExpirationFromConfig() throws Exception {
Region.Expiration expiration = new Region.Expiration();
expiration.setTimeInSeconds(2);
RegionAttributesType.ExpirationAttributesType expirationAttributes =
converter.convertFrom(expiration);
assertThat(expirationAttributes.getCustomExpiry()).isNull();
assertThat(expirationAttributes.getAction()).isEqualTo("destroy");
assertThat(expirationAttributes.getTimeout()).isEqualTo("2");
expiration.setTimeInSeconds(20);
expiration.setAction(Region.ExpirationAction.INVALIDATE);
expirationAttributes =
converter.convertFrom(expiration);
assertThat(expirationAttributes.getCustomExpiry()).isNull();
assertThat(expirationAttributes.getAction()).isEqualTo("invalidate");
assertThat(expirationAttributes.getTimeout()).isEqualTo("20");
}
@Test
public void convertExpirationFromXml() throws Exception {
RegionAttributesType.ExpirationAttributesType xmlConfig =
new RegionAttributesType.ExpirationAttributesType();
Region.Expiration expiration =
converter.convertFrom(Region.ExpirationType.ENTRY_IDLE_TIME, xmlConfig);
assertThat(expiration.getType()).isEqualTo(Region.ExpirationType.ENTRY_IDLE_TIME);
assertThat(expiration.getAction()).isEqualTo(Region.ExpirationAction.INVALIDATE);
assertThat(expiration.getTimeInSeconds()).isEqualTo(0);
xmlConfig.setTimeout("1000");
xmlConfig.setAction("destroy");
expiration =
converter.convertFrom(Region.ExpirationType.ENTRY_IDLE_TIME, xmlConfig);
assertThat(expiration.getType()).isEqualTo(Region.ExpirationType.ENTRY_IDLE_TIME);
assertThat(expiration.getAction()).isEqualTo(Region.ExpirationAction.DESTROY);
assertThat(expiration.getTimeInSeconds()).isEqualTo(1000);
xmlConfig.setAction("local-destroy");
expiration =
converter.convertFrom(Region.ExpirationType.ENTRY_IDLE_TIME, xmlConfig);
assertThat(expiration.getType()).isEqualTo(Region.ExpirationType.ENTRY_IDLE_TIME);
assertThat(expiration.getAction()).isEqualTo(Region.ExpirationAction.LEGACY);
assertThat(expiration.getTimeInSeconds()).isEqualTo(1000);
}
}