View Javadoc
1   package com.atlassian.cache.impl;
2   
3   import java.util.concurrent.atomic.AtomicInteger;
4   
5   import com.atlassian.cache.CachedReferenceListener;
6   
7   import org.junit.Test;
8   
9   import static com.atlassian.cache.impl.CachedReferenceEventMatcher.event;
10  import static org.junit.Assert.assertEquals;
11  import static org.mockito.Mockito.mock;
12  import static org.mockito.Mockito.verify;
13  import static org.mockito.Mockito.verifyNoMoreInteractions;
14  
15  public class ValueCachedReferenceListenerSupportTest
16  {
17      @Test
18      public void testNotifyListeners()
19      {
20          final AtomicInteger callCount = new AtomicInteger(0);
21          ValueCachedReferenceListenerSupport<String> listenerSupport = new ValueCachedReferenceListenerSupport<String>()
22          {
23              @Override
24              protected void init(CachedReferenceListenerSupport<String> actualListenerSupport)
25              {
26                  callCount.incrementAndGet();
27              }
28          };
29  
30          CachedReferenceListener<String> valueListener = mock(CachedReferenceListener.class);
31          CachedReferenceListener<String> valuelessListener = mock(CachedReferenceListener.class);
32  
33          listenerSupport.add(valueListener, true);
34          listenerSupport.add(valuelessListener, false);
35  
36          listenerSupport.notifyEvict("EVICT");
37          listenerSupport.notifyReset("RESET");
38          listenerSupport.notifySet("SET");
39  
40          verify(valueListener).onEvict(event("EVICT"));
41          verify(valueListener).onReset(event("RESET"));
42          verify(valueListener).onSet(event("SET"));
43          verifyNoMoreInteractions(valueListener);
44  
45          verify(valuelessListener).onEvict(event(null));
46          verify(valuelessListener).onReset(event(null));
47          verify(valuelessListener).onSet(event(null));
48          verifyNoMoreInteractions(valuelessListener);
49  
50          assertEquals(1, callCount.get());
51      }
52  
53      @Test
54      public void testLazyValue()
55      {
56          final AtomicInteger callCount = new AtomicInteger(0);
57          ValueCachedReferenceListenerSupport<String> listenerSupport = new ValueCachedReferenceListenerSupport<String>()
58          {
59              @Override
60              protected void init(CachedReferenceListenerSupport<String> actualListenerSupport)
61              {
62                  callCount.incrementAndGet();
63              }
64  
65              @Override
66              protected void initValue(CachedReferenceListenerSupport<String> actualListenerSupport)
67              {
68                  throw new RuntimeException("Should not be called");
69              }
70          };
71  
72          CachedReferenceListener<String> valuelessListener = mock(CachedReferenceListener.class);
73          listenerSupport.add(valuelessListener, false);
74  
75          listenerSupport.notifyEvict("EVICT");
76          listenerSupport.notifyReset("RESET");
77          listenerSupport.notifySet("SET");
78  
79          verify(valuelessListener).onEvict(event(null));
80          verify(valuelessListener).onReset(event(null));
81          verify(valuelessListener).onSet(event(null));
82          verifyNoMoreInteractions(valuelessListener);
83  
84          assertEquals(1, callCount.get());
85      }
86  
87      @Test
88      public void testLazyValueless()
89      {
90          final AtomicInteger callCount = new AtomicInteger(0);
91          ValueCachedReferenceListenerSupport<String> listenerSupport = new ValueCachedReferenceListenerSupport<String>()
92          {
93              @Override
94              protected void init(CachedReferenceListenerSupport<String> actualListenerSupport)
95              {
96                  callCount.incrementAndGet();
97              }
98  
99              @Override
100             protected void initValueless(CachedReferenceListenerSupport<String> actualListenerSupport)
101             {
102                 throw new RuntimeException("Should not be called");
103             }
104         };
105 
106         CachedReferenceListener<String> valueListener = mock(CachedReferenceListener.class);
107         listenerSupport.add(valueListener, true);
108 
109         listenerSupport.notifyEvict("EVICT");
110         listenerSupport.notifyReset("RESET");
111         listenerSupport.notifySet("SET");
112 
113         verify(valueListener).onEvict(event("EVICT"));
114         verify(valueListener).onReset(event("RESET"));
115         verify(valueListener).onSet(event("SET"));
116         verifyNoMoreInteractions(valueListener);
117 
118         assertEquals(1, callCount.get());
119     }
120 }