mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-03-17 10:46:58 +00:00
- Add signaling package with message types and structures for SFU communication. - Implement client and server message serialization/deserialization tests. - Enhance systemd manager to handle SFU and TURN services, including start/stop logic. - Create TURN server configuration and main server logic with HMAC-SHA1 authentication. - Add tests for TURN server credential generation and validation. - Define systemd service files for SFU and TURN services.
168 lines
4.4 KiB
Go
168 lines
4.4 KiB
Go
package sfu
|
|
|
|
import "testing"
|
|
|
|
func TestConfigValidation(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
config Config
|
|
wantErrs int
|
|
}{
|
|
{
|
|
name: "valid config",
|
|
config: Config{
|
|
ListenAddr: "10.0.0.1:8443",
|
|
Namespace: "test-ns",
|
|
MediaPortStart: 20000,
|
|
MediaPortEnd: 20500,
|
|
TURNServers: []TURNServerConfig{{Host: "1.2.3.4", Port: 3478}},
|
|
TURNSecret: "secret-key",
|
|
TURNCredentialTTL: 600,
|
|
RQLiteDSN: "http://10.0.0.1:4001",
|
|
},
|
|
wantErrs: 0,
|
|
},
|
|
{
|
|
name: "valid config with multiple TURN servers",
|
|
config: Config{
|
|
ListenAddr: "10.0.0.1:8443",
|
|
Namespace: "test-ns",
|
|
MediaPortStart: 20000,
|
|
MediaPortEnd: 20500,
|
|
TURNServers: []TURNServerConfig{
|
|
{Host: "1.2.3.4", Port: 3478},
|
|
{Host: "5.6.7.8", Port: 443},
|
|
},
|
|
TURNSecret: "secret-key",
|
|
TURNCredentialTTL: 600,
|
|
RQLiteDSN: "http://10.0.0.1:4001",
|
|
},
|
|
wantErrs: 0,
|
|
},
|
|
{
|
|
name: "missing all fields",
|
|
config: Config{},
|
|
wantErrs: 7, // listen_addr, namespace, media_port_range, turn_servers, turn_secret, turn_credential_ttl, rqlite_dsn
|
|
},
|
|
{
|
|
name: "missing listen addr",
|
|
config: Config{
|
|
Namespace: "test-ns",
|
|
MediaPortStart: 20000,
|
|
MediaPortEnd: 20500,
|
|
TURNServers: []TURNServerConfig{{Host: "1.2.3.4", Port: 3478}},
|
|
TURNSecret: "secret",
|
|
TURNCredentialTTL: 600,
|
|
RQLiteDSN: "http://10.0.0.1:4001",
|
|
},
|
|
wantErrs: 1,
|
|
},
|
|
{
|
|
name: "missing namespace",
|
|
config: Config{
|
|
ListenAddr: "10.0.0.1:8443",
|
|
MediaPortStart: 20000,
|
|
MediaPortEnd: 20500,
|
|
TURNServers: []TURNServerConfig{{Host: "1.2.3.4", Port: 3478}},
|
|
TURNSecret: "secret",
|
|
TURNCredentialTTL: 600,
|
|
RQLiteDSN: "http://10.0.0.1:4001",
|
|
},
|
|
wantErrs: 1,
|
|
},
|
|
{
|
|
name: "invalid media port range - inverted",
|
|
config: Config{
|
|
ListenAddr: "10.0.0.1:8443",
|
|
Namespace: "test-ns",
|
|
MediaPortStart: 20500,
|
|
MediaPortEnd: 20000,
|
|
TURNServers: []TURNServerConfig{{Host: "1.2.3.4", Port: 3478}},
|
|
TURNSecret: "secret",
|
|
TURNCredentialTTL: 600,
|
|
RQLiteDSN: "http://10.0.0.1:4001",
|
|
},
|
|
wantErrs: 1,
|
|
},
|
|
{
|
|
name: "invalid media port range - zero",
|
|
config: Config{
|
|
ListenAddr: "10.0.0.1:8443",
|
|
Namespace: "test-ns",
|
|
MediaPortStart: 0,
|
|
MediaPortEnd: 0,
|
|
TURNServers: []TURNServerConfig{{Host: "1.2.3.4", Port: 3478}},
|
|
TURNSecret: "secret",
|
|
TURNCredentialTTL: 600,
|
|
RQLiteDSN: "http://10.0.0.1:4001",
|
|
},
|
|
wantErrs: 1,
|
|
},
|
|
{
|
|
name: "no TURN servers",
|
|
config: Config{
|
|
ListenAddr: "10.0.0.1:8443",
|
|
Namespace: "test-ns",
|
|
MediaPortStart: 20000,
|
|
MediaPortEnd: 20500,
|
|
TURNServers: []TURNServerConfig{},
|
|
TURNSecret: "secret",
|
|
TURNCredentialTTL: 600,
|
|
RQLiteDSN: "http://10.0.0.1:4001",
|
|
},
|
|
wantErrs: 1,
|
|
},
|
|
{
|
|
name: "TURN server with invalid port",
|
|
config: Config{
|
|
ListenAddr: "10.0.0.1:8443",
|
|
Namespace: "test-ns",
|
|
MediaPortStart: 20000,
|
|
MediaPortEnd: 20500,
|
|
TURNServers: []TURNServerConfig{{Host: "1.2.3.4", Port: 0}},
|
|
TURNSecret: "secret",
|
|
TURNCredentialTTL: 600,
|
|
RQLiteDSN: "http://10.0.0.1:4001",
|
|
},
|
|
wantErrs: 1,
|
|
},
|
|
{
|
|
name: "TURN server with empty host",
|
|
config: Config{
|
|
ListenAddr: "10.0.0.1:8443",
|
|
Namespace: "test-ns",
|
|
MediaPortStart: 20000,
|
|
MediaPortEnd: 20500,
|
|
TURNServers: []TURNServerConfig{{Host: "", Port: 3478}},
|
|
TURNSecret: "secret",
|
|
TURNCredentialTTL: 600,
|
|
RQLiteDSN: "http://10.0.0.1:4001",
|
|
},
|
|
wantErrs: 1,
|
|
},
|
|
{
|
|
name: "negative credential TTL",
|
|
config: Config{
|
|
ListenAddr: "10.0.0.1:8443",
|
|
Namespace: "test-ns",
|
|
MediaPortStart: 20000,
|
|
MediaPortEnd: 20500,
|
|
TURNServers: []TURNServerConfig{{Host: "1.2.3.4", Port: 3478}},
|
|
TURNSecret: "secret",
|
|
TURNCredentialTTL: -1,
|
|
RQLiteDSN: "http://10.0.0.1:4001",
|
|
},
|
|
wantErrs: 1,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
errs := tt.config.Validate()
|
|
if len(errs) != tt.wantErrs {
|
|
t.Errorf("Validate() returned %d errors, want %d: %v", len(errs), tt.wantErrs, errs)
|
|
}
|
|
})
|
|
}
|
|
}
|