コード例 #1
0
ファイル: udpTracker_test.go プロジェクト: sdgoij/goat
// TestUDPTrackerError verifies that the UDP tracker error format is correct
func TestUDPTrackerError(t *testing.T) {
	log.Println("TestUDPTrackerError()")

	// Create a UDP tracker, trigger an error
	tracker := UDPTracker{TransID: uint32(1234)}
	res := tracker.Error("Testing")

	// Decode response
	errRes := new(udp.ErrorResponse)
	err := errRes.UnmarshalBinary(res)
	if err != nil {
		t.Fatalf("Failed to decode UDP error response")
	}
	log.Println(errRes)

	// Verify correct action
	if errRes.Action != 3 {
		t.Fatalf("Incorrect UDP action, expected 3")
	}

	// Verify correct error
	if errRes.Error != "Testing" {
		t.Fatalf("Incorrect UDP error, expected 'Testing'")
	}

	// Encode response, verify same as before
	errResBuf, err := errRes.MarshalBinary()
	if err != nil {
		t.Fatalf("Failed to encode UDP error response")
	}

	if !bytes.Equal(res, errResBuf) {
		t.Fatalf("Byte slices are not identical")
	}
}
コード例 #2
0
ファイル: udpTracker.go プロジェクト: gernest/goat
// Error reports a UDP []byte response packed datagram
func (u UDPTracker) Error(msg string) []byte {
	// Create UDP error response
	errRes := udp.ErrorResponse{
		Action:  3,
		TransID: u.TransID,
		Error:   msg,
	}

	// Convert to UDP byte buffer
	buf, err := errRes.MarshalBinary()
	if err != nil {
		log.Println(err.Error())
		return u.Error(ErrErrorFailure.Error())
	}

	return buf
}