-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpacket_delivery_test.go
67 lines (57 loc) · 1.47 KB
/
packet_delivery_test.go
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
64
65
66
67
package tru
import (
"testing"
"time"
"github.com/teonet-go/tru/teolog"
)
func TestPacketDelivery(t *testing.T) {
log := teolog.New()
// log.SetLevel(teolog.Connect)
log.Info.Println("\n\n==== TestPacketDelivery started ====")
// create tru1
tru1, err := New(0, log)
if err != nil {
t.Errorf("can't start tru1, err: %s", err)
return
}
defer tru1.Close()
tru1Addr := tru1.LocalAddr().String()
// create tru2
tru2, err := New(0, log)
if err != nil {
t.Errorf("can't start tru2, err: %s", err)
return
}
// Connect tru2 to tru1
ch, err := tru2.Connect(tru1Addr)
if err != nil {
t.Errorf("can't connect to tru1, err: %s", err)
return
}
defer tru2.Close()
// Create wait channel
wait := make(chan interface{})
defer close(wait)
// Send packet fron tru2 to tru1 and get delivery callback
ch.WriteTo([]byte("some test data"), func(pac *Packet, err error) {
if err != nil {
t.Errorf("can't receive delivery callback from tru1, err: %s", err)
return
}
log.Debugvvv.Println("got delivery answer to packet id", pac.ID())
wait <- nil
})
<-wait
// Send packet fron tru2 to tru1, close tru1 connection and get delivery
// callback timeout
ch.WriteTo([]byte("some test data"), func(pac *Packet, err error) {
if err == nil {
t.Errorf("can't receive delivery callback timeout from tru1, err: %s", err)
return
}
log.Debugvvv.Println("got delivery timeout to packet id", pac.ID())
wait <- nil
}, 50*time.Millisecond)
ch.Close()
<-wait
}