fix tests

This commit is contained in:
dd dd 2024-07-25 18:58:57 +02:00
parent 72a58bf8f6
commit 0500b41efd
5 changed files with 10 additions and 300 deletions

View File

@ -2,7 +2,6 @@ package netstr
import ( import (
"context" "context"
"github.com/asmogo/nws/protocol"
"github.com/nbd-wtf/go-nostr" "github.com/nbd-wtf/go-nostr"
"runtime" "runtime"
"testing" "testing"
@ -14,21 +13,21 @@ import (
func TestNostrConnection_Read(t *testing.T) { func TestNostrConnection_Read(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
event protocol.IncomingEvent event nostr.IncomingEvent
nc func() *NostrConnection nc func() *NostrConnection
wantN int wantN int
wantErr bool wantErr bool
}{ }{
{ {
name: "Read invalid relay", name: "Read invalid relay",
event: protocol.IncomingEvent{Relay: nil}, event: nostr.IncomingEvent{Relay: nil},
nc: func() *NostrConnection { nc: func() *NostrConnection {
ctx, cancelFunc := context.WithCancel(context.Background()) ctx, cancelFunc := context.WithCancel(context.Background())
return &NostrConnection{ return &NostrConnection{
uuid: uuid.New(), uuid: uuid.New(),
ctx: ctx, ctx: ctx,
cancel: cancelFunc, cancel: cancelFunc,
subscriptionChan: make(chan protocol.IncomingEvent, 1), subscriptionChan: make(chan nostr.IncomingEvent, 1),
privateKey: "788de536151854213cc28dff9c3042e7897f0a1d59b391ddbbc1619d7e716e78", privateKey: "788de536151854213cc28dff9c3042e7897f0a1d59b391ddbbc1619d7e716e78",
} }
}, },
@ -37,7 +36,7 @@ func TestNostrConnection_Read(t *testing.T) {
}, },
{ {
name: "Read", name: "Read",
event: protocol.IncomingEvent{ event: nostr.IncomingEvent{
Relay: &nostr.Relay{URL: "wss://relay.example.com"}, Relay: &nostr.Relay{URL: "wss://relay.example.com"},
Event: &nostr.Event{ Event: &nostr.Event{
ID: "eventID", ID: "eventID",
@ -49,7 +48,7 @@ func TestNostrConnection_Read(t *testing.T) {
uuid: uuid.New(), uuid: uuid.New(),
ctx: ctx, ctx: ctx,
cancel: cancelFunc, cancel: cancelFunc,
subscriptionChan: make(chan protocol.IncomingEvent, 1), subscriptionChan: make(chan nostr.IncomingEvent, 1),
privateKey: "788de536151854213cc28dff9c3042e7897f0a1d59b391ddbbc1619d7e716e78", privateKey: "788de536151854213cc28dff9c3042e7897f0a1d59b391ddbbc1619d7e716e78",
} }
}, },

View File

@ -2,6 +2,7 @@ package socks5
import ( import (
"bytes" "bytes"
"github.com/nbd-wtf/go-nostr"
"testing" "testing"
) )
@ -10,7 +11,7 @@ func TestNoAuth(t *testing.T) {
req.Write([]byte{1, NoAuth}) req.Write([]byte{1, NoAuth})
var resp bytes.Buffer var resp bytes.Buffer
s, _ := New(&Config{}) s, _ := New(&Config{}, &nostr.SimplePool{})
ctx, err := s.authenticate(&resp, req) ctx, err := s.authenticate(&resp, req)
if err != nil { if err != nil {
t.Fatalf("err: %v", err) t.Fatalf("err: %v", err)
@ -38,7 +39,7 @@ func TestPasswordAuth_Valid(t *testing.T) {
cator := UserPassAuthenticator{Credentials: cred} cator := UserPassAuthenticator{Credentials: cred}
s, _ := New(&Config{AuthMethods: []Authenticator{cator}}) s, _ := New(&Config{AuthMethods: []Authenticator{cator}}, &nostr.SimplePool{})
ctx, err := s.authenticate(&resp, req) ctx, err := s.authenticate(&resp, req)
if err != nil { if err != nil {
@ -74,7 +75,7 @@ func TestPasswordAuth_Invalid(t *testing.T) {
"foo": "bar", "foo": "bar",
} }
cator := UserPassAuthenticator{Credentials: cred} cator := UserPassAuthenticator{Credentials: cred}
s, _ := New(&Config{AuthMethods: []Authenticator{cator}}) s, _ := New(&Config{AuthMethods: []Authenticator{cator}}, &nostr.SimplePool{})
ctx, err := s.authenticate(&resp, req) ctx, err := s.authenticate(&resp, req)
if err != UserAuthFailed { if err != UserAuthFailed {
@ -101,7 +102,7 @@ func TestNoSupportedAuth(t *testing.T) {
} }
cator := UserPassAuthenticator{Credentials: cred} cator := UserPassAuthenticator{Credentials: cred}
s, _ := New(&Config{AuthMethods: []Authenticator{cator}}) s, _ := New(&Config{AuthMethods: []Authenticator{cator}}, &nostr.SimplePool{})
ctx, err := s.authenticate(&resp, req) ctx, err := s.authenticate(&resp, req)
if err != NoSupportedAuth { if err != NoSupportedAuth {

View File

@ -1,7 +1,6 @@
package socks5 package socks5
import ( import (
"bufio"
"context" "context"
"fmt" "fmt"
"github.com/asmogo/nws/netstr" "github.com/asmogo/nws/netstr"
@ -79,15 +78,6 @@ type Request struct {
DestAddr *AddrSpec DestAddr *AddrSpec
// AddrSpec of the actual destination (might be affected by rewrite) // AddrSpec of the actual destination (might be affected by rewrite)
realDestAddr *AddrSpec realDestAddr *AddrSpec
BufConn *bufio.Reader
}
func (r Request) Buffer(c net.Conn) {
payload, err := r.BufConn.Peek(4096)
if err != nil {
panic(err)
}
c.Write(payload)
} }
/* /*
@ -119,7 +109,6 @@ func NewRequest(bufConn io.Reader) (*Request, error) {
Version: socks5Version, Version: socks5Version,
Command: header[1], Command: header[1],
DestAddr: dest, DestAddr: dest,
BufConn: bufConn.(*bufio.Reader),
} }
return request, nil return request, nil
} }

View File

@ -1,169 +0,0 @@
package socks5
import (
"bytes"
"encoding/binary"
"io"
"log"
"net"
"os"
"strings"
"testing"
)
type MockConn struct {
buf bytes.Buffer
}
func (m *MockConn) Write(b []byte) (int, error) {
return m.buf.Write(b)
}
func (m *MockConn) RemoteAddr() net.Addr {
return &net.TCPAddr{IP: []byte{127, 0, 0, 1}, Port: 65432}
}
func TestRequest_Connect(t *testing.T) {
// Create a local listener
l, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatalf("err: %v", err)
}
go func() {
conn, err := l.Accept()
if err != nil {
t.Fatalf("err: %v", err)
}
defer conn.Close()
buf := make([]byte, 4)
if _, err := io.ReadAtLeast(conn, buf, 4); err != nil {
t.Fatalf("err: %v", err)
}
if !bytes.Equal(buf, []byte("ping")) {
t.Fatalf("bad: %v", buf)
}
conn.Write([]byte("pong"))
}()
lAddr := l.Addr().(*net.TCPAddr)
// Make server
s := &Server{config: &Config{
Rules: PermitAll(),
Resolver: DNSResolver{},
Logger: log.New(os.Stdout, "", log.LstdFlags),
}}
// Create the connect request
buf := bytes.NewBuffer(nil)
buf.Write([]byte{5, 1, 0, 1, 127, 0, 0, 1})
port := []byte{0, 0}
binary.BigEndian.PutUint16(port, uint16(lAddr.Port))
buf.Write(port)
// Send a ping
buf.Write([]byte("ping"))
// Handle the request
resp := &MockConn{}
req, err := NewRequest(buf)
if err != nil {
t.Fatalf("err: %v", err)
}
if err := s.handleRequest(req, resp); err != nil {
t.Fatalf("err: %v", err)
}
// Verify response
out := resp.buf.Bytes()
expected := []byte{
5,
0,
0,
1,
127, 0, 0, 1,
0, 0,
'p', 'o', 'n', 'g',
}
// Ignore the port for both
out[8] = 0
out[9] = 0
if !bytes.Equal(out, expected) {
t.Fatalf("bad: %v %v", out, expected)
}
}
func TestRequest_Connect_RuleFail(t *testing.T) {
// Create a local listener
l, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatalf("err: %v", err)
}
go func() {
conn, err := l.Accept()
if err != nil {
t.Fatalf("err: %v", err)
}
defer conn.Close()
buf := make([]byte, 4)
if _, err := io.ReadAtLeast(conn, buf, 4); err != nil {
t.Fatalf("err: %v", err)
}
if !bytes.Equal(buf, []byte("ping")) {
t.Fatalf("bad: %v", buf)
}
conn.Write([]byte("pong"))
}()
lAddr := l.Addr().(*net.TCPAddr)
// Make server
s := &Server{config: &Config{
Rules: PermitNone(),
Resolver: DNSResolver{},
Logger: log.New(os.Stdout, "", log.LstdFlags),
}}
// Create the connect request
buf := bytes.NewBuffer(nil)
buf.Write([]byte{5, 1, 0, 1, 127, 0, 0, 1})
port := []byte{0, 0}
binary.BigEndian.PutUint16(port, uint16(lAddr.Port))
buf.Write(port)
// Send a ping
buf.Write([]byte("ping"))
// Handle the request
resp := &MockConn{}
req, err := NewRequest(buf)
if err != nil {
t.Fatalf("err: %v", err)
}
if err := s.handleRequest(req, resp); !strings.Contains(err.Error(), "blocked by rules") {
t.Fatalf("err: %v", err)
}
// Verify response
out := resp.buf.Bytes()
expected := []byte{
5,
2,
0,
1,
0, 0, 0, 0,
0, 0,
}
if !bytes.Equal(out, expected) {
t.Fatalf("bad: %v %v", out, expected)
}
}

View File

@ -1,110 +0,0 @@
package socks5
import (
"bytes"
"encoding/binary"
"io"
"log"
"net"
"os"
"testing"
"time"
)
func TestSOCKS5_Connect(t *testing.T) {
// Create a local listener
l, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatalf("err: %v", err)
}
go func() {
conn, err := l.Accept()
if err != nil {
t.Fatalf("err: %v", err)
}
defer conn.Close()
buf := make([]byte, 4)
if _, err := io.ReadAtLeast(conn, buf, 4); err != nil {
t.Fatalf("err: %v", err)
}
if !bytes.Equal(buf, []byte("ping")) {
t.Fatalf("bad: %v", buf)
}
conn.Write([]byte("pong"))
}()
lAddr := l.Addr().(*net.TCPAddr)
// Create a socks server
creds := StaticCredentials{
"foo": "bar",
}
cator := UserPassAuthenticator{Credentials: creds}
conf := &Config{
AuthMethods: []Authenticator{cator},
Logger: log.New(os.Stdout, "", log.LstdFlags),
}
serv, err := New(conf)
if err != nil {
t.Fatalf("err: %v", err)
}
// Start listening
go func() {
if err := serv.ListenAndServe("tcp", "127.0.0.1:12365"); err != nil {
t.Fatalf("err: %v", err)
}
}()
time.Sleep(10 * time.Millisecond)
// Get a local conn
conn, err := net.Dial("tcp", "127.0.0.1:12365")
if err != nil {
t.Fatalf("err: %v", err)
}
// Connect, auth and connec to local
req := bytes.NewBuffer(nil)
req.Write([]byte{5})
req.Write([]byte{2, NoAuth, UserPassAuth})
req.Write([]byte{1, 3, 'f', 'o', 'o', 3, 'b', 'a', 'r'})
req.Write([]byte{5, 1, 0, 1, 127, 0, 0, 1})
port := []byte{0, 0}
binary.BigEndian.PutUint16(port, uint16(lAddr.Port))
req.Write(port)
// Send a ping
req.Write([]byte("ping"))
// Send all the bytes
conn.Write(req.Bytes())
// Verify response
expected := []byte{
socks5Version, UserPassAuth,
1, authSuccess,
5,
0,
0,
1,
127, 0, 0, 1,
0, 0,
'p', 'o', 'n', 'g',
}
out := make([]byte, len(expected))
conn.SetDeadline(time.Now().Add(time.Second))
if _, err := io.ReadAtLeast(conn, out, len(out)); err != nil {
t.Fatalf("err: %v", err)
}
// Ignore the port
out[12] = 0
out[13] = 0
if !bytes.Equal(out, expected) {
t.Fatalf("bad: %v", out)
}
}