1 package com.atlassian.cache.impl;
2
3 import com.atlassian.cache.CacheEntryListener;
4
5 import org.junit.Test;
6
7 import static org.junit.Assert.assertEquals;
8 import static org.mockito.Mockito.mock;
9 import static org.mockito.Mockito.times;
10 import static org.mockito.Mockito.verify;
11 import static org.mockito.Mockito.verifyNoMoreInteractions;
12
13 public class LazyCacheEntryListenerSupportTest
14 {
15 @Test
16 public void testLazyCreate()
17 {
18 LazyCacheEntryListenerSupport<String, String> listenerSupport = new LazyCacheEntryListenerSupport<String, String>()
19 {
20 @Override
21 protected void init()
22 {
23 throw new RuntimeException("Init called");
24 }
25 };
26
27 listenerSupport.remove(mock(CacheEntryListener.class));
28 listenerSupport.notifyAdd("KEY", "VALUE");
29 listenerSupport.notifyEvict("KEY", "OLD_VALUE");
30 listenerSupport.notifyRemove("KEY", "OLD_VALUE");
31 listenerSupport.notifyUpdate("KEY", "VALUE", "OLD_VALUE");
32
33 try
34 {
35 listenerSupport.add(mock(CacheEntryListener.class), true);
36 }
37 catch(RuntimeException exc)
38 {
39 assertEquals("java.lang.RuntimeException: Init called", exc.getMessage());
40 }
41 }
42
43 @Test
44 public void testCallDelegate()
45 {
46 final CacheEntryListenerSupport<String, String> delegateSupport = mock(CacheEntryListenerSupport.class);
47
48 LazyCacheEntryListenerSupport<String, String> listenerSupport = new LazyCacheEntryListenerSupport<String, String>()
49 {
50 @Override
51 protected CacheEntryListenerSupport<String, String> createDelegate()
52 {
53 return delegateSupport;
54 }
55 };
56
57 CacheEntryListener<String, String> listener = mock(CacheEntryListener.class);
58 listenerSupport.add(listener, true);
59 listenerSupport.notifyAdd("KEY", "VALUE");
60 listenerSupport.notifyEvict("KEY", "OLD_VALUE");
61 listenerSupport.notifyRemove("KEY", "OLD_VALUE");
62 listenerSupport.notifyUpdate("KEY", "VALUE", "OLD_VALUE");
63 listenerSupport.remove(listener);
64 listenerSupport.notifyAdd("KEY", "VALUE");
65 listenerSupport.notifyEvict("KEY", "OLD_VALUE");
66 listenerSupport.notifyRemove("KEY", "OLD_VALUE");
67 listenerSupport.notifyUpdate("KEY", "VALUE", "OLD_VALUE");
68
69 verify(delegateSupport).add(listener, true);
70 verify(delegateSupport, times(2)).notifyAdd("KEY", "VALUE");
71 verify(delegateSupport, times(2)).notifyEvict("KEY", "OLD_VALUE");
72 verify(delegateSupport, times(2)).notifyRemove("KEY", "OLD_VALUE");
73 verify(delegateSupport, times(2)).notifyUpdate("KEY", "VALUE", "OLD_VALUE");
74 verify(delegateSupport).remove(listener);
75 verifyNoMoreInteractions(delegateSupport);
76 }
77 }