View Javadoc
1   package com.atlassian.cache.hazelcast;
2   
3   import java.util.concurrent.ExecutorService;
4   import java.util.concurrent.Executors;
5   
6   import com.atlassian.cache.CacheLoader;
7   
8   import org.junit.After;
9   import org.junit.Before;
10  import org.junit.ClassRule;
11  import org.junit.Rule;
12  import org.junit.Test;
13  import org.mockito.Mock;
14  import org.mockito.invocation.InvocationOnMock;
15  import org.mockito.junit.MockitoJUnit;
16  import org.mockito.junit.MockitoRule;
17  import org.mockito.stubbing.Answer;
18  
19  import static org.junit.Assert.assertEquals;
20  import static org.mockito.Mockito.when;
21  
22  
23  public class CacheVersionAwareCacheLoaderTest
24  {
25      @ClassRule
26      public static InitOnceHazelcastCluster cluster = InitOnceHazelcastCluster.getInstance();
27  
28      @Rule
29      public MockitoRule mockitoRule = MockitoJUnit.rule();
30  
31      @Mock
32      private CacheLoader<String, String> delegate;
33  
34      private ExecutorService executorService;
35      private CacheVersionAwareCacheLoader<String, String> cacheLoader;
36      private CacheVersion cacheVersion;
37  
38      @Before
39      public void setUp() throws Exception
40      {
41          cacheVersion = new CacheVersion(cluster.getNode(0), "mock");
42          executorService = Executors.newSingleThreadExecutor();
43          cacheLoader = new CacheVersionAwareCacheLoader(delegate, cacheVersion);
44      }
45  
46      @After
47      public void tearDown() throws Exception
48      {
49          executorService.shutdownNow();
50      }
51  
52      @Test
53      public void shouldLoadValues()
54      {
55          when(delegate.load("key")).thenReturn("value");
56  
57          assertEquals("value", cacheLoader.load("key"));
58      }
59  
60      @Test
61      public void shouldLoadValuesAfterInvalidation()
62      {
63          when(delegate.load("key")).thenReturn("value");
64  
65          cacheVersion.incrementAndGet();
66  
67          assertEquals("value", cacheLoader.load("key"));
68      }
69  
70      @Test
71      public void shouldReloadValuesWhenInvalidating()
72      {
73          when(delegate.load("key")).then(invalidateAllAndReturnInvalid()).thenReturn("value");
74  
75          assertEquals("value", cacheLoader.load("key"));
76      }
77  
78      private Answer<String> invalidateAllAndReturnInvalid()
79      {
80          return new Answer<String>()
81          {
82              @Override
83              public String answer(InvocationOnMock invocationOnMock) throws Throwable
84              {
85                  cacheVersion.incrementAndGet();
86                  return "invalid";
87              }
88          };
89      }
90  }