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 }