/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed 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
*******************************************************************************/
package org.ebayopensource.turmeric.runtime.tests.common.cachepolicy;
import static org.junit.Assert.*;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.ebayopensource.turmeric.runtime.binding.schema.DataElementSchema;
import org.ebayopensource.turmeric.runtime.common.cachepolicy.CacheContext;
import org.ebayopensource.turmeric.runtime.common.cachepolicy.CacheKey;
import org.ebayopensource.turmeric.runtime.common.cachepolicy.CachePolicyDesc;
import org.ebayopensource.turmeric.runtime.common.cachepolicy.CachePolicyHolder;
import org.ebayopensource.turmeric.runtime.common.cachepolicy.OperationCachePolicy;
import org.ebayopensource.turmeric.runtime.common.exceptions.ServiceCreationException;
import org.ebayopensource.turmeric.runtime.common.impl.internal.service.ServiceOperationParamDescImpl;
import org.ebayopensource.turmeric.runtime.common.impl.utils.ParseUtils;
import org.ebayopensource.turmeric.runtime.common.service.ServiceOperationParamDesc;
import org.ebayopensource.turmeric.runtime.common.types.SOAConstants;
import org.ebayopensource.turmeric.runtime.sif.impl.internal.config.ClientConfigManager;
import org.ebayopensource.turmeric.runtime.sif.impl.internal.pipeline.ClientMessageProcessor;
import org.ebayopensource.turmeric.runtime.sif.impl.internal.service.ClientServiceDesc;
import org.ebayopensource.turmeric.runtime.sif.impl.internal.service.ClientServiceDescFactory;
import org.ebayopensource.turmeric.runtime.spf.impl.internal.config.ServiceConfigManager;
import org.ebayopensource.turmeric.runtime.spf.impl.internal.pipeline.ServerMessageProcessor;
import org.ebayopensource.turmeric.runtime.spf.impl.internal.service.ServerServiceDesc;
import org.ebayopensource.turmeric.runtime.spf.impl.internal.service.ServerServiceDescFactory;
import org.ebayopensource.turmeric.runtime.tests.common.AbstractTurmericTestCase;
import org.junit.Test;
import org.junit.AfterClass;
public class CachePolicyTest extends AbstractTurmericTestCase {
static {
System.setProperty(ParseUtils.SYS_PROP_CONFIG_SCHEMA_CHECK, "ERROR");
}
@AfterClass
public static void setPropertyToNone() throws Exception {
System.setProperty(ParseUtils.SYS_PROP_CONFIG_SCHEMA_CHECK, "NONE");
}
@SuppressWarnings("rawtypes")
private List<Class> getRootClasses1() {
List<Class> list = new ArrayList<Class>();
list.add(GetVersionTestRequest.class);
return list;
}
@SuppressWarnings("rawtypes")
private List<Class> getRootClasses2() {
List<Class> list = new ArrayList<Class>();
list.add(GetVersion2TestRequest.class);
return list;
}
private List<DataElementSchema> getRootElement1() {
List<DataElementSchema> list = new ArrayList<DataElementSchema>();
return list;
}
private Map<String, ServiceOperationParamDesc> createOpDescMap1() throws ServiceCreationException {
Map<String, ServiceOperationParamDesc> opMap = new HashMap<String, ServiceOperationParamDesc>();
ServiceOperationParamDescImpl operationParamDesc = null;
operationParamDesc = new ServiceOperationParamDescImpl(getRootClasses1(), getRootElement1(), null, false);
opMap.put("getVersion", operationParamDesc);
return opMap;
}
private Map<String, ServiceOperationParamDesc> createOpDescMap2() {
Map<String, ServiceOperationParamDesc> opMap = new HashMap<String, ServiceOperationParamDesc>();
ServiceOperationParamDescImpl operationParamDesc = null;
try {
operationParamDesc =
new ServiceOperationParamDescImpl(getRootClasses1(), getRootElement1(), null, false);
} catch (ServiceCreationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
opMap.put("getVersion", operationParamDesc);
try {
operationParamDesc =
new ServiceOperationParamDescImpl(getRootClasses2(), getRootElement1(), null, false);
} catch (ServiceCreationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
opMap.put("echo", operationParamDesc);
return opMap;
}
@Test
public void testCachePlcyHolder_1op_success() throws Exception {
String xmlbuf = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<serviceCachePolicy xmlns=\"http://www.ebayopensource.org/turmeric/common/config\" name=\"test1\"> " +
"<operationCachePolicy name=\"getVersion\">" +
"<TTL>50</TTL>" +
"<keyExpressionSet>" +
"<keyExpression>version</keyExpression>" +
"<keyExpression>flag</keyExpression>" +
"</keyExpressionSet>" +
"</operationCachePolicy>" +
"</serviceCachePolicy>";
Map<String, ServiceOperationParamDesc> opMap = createOpDescMap1();
ByteArrayInputStream stream = new ByteArrayInputStream(xmlbuf.getBytes());;
CachePolicyHolder holder = CachePolicyHolder.loadCachePolicy(stream, "blha", SOAConstants.CACHE_POLICY_SCHEMA);
assertNotNull("CachePolicyHolder [blha]", holder);
assertEquals("test1", holder.getServiceName());
assertEquals("holder.OperationsCachePolicies().size()", 1, holder.getOperationCachePolicies().size());
OperationCachePolicy operationCachePolicy = holder.getOperationCachePolicies().get("getVersion");
assertNotNull("OperationCachePolicy", operationCachePolicy);
assertEquals("OperationCachePolicy.TTL", 50L, operationCachePolicy.getTTL());
assertEquals("OperationCachePolicy.keyExpressions.size",2,operationCachePolicy.getKeyExpressions().size());
assertTrue("OperationCachePolicy.keyExpressions[].contains('version')",operationCachePolicy.getKeyExpressions().contains("version"));
assertTrue("OperationCachePolicy.keyExpressions[].contains('flag')",operationCachePolicy.getKeyExpressions().contains("flag"));
CachePolicyDesc desc = CachePolicyDesc.create(holder, opMap);
GetVersionTestRequest testRequest = new GetVersionTestRequest();
testRequest.version = "1.0";
testRequest.flag = Boolean.FALSE;
CacheContext context = new CacheContext().setOpName("getVersion").setRequest(testRequest);
CacheKey cacheKey = desc.generateCacheKey(context);
assertNotNull("Generated Cache Key (from context)", cacheKey);
CacheKey key = CacheKey.createCacheKey(context.getOpName());
key.add("version", new String("1.0"));
key.add("flag", Boolean.FALSE);
assertEquals("Created Cache Key", cacheKey, key);
}
@Test
public void testCachePlcyHolder_2op_success() throws Exception {
String xmlbuf = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<serviceCachePolicy xmlns=\"http://www.ebayopensource.org/turmeric/common/config\" name=\"test1\"> " +
"<operationCachePolicy name=\"getVersion\">" +
"<TTL>50</TTL>" +
"<keyExpressionSet>" +
"<keyExpression>version</keyExpression>" +
"<keyExpression>flag</keyExpression>" +
"</keyExpressionSet>" +
"</operationCachePolicy>" +
"<operationCachePolicy name=\"echo\">" +
"<TTL>500</TTL>" +
"<keyExpressionSet>" +
"<keyExpression>timestamp</keyExpression>" +
"<keyExpression>count</keyExpression>" +
"</keyExpressionSet>" +
"</operationCachePolicy>" +
"</serviceCachePolicy>";
Map<String, ServiceOperationParamDesc> opMap = createOpDescMap2();
ByteArrayInputStream stream = new ByteArrayInputStream(xmlbuf.getBytes());;
// TestCacheProvider test = new TestCacheProvider();
CachePolicyHolder holder = null;
holder = CachePolicyHolder.loadCachePolicy(stream, "blha", SOAConstants.CACHE_POLICY_SCHEMA);
assertNotNull(holder);
assertEquals("test1", holder.getServiceName());
assertEquals(2, holder.getOperationCachePolicies().size());
OperationCachePolicy operationCachePolicy = holder.getOperationCachePolicies().get("getVersion");
assertNotNull(operationCachePolicy);
assertEquals(50L, operationCachePolicy.getTTL());
assertEquals(2,operationCachePolicy.getKeyExpressions().size());
assertTrue(operationCachePolicy.getKeyExpressions().contains("version"));
assertTrue(operationCachePolicy.getKeyExpressions().contains("flag"));
operationCachePolicy = holder.getOperationCachePolicies().get("echo");
assertNotNull(operationCachePolicy);
assertEquals(500L, operationCachePolicy.getTTL());
assertEquals(2,operationCachePolicy.getKeyExpressions().size());
assertTrue(operationCachePolicy.getKeyExpressions().contains("timestamp"));
assertTrue(operationCachePolicy.getKeyExpressions().contains("count"));
CachePolicyDesc desc = CachePolicyDesc.create(holder, opMap);
GetVersionTestRequest testRequest = new GetVersionTestRequest();
testRequest.version = "1.0";
testRequest.flag = Boolean.FALSE;
CacheContext context = new CacheContext().setOpName("getVersion").setRequest(testRequest);
CacheKey cacheKey = desc.generateCacheKey(context);
assertNotNull(cacheKey);
CacheKey key = CacheKey.createCacheKey(context.getOpName());
key.add("version", new String("1.0"));
key.add("flag", Boolean.FALSE);
assertEquals(cacheKey,key);
GetVersion2TestRequest testRequest2 = new GetVersion2TestRequest();
testRequest2.timestamp = new Date(1000L);
testRequest2.count = 100;
CacheContext context2 = new CacheContext().setOpName("echo").setRequest(testRequest2);
CacheKey cacheKey2 = desc.generateCacheKey(context2);
assertNotNull(cacheKey2);
CacheKey key2 = CacheKey.createCacheKey(context2.getOpName());
key2.add("timestamp", new Date(1000L));
key2.add("count", Integer.valueOf(100));
assertTrue(cacheKey2.equals(key2));
}
@Test
public void cachePolicy_validation_Success() throws Exception {
ServiceConfigManager configManager = ServiceConfigManager.getInstance();
configManager.setConfigTestCase("configtest5", "configtest5");
ServerMessageProcessor.getInstance();
ServerServiceDesc serviceDesc = ServerServiceDescFactory.getInstance().getServiceDesc("cachepolicy1");
assertNotNull(serviceDesc.getCachePolicyDesc());
}
@Test(expected=ServiceCreationException.class)
public void cachePolicy_invalidKey_NegativeTest() throws Exception {
ServiceConfigManager configManager = ServiceConfigManager.getInstance();
configManager.setConfigTestCase("configtest5", "configtest5");
ServerMessageProcessor.getInstance();
ServerServiceDescFactory.getInstance().getServiceDesc("cachepolicy2");
}
@Test(expected=ServiceCreationException.class)
public void cachePolicy_InvalidLeafTypeKey_NegativeTest() throws Exception {
ServiceConfigManager configManager = ServiceConfigManager.getInstance();
configManager.setConfigTestCase("configtest5", "configtest5");
ServerMessageProcessor.getInstance();
ServerServiceDescFactory.getInstance().getServiceDesc("cachepolicy3");
fail("Exception expected");
}
@Test
public void cachePolicy_ClientServiceDesc_Success() throws Exception {
ClientConfigManager configManager = ClientConfigManager.getInstance();
configManager.setConfigTestCase("configtest5", "configtest5");
ServiceConfigManager.getInstance().setConfigTestCase("configtest5", "configtest5");
ServerMessageProcessor.getInstance();
ClientMessageProcessor.getInstance();
ClientServiceDesc serviceDesc = ClientServiceDescFactory.getInstance().getServiceDesc("cachepolicy1", "cachepolicy1");
assertTrue(serviceDesc.getCacheProviderClass().getClass().equals(TestCacheProvider.class));
}
}