telegram-files/api/src/test/java/telegram/files/MessyUtilsTest.java
2025-01-23 18:21:17 +08:00

86 lines
2.6 KiB
Java

package telegram.files;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileWriter;
import java.nio.file.Files;
import java.security.MessageDigest;
import static org.junit.jupiter.api.Assertions.*;
class MessyUtilsTest {
private File smallFile;
private File largeFile;
@BeforeEach
void setUp() throws Exception {
smallFile = new File("small_test_file.txt");
try (FileWriter writer = new FileWriter(smallFile)) {
writer.write("Hello, this is a small test file!");
}
largeFile = new File("large_test_file.txt");
try (FileWriter writer = new FileWriter(largeFile)) {
for (int i = 0; i < 1_000_000; i++) {
writer.write("This is a large test file for MD5 computation.\n");
}
}
}
@AfterEach
void tearDown() {
if (smallFile.exists()) {
smallFile.delete();
}
if (largeFile.exists()) {
largeFile.delete();
}
}
@Test
void testCalculateFileMD5ForSmallFile() throws Exception {
String md5 = MessyUtils.calculateFileMD5(smallFile);
String expectedMd5 = calculateExpectedMD5(smallFile);
assertEquals(expectedMd5, md5, "MD5 hash for the small file does not match!");
}
@Test
void testCalculateFileMD5ForLargeFile() throws Exception {
String md5 = MessyUtils.calculateFileMD5(largeFile);
String expectedMd5 = calculateExpectedMD5(largeFile);
assertEquals(expectedMd5, md5, "MD5 hash for the large file does not match!");
}
@Test
void testCalculateFileMD5ForNonExistentFile() {
File nonExistentFile = new File("non_existent_file.txt");
String md5 = MessyUtils.calculateFileMD5(nonExistentFile);
assertNull(md5, "MD5 hash for non-existent file should be null!");
}
@Test
void testCompareFilesMD5() {
assertTrue(MessyUtils.compareFilesMD5(smallFile, smallFile), "MD5 hashes for the same file should match!");
assertFalse(MessyUtils.compareFilesMD5(smallFile, largeFile), "MD5 hashes for different files should not match!");
}
private String calculateExpectedMD5(File file) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] fileBytes = Files.readAllBytes(file.toPath());
byte[] md5Bytes = md.digest(fileBytes);
StringBuilder hexString = new StringBuilder();
for (byte b : md5Bytes) {
hexString.append(String.format("%02x", b));
}
return hexString.toString();
}
}