From 70ec4fb5dca95aecef5e7f5c6dd68bc84c421c21 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 4 Sep 2023 11:23:58 +0200 Subject: [PATCH] [tests] migrating `DigesterTest` to NIO GitOrigin-RevId: d162609fe4e1c69e48adc5872649ebefb02b2ab5 --- .../src/com/intellij/updater/Digester.java | 15 ++-- .../com/intellij/updater/DigesterTest.java | 80 ++++++++----------- 2 files changed, 42 insertions(+), 53 deletions(-) diff --git a/updater/src/com/intellij/updater/Digester.java b/updater/src/com/intellij/updater/Digester.java index c56aead1da17..e18db0779802 100644 --- a/updater/src/com/intellij/updater/Digester.java +++ b/updater/src/com/intellij/updater/Digester.java @@ -26,23 +26,26 @@ public final class Digester { } public static long digestRegularFile(File file) throws IOException { - Path path = file.toPath(); - BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS); + return digest(file.toPath()); + } + + public static long digest(Path file) throws IOException { + BasicFileAttributes attrs = Files.readAttributes(file, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS); if (attrs.isSymbolicLink()) { - Path target = Files.readSymbolicLink(path); + Path target = Files.readSymbolicLink(file); if (target.isAbsolute()) throw new IOException("An absolute link: " + file + " -> " + target); return digestStream(new ByteArrayInputStream(target.toString().getBytes(StandardCharsets.UTF_8))) | SYM_LINK; } if (attrs.isDirectory()) return DIRECTORY; - long executable = !Utils.IS_WINDOWS && file.canExecute() ? EXECUTABLE : 0; - try (InputStream in = new BufferedInputStream(Utils.newFileInputStream(file))) { + long executable = !Utils.IS_WINDOWS && Files.isExecutable(file) ? EXECUTABLE : 0; + try (InputStream in = Files.newInputStream(file)) { return digestStream(in) | executable; } catch (IOException e) { - throw new IOException(path.toString(), e); + throw new IOException(file.toString(), e); } } diff --git a/updater/testSrc/com/intellij/updater/DigesterTest.java b/updater/testSrc/com/intellij/updater/DigesterTest.java index 9637d731849b..ac137d1e72c0 100644 --- a/updater/testSrc/com/intellij/updater/DigesterTest.java +++ b/updater/testSrc/com/intellij/updater/DigesterTest.java @@ -2,86 +2,72 @@ package com.intellij.updater; import com.intellij.openapi.util.io.IoTestUtil; +import com.intellij.openapi.util.io.NioFiles; import org.junit.Test; -import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.*; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assume.assumeFalse; public class DigesterTest extends UpdaterTestCase { @Test public void testBasics() throws Exception { - File binDir = new File(dataDir, "bin"), libDir = new File(dataDir, "lib"); + Path binDir = dataDir.toPath().resolve("bin"), libDir = dataDir.toPath().resolve("lib"); - assertEquals(Digester.DIRECTORY, Digester.digestRegularFile(binDir)); - assertEquals(Digester.DIRECTORY, Digester.digestRegularFile(libDir)); + assertThat(Digester.digest(binDir)).isEqualTo(Digester.DIRECTORY); + assertThat(Digester.digest(libDir)).isEqualTo(Digester.DIRECTORY); - assertEquals(CHECKSUMS.README_TXT, Digester.digestRegularFile(new File(dataDir, "Readme.txt"))); - assertEquals(CHECKSUMS.IDEA_BAT, Digester.digestRegularFile(new File(binDir, "idea.bat"))); - assertEquals(CHECKSUMS.ANNOTATIONS_JAR, Digester.digestRegularFile(new File(libDir, "annotations.jar"))); - assertEquals(CHECKSUMS.ANNOTATIONS_CHANGED_JAR, Digester.digestRegularFile(new File(libDir, "annotations_changed.jar"))); - assertEquals(CHECKSUMS.BOOT_JAR, Digester.digestRegularFile(new File(libDir, "boot.jar"))); - assertEquals(CHECKSUMS.BOOT_CHANGED_JAR, Digester.digestRegularFile(new File(libDir, "boot_with_directory_becomes_file.jar"))); - assertEquals(CHECKSUMS.BOOTSTRAP_JAR, Digester.digestRegularFile(new File(libDir, "bootstrap.jar"))); - assertEquals(CHECKSUMS.BOOTSTRAP_DELETED_JAR, Digester.digestRegularFile(new File(libDir, "bootstrap_deleted.jar"))); + assertThat(Digester.digest(dataDir.toPath().resolve("Readme.txt"))).isEqualTo(CHECKSUMS.README_TXT); + assertThat(Digester.digest(binDir.resolve("idea.bat"))).isEqualTo(CHECKSUMS.IDEA_BAT); + assertThat(Digester.digest(libDir.resolve("annotations.jar"))).isEqualTo(CHECKSUMS.ANNOTATIONS_JAR); + assertThat(Digester.digest(libDir.resolve("annotations_changed.jar"))).isEqualTo(CHECKSUMS.ANNOTATIONS_CHANGED_JAR); + assertThat(Digester.digest(libDir.resolve("boot.jar"))).isEqualTo(CHECKSUMS.BOOT_JAR); + assertThat(Digester.digest(libDir.resolve("boot_with_directory_becomes_file.jar"))).isEqualTo(CHECKSUMS.BOOT_CHANGED_JAR); + assertThat(Digester.digest(libDir.resolve("bootstrap.jar"))).isEqualTo(CHECKSUMS.BOOTSTRAP_JAR); + assertThat(Digester.digest(libDir.resolve("bootstrap_deleted.jar"))).isEqualTo(CHECKSUMS.BOOTSTRAP_DELETED_JAR); } @Test public void testHelpers() { - assertTrue(Digester.isFile(CHECKSUMS.README_TXT)); - assertTrue(Digester.isFile(CHECKSUMS.ANNOTATIONS_JAR)); - assertFalse(Digester.isFile(Digester.INVALID)); - assertFalse(Digester.isFile(Digester.DIRECTORY)); + assertThat(Digester.isFile(CHECKSUMS.README_TXT)).isTrue(); + assertThat(Digester.isFile(CHECKSUMS.ANNOTATIONS_JAR)).isTrue(); + assertThat(Digester.isFile(Digester.INVALID)).isFalse(); + assertThat(Digester.isFile(Digester.DIRECTORY)).isFalse(); - assertTrue(Digester.isSymlink(CHECKSUMS.LINK_TO_README_TXT)); - assertFalse(Digester.isSymlink(CHECKSUMS.README_TXT)); - assertFalse(Digester.isSymlink(Digester.INVALID)); - assertFalse(Digester.isSymlink(Digester.DIRECTORY)); + assertThat(Digester.isSymlink(CHECKSUMS.LINK_TO_README_TXT)).isTrue(); + assertThat(Digester.isSymlink(CHECKSUMS.README_TXT)).isFalse(); + assertThat(Digester.isSymlink(Digester.INVALID)).isFalse(); + assertThat(Digester.isSymlink(Digester.DIRECTORY)).isFalse(); } @Test public void testSymlinks() throws Exception { IoTestUtil.assumeSymLinkCreationIsSupported(); - File simpleLink = getTempFile("Readme.simple.link"); - Path link2 = simpleLink.toPath(); - Path target2 = Paths.get("Readme.txt"); - Files.createSymbolicLink(link2, target2); - File relativeLink = getTempFile("Readme.relative.link"); - Path link1 = relativeLink.toPath(); - Path target1 = Paths.get("./Readme.txt"); - Files.createSymbolicLink(link1, target1); - File absoluteLink = getTempFile("Readme.absolute.link"); - Path link = absoluteLink.toPath(); - Path target = Paths.get(dataDir.getPath() + "/Readme.txt"); - Files.createSymbolicLink(link, target); + Path simpleLink = Files.createSymbolicLink(getTempFile("Readme.simple.link").toPath(), Paths.get("Readme.txt")); + Path relativeLink = Files.createSymbolicLink(getTempFile("Readme.relative.link").toPath(), Paths.get("./Readme.txt")); + Path absoluteLink = Files.createSymbolicLink(getTempFile("Readme.absolute.link").toPath(), dataDir.toPath().resolve("Readme.txt")); - assertEquals(CHECKSUMS.LINK_TO_README_TXT, Digester.digestRegularFile(simpleLink)); - assertEquals(CHECKSUMS.LINK_TO_DOT_README_TXT, Digester.digestRegularFile(relativeLink)); + assertThat(Digester.digest(simpleLink)).isEqualTo(CHECKSUMS.LINK_TO_README_TXT); + assertThat(Digester.digest(relativeLink)).isEqualTo(CHECKSUMS.LINK_TO_DOT_README_TXT); - try { - Digester.digestRegularFile(absoluteLink); - fail("Absolute links should cause indigestion"); - } - catch (IOException e) { - assertThat(e.getMessage()).startsWith("An absolute link"); - } + assertThatThrownBy(() -> Digester.digest(absoluteLink)) + .isInstanceOf(IOException.class) + .hasMessageStartingWith("An absolute link"); } @Test public void testExecutables() throws Exception { assumeFalse("Windows-allergic", Utils.IS_WINDOWS); - File testFile = new File(tempDir.getRoot(), "idea.bat"); - Utils.copy(new File(dataDir, "bin/idea.bat"), testFile, false); - assertEquals(CHECKSUMS.IDEA_BAT, Digester.digestRegularFile(testFile)); - Utils.setExecutable(testFile); - assertEquals(CHECKSUMS.IDEA_BAT | Digester.EXECUTABLE, Digester.digestRegularFile(testFile)); + Path testFile = Files.copy(dataDir.toPath().resolve("bin/idea.bat"), tempDir.getRoot().toPath().resolve("idea.bat")); + assertThat(Digester.digest(testFile)).isEqualTo(CHECKSUMS.IDEA_BAT); + NioFiles.setExecutable(testFile); + assertThat(Digester.digest(testFile)).isEqualTo(CHECKSUMS.IDEA_BAT | Digester.EXECUTABLE); } }