// 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") } }
// 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 }