-
Notifications
You must be signed in to change notification settings - Fork 124
/
Copy pathmessage_test.go
132 lines (103 loc) · 3.52 KB
/
message_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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package goesl
import (
"bufio"
"testing"
"strings"
)
// build a bufio reader so we can mock esl's network reader
func reader(s string) *bufio.Reader {
return bufio.NewReader(strings.NewReader(s))
}
func init () {
ShouldOutputDebugMessages = false
}
var (
// https://freeswitch.org/confluence/display/FREESWITCH/Event+List
ShutdownMessage = `Content-Length: 436
Content-Type: text/event-plain
Event-Info: System Shutting Down
Event-Name: SHUTDOWN
Core-UUID: 596ab2fd-14c5-44b5-a02b-93ffb7cd5dd6
FreeSWITCH-Hostname: ********
FreeSWITCH-IPv4: ********
FreeSWITCH-IPv6: 127.0.0.1
Event-Date-Local: 2008-01-23 13:48:13
Event-Date-GMT: Wed,%2023%20Jan%202008%2018%3A48%3A13%20GMT
Event-Date-timestamp: 1201114093012795
Event-Calling-File: switch_core.c
Event-Calling-Function: switch_core_destroy
Event-Calling-Line-Number: 1046
EOF
`
EchoResponse = `Content-Type: api/response
Content-Length: 2
hi`
HeartbeatMessage = `Content-Length: 921
Content-Type: text/event-json
{"Event-Name":"HEARTBEAT","Core-UUID":"3fe1c014-0cd7-4fd8-8cfe-f97560455ddd","FreeSWITCH-Hostname":"freeswitch01","FreeSWITCH-Switchname":"freeswitch01","FreeSWITCH-IPv4":"192.168.0.1","FreeSWITCH-IPv6":"::1","Event-Date-Local":"2020-01-01 12:00:00","Event-Date-GMT":"Mon, 1 Jan 2020 12:00:00 GMT","Event-Date-Timestamp":"1578709922493848","Event-Calling-File":"switch_core.c","Event-Calling-Function":"send_heartbeat","Event-Calling-Line-Number":"74","Event-Sequence":"1759233","Event-Info":"System Ready","Up-Time":"0 years, 46 days, 1 hour, 43 minutes, 0 seconds, 121 milliseconds, 552 microseconds","FreeSWITCH-Version":"1.10~64bit","Uptime-msec":"3980580121","Session-Count":"0","Max-Sessions":"10000","Session-Per-Sec":"500","Session-Per-Sec-Last":"1","Session-Per-Sec-Max":"42","Session-Per-Sec-FiveMin":"1","Session-Since-Startup":"14960","Session-Peak-Max":"42","Session-Peak-FiveMin":"1","Idle-CPU":"96.733333"}`
)
// https://stackoverflow.com/questions/42035104/how-to-unit-test-go-errors
func errorContains(out error, want string) bool {
if out == nil {
return want == ""
}
if want == "" {
return false
}
return strings.Contains(out.Error(), want)
}
func TestNewMessage(t *testing.T) {
buf := reader(HeartbeatMessage)
fsMsg, err := NewMessage(buf, true)
if err != nil {
t.Error(err)
}
if fsMsg.Headers["FreeSWITCH-IPv4"] != "192.168.0.1" {
t.Error("could not parse FreeSWITCH ip from event")
}
}
func TestNewMessageMissingMime(t *testing.T) {
heartbeatMimeless := strings.Replace(HeartbeatMessage, "Content-Type: text/event-json", "", 1)
buf := reader(heartbeatMimeless)
_, err := NewMessage(buf, true)
if err == nil {
t.Error("Expected error Parse EOF, got nothing")
return
}
if !errorContains(err, "Parse EOF") {
t.Error(err)
return
}
}
func testNewMessageServerShutdown(t *testing.T) (error, *Message) {
buf := reader(ShutdownMessage)
fsMsg, err := NewMessage(buf, true)
return err, fsMsg
}
func TestNewMessageServerShutdown(t *testing.T) {
err, fsMsg := testNewMessageServerShutdown(t)
if err != nil {
t.Error(err)
}
fsMsg.Headers["Content-Type"] = "text/event-plain"
}
func TestMessage_Dump(t *testing.T) {
err, fsMsg := testNewMessageServerShutdown(t)
if err != nil {
t.Error(err)
}
if !strings.Contains(fsMsg.Dump(), "BODY: Event-Info:") {
t.Error("freeswitch message dump failed")
}
}
func TestMessageParse(t *testing.T) {
buf := reader(EchoResponse)
fsMsg, err := NewMessage(buf, true)
if (err != nil) {
t.Error(err)
}
body := string(fsMsg.Body)
if body != "hi" {
t.Error("parsing freeswitch response failed")
}
}