2018-02-07 21:21:20 +01:00
|
|
|
package peer
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
2022-10-12 03:57:52 +02:00
|
|
|
"io"
|
|
|
|
"net"
|
2018-02-07 21:21:20 +01:00
|
|
|
"testing"
|
2022-10-12 03:57:52 +02:00
|
|
|
"time"
|
2018-02-07 21:21:20 +01:00
|
|
|
|
|
|
|
"github.com/lbryio/reflector.go/store"
|
|
|
|
)
|
|
|
|
|
|
|
|
var blobs = map[string][]byte{
|
|
|
|
"a": []byte("abcdefg"),
|
|
|
|
"b": []byte("hijklmn"),
|
|
|
|
"c": []byte("opqrstu"),
|
|
|
|
}
|
|
|
|
|
|
|
|
type pair struct {
|
|
|
|
request []byte
|
|
|
|
response []byte
|
|
|
|
}
|
|
|
|
|
|
|
|
var availabilityRequests = []pair{
|
|
|
|
{
|
|
|
|
request: []byte(`{"lbrycrd_address":true,"requested_blobs":["a","b"]}`),
|
|
|
|
response: []byte(`{"lbrycrd_address":"` + LbrycrdAddress + `","available_blobs":["a","b"]}`),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
request: []byte(`{"lbrycrd_address":true,"requested_blobs":["x","a","y"]}`),
|
|
|
|
response: []byte(`{"lbrycrd_address":"` + LbrycrdAddress + `","available_blobs":["a"]}`),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
request: []byte(`{"lbrycrd_address":true,"requested_blobs":[]}`),
|
|
|
|
response: []byte(`{"lbrycrd_address":"` + LbrycrdAddress + `","available_blobs":[]}`),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2018-05-30 03:38:55 +02:00
|
|
|
func getServer(t *testing.T, withBlobs bool) *Server {
|
2020-10-22 19:49:02 +02:00
|
|
|
st := store.NewMemStore()
|
2018-02-07 21:21:20 +01:00
|
|
|
if withBlobs {
|
|
|
|
for k, v := range blobs {
|
2018-06-15 04:30:37 +02:00
|
|
|
err := st.Put(k, v)
|
|
|
|
if err != nil {
|
2018-05-30 03:38:55 +02:00
|
|
|
t.Error("error during put operation of memory blobstore - ", err)
|
|
|
|
}
|
2018-02-07 21:21:20 +01:00
|
|
|
}
|
|
|
|
}
|
2019-10-03 22:47:23 +02:00
|
|
|
return NewServer(st)
|
2018-02-07 21:21:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestAvailabilityRequest_NoBlobs(t *testing.T) {
|
2018-05-30 03:38:55 +02:00
|
|
|
s := getServer(t, false)
|
2018-02-07 21:21:20 +01:00
|
|
|
|
|
|
|
for _, p := range availabilityRequests {
|
|
|
|
response, err := s.handleAvailabilityRequest(p.request)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("Expected no error, got %v", err)
|
|
|
|
}
|
|
|
|
if !bytes.Equal(response, []byte(`{"lbrycrd_address":"`+LbrycrdAddress+`","available_blobs":[]}`)) {
|
|
|
|
t.Errorf("Response did not match expected response. Got %s", string(response))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestAvailabilityRequest_WithBlobs(t *testing.T) {
|
2018-05-30 03:38:55 +02:00
|
|
|
s := getServer(t, true)
|
2018-02-07 21:21:20 +01:00
|
|
|
|
|
|
|
for _, p := range availabilityRequests {
|
|
|
|
response, err := s.handleAvailabilityRequest(p.request)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("Expected no error, got %v", err)
|
|
|
|
}
|
|
|
|
if !bytes.Equal(response, p.response) {
|
|
|
|
t.Errorf("Response did not match expected response.\nExpected: %s\nGot: %s", string(p.response), string(response))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-10-12 03:57:52 +02:00
|
|
|
|
|
|
|
func TestRequestFromConnection(t *testing.T) {
|
|
|
|
s := getServer(t, true)
|
|
|
|
err := s.Start("127.0.0.1:50505")
|
|
|
|
defer s.Shutdown()
|
|
|
|
if err != nil {
|
|
|
|
t.Error("error starting server", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, p := range availabilityRequests {
|
|
|
|
conn, err := net.Dial("tcp", "127.0.0.1:50505")
|
|
|
|
if err != nil {
|
|
|
|
t.Error("error opening connection", err)
|
|
|
|
}
|
2023-03-09 18:41:41 +01:00
|
|
|
defer func() { _ = conn.Close() }()
|
2022-10-12 03:57:52 +02:00
|
|
|
|
|
|
|
response := make([]byte, 8192)
|
|
|
|
_, err = conn.Write(p.request)
|
|
|
|
if err != nil {
|
|
|
|
t.Error("error writing", err)
|
|
|
|
}
|
|
|
|
_, err = conn.Read(response)
|
|
|
|
if err != nil {
|
|
|
|
t.Error("error reading", err)
|
|
|
|
}
|
|
|
|
if !bytes.Equal(response[:len(p.response)], p.response) {
|
|
|
|
t.Errorf("Response did not match expected response.\nExpected: %s\nGot: %s", string(p.response), string(response))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestInvalidData(t *testing.T) {
|
|
|
|
s := getServer(t, true)
|
|
|
|
err := s.Start("127.0.0.1:50503")
|
|
|
|
defer s.Shutdown()
|
|
|
|
if err != nil {
|
|
|
|
t.Error("error starting server", err)
|
|
|
|
}
|
|
|
|
conn, err := net.Dial("tcp", "127.0.0.1:50503")
|
|
|
|
if err != nil {
|
|
|
|
t.Error("error opening connection", err)
|
|
|
|
}
|
2023-03-09 18:41:41 +01:00
|
|
|
defer func() { _ = conn.Close() }()
|
2022-10-12 03:57:52 +02:00
|
|
|
|
|
|
|
response := make([]byte, 8192)
|
|
|
|
_, err = conn.Write([]byte("hello dear server, I would like blobs. Please"))
|
|
|
|
if err != nil {
|
|
|
|
t.Error("error writing", err)
|
|
|
|
}
|
2023-03-09 18:41:41 +01:00
|
|
|
err = conn.SetReadDeadline(time.Now().Add(5 * time.Second))
|
|
|
|
if err != nil {
|
|
|
|
t.Error("error setting read deadline", err)
|
|
|
|
}
|
2022-10-12 03:57:52 +02:00
|
|
|
_, err = conn.Read(response)
|
|
|
|
if err != io.EOF {
|
|
|
|
t.Error("error reading", err)
|
|
|
|
}
|
|
|
|
println(response)
|
|
|
|
}
|