View Javadoc
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  }