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