diff --git a/src/main/java/com/pt5/pthouduan/controller/TorrentController.java b/src/main/java/com/pt5/pthouduan/controller/TorrentController.java
index 5ff49aa..b623e7a 100644
--- a/src/main/java/com/pt5/pthouduan/controller/TorrentController.java
+++ b/src/main/java/com/pt5/pthouduan/controller/TorrentController.java
@@ -57,12 +57,12 @@
 
 
 
-//    @GetMapping("/{infoHash}/seeders")
-//    public ResponseEntity<List<PeerInfo>> getSeedersByInfoHash(@PathVariable String infoHash) {
-//        List<PeerInfo> seeders = peerService.getSeedersByInfoHash(infoHash.toUpperCase());
-//        System.out.println("Response: " + seeders);
-//        return ResponseEntity.ok(seeders);
-//    }
+    @GetMapping("/{infoHash}/seeders")
+    public ResponseEntity<List<PeerInfo>> getSeedersByInfoHash(@PathVariable String infoHash) {
+        List<PeerInfo> seeders = peerService.getSeedersByInfoHash(infoHash.toUpperCase());
+        System.out.println("Response: " + seeders);
+        return ResponseEntity.ok(seeders);
+    }
 
     //添加搜索
     @GetMapping("/search")
diff --git a/src/test/java/com/pt5/pthouduan/ControllerTest/TorrentSeederControllerTest.java b/src/test/java/com/pt5/pthouduan/ControllerTest/TorrentSeederControllerTest.java
new file mode 100644
index 0000000..69cbc9a
--- /dev/null
+++ b/src/test/java/com/pt5/pthouduan/ControllerTest/TorrentSeederControllerTest.java
@@ -0,0 +1,78 @@
+package com.pt5.pthouduan.ControllerTest;
+
+import com.pt5.pthouduan.controller.TorrentController;
+import com.pt5.pthouduan.entity.PeerInfo;
+import com.pt5.pthouduan.service.TorrentService;
+import com.pt5.pthouduan.service.impl.PeerService;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.mockito.Mockito.when;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+//static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+class TorrentSeederControllerTest {
+
+    @Mock
+    private TorrentService torrentService;
+
+    @Mock
+    private PeerService peerService;
+
+
+    @InjectMocks
+    private TorrentController torrentController;
+
+    private MockMvc mockMvc;
+
+    @BeforeEach
+    void setUp() {
+        MockitoAnnotations.openMocks(this);
+        mockMvc = MockMvcBuilders.standaloneSetup(torrentController).build();
+    }
+
+    @Test
+    void getSeedersByInfoHash_ShouldReturnPeers() throws Exception {
+        // Arrange
+        String infoHash = "ABC123";
+        PeerInfo peer1 = new PeerInfo();
+        PeerInfo peer2 = new PeerInfo();
+        List<PeerInfo> peers = Arrays.asList(peer1, peer2);
+
+        // 假设torrentService有一个方法返回PeerInfo列表
+        // 这里需要根据实际torrentService的API进行调整
+        when(peerService.getSeedersByInfoHash(infoHash)).thenReturn(peers);
+
+        // Act & Assert
+        mockMvc.perform(get("/torrent/{infoHash}/seeders", infoHash))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$").isArray())
+                .andExpect(jsonPath("$.length()").value(2));
+    }
+
+    @Test
+    void getSeedersByInfoHash_ShouldReturnEmptyListWhenNoPeers() throws Exception {
+        // Arrange
+        String infoHash = "ABC123";
+
+        // 假设torrentService有一个方法返回空列表
+        when(peerService.getSeedersByInfoHash(infoHash)).thenReturn(Collections.emptyList());
+
+        // Act & Assert
+        mockMvc.perform(get("/torrent/{infoHash}/seeders", infoHash))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$").isArray())
+                .andExpect(jsonPath("$.length()").value(0));
+    }
+}
\ No newline at end of file
