完成Tracker.java接口开发,update path
Change-Id: I8b1096af3aa3c7ebdf623905c5d47cfe72b86da2
diff --git a/src/test/java/databasetest/DataManagerTest.java b/src/test/java/databasetest/DataManagerTest.java
new file mode 100644
index 0000000..1256240
--- /dev/null
+++ b/src/test/java/databasetest/DataManagerTest.java
@@ -0,0 +1,5 @@
+package databasetest;
+
+public class DataManagerTest {
+
+}
diff --git a/src/test/java/trackertest/TrackerTest.java b/src/test/java/trackertest/TrackerTest.java
index 3c4898b..104f017 100644
--- a/src/test/java/trackertest/TrackerTest.java
+++ b/src/test/java/trackertest/TrackerTest.java
@@ -1,4 +1,6 @@
package trackertest;
+
+import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
@@ -19,6 +21,7 @@
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
+import entity.Seed;
import entity.TransRecord;
import entity.TransportId;
import entity.config;
@@ -66,6 +69,19 @@
@AfterAll
static void teardown() {
+ // 清理:删除测试过程中保存的所有 torrent 文件
+ File storageDir = new File(config.TORRENT_STORAGE_DIR);
+ if (storageDir.exists() && storageDir.isDirectory()) {
+ File[] files = storageDir.listFiles();
+ if (files != null) {
+ for (File f : files) {
+ if (f.isFile()) {
+ f.delete();
+ }
+ }
+ }
+ }
+
if (em != null && em.isOpen()) em.close();
if (emf != null && emf.isOpen()) emf.close();
}
@@ -298,4 +314,80 @@
}))
.collect(Collectors.toList());
}
+
+ @TestFactory
+ Collection<DynamicTest> testSaveTorrent() {
+ List<String> seedIds = em.createQuery(
+ "select s.seedid from Seed s", String.class
+ ).getResultList();
+ return seedIds.stream()
+ .map(sid -> DynamicTest.dynamicTest("SaveTorrent for seed " + sid, () -> {
+ // 准备一个临时空文件
+ File temp = File.createTempFile(sid + "_test", ".torrent");
+ // 调用 SaveTorrent
+ int ret = tracker.SaveTorrent(sid, temp);
+ Assertions.assertEquals(0, ret, "SaveTorrent 应返回 0");
+
+ // 验证文件已按约定存储
+ File stored = new File(config.TORRENT_STORAGE_DIR,
+ sid + "_" + temp.getName());
+ Assertions.assertTrue(stored.exists(), "存储文件应存在");
+
+ // 验证数据库中 url 字段已更新
+ em.clear();
+ Seed seed = em.find(Seed.class, sid);
+ // 将 seed.url 转为 File 再取绝对路径进行比较
+ Assertions.assertEquals(
+ stored.getAbsolutePath(),
+ new File(seed.url).getAbsolutePath(),
+ "Seed.url 应更新为存储路径"
+ );
+
+ // 清理测试文件
+ stored.delete();
+ temp.delete();
+ }))
+ .collect(Collectors.toList());
+ }
+
+ @TestFactory
+ Collection<DynamicTest> testGetTTorent() {
+ // 拿到所有 seedid
+ List<String> seedIds = em.createQuery(
+ "select s.seedid from Seed s", String.class
+ ).getResultList();
+ return seedIds.stream()
+ .map(sid -> DynamicTest.dynamicTest("GetTTorent for seed " + sid, () -> {
+ // 准备一个临时空文件并 SaveTorrent
+ File temp = File.createTempFile(sid + "_test", ".torrent");
+ int saveRet = tracker.SaveTorrent(sid, temp);
+ Assertions.assertEquals(0, saveRet, "SaveTorrent 应返回 0");
+
+ // 刷新上下文并取回更新后的 seed 实体
+ em.clear();
+ Seed seed = em.find(Seed.class, sid);
+ Assertions.assertNotNull(seed.url, "Seed.url 应已被更新");
+
+ // 调用 GetTTorent 并断言路径一致
+ String uid = userIds.get(0), ip = "127.0.0.1";
+ File ret = tracker.GetTTorent(sid, uid, ip);
+ File expected = new File(seed.url);
+ Assertions.assertNotNull(ret, "应返回文件对象");
+ Assertions.assertEquals(
+ expected.getAbsolutePath(),
+ ret.getAbsolutePath(),
+ "返回文件路径应与Seed.url一致"
+ );
+
+ // 清理:删掉本地文件,回滚 DB url 字段,删掉 temp
+ expected.delete();
+ EntityTransaction tx = em.getTransaction();
+ tx.begin();
+ seed.url = null;
+ em.merge(seed);
+ tx.commit();
+ temp.delete();
+ }))
+ .collect(Collectors.toList());
+ }
}