golanggohlsrtmpwebrtcmedia-serverobs-studiortcprtmp-proxyrtmp-serverrtprtsprtsp-proxyrtsp-relayrtsp-serversrtstreamingwebrtc-proxy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
2.4 KiB
133 lines
2.4 KiB
package core |
|
|
|
import ( |
|
"os" |
|
"path/filepath" |
|
"testing" |
|
"time" |
|
|
|
"github.com/bluenviron/gortsplib/v4" |
|
"github.com/bluenviron/gortsplib/v4/pkg/description" |
|
"github.com/bluenviron/mediamtx/internal/test" |
|
"github.com/stretchr/testify/require" |
|
) |
|
|
|
func newInstance(conf string) (*Core, bool) { |
|
if conf == "" { |
|
return New([]string{}) |
|
} |
|
|
|
tmpf, err := test.CreateTempFile([]byte(conf)) |
|
if err != nil { |
|
return nil, false |
|
} |
|
defer os.Remove(tmpf) |
|
|
|
return New([]string{tmpf}) |
|
} |
|
|
|
func TestCoreErrors(t *testing.T) { |
|
for _, ca := range []struct { |
|
name string |
|
conf string |
|
}{ |
|
{ |
|
"logger", |
|
"logDestinations: [file]\n" + |
|
"logFile: /nonexisting/nonexist\n", |
|
}, |
|
{ |
|
"metrics", |
|
"metrics: yes\n" + |
|
"metricsAddress: invalid\n", |
|
}, |
|
{ |
|
"pprof", |
|
"pprof: yes\n" + |
|
"pprofAddress: invalid\n", |
|
}, |
|
{ |
|
"playback", |
|
"playback: yes\n" + |
|
"playbackAddress: invalid\n", |
|
}, |
|
{ |
|
"rtsp", |
|
"rtspAddress: invalid\n", |
|
}, |
|
{ |
|
"rtsps", |
|
"encryption: strict\n" + |
|
"rtspAddress: invalid\n", |
|
}, |
|
{ |
|
"rtmp", |
|
"rtmpAddress: invalid\n", |
|
}, |
|
{ |
|
"rtmps", |
|
"rtmpEncryption: strict\n" + |
|
"rtmpAddress: invalid\n", |
|
}, |
|
{ |
|
"hls", |
|
"hlsAddress: invalid\n", |
|
}, |
|
{ |
|
"webrtc", |
|
"webrtcAddress: invalid\n", |
|
}, |
|
{ |
|
"srt", |
|
"srtAddress: invalid\n", |
|
}, |
|
{ |
|
"api", |
|
"api: yes\n" + |
|
"apiAddress: invalid\n", |
|
}, |
|
} { |
|
t.Run(ca.name, func(t *testing.T) { |
|
_, ok := newInstance(ca.conf) |
|
require.Equal(t, false, ok) |
|
}) |
|
} |
|
} |
|
|
|
func TestCoreHotReloading(t *testing.T) { |
|
confPath := filepath.Join(os.TempDir(), "rtsp-conf") |
|
|
|
err := os.WriteFile(confPath, []byte("paths:\n"+ |
|
" test1:\n"+ |
|
" publishUser: myuser\n"+ |
|
" publishPass: mypass\n"), |
|
0o644) |
|
require.NoError(t, err) |
|
defer os.Remove(confPath) |
|
|
|
p, ok := New([]string{confPath}) |
|
require.Equal(t, true, ok) |
|
defer p.Close() |
|
|
|
func() { |
|
c := gortsplib.Client{} |
|
err = c.StartRecording("rtsp://localhost:8554/test1", |
|
&description.Session{Medias: []*description.Media{test.UniqueMediaH264()}}) |
|
require.EqualError(t, err, "bad status code: 401 (Unauthorized)") |
|
}() |
|
|
|
err = os.WriteFile(confPath, []byte("paths:\n"+ |
|
" test1:\n"), |
|
0o644) |
|
require.NoError(t, err) |
|
|
|
time.Sleep(1 * time.Second) |
|
|
|
func() { |
|
conn := gortsplib.Client{} |
|
err = conn.StartRecording("rtsp://localhost:8554/test1", |
|
&description.Session{Medias: []*description.Media{test.UniqueMediaH264()}}) |
|
require.NoError(t, err) |
|
defer conn.Close() |
|
}() |
|
}
|
|
|