View Javadoc

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  }