Skip to content

Commit

Permalink
add test for Receive Extension Handshake stage
Browse files Browse the repository at this point in the history
add test for Receive Extension Handshake stage
  • Loading branch information
sarp authored Sep 10, 2024
2 parents 6d4430c + dbf3396 commit 5fc3010
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 7 deletions.
59 changes: 59 additions & 0 deletions internal/stage_magnet_receive.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package internal

import (
"fmt"
"net"

"github.com/codecrafters-io/tester-utils/test_case_harness"
)

func testMagnetReceiveExtendedHandshake(stageHarness *test_case_harness.TestCaseHarness) error {
initRandom()

logger := stageHarness.Logger
executable := stageHarness.Executable

magnetLink := randomMagnetLink()
params, err := NewMagnetTestParams(magnetLink, logger)
if err != nil {
return err
}

go listenAndServeTrackerResponse(params.toTrackerParams())
go waitAndHandlePeerConnection(params.toPeerConnectionParams(), handleReceiveExtensionHandshake)

logger.Infof("Running ./your_bittorrent.sh magnet_handshake %q", params.MagnetUrlEncoded)
result, err := executable.Run("magnet_handshake", params.MagnetUrlEncoded)
if err != nil {
return err
}

if err = assertExitCode(result, 0); err != nil {
return err
}

expected := fmt.Sprintf("Peer Metadata Extension ID: %d\n", params.MyMetadataExtensionID)

if err = assertStdoutContains(result, expected); err != nil {
return err
}

return nil
}

func handleReceiveExtensionHandshake(conn net.Conn, p PeerConnectionParams) {
defer conn.Close()
logger := p.logger

if err := receiveAndSendHandshake(conn, p); err != nil {
return
}

if err := sendBitfieldMessage(conn, p.bitfield, logger); err != nil {
return
}

if err := sendExtensionHandshake(conn, p.myMetadataExtensionID, p.metadataSizeBytes, logger); err != nil {
return
}
}
7 changes: 0 additions & 7 deletions internal/stage_magnet_send.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package internal

import (
"errors"
"fmt"
"net"

"github.com/codecrafters-io/tester-utils/test_case_harness"
Expand Down Expand Up @@ -34,12 +33,6 @@ func testMagnetSendExtendedHandshake(stageHarness *test_case_harness.TestCaseHar
if err = assertExitCode(result, 0); err != nil {
return err
}

expected := fmt.Sprintf("Peer Metadata Extension ID: %d\n", params.MyMetadataExtensionID)

if err = assertStdoutContains(result, expected); err != nil {
return err
}

success := <-handshakeChannel
if success {
Expand Down

0 comments on commit 5fc3010

Please sign in to comment.