blob: 75473c2be585e3592aa1684e6a6480c70177cfff [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.cache.configuration;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.apache.geode.internal.config.JAXBService;
import org.apache.geode.management.configuration.RegionType;
public class CacheConfigTest {
private CacheConfig cacheConfig;
private JAXBService service;
private RegionConfig regionConfig;
private String regionXml;
private DeclarableType declarableWithString;
private String declarableWithStringXml;
private String classNameTypeXml;
private DeclarableType declarableWithParam;
private String declarableWithParamXml;
private String cacheXml;
@Before
public void setUp() throws Exception {
cacheConfig = new CacheConfig("1.0");
cacheXml =
"<cache version=\"1.0\" xsi:schemaLocation=\"http://geode.apache.org/schema/cache http://geode.apache.org/schema/cache/cache-1.0.xsd\" xmlns=\"http://geode.apache.org/schema/cache\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">";
service = new JAXBService(CacheConfig.class);
service.validateWithLocalCacheXSD();
regionConfig = new RegionConfig();
regionConfig.setName("regionA");
regionConfig.setType(RegionType.REPLICATE);
regionXml = "<region name=\"regionA\" refid=\"REPLICATE\">";
classNameTypeXml = "<class-name>my.className</class-name>";
declarableWithString = new DeclarableType("my.className", "{'key':'value'}");
declarableWithStringXml =
classNameTypeXml + "<parameter name=\"key\"><string>value</string></parameter>";
declarableWithParam = new DeclarableType("my.className");
ParameterType param = new ParameterType("key");
param.setDeclarable(declarableWithString);
declarableWithParam.getParameters().add(param);
declarableWithParamXml = classNameTypeXml + "<parameter name=\"key\"><declarable>"
+ declarableWithStringXml + "</declarable></parameter>";
}
@After
public void tearDown() throws Exception {
// make sure the marshalled xml passed validation
System.out.println(service.marshall(cacheConfig));
}
@Test
public void indexType() {
String xml = cacheXml + regionXml
+ "<index name=\"indexName\" expression=\"expression\" key-index=\"true\"/>"
+ "</region></cache>";
cacheConfig = service.unMarshall(xml);
RegionConfig.Index index = cacheConfig.getRegions().get(0).getIndexes().get(0);
assertThat(index.isKeyIndex()).isTrue();
assertThat(index.getName()).isEqualTo("indexName");
assertThat(index.getExpression()).isEqualTo("expression");
assertThat(index.getType()).isEqualTo("key");
}
@Test
public void regionEntry() {
String xml = cacheXml + regionXml + "<entry>" + "<key><string>key1</string></key>"
+ "<value><declarable>" + declarableWithStringXml + "</declarable></value>" + "</entry>"
+ "<entry>" + "<key><string>key2</string></key>" + "<value><declarable>"
+ declarableWithParamXml + "</declarable></value>" + "</entry>" + "</region></cache>";
cacheConfig = service.unMarshall(xml);
RegionConfig.Entry entry = cacheConfig.getRegions().get(0).getEntries().get(0);
assertThat(entry.getKey().toString()).isEqualTo("key1");
assertThat(entry.getValue().getDeclarable()).isEqualTo(declarableWithString);
entry = cacheConfig.getRegions().get(0).getEntries().get(1);
assertThat(entry.getKey().toString()).isEqualTo("key2");
assertThat(entry.getValue().getDeclarable()).isEqualTo(declarableWithParam);
}
@Test
public void cacheTransactionManager() {
String xml = cacheXml + "<cache-transaction-manager>" + "<transaction-listener>"
+ declarableWithStringXml + "</transaction-listener>" + "<transaction-writer>"
+ declarableWithStringXml + "</transaction-writer>"
+ "</cache-transaction-manager></cache>";
cacheConfig = service.unMarshall(xml);
assertThat(cacheConfig.getCacheTransactionManager().getTransactionWriter())
.isEqualTo(declarableWithString);
assertThat(cacheConfig.getCacheTransactionManager().getTransactionListeners().get(0))
.isEqualTo(declarableWithString);
}
@Test
public void declarables() {
String xml = cacheXml + "<region-attributes>" + "<cache-loader>" + declarableWithStringXml
+ "</cache-loader>" + "<cache-listener>" + declarableWithStringXml + "</cache-listener>"
+ "<cache-writer>" + declarableWithStringXml + "</cache-writer>" + "<compressor>"
+ classNameTypeXml + "</compressor>"
+ "<region-time-to-live><expiration-attributes timeout=\"0\"><custom-expiry>"
+ declarableWithStringXml + "</custom-expiry></expiration-attributes></region-time-to-live>"
+ "</region-attributes>" + "<function-service><function>" + declarableWithStringXml
+ "</function></function-service>" + "<initializer>" + declarableWithStringXml
+ "</initializer>" + "<pdx><pdx-serializer>" + declarableWithStringXml
+ "</pdx-serializer></pdx>" + "<cache-server><custom-load-probe>" + declarableWithStringXml
+ "</custom-load-probe></cache-server>" + "<gateway-conflict-resolver>"
+ declarableWithStringXml + "</gateway-conflict-resolver>"
+ "<gateway-receiver><gateway-transport-filter>" + declarableWithStringXml
+ "</gateway-transport-filter></gateway-receiver>" + "<async-event-queue id=\"queue\">"
+ "<gateway-event-substitution-filter>" + declarableWithStringXml
+ "</gateway-event-substitution-filter>" + "<gateway-event-filter>"
+ declarableWithStringXml + "</gateway-event-filter>" + "<async-event-listener>"
+ declarableWithStringXml + "</async-event-listener>" + "</async-event-queue>"
+ "<gateway-hub id=\"hub\"><gateway id=\"gateway\"><gateway-listener>"
+ declarableWithStringXml + "</gateway-listener></gateway></gateway-hub>" + "</cache>";
cacheConfig = service.unMarshall(xml);
assertThat(cacheConfig.getInitializer()).isEqualTo(declarableWithString);
assertThat(cacheConfig.getFunctionService().getFunctions().get(0))
.isEqualTo(declarableWithString);
assertThat(cacheConfig.getPdx().getPdxSerializer()).isEqualTo(declarableWithString);
assertThat(cacheConfig.getCacheServers().get(0).getCustomLoadProbe())
.isEqualTo(declarableWithString);
assertThat(cacheConfig.getGatewayConflictResolver()).isEqualTo(declarableWithString);
assertThat(cacheConfig.getGatewayReceiver().getGatewayTransportFilters().get(0))
.isEqualTo(declarableWithString);
assertThat(cacheConfig.getGatewayHubs().get(0).getGateway().get(0).getGatewayListeners().get(0))
.isEqualTo(declarableWithString);
CacheConfig.AsyncEventQueue asyncEventQueue = cacheConfig.getAsyncEventQueues().get(0);
assertThat(asyncEventQueue.getAsyncEventListener()).isEqualTo(declarableWithString);
assertThat(asyncEventQueue.getGatewayEventFilters().get(0)).isEqualTo(declarableWithString);
assertThat(asyncEventQueue.getGatewayEventSubstitutionFilter()).isEqualTo(declarableWithString);
RegionAttributesType regionAttributes = cacheConfig.getRegionAttributes().get(0);
assertThat(regionAttributes.getCacheListeners().get(0)).isEqualTo(declarableWithString);
assertThat(regionAttributes.getCompressor().toString()).isEqualTo("my.className");
assertThat(regionAttributes.getCacheLoader()).isEqualTo(declarableWithString);
assertThat(regionAttributes.getCacheWriter()).isEqualTo(declarableWithString);
assertThat(regionAttributes.getRegionTimeToLive().getCustomExpiry())
.isEqualTo(declarableWithString);
}
@Test
public void regionConfig() {
cacheConfig = new CacheConfig("1.0");
RegionConfig regionConfig = new RegionConfig();
regionConfig.setName("test");
regionConfig.setType(RegionType.REPLICATE);
RegionAttributesType attributes = new RegionAttributesType();
attributes.setCacheLoader(new DeclarableType("abc.Foo"));
regionConfig.setRegionAttributes(attributes);
cacheConfig.getRegions().add(regionConfig);
// make sure the xml marshed by this config can be validated with xsd
String xml = service.marshall(cacheConfig);
CacheConfig newCache = service.unMarshall(xml);
assertThat(cacheConfig).isEqualToComparingFieldByFieldRecursively(newCache);
}
@Test
public void regionAttributeType() throws Exception {
String xml = "<region name=\"test\">\n"
+ " <region-attributes>\n"
+ " <region-time-to-live>\n"
+ " <expiration-attributes action=\"invalidate\" timeout=\"20\">\n"
+ " <custom-expiry>\n"
+ " <class-name>bar</class-name>\n"
+ " </custom-expiry>\n"
+ " </expiration-attributes>\n"
+ " </region-time-to-live>\n"
+ " <entry-time-to-live>\n"
+ " <expiration-attributes action=\"destroy\" timeout=\"10\">\n"
+ " <custom-expiry>\n"
+ " <class-name>foo</class-name>\n"
+ " </custom-expiry>\n"
+ " </expiration-attributes>\n"
+ " </entry-time-to-live>\n"
+ " </region-attributes>\n"
+ " </region>";
RegionConfig regionConfig = service.unMarshall(xml, RegionConfig.class);
RegionAttributesType.ExpirationAttributesType entryTimeToLive =
regionConfig.getRegionAttributes().getEntryTimeToLive();
assertThat(entryTimeToLive.getTimeout()).isEqualTo("10");
assertThat(entryTimeToLive.getAction()).isEqualTo("destroy");
assertThat(entryTimeToLive.getCustomExpiry().getClassName()).isEqualTo("foo");
RegionAttributesType.ExpirationAttributesType regionTimeToLive =
regionConfig.getRegionAttributes().getRegionTimeToLive();
assertThat(regionTimeToLive.getTimeout()).isEqualTo("20");
assertThat(regionTimeToLive.getAction()).isEqualTo("invalidate");
assertThat(regionTimeToLive.getCustomExpiry().getClassName()).isEqualTo("bar");
cacheConfig.getRegions().add(regionConfig);
}
}