diff --git a/dfget/core/downloader/p2p_downloader/power_client.go b/dfget/core/downloader/p2p_downloader/power_client.go index 17f5a30a3..4d770f9a6 100644 --- a/dfget/core/downloader/p2p_downloader/power_client.go +++ b/dfget/core/downloader/p2p_downloader/power_client.go @@ -119,7 +119,7 @@ func (pc *PowerClient) downloadPiece() (content *pool.Buffer, e error) { peerPort := pc.pieceTask.PeerPort // check that the target download peer is available - if dstIP != "" && dstIP != pc.node { + if dstIP != "" && dstIP != pc.node && pc.pieceTask.Path != pc.cfg.URL { if _, e = httputils.CheckConnect(dstIP, peerPort, -1); e != nil { return nil, e } diff --git a/dfget/core/downloader/p2p_downloader/power_client_test.go b/dfget/core/downloader/p2p_downloader/power_client_test.go index 55695214d..488d6fc05 100644 --- a/dfget/core/downloader/p2p_downloader/power_client_test.go +++ b/dfget/core/downloader/p2p_downloader/power_client_test.go @@ -58,14 +58,14 @@ func (s *PowerClientTestSuite) TearDownTest(c *check.C) { } func (s *PowerClientTestSuite) TestDownloadPiece(c *check.C) { - // dstIP != pc.node && CheckConnect Fail + // dstIP != pc.node && pc.pieceTask.Path != pc.cfg.URL && CheckConnect Fail s.powerClient.pieceTask.PeerIP = "127.0.0.2" content, err := s.powerClient.downloadPiece() c.Check(content, check.IsNil) c.Check(err, check.NotNil) s.reset() - // dstIP != pc.node && CheckConnect Success && Download Fail + // dstIP != pc.node && pc.pieceTask.Path != pc.cfg.URL && CheckConnect Success && Download Fail s.powerClient.node = "127.0.0.2" downloadMock = func() (*http.Response, error) { return nil, fmt.Errorf("error") @@ -75,6 +75,17 @@ func (s *PowerClientTestSuite) TestDownloadPiece(c *check.C) { c.Check(err, check.DeepEquals, fmt.Errorf("error")) s.reset() + // dstIP != pc.node && pc.pieceTask.Path == pc.cfg.URL && Download Fail + s.powerClient.node = "127.0.0.3" + s.powerClient.pieceTask.Path = s.powerClient.cfg.URL + downloadMock = func() (*http.Response, error) { + return nil, fmt.Errorf("error") + } + content, err = s.powerClient.downloadPiece() + c.Check(content, check.IsNil) + c.Check(err, check.DeepEquals, fmt.Errorf("error")) + s.reset() + // dstIP == pc.node && Download Success && StatusCode == 416 body1 := ioutil.NopCloser(bytes.NewReader([]byte("RangeNotSatisfiable"))) defer func() { @@ -162,7 +173,7 @@ func (s *PowerClientTestSuite) TestReadBody(c *check.C) { func (s *PowerClientTestSuite) reset() { s.powerClient = &PowerClient{ - cfg: &config.Config{RV: config.RuntimeVariable{Cid: ""}}, + cfg: &config.Config{RV: config.RuntimeVariable{Cid: ""}, URL: "http://127.0.0.1/"}, node: "127.0.0.1", rateLimiter: ratelimiter.NewRateLimiter(int64(5), 2), downloadAPI: NewMockDownloadAPI(),