blob: 98ebf730fb7068dd2ccb28c4a0da57f8ce53609e [file] [log] [blame]
root0d8b11f2025-05-15 14:10:43 +00001package cheattest;
2
Raver5ba779f2025-05-14 12:48:12 +00003import java.util.ArrayList;
4import java.util.Arrays;
5import java.util.Collection;
6import java.util.Date;
7import java.util.HashMap;
8import java.util.List;
9import java.util.Map;
10import java.util.UUID;
11import java.util.stream.Collectors;
12import java.util.stream.IntStream;
13
14import javax.persistence.EntityManager;
15import javax.persistence.EntityManagerFactory;
16import javax.persistence.Persistence;
17
18import org.apache.commons.lang3.tuple.Pair;
19import org.junit.jupiter.api.AfterAll;
20import org.junit.jupiter.api.Assertions;
21import org.junit.jupiter.api.BeforeAll;
22import org.junit.jupiter.api.DynamicTest;
23import org.junit.jupiter.api.TestFactory;
24
25import cheat.Cheat;
26import entity.Appeal;
27import entity.Seed;
28import entity.User;
29import entity.UserPT;
30import entity.config;
31
root0d8b11f2025-05-15 14:10:43 +000032public class cheatsystest {
root678fd3e2025-06-03 14:20:20 +000033
Raver5ba779f2025-05-14 12:48:12 +000034 private static EntityManagerFactory emf;
35 private static EntityManager em;
36 private static Cheat cheat;
37 private static List<String> insertedAppealIds = new ArrayList<>();
38 private static List<String> insertedSeedIds = new ArrayList<>(); // 用于记录插入的假种子 ID
39
40 @BeforeAll
41 static void setup() throws Exception {
42 // 加载 MySQL 驱动
43 Class.forName("com.mysql.cj.jdbc.Driver");
44 Map<String, Object> props = new HashMap<>();
45 config cfg = new config();
46 String jdbcUrl = String.format(
root678fd3e2025-06-03 14:20:20 +000047 "jdbc:mysql://%s/%s?useSSL=false&serverTimezone=UTC",
48 cfg.SqlURL, cfg.TestDatabase);
Raver5ba779f2025-05-14 12:48:12 +000049 props.put("javax.persistence.jdbc.url", jdbcUrl);
50 props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
51 props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
52 props.put("javax.persistence.jdbc.driver", "com.mysql.cj.jdbc.Driver");
53 emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
54 em = emf.createEntityManager();
root678fd3e2025-06-03 14:20:20 +000055 cheat = new Cheat(emf);
Raver5ba779f2025-05-14 12:48:12 +000056 }
57
58 @AfterAll
59 static void teardown() {
60 // 清理测试过程中插入的 Appeal 数据
61 if (em != null && em.isOpen()) {
62 em.getTransaction().begin();
63 for (String appealId : insertedAppealIds) {
64 Appeal appeal = em.find(Appeal.class, appealId);
65 if (appeal != null) {
66 em.remove(appeal);
67 }
68 }
69 em.getTransaction().commit();
70 }
71
72 // 清理测试过程中插入的 Seed 数据
73 if (em != null && em.isOpen()) {
74 em.getTransaction().begin();
75 for (String seedId : insertedSeedIds) {
76 Seed seed = em.find(Seed.class, seedId);
77 if (seed != null) {
78 em.remove(seed);
79 }
80 }
81 em.getTransaction().commit();
82 }
83
84 // 清理测试过程中插入的 User 数据
85 if (em != null && em.isOpen()) {
86 em.getTransaction().begin();
87 List<String> insertedUserIds = em.createQuery("SELECT u.userid FROM User u WHERE u.accountstate = true", String.class)
root678fd3e2025-06-03 14:20:20 +000088 .getResultList();
Raver5ba779f2025-05-14 12:48:12 +000089 for (String userId : insertedUserIds) {
90 User user = em.find(User.class, userId);
91 if (user != null) {
92 em.remove(user);
93 }
94 }
95 em.getTransaction().commit();
96 }
97
98 // 关闭 EntityManager 和 EntityManagerFactory
root678fd3e2025-06-03 14:20:20 +000099 if (em != null && em.isOpen()) {
100 em.close();
101 }
102 if (emf != null && emf.isOpen()) {
103 emf.close();
104 }
Raver5ba779f2025-05-14 12:48:12 +0000105 }
106
107 @TestFactory
108 Collection<DynamicTest> testAddAppeal() {
109 // 查询数据库中已存在的一个用户
110 String userId = em.createQuery("SELECT u.userid FROM User u", String.class)
root678fd3e2025-06-03 14:20:20 +0000111 .setMaxResults(1)
112 .getSingleResult();
Raver5ba779f2025-05-14 12:48:12 +0000113
114 return IntStream.range(0, 10)
root678fd3e2025-06-03 14:20:20 +0000115 .mapToObj(i -> DynamicTest.dynamicTest("AddAppeal test #" + i, () -> {
116 // 插入 Appeal
117 String appealId = UUID.randomUUID().toString();
118 Appeal appeal = new Appeal();
119 appeal.appealid = appealId;
120 appeal.appealuserid = userId;
121 appeal.content = "Test appeal content " + i;
122 appeal.fileURL = "http://example.com/file" + i;
123 appeal.status = 0;
Raver5ba779f2025-05-14 12:48:12 +0000124
root678fd3e2025-06-03 14:20:20 +0000125 em.getTransaction().begin();
126 boolean result = cheat.AddAppeal(appeal);
127 em.getTransaction().commit();
Raver5ba779f2025-05-14 12:48:12 +0000128
root678fd3e2025-06-03 14:20:20 +0000129 Assertions.assertTrue(result, "AddAppeal 应返回 true");
Raver5ba779f2025-05-14 12:48:12 +0000130
root678fd3e2025-06-03 14:20:20 +0000131 // 验证 Appeal 是否插入
132 Appeal fetched = em.find(Appeal.class, appealId);
133 Assertions.assertNotNull(fetched, "数据库应能查到新插入的 Appeal");
134 Assertions.assertEquals(userId, fetched.appealuserid);
135 Assertions.assertEquals("Test appeal content " + i, fetched.content);
Raver5ba779f2025-05-14 12:48:12 +0000136
root678fd3e2025-06-03 14:20:20 +0000137 // 清理
138 em.getTransaction().begin();
139 em.remove(fetched);
140 em.getTransaction().commit();
141 }))
142 .collect(Collectors.toList());
Raver5ba779f2025-05-14 12:48:12 +0000143 }
144
145 @TestFactory
146 Collection<DynamicTest> testGetAppeal() {
147 // 查询数据库中已存在的10个Appeal
148 List<Appeal> appeals = em.createQuery("SELECT a FROM Appeal a", Appeal.class)
root678fd3e2025-06-03 14:20:20 +0000149 .setMaxResults(10)
150 .getResultList();
Raver5ba779f2025-05-14 12:48:12 +0000151
152 List<DynamicTest> tests = new ArrayList<>();
153
154 // 前面用已有的Appeal测试能查到
155 for (int i = 0; i < Math.min(7, appeals.size()); i++) {
156 Appeal appeal = appeals.get(i);
157 tests.add(DynamicTest.dynamicTest("GetAppeal found test #" + i, () -> {
158 Appeal fetched = cheat.GetAppeal(appeal.appealid);
159 Assertions.assertNotNull(fetched, "GetAppeal 应返回非空");
160 Assertions.assertEquals(appeal.appealid, fetched.appealid);
161 Assertions.assertEquals(appeal.appealuserid, fetched.appealuserid);
162 Assertions.assertEquals(appeal.content, fetched.content);
163 }));
164 }
165
166 // 后3个用随机UUID测试查不到
167 for (int i = 7; i < 10; i++) {
168 String notExistId = UUID.randomUUID().toString();
169 tests.add(DynamicTest.dynamicTest("GetAppeal not found test #" + i, () -> {
170 Appeal fetched = cheat.GetAppeal(notExistId);
171 Assertions.assertNull(fetched, "GetAppeal 查询不存在的id应返回null");
172 }));
173 }
174
175 return tests;
176 }
177
178 @TestFactory
179 Collection<DynamicTest> testGetAppealList() {
180 // 查询数据库中已存在的一个用户
181 String userId = em.createQuery("SELECT u.userid FROM User u", String.class)
root678fd3e2025-06-03 14:20:20 +0000182 .setMaxResults(1)
183 .getSingleResult();
Raver5ba779f2025-05-14 12:48:12 +0000184 // 用于记录测试过程中插入的 Appeal ID
Raver5ba779f2025-05-14 12:48:12 +0000185
186 return IntStream.range(0, 10)
root678fd3e2025-06-03 14:20:20 +0000187 .mapToObj(i -> DynamicTest.dynamicTest("GetAppealList test #" + i, () -> {
188 // 插入一个新的 Appeal
189 String appealId = UUID.randomUUID().toString();
190 Appeal appeal = new Appeal();
191 appeal.appealid = appealId;
192 appeal.appealuserid = userId;
193 appeal.content = "GetAppealList test content " + i;
194 appeal.fileURL = "http://example.com/file" + i;
195 appeal.status = 0;
Raver5ba779f2025-05-14 12:48:12 +0000196
root678fd3e2025-06-03 14:20:20 +0000197 em.getTransaction().begin();
198 em.persist(appeal);
199 em.getTransaction().commit();
Raver5ba779f2025-05-14 12:48:12 +0000200
root678fd3e2025-06-03 14:20:20 +0000201 // 记录插入的 Appeal ID
202 insertedAppealIds.add(appealId);
Raver5ba779f2025-05-14 12:48:12 +0000203
root678fd3e2025-06-03 14:20:20 +0000204 // 调用 GetAppealList 并验证
205 Appeal[] appeals = cheat.GetAppealList();
206 Assertions.assertNotNull(appeals, "GetAppealList 应返回非空");
Raver5ba779f2025-05-14 12:48:12 +0000207
root678fd3e2025-06-03 14:20:20 +0000208 // 检查整个列表是否包含所有插入的数据
209 for (String id : insertedAppealIds) {
210 boolean found = Arrays.stream(appeals)
211 .anyMatch(a -> a.appealid.equals(id));
212 Assertions.assertTrue(found, "GetAppealList 应包含插入的 Appeal ID: " + id);
213 }
214 }))
215 .collect(Collectors.toList());
Raver5ba779f2025-05-14 12:48:12 +0000216 }
217
218 @TestFactory
219 Collection<DynamicTest> testHandleAppeal() {
220 // 查询数据库中已存在的一个用户
221 String userId = em.createQuery("SELECT u.userid FROM User u", String.class)
root678fd3e2025-06-03 14:20:20 +0000222 .setMaxResults(1)
223 .getSingleResult();
Raver5ba779f2025-05-14 12:48:12 +0000224
225 return IntStream.range(0, 10)
root678fd3e2025-06-03 14:20:20 +0000226 .mapToObj(i -> DynamicTest.dynamicTest("HandleAppeal test #" + i, () -> {
227 // 插入一个新的 Appeal
228 String appealId = UUID.randomUUID().toString();
229 Appeal appeal = new Appeal();
230 appeal.appealid = appealId;
231 appeal.appealuserid = userId;
232 appeal.content = "HandleAppeal test content " + i;
233 appeal.fileURL = "http://example.com/file" + i;
234 appeal.status = 0;
Raver5ba779f2025-05-14 12:48:12 +0000235
root678fd3e2025-06-03 14:20:20 +0000236 em.getTransaction().begin();
237 em.persist(appeal);
238 em.getTransaction().commit();
239
240 // 如果 newStatus 为 1,先将用户的 account_status 设置为 true
241 if (i % 2 == 0) { // 偶数索引对应 newStatus = 1
Raver5ba779f2025-05-14 12:48:12 +0000242 em.getTransaction().begin();
root678fd3e2025-06-03 14:20:20 +0000243 User user = em.find(User.class, userId);
244 Assertions.assertNotNull(user, "数据库应能查到相关用户");
245 user.accountstate = true; // 设置为 true
Raver5ba779f2025-05-14 12:48:12 +0000246 em.getTransaction().commit();
root678fd3e2025-06-03 14:20:20 +0000247 }
Raver5ba779f2025-05-14 12:48:12 +0000248
root678fd3e2025-06-03 14:20:20 +0000249 // 测试处理申诉
250 int newStatus = (i % 2 == 0) ? 1 : 2; // 偶数索引通过申诉,奇数索引拒绝申诉
251 boolean result = cheat.HandleAppeal(appealId, newStatus);
252 Assertions.assertTrue(result, "HandleAppeal 应返回 true");
Raver5ba779f2025-05-14 12:48:12 +0000253
root678fd3e2025-06-03 14:20:20 +0000254 // 验证 Appeal 状态是否更新
255 Appeal updatedAppeal = em.find(Appeal.class, appealId);
256 Assertions.assertNotNull(updatedAppeal, "数据库应能查到更新后的 Appeal");
257 Assertions.assertEquals(newStatus, updatedAppeal.status, "Appeal 的状态应被更新为: " + newStatus);
Raver5ba779f2025-05-14 12:48:12 +0000258
root678fd3e2025-06-03 14:20:20 +0000259 // 如果申诉通过,验证用户的 account_status 是否被设置为 false
260 if (newStatus == 1) {
261 User user = em.find(User.class, userId);
262 Assertions.assertNotNull(user, "数据库应能查到相关用户");
263 Assertions.assertFalse(user.accountstate, "通过申诉后用户的 account_status 应为 false");
264 }
Raver5ba779f2025-05-14 12:48:12 +0000265
root678fd3e2025-06-03 14:20:20 +0000266 // 清理测试数据
267 em.getTransaction().begin();
268 em.remove(updatedAppeal);
269 em.getTransaction().commit();
270 }))
271 .collect(Collectors.toList());
Raver5ba779f2025-05-14 12:48:12 +0000272 }
273
274 @TestFactory
275 Collection<DynamicTest> testGetFakeSeed() {
276 return IntStream.range(0, 10)
root678fd3e2025-06-03 14:20:20 +0000277 .mapToObj(i -> DynamicTest.dynamicTest("GetFakeSeed test #" + i, () -> {
278 // 插入一个新的假种子
279 String seedId = UUID.randomUUID().toString();
280 String userId = em.createQuery("SELECT u.userid FROM User u", String.class)
281 .setMaxResults(1)
282 .getSingleResult();
Raver5ba779f2025-05-14 12:48:12 +0000283
root678fd3e2025-06-03 14:20:20 +0000284 Seed seed = new Seed();
285 seed.seedid = seedId;
286 seed.seeduserid = userId;
287 seed.faketime = 100 + i; // 设置为大于 config.FakeTime 的值
288 seed.lastfakecheck = new Date();
289 seed.outurl = "http://example.com/fake" + i;
290 seed.title = "Fake Seed " + i;
291 seed.subtitle = "Subtitle " + i;
292 seed.seedsize = "100MB";
293 seed.seedtag = "test,fake";
294 seed.downloadtimes = 0;
295 seed.url = "http://example.com/seed" + i;
Raver5ba779f2025-05-14 12:48:12 +0000296
root678fd3e2025-06-03 14:20:20 +0000297 em.getTransaction().begin();
298 em.persist(seed);
299 em.getTransaction().commit();
Raver5ba779f2025-05-14 12:48:12 +0000300
root678fd3e2025-06-03 14:20:20 +0000301 // 记录插入的 Seed ID
302 insertedSeedIds.add(seedId);
Raver5ba779f2025-05-14 12:48:12 +0000303
root678fd3e2025-06-03 14:20:20 +0000304 // 调用 GetFakeSeed 并验证
305 Pair<String, String>[] fakeSeeds = cheat.GetFakeSeed();
306 Assertions.assertNotNull(fakeSeeds, "GetFakeSeed 应返回非空");
Raver5ba779f2025-05-14 12:48:12 +0000307
root678fd3e2025-06-03 14:20:20 +0000308 // 验证返回的假种子列表是否包含所有插入的假种子
309 for (String id : insertedSeedIds) {
310 boolean found = Arrays.stream(fakeSeeds)
311 .anyMatch(pair -> pair.getLeft().equals(id));
312 Assertions.assertTrue(found, "GetFakeSeed 应包含插入的假种子 ID: " + id);
313 }
314 }))
315 .collect(Collectors.toList());
Raver5ba779f2025-05-14 12:48:12 +0000316 }
317
318 @TestFactory
319 Collection<DynamicTest> testGetPunishedUserList() {
320 List<String> insertedUserIds = new ArrayList<>(); // 用于记录插入的用户 ID
321
322 return IntStream.range(0, 10)
root678fd3e2025-06-03 14:20:20 +0000323 .mapToObj(i -> DynamicTest.dynamicTest("GetPunishedUserList test #" + i, () -> {
324 // 插入一个新的用户,accountstate 设置为 true
325 String userId = UUID.randomUUID().toString();
326 User user = new User();
327 user.userid = userId;
328 user.email = "test" + i + "@example.com";
329 user.username = "TestUser" + i;
330 user.password = "password" + i;
331 user.sex = "M";
332 user.detectedCount = 0;
333 user.lastDetectedTime = new Date();
334 user.school = "TestSchool";
335 user.pictureurl = "http://example.com/avatar" + i;
336 user.profile = "Test profile " + i;
337 user.accountstate = true; // 设置为 true
338 user.invitetimes = 5;
Raver5ba779f2025-05-14 12:48:12 +0000339
root678fd3e2025-06-03 14:20:20 +0000340 // 创建并设置 UserPT 实例
341 UserPT userPT = new UserPT();
342 userPT.user = user; // 关联 User 实例
343 user.userPT = userPT;
Raver5ba779f2025-05-14 12:48:12 +0000344
root678fd3e2025-06-03 14:20:20 +0000345 em.getTransaction().begin();
346 em.persist(user);
347 em.persist(userPT); // 持久化 UserPT 实例
348 em.getTransaction().commit();
Raver5ba779f2025-05-14 12:48:12 +0000349
root678fd3e2025-06-03 14:20:20 +0000350 // 记录插入的用户 ID
351 insertedUserIds.add(userId);
Raver5ba779f2025-05-14 12:48:12 +0000352
root678fd3e2025-06-03 14:20:20 +0000353 // 调用 GetPunishedUserList 并验证
354 String[] punishedUsers = cheat.GetPunishedUserList();
355 Assertions.assertNotNull(punishedUsers, "GetPunishedUserList 应返回非空");
Raver5ba779f2025-05-14 12:48:12 +0000356
root678fd3e2025-06-03 14:20:20 +0000357 // 验证返回的用户列表是否包含所有插入的用户
358 for (String id : insertedUserIds) {
359 boolean found = Arrays.stream(punishedUsers).anyMatch(returnedId -> returnedId.equals(id));
360 Assertions.assertTrue(found, "GetPunishedUserList 应包含插入的用户 ID: " + id);
361 }
362 }))
363 .collect(Collectors.toList());
Raver5ba779f2025-05-14 12:48:12 +0000364 }
365
366 @TestFactory
367 Collection<DynamicTest> testPunishUser() {
368 List<String> insertedUserIds = new ArrayList<>(); // 用于记录插入的用户 ID
369
370 return IntStream.range(0, 10)
root678fd3e2025-06-03 14:20:20 +0000371 .mapToObj(i -> DynamicTest.dynamicTest("PunishUser test #" + i, () -> {
372 // 配置参数
373 int cheatTime = config.CheatTime;
374 int fakeTime = config.FakeTime;
Raver5ba779f2025-05-14 12:48:12 +0000375
root678fd3e2025-06-03 14:20:20 +0000376 // 插入用户 1(作弊用户)
377 String userId1 = UUID.randomUUID().toString();
378 User user1 = new User();
379 user1.userid = userId1;
380 user1.email = "cheater" + i + "_" + UUID.randomUUID().toString() + "@example.com"; // 确保唯一性
381 user1.username = "Cheater" + i;
382 user1.password = "password" + i;
383 user1.sex = "M";
384 user1.detectedCount = cheatTime + 1; // detectedCount 超过 cheatTime
385 user1.fakeDetectedCount = 0;
386 user1.lastDetectedTime = new Date();
387 user1.fakeLastDetectedTime = new Date();
388 user1.accountstate = false; // 初始状态为未封禁
389 user1.invitetimes = 5;
Raver5ba779f2025-05-14 12:48:12 +0000390
root678fd3e2025-06-03 14:20:20 +0000391 // 创建并设置 UserPT 实例
392 UserPT userPT1 = new UserPT();
393 userPT1.user = user1; // 关联 User 实例
394 user1.userPT = userPT1;
Raver5ba779f2025-05-14 12:48:12 +0000395
root678fd3e2025-06-03 14:20:20 +0000396 // 插入用户 2(非作弊用户)
397 String userId2 = UUID.randomUUID().toString();
398 User user2 = new User();
399 user2.userid = userId2;
400 user2.email = "normal" + i + "_" + UUID.randomUUID().toString() + "@example.com"; // 确保唯一性
401 user2.username = "NormalUser" + i;
402 user2.password = "password" + i;
403 user2.sex = "F";
404 user2.detectedCount = 0;
405 user2.fakeDetectedCount = fakeTime - 1; // fakeDetectedCount 未超过 fakeTime
406 user2.lastDetectedTime = new Date();
407 user2.fakeLastDetectedTime = new Date();
408 user2.accountstate = false; // 初始状态为未封禁
409 user2.invitetimes = 5;
Raver5ba779f2025-05-14 12:48:12 +0000410
root678fd3e2025-06-03 14:20:20 +0000411 // 创建并设置 UserPT 实例
412 UserPT userPT2 = new UserPT();
413 userPT2.user = user2; // 关联 User 实例
414 user2.userPT = userPT2;
Raver5ba779f2025-05-14 12:48:12 +0000415
root678fd3e2025-06-03 14:20:20 +0000416 em.getTransaction().begin();
417 em.persist(user1);
418 em.persist(userPT1); // 持久化 UserPT 实例
419 em.persist(user2);
420 em.persist(userPT2); // 持久化 UserPT 实例
421 em.getTransaction().commit();
Raver5ba779f2025-05-14 12:48:12 +0000422
root678fd3e2025-06-03 14:20:20 +0000423 // 记录插入的用户 ID
424 insertedUserIds.add(userId1);
425 insertedUserIds.add(userId2);
Raver5ba779f2025-05-14 12:48:12 +0000426
root678fd3e2025-06-03 14:20:20 +0000427 // 调用 PunishUser 方法
428 cheat.PunishUser();
Raver5ba779f2025-05-14 12:48:12 +0000429
root678fd3e2025-06-03 14:20:20 +0000430 // 验证用户 1 是否被封禁
431 User punishedUser1 = em.find(User.class, userId1);
432 Assertions.assertNotNull(punishedUser1, "数据库应能查到用户 1");
433 Assertions.assertTrue(punishedUser1.accountstate, "作弊用户应被封禁");
Raver5ba779f2025-05-14 12:48:12 +0000434
root678fd3e2025-06-03 14:20:20 +0000435 // 验证用户 2 是否未被封禁
436 User punishedUser2 = em.find(User.class, userId2);
437 Assertions.assertNotNull(punishedUser2, "数据库应能查到用户 2");
438 Assertions.assertFalse(punishedUser2.accountstate, "非作弊用户不应被封禁");
439 }))
440 .collect(Collectors.toList());
Raver5ba779f2025-05-14 12:48:12 +0000441 }
442
443 // @TestFactory
444 // Collection<DynamicTest> testDetectTrans() {
445 // List<String> insertedUserIds = new ArrayList<>(); // 用于记录插入的用户 ID
446 // List<String> insertedSeedIds = new ArrayList<>(); // 用于记录插入的种子 ID
447 // List<String> insertedTransIds = new ArrayList<>(); // 用于记录插入的传输记录 ID
Raver5ba779f2025-05-14 12:48:12 +0000448 // return IntStream.range(0, 10)
449 // .mapToObj(i -> DynamicTest.dynamicTest("DetectTrans test #" + i, () -> {
450 // // 插入上传用户
451 // String uploaderId = UUID.randomUUID().toString();
452 // User uploader = new User();
453 // uploader.userid = uploaderId;
454 // uploader.email = "uploader" + i + "_" + UUID.randomUUID().toString() + "@example.com"; // 确保唯一性
455 // uploader.username = "Uploader" + i;
456 // uploader.password = "password" + i;
457 // uploader.sex = "M";
458 // uploader.detectedCount = 0; // 初始 detectedCount 为 0
459 // uploader.fakeDetectedCount = 0;
460 // uploader.lastDetectedTime = new Date();
461 // uploader.fakeLastDetectedTime = new Date();
462 // uploader.accountstate = false;
463 // uploader.invitetimes = 5;
Raver5ba779f2025-05-14 12:48:12 +0000464 // // 创建并设置 UserPT 实例
465 // UserPT uploaderPT = new UserPT();
466 // uploaderPT.user = uploader; // 关联 User 实例
467 // uploader.userPT = uploaderPT;
Raver5ba779f2025-05-14 12:48:12 +0000468 // // 插入下载用户
469 // String downloaderId = UUID.randomUUID().toString();
470 // User downloader = new User();
471 // downloader.userid = downloaderId;
472 // downloader.email = "downloader" + i + "_" + UUID.randomUUID().toString() + "@example.com"; // 确保唯一性
473 // downloader.username = "Downloader" + i;
474 // downloader.password = "password" + i;
475 // downloader.sex = "F";
476 // downloader.detectedCount = 0;
477 // downloader.fakeDetectedCount = 0;
478 // downloader.lastDetectedTime = new Date();
479 // downloader.fakeLastDetectedTime = new Date();
480 // downloader.accountstate = false;
481 // downloader.invitetimes = 5;
Raver5ba779f2025-05-14 12:48:12 +0000482 // // 创建并设置 UserPT 实例
483 // UserPT downloaderPT = new UserPT();
484 // downloaderPT.user = downloader; // 关联 User 实例
485 // downloader.userPT = downloaderPT;
Raver5ba779f2025-05-14 12:48:12 +0000486 // em.getTransaction().begin();
487 // em.persist(uploader);
488 // em.persist(uploaderPT); // 持久化 UserPT 实例
489 // em.persist(downloader);
490 // em.persist(downloaderPT); // 持久化 UserPT 实例
491 // em.getTransaction().commit();
492 // insertedUserIds.add(uploaderId);
493 // insertedUserIds.add(downloaderId);
Raver5ba779f2025-05-14 12:48:12 +0000494 // // 插入种子
495 // String seedId = UUID.randomUUID().toString();
496 // Seed seed = new Seed();
497 // seed.seedid = seedId;
498 // seed.seeduserid = uploaderId;
499 // seed.faketime = 0;
500 // seed.lastfakecheck = new Date();
501 // seed.outurl = "http://example.com/seed" + i;
502 // seed.title = "Seed " + i;
503 // seed.subtitle = "Subtitle " + i;
504 // seed.seedsize = "100MB";
505 // seed.seedtag = "test";
506 // seed.downloadtimes = 0;
507 // seed.url = "http://example.com/seed" + i;
Raver5ba779f2025-05-14 12:48:12 +0000508 // em.getTransaction().begin();
509 // em.persist(seed);
510 // em.getTransaction().commit();
511 // insertedSeedIds.add(seedId);
Raver5ba779f2025-05-14 12:48:12 +0000512 // // 插入正常和异常的传输记录
513 // List<TransRecord> transRecords = new ArrayList<>();
514 // for (int j = 0; j < 15; j++) {
515 // TransRecord transRecord = new TransRecord();
516 // transRecord.taskid = UUID.randomUUID().toString();
517 // transRecord.uploaduserid = uploaderId;
518 // transRecord.downloaduserid = downloaderId; // 确保 downloader_id 存在于 User 表中
519 // transRecord.seedid = seedId; // 确保 seed_id 存在于 Seed 表中
520 // transRecord.upload = (j < 13) ? 100 : 1000; // 前 3 条为正常数据,后 2 条为异常数据
521 // transRecord.download = (j < 13) ? 90 : 10; // 异常数据的上传量远大于下载量
522 // transRecord.maxupload = 200;
523 // transRecord.maxdownload = 200;
Raver5ba779f2025-05-14 12:48:12 +0000524 // em.getTransaction().begin();
525 // em.persist(transRecord);
526 // em.getTransaction().commit();
527 // insertedTransIds.add(transRecord.taskid);
528 // transRecords.add(transRecord);
529 // }
Raver5ba779f2025-05-14 12:48:12 +0000530 // // 调用 DetectTrans 方法
531 // cheat.DetectTrans();
Raver5ba779f2025-05-14 12:48:12 +0000532 // // 验证下载用户的 detectedCount 是否增加
533 // User detectedDownloader = em.find(User.class, downloaderId);
534 // Assertions.assertNotNull(detectedDownloader, "数据库应能查到上传用户");
535 // Assertions.assertEquals(2, detectedDownloader.detectedCount, "上传用户的 detectedCount 应增加 2(对应 2 条异常数据)");
536 // }))
537 // .collect(Collectors.toList());
538 // }
root0d8b11f2025-05-15 14:10:43 +0000539}