Add additional tests for websession cash from HA-plugin The HA-plugin code contained additional tests for the websession cache that were not yet implemented in this plugin. This change now adds the additional tests. Change-Id: Iec2c228441c76e6e0c57b11c61f0d7bb24644e42
diff --git a/src/test/java/com/googlesource/gerrit/plugins/websession/flatfile/FlatFileWebSessionCacheTest.java b/src/test/java/com/googlesource/gerrit/plugins/websession/flatfile/FlatFileWebSessionCacheTest.java index e20c1af..c7a7fc6 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/websession/flatfile/FlatFileWebSessionCacheTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/websession/flatfile/FlatFileWebSessionCacheTest.java
@@ -23,13 +23,9 @@ import java.io.IOException; import java.io.InputStream; import java.nio.file.DirectoryStream; -import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.SimpleFileVisitor; import java.nio.file.StandardCopyOption; -import java.nio.file.attribute.BasicFileAttributes; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.ArrayList; @@ -44,10 +40,9 @@ public class FlatFileWebSessionCacheTest { - private static final int DEFAULT_KEYS_SIZE = 10; - private static final String EXISTING_KEY = "aSceprtBc02YaMY573T5jfW64ZudJfPbDq"; private static final String EMPTY_KEY = "aOc2prqlZRpSO3LpauGO5efCLs1L9r9KkG"; + private static final String INVALID_KEY = "aOFdpHriBM6dN055M13PjDdTZagl5r5aSG"; private static final String NEW_KEY = "abcde12345"; @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); @@ -66,16 +61,18 @@ loadKeyToCacheDir(EMPTY_KEY); assertThat(flatFileWebSessionCache.asMap()).isEmpty(); + loadKeyToCacheDir(INVALID_KEY); + assertThat(flatFileWebSessionCache.asMap()).isEmpty(); + loadKeyToCacheDir(EXISTING_KEY); assertThat(flatFileWebSessionCache.asMap()).containsKey(EXISTING_KEY); } @Test public void constructorCreateDir() throws IOException { - Path testDir = Paths.get("tmp"); - flatFileWebSessionCache = new FlatFileWebSessionCache(testDir); - assertThat(Files.exists(testDir)).isTrue(); - Files.deleteIfExists(testDir); + assertThat(dir.toFile().delete()).isTrue(); + flatFileWebSessionCache = new FlatFileWebSessionCache(dir); + assertThat(dir.toFile().exists()).isTrue(); } @Test @@ -98,12 +95,27 @@ } @Test - public void getAllPresentTest() throws Exception { - loadKeyToCacheDir(EMPTY_KEY); + public void cleanUpWithErrorsWhileListingFilesTest() throws Exception { + tempFolder.delete(); + flatFileWebSessionCache.cleanUp(); + assertThat(flatFileWebSessionCache.size()).isEqualTo(0); + } + + @Test + public void cleanUpWithErrorsWhileDeleteFileTest() throws Exception { loadKeyToCacheDir(EXISTING_KEY); - List<String> keys = ImmutableList.of(EMPTY_KEY, EXISTING_KEY); - assertThat(flatFileWebSessionCache.getAllPresent(keys).size()).isEqualTo(1); - assertThat(flatFileWebSessionCache.getAllPresent(keys)).containsKey(EXISTING_KEY); + try { + dir.toFile().setWritable(false); + flatFileWebSessionCache.cleanUp(); + assertThat(flatFileWebSessionCache.size()).isEqualTo(1); + } finally { + dir.toFile().setWritable(true); + } + } + + @Test + public void getIfPresentEmptyKeyTest() throws Exception { + assertThat(flatFileWebSessionCache.getIfPresent(EMPTY_KEY)).isNull(); } @Test @@ -112,12 +124,29 @@ } @Test + public void getIfPresentInvalidKeyTest() throws Exception { + loadKeyToCacheDir(INVALID_KEY); + Path path = dir.resolve(INVALID_KEY); + assertThat(flatFileWebSessionCache.getIfPresent(path.toString())).isNull(); + } + + @Test public void getIfPresentTest() throws Exception { loadKeyToCacheDir(EXISTING_KEY); assertThat(flatFileWebSessionCache.getIfPresent(EXISTING_KEY)).isNotNull(); } @Test + public void getAllPresentTest() throws Exception { + loadKeyToCacheDir(EMPTY_KEY); + loadKeyToCacheDir(INVALID_KEY); + loadKeyToCacheDir(EXISTING_KEY); + List<String> keys = ImmutableList.of(EMPTY_KEY, EXISTING_KEY); + assertThat(flatFileWebSessionCache.getAllPresent(keys).size()).isEqualTo(1); + assertThat(flatFileWebSessionCache.getAllPresent(keys)).containsKey(EXISTING_KEY); + } + + @Test public void getTest() throws Exception { class ValueLoader implements Callable<Val> { @Override @@ -144,15 +173,25 @@ @Test public void invalidateAllCollectionTest() throws Exception { - List<String> keys = createKeysCollection(); + int numberOfKeys = 15; + List<String> keys = loadKeysToCacheDir(numberOfKeys); + assertThat(flatFileWebSessionCache.size()).isEqualTo(numberOfKeys); + assertThat(isDirEmpty(dir)).isFalse(); + flatFileWebSessionCache.invalidateAll(keys); + assertThat(flatFileWebSessionCache.size()).isEqualTo(0); assertThat(isDirEmpty(dir)).isTrue(); } @Test public void invalidateAllTest() throws Exception { - createKeysCollection(); + int numberOfKeys = 5; + loadKeysToCacheDir(numberOfKeys); + assertThat(flatFileWebSessionCache.size()).isEqualTo(numberOfKeys); + assertThat(isDirEmpty(dir)).isFalse(); + flatFileWebSessionCache.invalidateAll(); + assertThat(flatFileWebSessionCache.size()).isEqualTo(0); assertThat(isDirEmpty(dir)).isTrue(); } @@ -166,10 +205,10 @@ @Test public void invalidateTestObjectNotString() throws Exception { - createKeysCollection(); - assertThat(flatFileWebSessionCache.size()).isEqualTo(DEFAULT_KEYS_SIZE); + loadKeyToCacheDir(EXISTING_KEY); + assertThat(flatFileWebSessionCache.size()).isEqualTo(1); flatFileWebSessionCache.invalidate(new Object()); - assertThat(flatFileWebSessionCache.size()).isEqualTo(DEFAULT_KEYS_SIZE); + assertThat(flatFileWebSessionCache.size()).isEqualTo(1); } @Test @@ -190,9 +229,19 @@ } @Test + public void putWithErrorsTest() throws Exception { + loadKeyToCacheDir(EXISTING_KEY); + Val val = flatFileWebSessionCache.getIfPresent(EXISTING_KEY); + tempFolder.delete(); + flatFileWebSessionCache.put(NEW_KEY, val); + assertThat(flatFileWebSessionCache.getIfPresent(NEW_KEY)).isNull(); + } + + @Test public void sizeTest() throws Exception { - createKeysCollection(); - assertThat(flatFileWebSessionCache.size()).isEqualTo(DEFAULT_KEYS_SIZE); + int numberOfKeys = 10; + loadKeysToCacheDir(numberOfKeys); + assertThat(flatFileWebSessionCache.size()).isEqualTo(numberOfKeys); } @Test @@ -200,34 +249,15 @@ assertThat(flatFileWebSessionCache.stats()).isNull(); } - private List<String> createKeysCollection() throws IOException { + private List<String> loadKeysToCacheDir(int number) throws IOException { List<String> keys = new ArrayList<>(); - for (int i = 0; i < DEFAULT_KEYS_SIZE; i++) { + for (int i = 0; i < number; i++) { Path tmp = Files.createTempFile(dir, "cache", null); keys.add(tmp.getFileName().toString()); } return keys; } - private void emptyAndDelete(Path dir) throws IOException { - Files.walkFileTree( - dir, - new SimpleFileVisitor<Path>() { - @Override - public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { - Files.delete(dir); - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) - throws IOException { - Files.delete(file); - return FileVisitResult.CONTINUE; - } - }); - } - private boolean isDirEmpty(final Path dir) throws IOException { try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(dir)) { return !dirStream.iterator().hasNext();
diff --git a/src/test/resources/aOFdpHriBM6dN055M13PjDdTZagl5r5aSG b/src/test/resources/aOFdpHriBM6dN055M13PjDdTZagl5r5aSG new file mode 100644 index 0000000..96c6933 --- /dev/null +++ b/src/test/resources/aOFdpHriBM6dN055M13PjDdTZagl5r5aSG Binary files differ