diff --git a/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java b/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java index 3f7b71f9967..db7ba46bd7f 100644 --- a/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java +++ b/opengrok-web/src/test/java/org/opengrok/web/PageConfigTest.java @@ -1032,4 +1032,40 @@ public String getPathInfo() { env.releaseIndexSearchers(); IOUtils.removeRecursive(env.getDataRootFile().toPath()); } + + @ParameterizedTest + @ValueSource(strings = {"main.c", "nonexistent"}) + void testIsUnreadableFalse(String fileName) { + HttpServletRequest req = new DummyHttpServletRequest() { + @Override + public String getPathInfo() { + return "mercurial/" + fileName; + } + }; + + PageConfig cfg = PageConfig.get(req); + assertFalse(cfg.isUnreadable()); + } + + // File.setReadable() does not change the behavior of File.canRead() on Windows. + @EnabledOnOs({OS.LINUX, OS.MAC, OS.SOLARIS, OS.AIX, OS.OTHER}) + @Test + void testIsUnreadableTrue() { + final String relativePath = Path.of("mercurial", "Makefile").toString(); + HttpServletRequest req = new DummyHttpServletRequest() { + @Override + public String getPathInfo() { + return relativePath; + } + }; + + final File file = new File(RuntimeEnvironment.getInstance().getSourceRootPath(), relativePath); + assertTrue(file.exists()); + assertTrue(file.setReadable(false, false)); + PageConfig cfg = PageConfig.get(req); + assertTrue(cfg.isUnreadable()); + + // cleanup + assertTrue(file.setReadable(true, false)); + } }