summaryrefslogtreecommitdiff
path: root/internal/tcp/tcp_test.go
blob: 668758cf39953d010baa17aa1d87f0519032f88f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package tcp

import (
	"testing"
)

type readWriteTest struct {
	sizeWritten  *bool
	sizeRead     *bool
	sizeBytes    []byte
	messageBytes []byte
}

func (rwt readWriteTest) Write(b []byte) (n int, err error) {
	if !*rwt.sizeWritten {
		copy(rwt.sizeBytes, b)
		*rwt.sizeWritten = true
	} else {
		copy(rwt.messageBytes, b)
	}

	return len(b), nil
}

func (rwt readWriteTest) Read(b []byte) (n int, err error) {
	if !*rwt.sizeRead {
		copy(b, rwt.sizeBytes)
		*rwt.sizeRead = true
	} else {
		copy(b, rwt.messageBytes)
	}
	return len(b), nil
}

func TestReadWrite(t *testing.T) {
	t.Parallel()

	message := "Hello world!"

	var sizeWritten bool
	var sizeRead bool

	rwt := readWriteTest{
		sizeWritten:  &sizeWritten,
		sizeRead:     &sizeRead,
		sizeBytes:    make([]byte, 8),
		messageBytes: make([]byte, len([]byte(message))),
	}

	if err := WriteStr(rwt, message); err != nil {
		t.Errorf(err.Error())
	}

	response, err := ReadStr(rwt)
	if err != nil {
		t.Errorf(err.Error())
	}

	if response != message {
		t.Errorf("Expected response '%s' to be equal to original message '%s'!",
			response, message)
	}
}