134 lines
2.4 KiB
Go
134 lines
2.4 KiB
Go
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()
|
|
}()
|
|
}
|