2018-01-01 18:55:59 +00:00
|
|
|
package goricochet
|
|
|
|
|
|
|
|
import (
|
2018-06-08 21:54:31 +00:00
|
|
|
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
|
2018-01-01 18:55:59 +00:00
|
|
|
"io"
|
|
|
|
"net"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2018-01-03 18:11:56 +00:00
|
|
|
func TestNegotiateInboundVersions(t *testing.T) {
|
|
|
|
|
|
|
|
connect := func() {
|
|
|
|
conn, err := net.Dial("tcp", ":4000")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer conn.Close()
|
|
|
|
|
|
|
|
conn.Write([]byte{0x49, 0x4D, 0x01, 0x01})
|
|
|
|
}
|
|
|
|
|
|
|
|
l, err := net.Listen("tcp", ":4000")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer l.Close()
|
|
|
|
go connect()
|
|
|
|
conn, err := l.Accept()
|
|
|
|
_, err = NegotiateVersionInbound(conn)
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("Expected Success Got %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2018-01-01 18:55:59 +00:00
|
|
|
func TestBadProtcolLength(t *testing.T) {
|
|
|
|
|
|
|
|
connect := func() {
|
|
|
|
conn, err := net.Dial("tcp", ":4000")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer conn.Close()
|
|
|
|
|
|
|
|
conn.Write([]byte{0x49, 0x4D})
|
|
|
|
}
|
|
|
|
|
|
|
|
l, err := net.Listen("tcp", ":4000")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer l.Close()
|
|
|
|
go connect()
|
|
|
|
conn, err := l.Accept()
|
|
|
|
_, err = NegotiateVersionInbound(conn)
|
|
|
|
if err != io.ErrUnexpectedEOF {
|
|
|
|
t.Errorf("Invalid Error Received. Expected ErrUnexpectedEOF. Got %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestNoSupportedVersions(t *testing.T) {
|
|
|
|
|
|
|
|
connect := func() {
|
|
|
|
conn, err := net.Dial("tcp", ":4000")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer conn.Close()
|
|
|
|
|
|
|
|
conn.Write([]byte{0x49, 0x4D, 0x00, 0xFF})
|
|
|
|
}
|
|
|
|
|
|
|
|
l, err := net.Listen("tcp", ":4000")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer l.Close()
|
|
|
|
go connect()
|
|
|
|
conn, err := l.Accept()
|
|
|
|
_, err = NegotiateVersionInbound(conn)
|
|
|
|
if err != utils.VersionNegotiationError {
|
|
|
|
t.Errorf("Invalid Error Received. Expected VersionNegotiationError. Got %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestInvalidVersionList(t *testing.T) {
|
|
|
|
|
|
|
|
connect := func() {
|
|
|
|
conn, err := net.Dial("tcp", ":4000")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer conn.Close()
|
|
|
|
|
|
|
|
conn.Write([]byte{0x49, 0x4D, 0x01})
|
|
|
|
}
|
|
|
|
|
|
|
|
l, err := net.Listen("tcp", ":4000")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer l.Close()
|
|
|
|
go connect()
|
|
|
|
conn, err := l.Accept()
|
|
|
|
_, err = NegotiateVersionInbound(conn)
|
|
|
|
if err != utils.VersionNegotiationError {
|
|
|
|
t.Errorf("Invalid Error Received. Expected VersionNegotiationError. Got %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestNoCompatibleVersions(t *testing.T) {
|
|
|
|
|
|
|
|
connect := func() {
|
|
|
|
conn, err := net.Dial("tcp", ":4000")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer conn.Close()
|
|
|
|
|
|
|
|
conn.Write([]byte{0x49, 0x4D, 0x01, 0xFF})
|
|
|
|
}
|
|
|
|
|
|
|
|
l, err := net.Listen("tcp", ":4000")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
defer l.Close()
|
|
|
|
go connect()
|
|
|
|
conn, err := l.Accept()
|
|
|
|
_, err = NegotiateVersionInbound(conn)
|
|
|
|
if err != utils.VersionNegotiationFailed {
|
|
|
|
t.Errorf("Invalid Error Received. Expected VersionNegotiationFailed. Got %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|