@@ -9,6 +9,199 @@ import (
9
9
"github.com/stretchr/testify/assert"
10
10
)
11
11
12
+ func TestFindPrimaryPayloadTypeForRTX (t * testing.T ) {
13
+ for _ , test := range []struct {
14
+ Name string
15
+ Needle RTPCodecParameters
16
+ Haystack []RTPCodecParameters
17
+ ResultIsRTX bool
18
+ ResultPrimaryExists bool
19
+ }{
20
+ {
21
+ Name : "not RTX" ,
22
+ Needle : RTPCodecParameters {
23
+ PayloadType : 2 ,
24
+ RTPCodecCapability : RTPCodecCapability {
25
+ MimeType : MimeTypeH264 ,
26
+ ClockRate : 90000 ,
27
+ SDPFmtpLine : "apt=2" ,
28
+ },
29
+ },
30
+ Haystack : []RTPCodecParameters {
31
+ {
32
+ PayloadType : 1 ,
33
+ RTPCodecCapability : RTPCodecCapability {
34
+ MimeType : MimeTypeH264 ,
35
+ ClockRate : 90000 ,
36
+ },
37
+ },
38
+ },
39
+ ResultIsRTX : false ,
40
+ ResultPrimaryExists : false ,
41
+ },
42
+ {
43
+ Name : "incorrect fmtp" ,
44
+ Needle : RTPCodecParameters {
45
+ PayloadType : 2 ,
46
+ RTPCodecCapability : RTPCodecCapability {
47
+ MimeType : MimeTypeRTX ,
48
+ ClockRate : 90000 ,
49
+ SDPFmtpLine : "incorrect-fmtp" ,
50
+ },
51
+ },
52
+ Haystack : []RTPCodecParameters {
53
+ {
54
+ PayloadType : 1 ,
55
+ RTPCodecCapability : RTPCodecCapability {
56
+ MimeType : MimeTypeH264 ,
57
+ ClockRate : 90000 ,
58
+ },
59
+ },
60
+ },
61
+ ResultIsRTX : true ,
62
+ ResultPrimaryExists : false ,
63
+ },
64
+ {
65
+ Name : "incomplete fmtp" ,
66
+ Needle : RTPCodecParameters {
67
+ PayloadType : 2 ,
68
+ RTPCodecCapability : RTPCodecCapability {
69
+ MimeType : MimeTypeRTX ,
70
+ ClockRate : 90000 ,
71
+ SDPFmtpLine : "apt=" ,
72
+ },
73
+ },
74
+ Haystack : []RTPCodecParameters {
75
+ {
76
+ PayloadType : 1 ,
77
+ RTPCodecCapability : RTPCodecCapability {
78
+ MimeType : MimeTypeH264 ,
79
+ ClockRate : 90000 ,
80
+ },
81
+ },
82
+ },
83
+ ResultIsRTX : true ,
84
+ ResultPrimaryExists : false ,
85
+ },
86
+ {
87
+ Name : "primary payload type outside range (negative)" ,
88
+ Needle : RTPCodecParameters {
89
+ PayloadType : 2 ,
90
+ RTPCodecCapability : RTPCodecCapability {
91
+ MimeType : MimeTypeRTX ,
92
+ ClockRate : 90000 ,
93
+ SDPFmtpLine : "apt=-10" ,
94
+ },
95
+ },
96
+ Haystack : []RTPCodecParameters {
97
+ {
98
+ PayloadType : 1 ,
99
+ RTPCodecCapability : RTPCodecCapability {
100
+ MimeType : MimeTypeH264 ,
101
+ ClockRate : 90000 ,
102
+ },
103
+ },
104
+ },
105
+ ResultIsRTX : true ,
106
+ ResultPrimaryExists : false ,
107
+ },
108
+ {
109
+ Name : "primary payload type outside range (high positive)" ,
110
+ Needle : RTPCodecParameters {
111
+ PayloadType : 2 ,
112
+ RTPCodecCapability : RTPCodecCapability {
113
+ MimeType : MimeTypeRTX ,
114
+ ClockRate : 90000 ,
115
+ SDPFmtpLine : "apt=1000" ,
116
+ },
117
+ },
118
+ Haystack : []RTPCodecParameters {
119
+ {
120
+ PayloadType : 1 ,
121
+ RTPCodecCapability : RTPCodecCapability {
122
+ MimeType : MimeTypeH264 ,
123
+ ClockRate : 90000 ,
124
+ },
125
+ },
126
+ },
127
+ ResultIsRTX : true ,
128
+ ResultPrimaryExists : false ,
129
+ },
130
+ {
131
+ Name : "non-matching needle" ,
132
+ Needle : RTPCodecParameters {
133
+ PayloadType : 2 ,
134
+ RTPCodecCapability : RTPCodecCapability {
135
+ MimeType : MimeTypeRTX ,
136
+ ClockRate : 90000 ,
137
+ SDPFmtpLine : "apt=23" ,
138
+ },
139
+ },
140
+ Haystack : []RTPCodecParameters {
141
+ {
142
+ PayloadType : 1 ,
143
+ RTPCodecCapability : RTPCodecCapability {
144
+ MimeType : MimeTypeH264 ,
145
+ ClockRate : 90000 ,
146
+ },
147
+ },
148
+ },
149
+ ResultIsRTX : true ,
150
+ ResultPrimaryExists : false ,
151
+ },
152
+ {
153
+ Name : "matching needle" ,
154
+ Needle : RTPCodecParameters {
155
+ PayloadType : 2 ,
156
+ RTPCodecCapability : RTPCodecCapability {
157
+ MimeType : MimeTypeRTX ,
158
+ ClockRate : 90000 ,
159
+ SDPFmtpLine : "apt=1" ,
160
+ },
161
+ },
162
+ Haystack : []RTPCodecParameters {
163
+ {
164
+ PayloadType : 1 ,
165
+ RTPCodecCapability : RTPCodecCapability {
166
+ MimeType : MimeTypeH264 ,
167
+ ClockRate : 90000 ,
168
+ },
169
+ },
170
+ },
171
+ ResultIsRTX : true ,
172
+ ResultPrimaryExists : true ,
173
+ },
174
+ {
175
+ Name : "matching fmtp is a substring" ,
176
+ Needle : RTPCodecParameters {
177
+ PayloadType : 2 ,
178
+ RTPCodecCapability : RTPCodecCapability {
179
+ MimeType : MimeTypeRTX ,
180
+ ClockRate : 90000 ,
181
+ SDPFmtpLine : "apt=1;rtx-time:2000" ,
182
+ },
183
+ },
184
+ Haystack : []RTPCodecParameters {
185
+ {
186
+ PayloadType : 1 ,
187
+ RTPCodecCapability : RTPCodecCapability {
188
+ MimeType : MimeTypeH264 ,
189
+ ClockRate : 90000 ,
190
+ },
191
+ },
192
+ },
193
+ ResultIsRTX : true ,
194
+ ResultPrimaryExists : true ,
195
+ },
196
+ } {
197
+ t .Run (test .Name , func (t * testing.T ) {
198
+ isRTX , primaryExists := primaryPayloadTypeForRTXExists (test .Needle , test .Haystack )
199
+ assert .Equal (t , test .ResultIsRTX , isRTX )
200
+ assert .Equal (t , test .ResultPrimaryExists , primaryExists )
201
+ })
202
+ }
203
+ }
204
+
12
205
func TestFindFECPayloadType (t * testing.T ) {
13
206
for _ , test := range []struct {
14
207
Haystack []RTPCodecParameters
0 commit comments