CacheInvocationContextFactory { public static CacheInvocationContext<CacheResult> createCacheResultInvocationContext(MetaHolder metaHolder) { Method method = metaHolder.getMethod(); if (method.isAnnotationPresent(CacheResult.class)) { CacheResult cacheResult = method.getAnnotation(CacheResult.class); MethodExecutionAction cacheKeyMethod = createCacheKeyAction(cacheResult.cacheKeyMethod(), metaHolder); return new CacheInvocationContext<CacheResult>(cacheResult, cacheKeyMethod, metaHolder.getObj(), method, metaHolder.getArgs()); } return null; }  static CacheInvocationContext<CacheResult> createCacheResultInvocationContext(MetaHolder metaHolder); static CacheInvocationContext<CacheRemove> createCacheRemoveInvocationContext(MetaHolder metaHolder);  }
@Test public void testCreateCacheResultInvocationContext_givenMethodAnnotatedWithCacheResult_shouldCreateCorrectCacheKeyInvocationContext() throws NoSuchMethodException { TestCacheClass testCacheClass = new TestCacheClass(); String param1 = "val_1"; String param2 = "val_2"; Integer param3 = 3; MetaHolder metaHolder = MetaHolder.builder() .method(TestCacheClass.class.getMethod("cacheResultMethod", String.class, String.class, Integer.class)) .args(new Object[]{param1, param2, param3}) .obj(testCacheClass).build(); CacheInvocationContext<CacheResult> context = CacheInvocationContextFactory.createCacheResultInvocationContext(metaHolder); assertNotNull(context.getKeyParameters()); assertEquals(2, context.getKeyParameters().size()); assertEquals(String.class, context.getKeyParameters().get(0).getRawType()); assertEquals(0, context.getKeyParameters().get(0).getPosition()); assertEquals(param1, context.getKeyParameters().get(0).getValue()); assertTrue(isAnnotationPresent(context.getKeyParameters().get(0), CacheKey.class)); assertEquals(Integer.class, context.getKeyParameters().get(1).getRawType()); assertEquals(2, context.getKeyParameters().get(1).getPosition()); assertEquals(param3, context.getKeyParameters().get(1).getValue()); assertTrue(isAnnotationPresent(context.getKeyParameters().get(1), CacheKey.class)); }
@Test(expected = HystrixCachingException.class) public void testCacheResultMethodWithWrongCacheKeyMethodSignature_givenWrongCacheKeyMethod_shouldThrowException() throws NoSuchMethodException { TestCacheClass testCacheClass = new TestCacheClass(); String param1 = "val_1"; MetaHolder metaHolder = MetaHolder.builder() .method(TestCacheClass.class.getMethod("cacheResultMethodWithWrongCacheKeyMethodSignature", String.class)) .args(new Object[]{param1}) .obj(testCacheClass).build(); CacheInvocationContext<CacheResult> context = CacheInvocationContextFactory.createCacheResultInvocationContext(metaHolder); }
@Test(expected = HystrixCachingException.class) public void testCacheResultMethodWithCacheKeyMethodWithWrongReturnType_givenCacheKeyMethodWithWrongReturnType_shouldThrowException() throws NoSuchMethodException { TestCacheClass testCacheClass = new TestCacheClass(); String param1 = "val_1"; MetaHolder metaHolder = MetaHolder.builder() .method(TestCacheClass.class.getMethod("cacheResultMethodWithCacheKeyMethodWithWrongReturnType", String.class, String.class)) .args(new Object[]{param1}) .obj(testCacheClass).build(); CacheInvocationContext<CacheResult> context = CacheInvocationContextFactory.createCacheResultInvocationContext(metaHolder); System.out.println(context); }