package org.ebayopensource.qajunittests.advertisinguniqueidservicev2consumer.sif.caching; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; import com.ebay.marketplace.v1.services.GetEmployeeDetailsRequest; import com.ebay.marketplace.v1.services.GetPaymentDetailsRequest; import com.ebay.soa.test.user.RegistrationInfoType; import com.ebay.soaframework.common.cachepolicy.CacheContext; import com.ebay.soaframework.common.cachepolicy.CacheKey; import com.ebay.soaframework.common.cachepolicy.CachePolicyDesc; import com.ebay.soaframework.common.cachepolicy.CachePolicyDesc.CachableValueAccessor; import com.ebay.soaframework.common.exceptions.ServiceCreationException; import com.ebay.soaframework.common.exceptions.ServiceException; import com.ebay.soaframework.spf.impl.internal.config.ServiceConfigManager; import com.ebay.soaframework.spf.impl.internal.pipeline.ServerMessageProcessor; import com.ebay.soaframework.spf.impl.internal.service.ServerServiceDesc; import com.ebay.soaframework.spf.impl.internal.service.ServerServiceDescFactory; public class CacheUnitPositive { @Test public void testSameOpExisting() throws ServiceException{ GetEmployeeDetailsRequest req = new GetEmployeeDetailsRequest(); req.setId2(1); req.setSsn2(11111111); req.setUserName2("Surya"); ServiceConfigManager configManager = ServiceConfigManager.getInstance(); try { configManager.setConfigTestCase("UnitCachePos1"); ServerMessageProcessor.getInstance(); ServerServiceDesc serviceDesc = ServerServiceDescFactory.getInstance().getServiceDesc("SOATestAP1Caching"); CachePolicyDesc desc = serviceDesc.getCachePolicyDesc(); CacheContext context = new CacheContext().setOpName("getEmployeeDetails").setRequest(req); CacheKey cacheKey = desc.generateCacheKey(context); CacheKey key = CacheKey.createCacheKey(context.getOpName()); key.add("id2", 1); key.add("userName2", "Surya"); Assert.assertTrue(cacheKey.equals(key)); List<String> keyExpressions = desc.getKeyExpressions("getEmployeeDetails"); Assert.assertEquals(2,keyExpressions.size()); Assert.assertTrue(keyExpressions.contains("id2")); Assert.assertTrue(keyExpressions.contains("userName2")); long TTL = desc.getTTL("getEmployeeDetails"); Assert.assertTrue(TTL==50L); } catch(ServiceCreationException e) { e.printStackTrace(); Assert.assertTrue(false); }catch(Exception e){ e.printStackTrace(); Assert.assertTrue(false); } finally { configManager.setConfigTestCase("config"); } } @Test public void testDupKeyEntryExists() throws ServiceException{ GetEmployeeDetailsRequest req = new GetEmployeeDetailsRequest(); req.setId2(1); req.setSsn2(11111111); req.setUserName2("Surya"); ServiceConfigManager configManager = ServiceConfigManager.getInstance(); try { configManager.setConfigTestCase("UnitCachePos_DupKey"); ServerMessageProcessor.getInstance(); ServerServiceDesc serviceDesc = ServerServiceDescFactory.getInstance().getServiceDesc("SOATestAP1Caching"); CachePolicyDesc desc = serviceDesc.getCachePolicyDesc(); CacheContext context = new CacheContext().setOpName("getEmployeeDetails").setRequest(req); CacheKey cacheKey = desc.generateCacheKey(context); CacheKey key = CacheKey.createCacheKey(context.getOpName()); key.add("id2", 1); key.add("userName2", "Surya"); Assert.assertTrue(cacheKey.equals(key)); List<String> keyExpressions = desc.getKeyExpressions("getEmployeeDetails"); Assert.assertEquals(3,keyExpressions.size()); Assert.assertTrue(keyExpressions.contains("id2")); Assert.assertTrue(keyExpressions.contains("userName2")); long TTL = desc.getTTL("getEmployeeDetails"); Assert.assertTrue(TTL==50L); } catch(ServiceCreationException e) { e.printStackTrace(); Assert.assertTrue(false); }catch(Exception e){ e.printStackTrace(); Assert.assertTrue(false); } finally { configManager.setConfigTestCase("config"); } } @Test public void test_validObject() throws ServiceException{ GetPaymentDetailsRequest req = new GetPaymentDetailsRequest(); RegistrationInfoType type = new RegistrationInfoType(); type.setUserID("TestValue"); req.setId1(1212); req.setRegInfo(type); ServiceConfigManager configManager = ServiceConfigManager.getInstance(); try { configManager.setConfigTestCase("UnitCachePos_validObject"); ServerMessageProcessor.getInstance(); ServerServiceDesc serviceDesc = ServerServiceDescFactory.getInstance().getServiceDesc("SOATestAP1Caching"); CachePolicyDesc desc = serviceDesc.getCachePolicyDesc(); CacheContext context = new CacheContext().setOpName("getPaymentDetails").setRequest(req); CacheKey cacheKey = desc.generateCacheKey(context); CacheKey key = CacheKey.createCacheKey(context.getOpName()); key.add("id1", 1212); key.add("regInfo.userID", "TestValue"); Assert.assertTrue(cacheKey.equals(key)); List<String> keyExpressions = desc.getKeyExpressions("getPaymentDetails"); Assert.assertEquals(2,keyExpressions.size()); Assert.assertTrue(keyExpressions.contains("id1")); Assert.assertTrue(keyExpressions.contains("regInfo.userID")); long TTL = desc.getTTL("getPaymentDetails"); Assert.assertTrue(TTL==50L); } catch(ServiceCreationException e) { e.printStackTrace(); Assert.assertTrue(false); }catch(Exception e){ e.printStackTrace(); Assert.assertTrue(false); } finally { configManager.setConfigTestCase("config"); } } @Test public void test_requestObjectHasAnnotatedProperty() throws ServiceException{ GetPaymentDetailsRequest req = new GetPaymentDetailsRequest(); RegistrationInfoType type = new RegistrationInfoType(); type.setUserID("TestValue"); req.setId1(1212); req.setItemId(999999); req.setRegInfo(type); ServiceConfigManager configManager = ServiceConfigManager.getInstance(); try { configManager.setConfigTestCase("UnitCachePos_validAnnotatedProperty"); ServerMessageProcessor.getInstance(); ServerServiceDesc serviceDesc = ServerServiceDescFactory.getInstance().getServiceDesc("SOATestAP1Caching"); CachePolicyDesc desc = serviceDesc.getCachePolicyDesc(); CacheContext context = new CacheContext().setOpName("getPaymentDetails").setRequest(req); CacheKey cacheKey = desc.generateCacheKey(context); CacheKey key = CacheKey.createCacheKey(context.getOpName()); key.add("id1", 1212); key.add("regInfo.userID", "TestValue"); key.add("item-id",999999); Assert.assertTrue(cacheKey.equals(key)); List<String> keyExpressions = desc.getKeyExpressions("getPaymentDetails"); Assert.assertEquals(3,keyExpressions.size()); Assert.assertTrue(keyExpressions.contains("id1")); Assert.assertTrue(keyExpressions.contains("item-id")); Assert.assertTrue(keyExpressions.contains("regInfo.userID")); long TTL = desc.getTTL("getPaymentDetails"); Assert.assertTrue(TTL==50L); } catch(ServiceCreationException e) { e.printStackTrace(); Assert.assertTrue(false); }catch(Exception e){ e.printStackTrace(); Assert.assertTrue(false); } finally { configManager.setConfigTestCase("config"); } } @Test public void test_requestObjectHasAnnotatedMethod() throws ServiceException{ AnnotateGetItemRequest req = new AnnotateGetItemRequest(); req.setId1(1212); req.setTestItem(9999999); List<String> keyExpressionList = new ArrayList<String>(); keyExpressionList.add("ABC"); keyExpressionList.add("Id1"); CachableValueAccessor cv = CachePolicyDesc.buildAccessorCache(req.getClass(), keyExpressionList); CacheKey key = CachePolicyDesc.generateCacheKey("getPaymentDetails", req, cv); System.out.println(key); Assert.assertEquals(key.toString(),"{ABC=9999999, Id1=1212}"); } @Test public void test_dataNotPopulatedInRequest() throws ServiceException{ System.out.println("start test_dataNotPopulatedInRequest"); GetPaymentDetailsRequest req = new GetPaymentDetailsRequest(); RegistrationInfoType type = new RegistrationInfoType(); type.setUserID("TestValue"); req.setUserName1("TestValue"); req.setItemId(999999); req.setRegInfo(type); ServiceConfigManager configManager = ServiceConfigManager.getInstance(); try { configManager.setConfigTestCase("UnitCachePos_EmptyDataInRequestProperty"); ServerMessageProcessor.getInstance(); ServerServiceDesc serviceDesc = ServerServiceDescFactory.getInstance().getServiceDesc("SOATestAP1Caching"); CachePolicyDesc desc = serviceDesc.getCachePolicyDesc(); CacheContext context = new CacheContext().setOpName("getPaymentDetails").setRequest(req); CacheKey cacheKey = desc.generateCacheKey(context); CacheKey key = CacheKey.createCacheKey(context.getOpName()); key.add("id1", null); key.add("userName1","TestValue"); Assert.assertTrue(cacheKey.equals(key)); List<String> keyExpressions = desc.getKeyExpressions("getPaymentDetails"); Assert.assertEquals(2,keyExpressions.size()); long TTL = desc.getTTL("getPaymentDetails"); Assert.assertTrue(TTL==50L); } catch(ServiceCreationException e) { e.printStackTrace(); Assert.assertTrue(false); }catch(Exception e){ e.printStackTrace(); Assert.assertTrue(false); } finally { configManager.setConfigTestCase("config"); } } /* based on gary commnets "To me, using this example of req = null is a bit extreme, as req = null won�t be supported in SIF for MP service. (so we can safely ignore this corner case." * ignoring the testcase. */ @Ignore @Test public void test_requestNull() throws ServiceException{ System.out.println("start test_requestNull"); GetPaymentDetailsRequest req = null; List<String> keyExpressionList = new ArrayList<String>(); keyExpressionList.add("userName1"); CachableValueAccessor cv = CachePolicyDesc.buildAccessorCache(req.getClass(), keyExpressionList); CacheKey key = CachePolicyDesc.generateCacheKey("getPaymentDetails", req, cv); System.out.println(key); Assert.assertTrue(key.toString().equals("[userName1=null;]")); } @Test public void test_requestNestedObjectNull() throws ServiceException{ System.out.println("start test_requestNestedObjectNull"); GetPaymentDetailsRequest req = new GetPaymentDetailsRequest(); RegistrationInfoType type = null; req.setUserName1("TestUser"); req.setRegInfo(type); List<String> keyExpressionList = new ArrayList<String>(); keyExpressionList.add("userName1"); keyExpressionList.add("regInfo.email"); CachableValueAccessor cv = CachePolicyDesc.buildAccessorCache(req.getClass(), keyExpressionList); CacheKey key = CachePolicyDesc.generateCacheKey("getPaymentDetails", req, cv); System.out.println(key); Assert.assertTrue(key.toString().contains("userName1=TestUser")); Assert.assertTrue(key.toString().contains("regInfo.email=null")); } }