View Javadoc

1   package com.atlassian.cache;
2   
3   import java.util.concurrent.TimeUnit;
4   import java.util.concurrent.atomic.AtomicInteger;
5   
6   import javax.annotation.Nonnull;
7   
8   import org.hamcrest.Matchers;
9   
10  import static org.hamcrest.Matchers.hasSize;
11  import static org.junit.Assert.assertThat;
12  
13  public class AbstractCacheTest
14  {
15      protected CacheFactory factory;
16  
17      protected Cache<String,Long> makeExceptionalCache()
18      {
19          // Build a Cache using the builder
20          CacheLoader<String, Long> loader = new CacheLoader<String, Long>()
21          {
22              @Nonnull
23              @Override
24              public Long load(@Nonnull final String key)
25              {
26                  return Long.valueOf(key);
27              }
28          };
29          final Cache<String, Long> cache = factory.getCache("mycache", loader, settingsBuilder().build());
30          assertEmpty(cache);
31          return cache;
32      }
33  
34      protected Cache<String, Long> makeExpiringCache()
35      {
36          // Build a Cache using the builder
37          CacheLoader<String, Long> loader = new CacheLoader<String, Long>()
38          {
39              @Nonnull
40              @Override
41              public Long load(@Nonnull final String key)
42              {
43                  try
44                  {
45                      return Long.valueOf(key);
46                  }
47                  catch (NumberFormatException e)
48                  {
49                      return -21L;
50                  }
51              }
52          };
53          CacheSettings settings = settingsBuilder().expireAfterAccess(10, TimeUnit.MILLISECONDS).build();
54          final Cache<String, Long> cache = factory.getCache("mycache", loader, settings);
55          assertEmpty(cache);
56          return cache;
57      }
58  
59      protected Cache<String,Long> makeNullReturningCache()
60      {
61          // Build a Cache using the builder
62          CacheLoader<String, Long> loader = new CacheLoader<String, Long>()
63          {
64              @Nonnull
65              @Override
66              public Long load(@Nonnull final String key)
67              {
68                  try
69                  {
70                      return Long.valueOf(key);
71                  }
72                  catch (NumberFormatException e)
73                  {
74                      return null;
75                  }
76              }
77          };
78          final Cache<String, Long> cache = factory.getCache("mycache", loader, settingsBuilder().build());
79          assertEmpty(cache);
80          return cache;
81      }
82  
83      protected Cache<String, Long> makeSimpleCache()
84      {
85          // Build a Cache using the builder
86          final Cache<String, Long> cache = factory.getCache("mycache", null, settingsBuilder().build());
87          assertEmpty(cache);
88          return cache;
89      }
90  
91      protected Cache<String, Long> makeSizeLimitedCache(int maxEntries)
92      {
93          CacheSettings required = settingsBuilder().maxEntries(maxEntries).build();
94          final Cache<String, Long> cache = factory.getCache("mycache", null, required);
95          assertEmpty(cache);
96          return cache;
97      }
98  
99      protected Cache<String, Long> makeSizeLimitedCache(final int maxEntries, final AtomicInteger loadCounter)
100     {
101         // Build a Cache using the builder
102         CacheLoader<String, Long> loader = new CacheLoader<String, Long>()
103         {
104             @Nonnull
105             @Override
106             public Long load(@Nonnull final String key)
107             {
108                 loadCounter.incrementAndGet();
109                 return Long.valueOf(key);
110             }
111         };
112         CacheSettings settings = settingsBuilder().maxEntries(maxEntries).build();
113         final Cache<String, Long> cache = factory.getCache("mycache", loader, settings);
114         assertEmpty(cache);
115         return cache;
116     }
117 
118     protected Cache<String, Long> makeUnexpiringCache()
119     {
120         // Build a Cache using the builder
121         CacheLoader<String, Long> loader = new CacheLoader<String, Long>()
122         {
123             @Nonnull
124             @Override
125             public Long load(@Nonnull final String key)
126             {
127                 try
128                 {
129                     return Long.valueOf(key);
130                 }
131                 catch (NumberFormatException e)
132                 {
133                     return -21L;
134                 }
135             }
136         };
137         final Cache<String, Long> cache = factory.getCache("mycache", loader, settingsBuilder().build());
138         assertEmpty(cache);
139         return cache;
140     }
141 
142     protected CacheSettingsBuilder settingsBuilder()
143     {
144         return new CacheSettingsBuilder();
145     }
146 
147     // Hiding broken type inferences
148 
149     protected static <K,V> void assertEmpty(Cache<K,V> cache)
150     {
151         assertThat(cache.getKeys(), Matchers.<K>empty());
152     }
153 
154     protected static <K,V> void assertSize(Cache<K,V> cache, final int expectedSize)
155     {
156         assertThat(cache.getKeys(), hasSize(expectedSize));
157     }
158 }