mirror of
https://github.com/strukturag/nextcloud-spreed-signaling
synced 2026-03-14 14:35:44 +01:00
Add tests for different event types.
This commit is contained in:
parent
9b79aac1cf
commit
6d0d317252
2 changed files with 233 additions and 11 deletions
|
|
@ -115,7 +115,20 @@ func (e JanusEvent) Decode() (any, error) {
|
|||
case JanusEventTypeJSEP:
|
||||
return unmarshalEvent[JanusEventJSEP](e.Event)
|
||||
case JanusEventTypeWebRTC:
|
||||
return unmarshalEvent[JanusEventWebRTC](e.Event)
|
||||
switch e.SubType {
|
||||
case JanusEventSubTypeWebRTCICE:
|
||||
return unmarshalEvent[JanusEventWebRTCICE](e.Event)
|
||||
case JanusEventSubTypeWebRTCLocalCandidate:
|
||||
return unmarshalEvent[JanusEventWebRTCLocalCandidate](e.Event)
|
||||
case JanusEventSubTypeWebRTCRemoteCandidate:
|
||||
return unmarshalEvent[JanusEventWebRTCRemoteCandidate](e.Event)
|
||||
case JanusEventSubTypeWebRTCSelectedPair:
|
||||
return unmarshalEvent[JanusEventWebRTCSelectedPair](e.Event)
|
||||
case JanusEventSubTypeWebRTCDTLS:
|
||||
return unmarshalEvent[JanusEventWebRTCDTLS](e.Event)
|
||||
case JanusEventSubTypeWebRTCPeerConnection:
|
||||
return unmarshalEvent[JanusEventWebRTCPeerConnection](e.Event)
|
||||
}
|
||||
case JanusEventTypeMedia:
|
||||
switch e.SubType {
|
||||
case JanusEventSubTypeMediaState:
|
||||
|
|
@ -295,16 +308,6 @@ func (e JanusEventWebRTCPeerConnection) String() string {
|
|||
return marshalEvent(e)
|
||||
}
|
||||
|
||||
// type=16
|
||||
type JanusEventWebRTC struct {
|
||||
Owner string `json:"owner"`
|
||||
Jsep json.RawMessage `json:"jsep"`
|
||||
}
|
||||
|
||||
func (e JanusEventWebRTC) String() string {
|
||||
return marshalEvent(e)
|
||||
}
|
||||
|
||||
// type=32, subtype=1
|
||||
type JanusEventMediaState struct {
|
||||
Media string `json:"media"` // "audio", "video"
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ package signaling
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
|
|
@ -258,8 +259,12 @@ func (s *janusEventSender) AddEvent(t *testing.T, eventType int, eventSubtype in
|
|||
t.Helper()
|
||||
|
||||
require := require.New(t)
|
||||
assert := assert.New(t)
|
||||
data, err := json.Marshal(event)
|
||||
require.NoError(err)
|
||||
if s, ok := event.(fmt.Stringer); assert.True(ok, "%T should implement fmt.Stringer", event) {
|
||||
assert.Equal(s.String(), string(data))
|
||||
}
|
||||
|
||||
message := JanusEvent{
|
||||
Type: eventType,
|
||||
|
|
@ -271,6 +276,220 @@ func (s *janusEventSender) AddEvent(t *testing.T, eventType int, eventSubtype in
|
|||
s.events = append(s.events, message)
|
||||
}
|
||||
|
||||
func TestJanusEventsHandlerDifferentTypes(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
assert := assert.New(t)
|
||||
|
||||
_, url, handler := NewTestJanusEventsHandlerServer(t)
|
||||
|
||||
mcu := &TestMcuWithEvents{
|
||||
t: t,
|
||||
}
|
||||
handler.mcu = mcu
|
||||
|
||||
ctx, cancel := context.WithTimeout(t.Context(), testTimeout)
|
||||
defer cancel()
|
||||
|
||||
dialer := websocket.Dialer{
|
||||
Subprotocols: []string{
|
||||
JanusEventsSubprotocol,
|
||||
},
|
||||
}
|
||||
conn, response, err := dialer.DialContext(ctx, url, nil)
|
||||
require.NoError(err)
|
||||
|
||||
assert.Equal(JanusEventsSubprotocol, response.Header.Get("Sec-WebSocket-Protocol"))
|
||||
|
||||
var sender janusEventSender
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeSession,
|
||||
0,
|
||||
1,
|
||||
JanusEventSession{
|
||||
Name: "created",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeHandle,
|
||||
0,
|
||||
1,
|
||||
JanusEventHandle{
|
||||
Name: "attached",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeExternal,
|
||||
0,
|
||||
0,
|
||||
JanusEventExternal{
|
||||
Schema: "test-external",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeJSEP,
|
||||
0,
|
||||
1,
|
||||
JanusEventJSEP{
|
||||
Owner: "testing",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeWebRTC,
|
||||
JanusEventSubTypeWebRTCICE,
|
||||
1,
|
||||
JanusEventWebRTCICE{
|
||||
ICE: "gathering",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeWebRTC,
|
||||
JanusEventSubTypeWebRTCLocalCandidate,
|
||||
1,
|
||||
JanusEventWebRTCLocalCandidate{
|
||||
LocalCandidate: "invalid-candidate",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeWebRTC,
|
||||
JanusEventSubTypeWebRTCRemoteCandidate,
|
||||
1,
|
||||
JanusEventWebRTCRemoteCandidate{
|
||||
RemoteCandidate: "invalid-candidate",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeWebRTC,
|
||||
JanusEventSubTypeWebRTCSelectedPair,
|
||||
1,
|
||||
JanusEventWebRTCSelectedPair{
|
||||
SelectedPair: "invalid-pair",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeWebRTC,
|
||||
JanusEventSubTypeWebRTCDTLS,
|
||||
1,
|
||||
JanusEventWebRTCDTLS{
|
||||
DTLS: "trying",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeWebRTC,
|
||||
JanusEventSubTypeWebRTCPeerConnection,
|
||||
1,
|
||||
JanusEventWebRTCPeerConnection{
|
||||
Connection: "webrtcup",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeMedia,
|
||||
JanusEventSubTypeMediaState,
|
||||
1,
|
||||
JanusEventMediaState{
|
||||
Media: "audio",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeMedia,
|
||||
JanusEventSubTypeMediaSlowLink,
|
||||
1,
|
||||
JanusEventMediaSlowLink{
|
||||
Media: "audio",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypePlugin,
|
||||
0,
|
||||
1,
|
||||
JanusEventPlugin{
|
||||
Plugin: "test-plugin",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeTransport,
|
||||
0,
|
||||
1,
|
||||
JanusEventTransport{
|
||||
Transport: "test-transport",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeCore,
|
||||
JanusEventSubTypeCoreStatusStartup,
|
||||
0,
|
||||
JanusEventCoreStartup{
|
||||
Status: "started",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeCore,
|
||||
JanusEventSubTypeCoreStatusStartup,
|
||||
0,
|
||||
JanusEventCoreStartup{
|
||||
Status: "update",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeCore,
|
||||
JanusEventSubTypeCoreStatusShutdown,
|
||||
0,
|
||||
JanusEventCoreShutdown{
|
||||
Status: "shutdown",
|
||||
},
|
||||
)
|
||||
|
||||
sender.AddEvent(
|
||||
t,
|
||||
JanusEventTypeMedia,
|
||||
JanusEventSubTypeMediaStats,
|
||||
1,
|
||||
JanusEventMediaStats{
|
||||
Media: "audio",
|
||||
BytesSentLastSec: 100,
|
||||
BytesReceivedLastSec: 200,
|
||||
},
|
||||
)
|
||||
sender.Send(t, conn)
|
||||
|
||||
// Wait until all events are processed.
|
||||
assert.NoError(mcu.WaitForUpdates(ctx, 1))
|
||||
}
|
||||
|
||||
func TestJanusEventsHandlerNotGrouped(t *testing.T) {
|
||||
t.Parallel()
|
||||
require := require.New(t)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue