@@ -13,8 +13,8 @@ func uint32Ptr(v uint32) *uint32 {
13
13
return & v
14
14
}
15
15
16
- func TestRTCPReceiverBase (t * testing.T ) {
17
- done := make (chan struct {} )
16
+ func TestRTCPReceiver (t * testing.T ) {
17
+ pktGenerated := make (chan rtcp. Packet )
18
18
19
19
rr := & RTCPReceiver {
20
20
ClockRate : 90000 ,
@@ -24,35 +24,173 @@ func TestRTCPReceiverBase(t *testing.T) {
24
24
return time .Date (2008 , 0o5 , 20 , 22 , 15 , 22 , 0 , time .UTC )
25
25
},
26
26
WritePacketRTCP : func (pkt rtcp.Packet ) {
27
- require .Equal (t , & rtcp.ReceiverReport {
28
- SSRC : 0x65f83afb ,
29
- Reports : []rtcp.ReceptionReport {
30
- {
31
- SSRC : 0xba9da416 ,
32
- LastSequenceNumber : 947 ,
33
- LastSenderReport : 0x887a17ce ,
34
- Delay : 2 * 65536 ,
35
- },
36
- },
37
- }, pkt )
38
- close (done )
27
+ pktGenerated <- pkt
28
+ },
29
+ }
30
+ err := rr .Initialize ()
31
+ require .NoError (t , err )
32
+ defer rr .Close ()
33
+
34
+ stats := rr .Stats ()
35
+ require .Nil (t , stats )
36
+
37
+ rtpPkt := rtp.Packet {
38
+ Header : rtp.Header {
39
+ Version : 2 ,
40
+ Marker : true ,
41
+ PayloadType : 96 ,
42
+ SequenceNumber : 945 ,
43
+ Timestamp : 0xafb45733 ,
44
+ SSRC : 0xba9da416 ,
45
+ },
46
+ Payload : []byte ("\x00 \x00 " ),
47
+ }
48
+ ts := time .Date (2008 , 0o5 , 20 , 22 , 15 , 20 , 0 , time .UTC )
49
+ err = rr .ProcessPacket (& rtpPkt , ts , true )
50
+ require .NoError (t , err )
51
+
52
+ stats = rr .Stats ()
53
+ require .Equal (t , & Stats {
54
+ RemoteSSRC : 0xba9da416 ,
55
+ LastRTP : 0xafb45733 ,
56
+ LastSequenceNumber : 945 ,
57
+ }, stats )
58
+
59
+ srPkt := rtcp.SenderReport {
60
+ SSRC : 0xba9da416 ,
61
+ NTPTime : func () uint64 {
62
+ d := time .Date (2008 , 5 , 20 , 22 , 15 , 20 , 0 , time .UTC )
63
+ s := uint64 (d .UnixNano ()) + 2208988800 * 1000000000
64
+ return (s / 1000000000 )<< 32 | (s % 1000000000 )
65
+ }(),
66
+ RTPTime : 0xafb45733 ,
67
+ PacketCount : 714 ,
68
+ OctetCount : 859127 ,
69
+ }
70
+ ts = time .Date (2008 , 5 , 20 , 22 , 15 , 20 , 0 , time .UTC )
71
+ rr .ProcessSenderReport (& srPkt , ts )
72
+
73
+ stats = rr .Stats ()
74
+ require .Equal (t , & Stats {
75
+ RemoteSSRC : 0xba9da416 ,
76
+ LastRTP : 0xafb45733 ,
77
+ LastSequenceNumber : 945 ,
78
+ LastNTP : time .Date (2008 , 5 , 20 , 22 , 15 , 20 , 0 , time .UTC ).Local (),
79
+ }, stats )
80
+
81
+ rtpPkt = rtp.Packet {
82
+ Header : rtp.Header {
83
+ Version : 2 ,
84
+ Marker : true ,
85
+ PayloadType : 96 ,
86
+ SequenceNumber : 946 ,
87
+ Timestamp : 0xafb45733 ,
88
+ SSRC : 0xba9da416 ,
89
+ },
90
+ Payload : []byte ("\x00 \x00 " ),
91
+ }
92
+ ts = time .Date (2008 , 5 , 20 , 22 , 15 , 20 , 0 , time .UTC )
93
+ err = rr .ProcessPacket (& rtpPkt , ts , true )
94
+ require .NoError (t , err )
95
+
96
+ rtpPkt = rtp.Packet {
97
+ Header : rtp.Header {
98
+ Version : 2 ,
99
+ Marker : true ,
100
+ PayloadType : 96 ,
101
+ SequenceNumber : 947 ,
102
+ Timestamp : 0xafb45733 + 90000 ,
103
+ SSRC : 0xba9da416 ,
104
+ },
105
+ Payload : []byte ("\x00 \x00 " ),
106
+ }
107
+ ts = time .Date (2008 , 0o5 , 20 , 22 , 15 , 21 , 0 , time .UTC )
108
+ err = rr .ProcessPacket (& rtpPkt , ts , true )
109
+ require .NoError (t , err )
110
+
111
+ pkt := <- pktGenerated
112
+ require .Equal (t , & rtcp.ReceiverReport {
113
+ SSRC : 0x65f83afb ,
114
+ Reports : []rtcp.ReceptionReport {
115
+ {
116
+ SSRC : 0xba9da416 ,
117
+ LastSequenceNumber : 947 ,
118
+ LastSenderReport : 3422027776 ,
119
+ Delay : 2 * 65536 ,
120
+ },
121
+ },
122
+ }, pkt )
123
+
124
+ stats = rr .Stats ()
125
+ require .Equal (t , & Stats {
126
+ RemoteSSRC : 0xba9da416 ,
127
+ LastRTP : 2947921603 ,
128
+ LastSequenceNumber : 947 ,
129
+ LastNTP : time .Date (2008 , 5 , 20 , 22 , 15 , 21 , 0 , time .UTC ).Local (),
130
+ }, stats )
131
+ }
132
+
133
+ func TestRTCPReceiverZeroClockRate (t * testing.T ) {
134
+ pktGenerated := make (chan rtcp.Packet )
135
+
136
+ rr := & RTCPReceiver {
137
+ ClockRate : 0 ,
138
+ LocalSSRC : uint32Ptr (0x65f83afb ),
139
+ Period : 500 * time .Millisecond ,
140
+ TimeNow : func () time.Time {
141
+ return time .Date (2008 , 0o5 , 20 , 22 , 15 , 22 , 0 , time .UTC )
142
+ },
143
+ WritePacketRTCP : func (pkt rtcp.Packet ) {
144
+ pktGenerated <- pkt
39
145
},
40
146
}
41
147
err := rr .Initialize ()
42
148
require .NoError (t , err )
43
149
defer rr .Close ()
44
150
151
+ stats := rr .Stats ()
152
+ require .Nil (t , stats )
153
+
154
+ rtpPkt := rtp.Packet {
155
+ Header : rtp.Header {
156
+ Version : 2 ,
157
+ Marker : true ,
158
+ PayloadType : 96 ,
159
+ SequenceNumber : 945 ,
160
+ Timestamp : 0xafb45733 ,
161
+ SSRC : 0xba9da416 ,
162
+ },
163
+ Payload : []byte ("\x00 \x00 " ),
164
+ }
165
+ ts := time .Date (2008 , 0o5 , 20 , 22 , 15 , 20 , 0 , time .UTC )
166
+ err = rr .ProcessPacket (& rtpPkt , ts , true )
167
+ require .NoError (t , err )
168
+
169
+ stats = rr .Stats ()
170
+ require .Equal (t , & Stats {
171
+ RemoteSSRC : 0xba9da416 ,
172
+ LastRTP : 0xafb45733 ,
173
+ LastSequenceNumber : 945 ,
174
+ }, stats )
175
+
45
176
srPkt := rtcp.SenderReport {
46
177
SSRC : 0xba9da416 ,
47
178
NTPTime : 0xe363887a17ced916 ,
48
179
RTPTime : 0xafb45733 ,
49
180
PacketCount : 714 ,
50
181
OctetCount : 859127 ,
51
182
}
52
- ts : = time .Date (2008 , 0o5 , 20 , 22 , 15 , 20 , 0 , time .UTC )
183
+ ts = time .Date (2008 , 0o5 , 20 , 22 , 15 , 20 , 0 , time .UTC )
53
184
rr .ProcessSenderReport (& srPkt , ts )
54
185
55
- rtpPkt := rtp.Packet {
186
+ stats = rr .Stats ()
187
+ require .Equal (t , & Stats {
188
+ RemoteSSRC : 0xba9da416 ,
189
+ LastRTP : 0xafb45733 ,
190
+ LastSequenceNumber : 945 ,
191
+ }, stats )
192
+
193
+ rtpPkt = rtp.Packet {
56
194
Header : rtp.Header {
57
195
Version : 2 ,
58
196
Marker : true ,
@@ -82,7 +220,18 @@ func TestRTCPReceiverBase(t *testing.T) {
82
220
err = rr .ProcessPacket (& rtpPkt , ts , true )
83
221
require .NoError (t , err )
84
222
85
- <- done
223
+ select {
224
+ case <- pktGenerated :
225
+ t .Error ("should not happen" )
226
+ case <- time .After (500 * time .Millisecond ):
227
+ }
228
+
229
+ stats = rr .Stats ()
230
+ require .Equal (t , & Stats {
231
+ RemoteSSRC : 0xba9da416 ,
232
+ LastRTP : 2947921603 ,
233
+ LastSequenceNumber : 947 ,
234
+ }, stats )
86
235
}
87
236
88
237
func TestRTCPReceiverOverflow (t * testing.T ) {
0 commit comments