1package tcp
2
3import (
4	"bytes"
5	"fmt"
6	"testing"
7	"time"
8
9	log "github.com/schollz/logger"
10	"github.com/stretchr/testify/assert"
11)
12
13func BenchmarkConnection(b *testing.B) {
14	log.SetLevel("trace")
15	go Run("debug", "localhost", "8283", "pass123", "8284")
16	time.Sleep(100 * time.Millisecond)
17	b.ResetTimer()
18	for i := 0; i < b.N; i++ {
19		c, _, _, _ := ConnectToTCPServer("localhost:8283", "pass123", fmt.Sprintf("testroom%d", i), 1*time.Minute)
20		c.Close()
21	}
22}
23
24func TestTCP(t *testing.T) {
25	log.SetLevel("error")
26	timeToRoomDeletion = 100 * time.Millisecond
27	go Run("debug", "localhost", "8381", "pass123", "8382")
28	time.Sleep(timeToRoomDeletion)
29	err := PingServer("localhost:8381")
30	assert.Nil(t, err)
31	err = PingServer("localhost:8333")
32	assert.NotNil(t, err)
33
34	time.Sleep(timeToRoomDeletion)
35	c1, banner, _, err := ConnectToTCPServer("localhost:8381", "pass123", "testRoom", 1*time.Minute)
36	assert.Equal(t, banner, "8382")
37	assert.Nil(t, err)
38	c2, _, _, err := ConnectToTCPServer("localhost:8381", "pass123", "testRoom")
39	assert.Nil(t, err)
40	_, _, _, err = ConnectToTCPServer("localhost:8381", "pass123", "testRoom")
41	assert.NotNil(t, err)
42	_, _, _, err = ConnectToTCPServer("localhost:8381", "pass123", "testRoom", 1*time.Nanosecond)
43	assert.NotNil(t, err)
44
45	// try sending data
46	assert.Nil(t, c1.Send([]byte("hello, c2")))
47	var data []byte
48	for {
49		data, err = c2.Receive()
50		if bytes.Equal(data, []byte{1}) {
51			continue
52		}
53		break
54	}
55	assert.Nil(t, err)
56	assert.Equal(t, []byte("hello, c2"), data)
57
58	assert.Nil(t, c2.Send([]byte("hello, c1")))
59	for {
60		data, err = c1.Receive()
61		if bytes.Equal(data, []byte{1}) {
62			continue
63		}
64		break
65	}
66	assert.Nil(t, err)
67	assert.Equal(t, []byte("hello, c1"), data)
68
69	c1.Close()
70	time.Sleep(300 * time.Millisecond)
71}
72