View Javadoc

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