mirror of
https://github.com/asmogo/nws.git
synced 2025-01-18 18:11:33 +00:00
fix tests
This commit is contained in:
parent
72a58bf8f6
commit
0500b41efd
@ -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",
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user