croc/src/comm/comm_test.go

68 lines
1.5 KiB
Go
Raw Normal View History

2019-04-27 18:20:03 +02:00
package comm
import (
2019-04-30 00:04:47 +02:00
"crypto/rand"
2019-04-27 18:20:03 +02:00
"net"
"testing"
"time"
2019-05-08 23:03:54 +02:00
log "github.com/schollz/logger"
2019-04-27 18:20:03 +02:00
"github.com/stretchr/testify/assert"
)
func TestComm(t *testing.T) {
token := make([]byte, 3000)
2020-08-23 01:05:00 +02:00
if _, err := rand.Read(token); err != nil {
t.Error(err)
}
2019-04-27 18:20:03 +02:00
port := "8001"
go func() {
log.Debugf("starting TCP server on " + port)
server, err := net.Listen("tcp", "0.0.0.0:"+port)
if err != nil {
log.Error(err)
}
defer server.Close()
// spawn a new goroutine whenever a client connects
for {
connection, err := server.Accept()
if err != nil {
log.Error(err)
}
log.Debugf("client %s connected", connection.RemoteAddr().String())
go func(port string, connection net.Conn) {
c := New(connection)
err = c.Send([]byte("hello, world"))
assert.Nil(t, err)
data, err := c.Receive()
assert.Nil(t, err)
assert.Equal(t, []byte("hello, computer"), data)
data, err = c.Receive()
assert.Nil(t, err)
assert.Equal(t, []byte{'\x00'}, data)
2019-04-30 00:04:47 +02:00
data, err = c.Receive()
assert.Nil(t, err)
assert.Equal(t, token, data)
2019-04-27 18:20:03 +02:00
}(port, connection)
}
}()
2019-04-30 03:55:37 +02:00
time.Sleep(300 * time.Millisecond)
2019-09-07 19:06:41 +02:00
a, err := NewConnection("localhost:"+port, 10*time.Minute)
2019-04-27 18:20:03 +02:00
assert.Nil(t, err)
data, err := a.Receive()
assert.Equal(t, []byte("hello, world"), data)
assert.Nil(t, err)
assert.Nil(t, a.Send([]byte("hello, computer")))
assert.Nil(t, a.Send([]byte{'\x00'}))
2019-04-30 00:04:47 +02:00
assert.Nil(t, a.Send(token))
2019-09-07 19:06:41 +02:00
_ = a.Connection()
a.Close()
2019-09-07 19:31:18 +02:00
assert.NotNil(t, a.Send(token))
_, err = a.Write(token)
assert.NotNil(t, err)
2019-04-27 18:20:03 +02:00
}