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