77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
// Copyright 2015 The Chihaya Authors. All rights reserved.
|
|
// Use of this source code is governed by the BSD 2-Clause license,
|
|
// which can be found in the LICENSE file.
|
|
|
|
package udp
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/chihaya/chihaya/config"
|
|
)
|
|
|
|
func doRequest(sock *net.UDPConn, request, txID []byte) ([]byte, error) {
|
|
response := make([]byte, 1024)
|
|
|
|
n, err := sendRequest(sock, request, response)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if !bytes.Equal(response[4:8], txID) {
|
|
return nil, fmt.Errorf("transaction ID mismatch")
|
|
}
|
|
|
|
return response[:n], nil
|
|
}
|
|
|
|
func requestScrape(sock *net.UDPConn, connID []byte, hashes []string) ([]byte, error) {
|
|
txID := makeTransactionID()
|
|
|
|
var request []byte
|
|
request = append(request, connID...)
|
|
request = append(request, scrapeAction...)
|
|
request = append(request, txID...)
|
|
|
|
for _, hash := range hashes {
|
|
request = append(request, []byte(hash)...)
|
|
}
|
|
|
|
return doRequest(sock, request, txID)
|
|
}
|
|
|
|
func TestScrapeEmpty(t *testing.T) {
|
|
srv, done, err := setupTracker(&config.DefaultConfig)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
_, sock, err := setupSocket()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
connID, err := requestConnectionID(sock)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
scrape, err := requestScrape(sock, connID, []string{"aaaaaaaaaaaaaaaaaaaa"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if !bytes.Equal(scrape[:4], errorAction) {
|
|
t.Error("expected error response")
|
|
}
|
|
|
|
if string(scrape[8:]) != "torrent does not exist\000" {
|
|
t.Error("expected torrent to not exist")
|
|
}
|
|
|
|
srv.Stop()
|
|
<-done
|
|
}
|