mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[tests] migrating DigesterTest to NIO
GitOrigin-RevId: d162609fe4e1c69e48adc5872649ebefb02b2ab5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
05378cd250
commit
70ec4fb5dc
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user