tests: use testing.T.TempDir rather than os.TempDir (#5709)
This commit is contained in:
@@ -14,9 +14,7 @@ import (
|
||||
)
|
||||
|
||||
func TestRecordingsList(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
cnf := tempConf(t, "pathDefaults:\n"+
|
||||
" recordPath: "+filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")+"\n"+
|
||||
@@ -32,7 +30,7 @@ func TestRecordingsList(t *testing.T) {
|
||||
AuthManager: test.NilAuthManager,
|
||||
Parent: &testParent{},
|
||||
}
|
||||
err = api.Initialize()
|
||||
err := api.Initialize()
|
||||
require.NoError(t, err)
|
||||
defer api.Close()
|
||||
|
||||
@@ -85,9 +83,7 @@ func TestRecordingsList(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRecordingsGet(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
cnf := tempConf(t, "pathDefaults:\n"+
|
||||
" recordPath: "+filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")+"\n"+
|
||||
@@ -102,7 +98,7 @@ func TestRecordingsGet(t *testing.T) {
|
||||
AuthManager: test.NilAuthManager,
|
||||
Parent: &testParent{},
|
||||
}
|
||||
err = api.Initialize()
|
||||
err := api.Initialize()
|
||||
require.NoError(t, err)
|
||||
defer api.Close()
|
||||
|
||||
@@ -135,9 +131,7 @@ func TestRecordingsGet(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRecordingsDeleteSegment(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
cnf := tempConf(t, "pathDefaults:\n"+
|
||||
" recordPath: "+filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")+"\n"+
|
||||
@@ -152,7 +146,7 @@ func TestRecordingsDeleteSegment(t *testing.T) {
|
||||
AuthManager: test.NilAuthManager,
|
||||
Parent: &testParent{},
|
||||
}
|
||||
err = api.Initialize()
|
||||
err := api.Initialize()
|
||||
require.NoError(t, err)
|
||||
defer api.Close()
|
||||
|
||||
@@ -189,9 +183,7 @@ func TestRecordingsDeleteSegment(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRecordingsDeleteSegmentInvalidPath(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
cnf := tempConf(t, "pathDefaults:\n"+
|
||||
" recordPath: "+filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")+"\n"+
|
||||
@@ -206,7 +198,7 @@ func TestRecordingsDeleteSegmentInvalidPath(t *testing.T) {
|
||||
AuthManager: test.NilAuthManager,
|
||||
Parent: &testParent{},
|
||||
}
|
||||
err = api.Initialize()
|
||||
err := api.Initialize()
|
||||
require.NoError(t, err)
|
||||
defer api.Close()
|
||||
|
||||
@@ -242,9 +234,7 @@ func TestRecordingsDeleteSegmentInvalidPath(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRecordingsSegmentGetInvalidPath(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
cnf := tempConf(t, "pathDefaults:\n"+
|
||||
" recordPath: "+filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")+"\n"+
|
||||
@@ -259,7 +249,7 @@ func TestRecordingsSegmentGetInvalidPath(t *testing.T) {
|
||||
AuthManager: test.NilAuthManager,
|
||||
Parent: &testParent{},
|
||||
}
|
||||
err = api.Initialize()
|
||||
err := api.Initialize()
|
||||
require.NoError(t, err)
|
||||
defer api.Close()
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -31,9 +30,7 @@ func (p testParent) Log(l logger.Level, s string, a ...any) {
|
||||
func (testParent) APIConfigSet(_ *conf.Conf) {}
|
||||
|
||||
func tempConf(t *testing.T, cnt string) *conf.Conf {
|
||||
fi, err := test.CreateTempFile([]byte(cnt))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(fi)
|
||||
fi := test.CreateTempFile(t, []byte(cnt))
|
||||
|
||||
cnf, _, err := conf.Load(fi, nil, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -14,13 +14,8 @@ func TestCertReload(t *testing.T) {
|
||||
testData, err := tls.X509KeyPair(test.TLSCertPub, test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
|
||||
serverCertPath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertPath)
|
||||
|
||||
serverKeyPath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyPath)
|
||||
serverCertPath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyPath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
loader := &CertLoader{
|
||||
CertPath: serverCertPath,
|
||||
|
||||
+30
-56
@@ -15,29 +15,23 @@ import (
|
||||
"github.com/bluenviron/mediamtx/internal/logger"
|
||||
)
|
||||
|
||||
func createTempFile(byts []byte) (string, error) {
|
||||
tmpf, err := os.CreateTemp(os.TempDir(), "rtsp-")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
func createTempFile(t *testing.T, byts []byte) string {
|
||||
tmpf, err := os.CreateTemp(t.TempDir(), "rtsp-")
|
||||
require.NoError(t, err)
|
||||
defer tmpf.Close()
|
||||
|
||||
_, err = tmpf.Write(byts)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
return tmpf.Name(), nil
|
||||
return tmpf.Name()
|
||||
}
|
||||
|
||||
func TestConfFromFile(t *testing.T) {
|
||||
func() {
|
||||
tmpf, err := createTempFile([]byte("logLevel: debug\n" +
|
||||
"paths:\n" +
|
||||
" cam1:\n" +
|
||||
tmpf := createTempFile(t, []byte("logLevel: debug\n"+
|
||||
"paths:\n"+
|
||||
" cam1:\n"+
|
||||
" runOnDemandStartTimeout: 5s\n"))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf)
|
||||
|
||||
conf, confPath, err := Load(tmpf, nil, nil)
|
||||
require.NoError(t, err)
|
||||
@@ -93,31 +87,25 @@ func TestConfFromFile(t *testing.T) {
|
||||
}()
|
||||
|
||||
func() {
|
||||
tmpf, err := createTempFile([]byte(``))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf)
|
||||
tmpf := createTempFile(t, []byte(``))
|
||||
|
||||
_, _, err = Load(tmpf, nil, nil)
|
||||
_, _, err := Load(tmpf, nil, nil)
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
|
||||
func() {
|
||||
tmpf, err := createTempFile([]byte(`paths:`))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf)
|
||||
tmpf := createTempFile(t, []byte(`paths:`))
|
||||
|
||||
_, _, err = Load(tmpf, nil, nil)
|
||||
_, _, err := Load(tmpf, nil, nil)
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
|
||||
func() {
|
||||
tmpf, err := createTempFile([]byte(
|
||||
"paths:\n" +
|
||||
tmpf := createTempFile(t, []byte(
|
||||
"paths:\n"+
|
||||
" mypath:\n"))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf)
|
||||
|
||||
_, _, err = Load(tmpf, nil, nil)
|
||||
_, _, err := Load(tmpf, nil, nil)
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
}
|
||||
@@ -135,9 +123,7 @@ func TestConfFromFileAndEnv(t *testing.T) {
|
||||
// deprecated path parameter
|
||||
t.Setenv("MTX_PATHS_CAM2_DISABLEPUBLISHEROVERRIDE", "yes")
|
||||
|
||||
tmpf, err := createTempFile([]byte("{}"))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf)
|
||||
tmpf := createTempFile(t, []byte("{}"))
|
||||
|
||||
conf, confPath, err := Load(tmpf, nil, nil)
|
||||
require.NoError(t, err)
|
||||
@@ -187,9 +173,7 @@ func TestConfEncryption(t *testing.T) {
|
||||
|
||||
t.Setenv("RTSP_CONFKEY", key)
|
||||
|
||||
tmpf, err := createTempFile([]byte(encryptedConf))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf)
|
||||
tmpf := createTempFile(t, []byte(encryptedConf))
|
||||
|
||||
conf, confPath, err := Load(tmpf, nil, nil)
|
||||
require.NoError(t, err)
|
||||
@@ -203,13 +187,11 @@ func TestConfEncryption(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestConfDeprecatedAuth(t *testing.T) {
|
||||
tmpf, err := createTempFile([]byte(
|
||||
"paths:\n" +
|
||||
" cam:\n" +
|
||||
" readUser: myuser\n" +
|
||||
tmpf := createTempFile(t, []byte(
|
||||
"paths:\n"+
|
||||
" cam:\n"+
|
||||
" readUser: myuser\n"+
|
||||
" readPass: mypass\n"))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf)
|
||||
|
||||
conf, _, err := Load(tmpf, nil, nil)
|
||||
require.NoError(t, err)
|
||||
@@ -749,29 +731,23 @@ func TestConfErrors(t *testing.T) {
|
||||
},
|
||||
} {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
tmpf, err := createTempFile([]byte(ca.conf))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf)
|
||||
tmpf := createTempFile(t, []byte(ca.conf))
|
||||
|
||||
_, _, err = Load(tmpf, nil, nil)
|
||||
_, _, err := Load(tmpf, nil, nil)
|
||||
require.EqualError(t, err, ca.err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAlwaysAvailableFileErrorMagicBytes(t *testing.T) {
|
||||
tmpf, err := createTempFile([]byte("ABCDEFGHI"))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf)
|
||||
tmpf := createTempFile(t, []byte("ABCDEFGHI"))
|
||||
|
||||
tmpConf, err := createTempFile([]byte("paths:\n" +
|
||||
" mypath:\n" +
|
||||
" alwaysAvailable: yes\n" +
|
||||
" alwaysAvailableFile: " + tmpf + "\n"))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpConf)
|
||||
tmpConf := createTempFile(t, []byte("paths:\n"+
|
||||
" mypath:\n"+
|
||||
" alwaysAvailable: yes\n"+
|
||||
" alwaysAvailableFile: "+tmpf+"\n"))
|
||||
|
||||
_, _, err = Load(tmpConf, nil, nil)
|
||||
_, _, err := Load(tmpConf, nil, nil)
|
||||
require.EqualError(t, err, "invalid 'alwaysAvailableFile': file is not MP4, magic bytes are [69 70 71 72]")
|
||||
}
|
||||
|
||||
@@ -795,9 +771,7 @@ func TestSampleConfFile(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "../../mediamtx.yml", confPath1)
|
||||
|
||||
tmpf, err := createTempFile([]byte("paths:\n all_others:"))
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf)
|
||||
tmpf := createTempFile(t, []byte("paths:\n all_others:"))
|
||||
|
||||
conf2, confPath2, err := Load(tmpf, nil, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -16,11 +16,10 @@ func TestNoFile(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestWrite(t *testing.T) {
|
||||
fpath, err := test.CreateTempFile([]byte("{}"))
|
||||
require.NoError(t, err)
|
||||
fpath := test.CreateTempFile(t, []byte("{}"))
|
||||
|
||||
w := &ConfWatcher{FilePath: fpath}
|
||||
err = w.Initialize()
|
||||
err := w.Initialize()
|
||||
require.NoError(t, err)
|
||||
defer w.Close()
|
||||
|
||||
@@ -43,11 +42,10 @@ func TestWrite(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestWriteMultipleTimes(t *testing.T) {
|
||||
fpath, err := test.CreateTempFile([]byte("{}"))
|
||||
require.NoError(t, err)
|
||||
fpath := test.CreateTempFile(t, []byte("{}"))
|
||||
|
||||
w := &ConfWatcher{FilePath: fpath}
|
||||
err = w.Initialize()
|
||||
err := w.Initialize()
|
||||
require.NoError(t, err)
|
||||
defer w.Close()
|
||||
|
||||
@@ -87,15 +85,15 @@ func TestWriteMultipleTimes(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDeleteCreate(t *testing.T) {
|
||||
fpath, err := test.CreateTempFile([]byte("{}"))
|
||||
require.NoError(t, err)
|
||||
fpath := test.CreateTempFile(t, []byte("{}"))
|
||||
|
||||
w := &ConfWatcher{FilePath: fpath}
|
||||
err = w.Initialize()
|
||||
err := w.Initialize()
|
||||
require.NoError(t, err)
|
||||
defer w.Close()
|
||||
|
||||
os.Remove(fpath)
|
||||
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
|
||||
func() {
|
||||
@@ -117,10 +115,9 @@ func TestDeleteCreate(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestSymlinkDeleteCreate(t *testing.T) {
|
||||
fpath, err := test.CreateTempFile([]byte("{}"))
|
||||
require.NoError(t, err)
|
||||
fpath := test.CreateTempFile(t, []byte("{}"))
|
||||
|
||||
err = os.Symlink(fpath, fpath+"-sym")
|
||||
err := os.Symlink(fpath, fpath+"-sym")
|
||||
require.NoError(t, err)
|
||||
|
||||
w := &ConfWatcher{FilePath: fpath + "-sym"}
|
||||
|
||||
+50
-76
@@ -10,7 +10,6 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -102,8 +101,8 @@ func TestAPIPathsList(t *testing.T) {
|
||||
}
|
||||
|
||||
t.Run("rtsp session", func(t *testing.T) {
|
||||
p, ok := newInstance("api: yes\n" +
|
||||
"paths:\n" +
|
||||
p, ok := newInstance(t, "api: yes\n"+
|
||||
"paths:\n"+
|
||||
" mypath:\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -153,19 +152,14 @@ func TestAPIPathsList(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("rtsps session", func(t *testing.T) {
|
||||
serverCertFpath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
serverKeyFpath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
|
||||
p, ok := newInstance("api: yes\n" +
|
||||
"rtspEncryption: optional\n" +
|
||||
"rtspServerCert: " + serverCertFpath + "\n" +
|
||||
"rtspServerKey: " + serverKeyFpath + "\n" +
|
||||
"paths:\n" +
|
||||
p, ok := newInstance(t, "api: yes\n"+
|
||||
"rtspEncryption: optional\n"+
|
||||
"rtspServerCert: "+serverCertFpath+"\n"+
|
||||
"rtspServerKey: "+serverKeyFpath+"\n"+
|
||||
"paths:\n"+
|
||||
" mypath:\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -175,7 +169,7 @@ func TestAPIPathsList(t *testing.T) {
|
||||
hc := &http.Client{Transport: tr}
|
||||
|
||||
source := gortsplib.Client{TLSConfig: &tls.Config{InsecureSkipVerify: true}}
|
||||
err = source.StartRecording("rtsps://localhost:8322/mypath",
|
||||
err := source.StartRecording("rtsps://localhost:8322/mypath",
|
||||
&description.Session{Medias: []*description.Media{
|
||||
test.UniqueMediaH264(),
|
||||
test.UniqueMediaMPEG4Audio(),
|
||||
@@ -200,10 +194,10 @@ func TestAPIPathsList(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("rtsp source", func(t *testing.T) {
|
||||
p, ok := newInstance("api: yes\n" +
|
||||
"paths:\n" +
|
||||
" mypath:\n" +
|
||||
" source: rtsp://127.0.0.1:1234/mypath\n" +
|
||||
p, ok := newInstance(t, "api: yes\n"+
|
||||
"paths:\n"+
|
||||
" mypath:\n"+
|
||||
" source: rtsp://127.0.0.1:1234/mypath\n"+
|
||||
" sourceOnDemand: yes\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -229,10 +223,10 @@ func TestAPIPathsList(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("rtmp source", func(t *testing.T) {
|
||||
p, ok := newInstance("api: yes\n" +
|
||||
"paths:\n" +
|
||||
" mypath:\n" +
|
||||
" source: rtmp://127.0.0.1:1234/mypath\n" +
|
||||
p, ok := newInstance(t, "api: yes\n"+
|
||||
"paths:\n"+
|
||||
" mypath:\n"+
|
||||
" source: rtmp://127.0.0.1:1234/mypath\n"+
|
||||
" sourceOnDemand: yes\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -258,10 +252,10 @@ func TestAPIPathsList(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("hls source", func(t *testing.T) {
|
||||
p, ok := newInstance("api: yes\n" +
|
||||
"paths:\n" +
|
||||
" mypath:\n" +
|
||||
" source: http://127.0.0.1:1234/mypath\n" +
|
||||
p, ok := newInstance(t, "api: yes\n"+
|
||||
"paths:\n"+
|
||||
" mypath:\n"+
|
||||
" source: http://127.0.0.1:1234/mypath\n"+
|
||||
" sourceOnDemand: yes\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -288,8 +282,8 @@ func TestAPIPathsList(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAPIPathsGet(t *testing.T) {
|
||||
p, ok := newInstance("api: yes\n" +
|
||||
"paths:\n" +
|
||||
p, ok := newInstance(t, "api: yes\n"+
|
||||
"paths:\n"+
|
||||
" all_others:\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -357,13 +351,8 @@ func TestAPIPathsGet(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAPIProtocolListGet(t *testing.T) {
|
||||
serverCertFpath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
|
||||
serverKeyFpath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
for _, ca := range []string{
|
||||
"rtsp conns",
|
||||
@@ -395,7 +384,7 @@ func TestAPIProtocolListGet(t *testing.T) {
|
||||
cnf += "paths:\n" +
|
||||
" all_others:\n"
|
||||
|
||||
p, ok := newInstance(cnf)
|
||||
p, ok := newInstance(t, cnf)
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
|
||||
@@ -409,7 +398,7 @@ func TestAPIProtocolListGet(t *testing.T) {
|
||||
case "rtsp conns", "rtsp sessions":
|
||||
source := gortsplib.Client{}
|
||||
|
||||
err = source.StartRecording("rtsp://localhost:8554/mypath?key=val",
|
||||
err := source.StartRecording("rtsp://localhost:8554/mypath?key=val",
|
||||
&description.Session{Medias: []*description.Media{medi}})
|
||||
require.NoError(t, err)
|
||||
defer source.Close()
|
||||
@@ -419,7 +408,7 @@ func TestAPIProtocolListGet(t *testing.T) {
|
||||
TLSConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
}
|
||||
|
||||
err = source.StartRecording("rtsps://localhost:8322/mypath?key=val",
|
||||
err := source.StartRecording("rtsps://localhost:8322/mypath?key=val",
|
||||
&description.Session{Medias: []*description.Media{medi}})
|
||||
require.NoError(t, err)
|
||||
defer source.Close()
|
||||
@@ -443,7 +432,7 @@ func TestAPIProtocolListGet(t *testing.T) {
|
||||
rawURL += "127.0.0.1:" + port + "/mypath?key=val"
|
||||
|
||||
var u *url.URL
|
||||
u, err = url.Parse(rawURL)
|
||||
u, err := url.Parse(rawURL)
|
||||
require.NoError(t, err)
|
||||
|
||||
conn := &gortmplib.Client{
|
||||
@@ -476,7 +465,7 @@ func TestAPIProtocolListGet(t *testing.T) {
|
||||
|
||||
case "hls sessions", "hls muxers":
|
||||
source := gortsplib.Client{}
|
||||
err = source.StartRecording("rtsp://localhost:8554/mypath",
|
||||
err := source.StartRecording("rtsp://localhost:8554/mypath",
|
||||
&description.Session{Medias: []*description.Media{medi}})
|
||||
require.NoError(t, err)
|
||||
defer source.Close()
|
||||
@@ -533,7 +522,7 @@ func TestAPIProtocolListGet(t *testing.T) {
|
||||
|
||||
case "webrtc":
|
||||
source := gortsplib.Client{}
|
||||
err = source.StartRecording("rtsp://localhost:8554/mypath",
|
||||
err := source.StartRecording("rtsp://localhost:8554/mypath",
|
||||
&description.Session{Medias: []*description.Media{medi}})
|
||||
require.NoError(t, err)
|
||||
defer source.Close()
|
||||
@@ -574,7 +563,7 @@ func TestAPIProtocolListGet(t *testing.T) {
|
||||
conf.StreamId = "publish:mypath:::key=val"
|
||||
|
||||
var conn srt.Conn
|
||||
conn, err = srt.Dial("srt", "localhost:8890", conf)
|
||||
conn, err := srt.Dial("srt", "localhost:8890", conf)
|
||||
require.NoError(t, err)
|
||||
defer conn.Close()
|
||||
|
||||
@@ -1013,13 +1002,8 @@ func TestAPIProtocolListGet(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAPIProtocolGetNotFound(t *testing.T) {
|
||||
serverCertFpath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
|
||||
serverKeyFpath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
for _, ca := range []string{
|
||||
"rtsp conns",
|
||||
@@ -1052,7 +1036,7 @@ func TestAPIProtocolGetNotFound(t *testing.T) {
|
||||
cnf += "paths:\n" +
|
||||
" all_others:\n"
|
||||
|
||||
p, ok := newInstance(cnf)
|
||||
p, ok := newInstance(t, cnf)
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
|
||||
@@ -1095,7 +1079,7 @@ func TestAPIProtocolGetNotFound(t *testing.T) {
|
||||
|
||||
func() {
|
||||
var req *http.Request
|
||||
req, err = http.NewRequest(http.MethodGet, "http://localhost:9997/v3/"+pa+"/get/"+uuid.New().String(), nil)
|
||||
req, err := http.NewRequest(http.MethodGet, "http://localhost:9997/v3/"+pa+"/get/"+uuid.New().String(), nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
var res *http.Response
|
||||
@@ -1121,13 +1105,8 @@ func TestAPIProtocolGetNotFound(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAPIProtocolKick(t *testing.T) {
|
||||
serverCertFpath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
|
||||
serverKeyFpath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
for _, ca := range []string{
|
||||
"rtsp",
|
||||
@@ -1150,7 +1129,7 @@ func TestAPIProtocolKick(t *testing.T) {
|
||||
cnf += "paths:\n" +
|
||||
" all_others:\n"
|
||||
|
||||
p, ok := newInstance(cnf)
|
||||
p, ok := newInstance(t, cnf)
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
|
||||
@@ -1163,7 +1142,7 @@ func TestAPIProtocolKick(t *testing.T) {
|
||||
switch ca {
|
||||
case "rtsp":
|
||||
source := gortsplib.Client{}
|
||||
err = source.StartRecording("rtsp://localhost:8554/mypath",
|
||||
err := source.StartRecording("rtsp://localhost:8554/mypath",
|
||||
&description.Session{Medias: []*description.Media{medi}})
|
||||
require.NoError(t, err)
|
||||
defer source.Close()
|
||||
@@ -1172,14 +1151,14 @@ func TestAPIProtocolKick(t *testing.T) {
|
||||
source := gortsplib.Client{
|
||||
TLSConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
}
|
||||
err = source.StartRecording("rtsps://localhost:8322/mypath",
|
||||
err := source.StartRecording("rtsps://localhost:8322/mypath",
|
||||
&description.Session{Medias: []*description.Media{medi}})
|
||||
require.NoError(t, err)
|
||||
defer source.Close()
|
||||
|
||||
case "rtmp":
|
||||
var u *url.URL
|
||||
u, err = url.Parse("rtmp://localhost:1935/mypath")
|
||||
u, err := url.Parse("rtmp://localhost:1935/mypath")
|
||||
require.NoError(t, err)
|
||||
|
||||
conn := &gortmplib.Client{
|
||||
@@ -1209,7 +1188,7 @@ func TestAPIProtocolKick(t *testing.T) {
|
||||
|
||||
case "hls":
|
||||
source := gortsplib.Client{}
|
||||
err = source.StartRecording("rtsp://localhost:8554/mypath",
|
||||
err := source.StartRecording("rtsp://localhost:8554/mypath",
|
||||
&description.Session{Medias: []*description.Media{medi}})
|
||||
require.NoError(t, err)
|
||||
defer source.Close()
|
||||
@@ -1248,7 +1227,7 @@ func TestAPIProtocolKick(t *testing.T) {
|
||||
|
||||
case "webrtc":
|
||||
var u *url.URL
|
||||
u, err = url.Parse("http://localhost:8889/mypath/whip")
|
||||
u, err := url.Parse("http://localhost:8889/mypath/whip")
|
||||
require.NoError(t, err)
|
||||
|
||||
track := &webrtc.OutgoingTrack{
|
||||
@@ -1278,7 +1257,7 @@ func TestAPIProtocolKick(t *testing.T) {
|
||||
conf.StreamId = "publish:mypath"
|
||||
|
||||
var conn srt.Conn
|
||||
conn, err = srt.Dial("srt", "localhost:8890", conf)
|
||||
conn, err := srt.Dial("srt", "localhost:8890", conf)
|
||||
require.NoError(t, err)
|
||||
defer conn.Close()
|
||||
|
||||
@@ -1341,13 +1320,8 @@ func TestAPIProtocolKick(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAPIProtocolKickNotFound(t *testing.T) {
|
||||
serverCertFpath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
|
||||
serverKeyFpath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
for _, ca := range []string{
|
||||
"rtsp",
|
||||
@@ -1370,7 +1344,7 @@ func TestAPIProtocolKickNotFound(t *testing.T) {
|
||||
cnf += "paths:\n" +
|
||||
" all_others:\n"
|
||||
|
||||
p, ok := newInstance(cnf)
|
||||
p, ok := newInstance(t, cnf)
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
|
||||
@@ -1401,7 +1375,7 @@ func TestAPIProtocolKickNotFound(t *testing.T) {
|
||||
|
||||
func() {
|
||||
var req *http.Request
|
||||
req, err = http.NewRequest(http.MethodPost, "http://localhost:9997/v3/"+pa+"/kick/"+uuid.New().String(), nil)
|
||||
req, err := http.NewRequest(http.MethodPost, "http://localhost:9997/v3/"+pa+"/kick/"+uuid.New().String(), nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
var res *http.Response
|
||||
|
||||
@@ -12,16 +12,12 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func newInstance(conf string) (*Core, bool) {
|
||||
func newInstance(t *testing.T, 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)
|
||||
tmpf := test.CreateTempFile(t, []byte(conf))
|
||||
|
||||
return New([]string{tmpf})
|
||||
}
|
||||
@@ -89,14 +85,14 @@ func TestCoreErrors(t *testing.T) {
|
||||
},
|
||||
} {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
_, ok := newInstance(ca.conf)
|
||||
_, ok := newInstance(t, ca.conf)
|
||||
require.Equal(t, false, ok)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestCoreHotReloading(t *testing.T) {
|
||||
confPath := filepath.Join(os.TempDir(), "rtsp-conf")
|
||||
confPath := filepath.Join(t.TempDir(), "rtsp-conf")
|
||||
|
||||
err := os.WriteFile(confPath, []byte("paths:\n"+
|
||||
" test1:\n"+
|
||||
@@ -104,7 +100,6 @@ func TestCoreHotReloading(t *testing.T) {
|
||||
" publishPass: mypass\n"),
|
||||
0o644)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(confPath)
|
||||
|
||||
p, ok := New([]string{confPath})
|
||||
require.Equal(t, true, ok)
|
||||
@@ -134,12 +129,11 @@ func TestCoreHotReloading(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCoreHotReloadingAndLoggerError(t *testing.T) {
|
||||
confPath := filepath.Join(os.TempDir(), "rtsp-conf")
|
||||
confPath := filepath.Join(t.TempDir(), "rtsp-conf")
|
||||
|
||||
err := os.WriteFile(confPath, []byte(""),
|
||||
0o644)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(confPath)
|
||||
|
||||
p, ok := New([]string{confPath})
|
||||
require.Equal(t, true, ok)
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -44,26 +43,21 @@ func httpPullFile(t *testing.T, hc *http.Client, u string) []byte {
|
||||
}
|
||||
|
||||
func TestMetrics(t *testing.T) {
|
||||
serverCertFpath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
serverKeyFpath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
|
||||
p, ok := newInstance("api: yes\n" +
|
||||
"hlsAlwaysRemux: yes\n" +
|
||||
"metrics: yes\n" +
|
||||
"webrtcServerCert: " + serverCertFpath + "\n" +
|
||||
"webrtcServerKey: " + serverKeyFpath + "\n" +
|
||||
"rtspEncryption: optional\n" +
|
||||
"rtspServerCert: " + serverCertFpath + "\n" +
|
||||
"rtspServerKey: " + serverKeyFpath + "\n" +
|
||||
"rtmpEncryption: optional\n" +
|
||||
"rtmpServerCert: " + serverCertFpath + "\n" +
|
||||
"rtmpServerKey: " + serverKeyFpath + "\n" +
|
||||
"paths:\n" +
|
||||
p, ok := newInstance(t, "api: yes\n"+
|
||||
"hlsAlwaysRemux: yes\n"+
|
||||
"metrics: yes\n"+
|
||||
"webrtcServerCert: "+serverCertFpath+"\n"+
|
||||
"webrtcServerKey: "+serverKeyFpath+"\n"+
|
||||
"rtspEncryption: optional\n"+
|
||||
"rtspServerCert: "+serverCertFpath+"\n"+
|
||||
"rtspServerKey: "+serverKeyFpath+"\n"+
|
||||
"rtmpEncryption: optional\n"+
|
||||
"rtmpServerCert: "+serverCertFpath+"\n"+
|
||||
"rtmpServerKey: "+serverKeyFpath+"\n"+
|
||||
"paths:\n"+
|
||||
" all_others:\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
|
||||
@@ -124,9 +124,9 @@ func TestPathManagerDynamicPathDescribeAndPublish(t *testing.T) {
|
||||
|
||||
func TestPathManagerConfigHotReload(t *testing.T) {
|
||||
// Start MediaMTX with basic configuration
|
||||
p, ok := newInstance("api: yes\n" +
|
||||
"paths:\n" +
|
||||
" all:\n" +
|
||||
p, ok := newInstance(t, "api: yes\n"+
|
||||
"paths:\n"+
|
||||
" all:\n"+
|
||||
" record: no\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
|
||||
+45
-73
@@ -51,15 +51,12 @@ func (sh *testServer) OnPlay(ctx *gortsplib.ServerHandlerOnPlayCtx) (*base.Respo
|
||||
var _ defs.Path = &path{}
|
||||
|
||||
func TestPathRunOnDemand(t *testing.T) {
|
||||
onDemand := filepath.Join(os.TempDir(), "on_demand")
|
||||
onUnDemand := filepath.Join(os.TempDir(), "on_undemand")
|
||||
|
||||
for _, ca := range []string{"describe", "setup", "describe and setup"} {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
defer os.Remove(onDemand)
|
||||
defer os.Remove(onUnDemand)
|
||||
onDemand := filepath.Join(t.TempDir(), "on_demand")
|
||||
onUnDemand := filepath.Join(t.TempDir(), "on_undemand")
|
||||
|
||||
p1, ok := newInstance(fmt.Sprintf("rtmp: no\n"+
|
||||
p1, ok := newInstance(t, fmt.Sprintf("rtmp: no\n"+
|
||||
"hls: no\n"+
|
||||
"webrtc: no\n"+
|
||||
"paths:\n"+
|
||||
@@ -152,26 +149,18 @@ func TestPathRunOnDemand(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPathRunOnConnect(t *testing.T) {
|
||||
serverCertFpath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
|
||||
serverKeyFpath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
for _, ca := range []string{"rtsp", "rtsps", "rtmp", "rtmps", "srt"} {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
onConnect := filepath.Join(os.TempDir(), "on_connect")
|
||||
defer os.Remove(onConnect)
|
||||
|
||||
onDisconnect := filepath.Join(os.TempDir(), "on_disconnect")
|
||||
defer os.Remove(onDisconnect)
|
||||
onConnect := filepath.Join(t.TempDir(), "on_connect")
|
||||
onDisconnect := filepath.Join(t.TempDir(), "on_disconnect")
|
||||
|
||||
connType := ""
|
||||
|
||||
func() {
|
||||
p, ok := newInstance(fmt.Sprintf(
|
||||
p, ok := newInstance(t, fmt.Sprintf(
|
||||
"rtspEncryption: optional\n"+
|
||||
"rtspServerCert: "+serverCertFpath+"\n"+
|
||||
"rtspServerKey: "+serverKeyFpath+"\n"+
|
||||
@@ -192,7 +181,7 @@ func TestPathRunOnConnect(t *testing.T) {
|
||||
|
||||
c := gortsplib.Client{}
|
||||
|
||||
err = c.StartRecording(
|
||||
err := c.StartRecording(
|
||||
"rtsp://localhost:8554/test",
|
||||
&description.Session{Medias: []*description.Media{test.UniqueMediaH264()}})
|
||||
require.NoError(t, err)
|
||||
@@ -203,7 +192,7 @@ func TestPathRunOnConnect(t *testing.T) {
|
||||
|
||||
c := gortsplib.Client{TLSConfig: &tls.Config{InsecureSkipVerify: true}}
|
||||
|
||||
err = c.StartRecording(
|
||||
err := c.StartRecording(
|
||||
"rtsps://localhost:8322/test",
|
||||
&description.Session{Medias: []*description.Media{test.UniqueMediaH264()}})
|
||||
require.NoError(t, err)
|
||||
@@ -213,7 +202,7 @@ func TestPathRunOnConnect(t *testing.T) {
|
||||
connType = "rtmpConn"
|
||||
|
||||
var u *url.URL
|
||||
u, err = url.Parse("rtmp://127.0.0.1:1935/test")
|
||||
u, err := url.Parse("rtmp://127.0.0.1:1935/test")
|
||||
require.NoError(t, err)
|
||||
|
||||
conn := &gortmplib.Client{
|
||||
@@ -228,7 +217,7 @@ func TestPathRunOnConnect(t *testing.T) {
|
||||
connType = "rtmpsConn"
|
||||
|
||||
var u *url.URL
|
||||
u, err = url.Parse("rtmps://127.0.0.1:1936/test")
|
||||
u, err := url.Parse("rtmps://127.0.0.1:1936/test")
|
||||
require.NoError(t, err)
|
||||
|
||||
conn := &gortmplib.Client{
|
||||
@@ -245,7 +234,7 @@ func TestPathRunOnConnect(t *testing.T) {
|
||||
|
||||
conf := srt.DefaultConfig()
|
||||
var address string
|
||||
address, err = conf.UnmarshalURL("srt://localhost:8890?streamid=publish:test")
|
||||
address, err := conf.UnmarshalURL("srt://localhost:8890?streamid=publish:test")
|
||||
require.NoError(t, err)
|
||||
|
||||
err = conf.Validate()
|
||||
@@ -261,7 +250,7 @@ func TestPathRunOnConnect(t *testing.T) {
|
||||
}()
|
||||
|
||||
var byts []byte
|
||||
byts, err = os.ReadFile(onConnect)
|
||||
byts, err := os.ReadFile(onConnect)
|
||||
require.NoError(t, err)
|
||||
fields := strings.Split(string(byts[:len(byts)-1]), " ")
|
||||
require.Equal(t, connType, fields[0])
|
||||
@@ -279,14 +268,11 @@ func TestPathRunOnConnect(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPathRunOnReady(t *testing.T) {
|
||||
onReady := filepath.Join(os.TempDir(), "on_ready")
|
||||
defer os.Remove(onReady)
|
||||
|
||||
onNotReady := filepath.Join(os.TempDir(), "on_unready")
|
||||
defer os.Remove(onNotReady)
|
||||
onReady := filepath.Join(t.TempDir(), "on_ready")
|
||||
onNotReady := filepath.Join(t.TempDir(), "on_unready")
|
||||
|
||||
func() {
|
||||
p, ok := newInstance(fmt.Sprintf("rtmp: no\n"+
|
||||
p, ok := newInstance(t, fmt.Sprintf("rtmp: no\n"+
|
||||
"hls: no\n"+
|
||||
"webrtc: no\n"+
|
||||
"paths:\n"+
|
||||
@@ -330,24 +316,16 @@ func TestPathRunOnReady(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPathRunOnRead(t *testing.T) {
|
||||
serverCertFpath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
|
||||
serverKeyFpath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
for _, ca := range []string{"rtsp", "rtsps", "rtmp", "rtmps", "srt", "webrtc"} {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
onRead := filepath.Join(os.TempDir(), "on_read")
|
||||
defer os.Remove(onRead)
|
||||
|
||||
onUnread := filepath.Join(os.TempDir(), "on_unread")
|
||||
defer os.Remove(onUnread)
|
||||
onRead := filepath.Join(t.TempDir(), "on_read")
|
||||
onUnread := filepath.Join(t.TempDir(), "on_unread")
|
||||
|
||||
func() {
|
||||
p, ok := newInstance(fmt.Sprintf(
|
||||
p, ok := newInstance(t, fmt.Sprintf(
|
||||
"rtspEncryption: optional\n"+
|
||||
"rtspServerCert: "+serverCertFpath+"\n"+
|
||||
"rtspServerKey: "+serverKeyFpath+"\n"+
|
||||
@@ -366,7 +344,7 @@ func TestPathRunOnRead(t *testing.T) {
|
||||
|
||||
source := gortsplib.Client{}
|
||||
|
||||
err = source.StartRecording(
|
||||
err := source.StartRecording(
|
||||
"rtsp://localhost:8554/test",
|
||||
&description.Session{Medias: []*description.Media{media0}})
|
||||
require.NoError(t, err)
|
||||
@@ -564,7 +542,7 @@ func TestPathRunOnRead(t *testing.T) {
|
||||
}
|
||||
|
||||
var byts []byte
|
||||
byts, err = os.ReadFile(onRead)
|
||||
byts, err := os.ReadFile(onRead)
|
||||
require.NoError(t, err)
|
||||
fields := strings.Split(string(byts[:len(byts)-1]), " ")
|
||||
require.Equal(t, "test", fields[0])
|
||||
@@ -588,18 +566,14 @@ func TestPathRunOnRead(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPathRunOnRecordSegment(t *testing.T) {
|
||||
onRecordSegmentCreate := filepath.Join(os.TempDir(), "on_record_segment_create")
|
||||
defer os.Remove(onRecordSegmentCreate)
|
||||
onRecordSegmentCreate := filepath.Join(t.TempDir(), "on_record_segment_create")
|
||||
onRecordSegmentComplete := filepath.Join(t.TempDir(), "on_record_segment_complete")
|
||||
|
||||
onRecordSegmentComplete := filepath.Join(os.TempDir(), "on_record_segment_complete")
|
||||
defer os.Remove(onRecordSegmentComplete)
|
||||
|
||||
recordDir, err := os.MkdirTemp("", "rtsp-path-record")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(recordDir)
|
||||
recordDir := t.TempDir()
|
||||
var err error
|
||||
|
||||
func() {
|
||||
p, ok := newInstance(fmt.Sprintf("record: yes\n"+
|
||||
p, ok := newInstance(t, fmt.Sprintf("record: yes\n"+
|
||||
"recordPath: %s\n"+
|
||||
"paths:\n"+
|
||||
" test:\n"+
|
||||
@@ -655,8 +629,8 @@ func TestPathRunOnRecordSegment(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPathMaxReaders(t *testing.T) {
|
||||
p, ok := newInstance("paths:\n" +
|
||||
" all_others:\n" +
|
||||
p, ok := newInstance(t, "paths:\n"+
|
||||
" all_others:\n"+
|
||||
" maxReaders: 1\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -700,15 +674,13 @@ func TestPathMaxReaders(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPathRecord(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "rtsp-path-record")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
p, ok := newInstance("api: yes\n" +
|
||||
"record: yes\n" +
|
||||
"recordPath: " + filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f") + "\n" +
|
||||
"paths:\n" +
|
||||
" all_others:\n" +
|
||||
p, ok := newInstance(t, "api: yes\n"+
|
||||
"record: yes\n"+
|
||||
"recordPath: "+filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")+"\n"+
|
||||
"paths:\n"+
|
||||
" all_others:\n"+
|
||||
" record: yes\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -717,7 +689,7 @@ func TestPathRecord(t *testing.T) {
|
||||
|
||||
source := gortsplib.Client{}
|
||||
|
||||
err = source.StartRecording(
|
||||
err := source.StartRecording(
|
||||
"rtsp://localhost:8554/mystream",
|
||||
&description.Session{Medias: []*description.Media{media0}})
|
||||
require.NoError(t, err)
|
||||
@@ -812,7 +784,7 @@ func TestPathFallback(t *testing.T) {
|
||||
" path2:\n"
|
||||
}
|
||||
|
||||
p1, ok := newInstance(cnf)
|
||||
p1, ok := newInstance(t, cnf)
|
||||
require.Equal(t, true, ok)
|
||||
defer p1.Close()
|
||||
|
||||
@@ -880,11 +852,11 @@ func TestPathResolveSource(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
defer strm.Close()
|
||||
|
||||
p, ok := newInstance(
|
||||
"paths:\n" +
|
||||
" '~^test_(.+)$':\n" +
|
||||
" source: rtsp://127.0.0.1:8555/$G1?$MTX_QUERY\n" +
|
||||
" sourceOnDemand: yes\n" +
|
||||
p, ok := newInstance(t,
|
||||
"paths:\n"+
|
||||
" '~^test_(.+)$':\n"+
|
||||
" source: rtsp://127.0.0.1:8555/$G1?$MTX_QUERY\n"+
|
||||
" sourceOnDemand: yes\n"+
|
||||
" 'all':\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -919,7 +891,7 @@ func TestPathOverridePublisher(t *testing.T) {
|
||||
cnf += " overridePublisher: no\n"
|
||||
}
|
||||
|
||||
p, ok := newInstance(cnf)
|
||||
p, ok := newInstance(t, cnf)
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
|
||||
|
||||
@@ -45,9 +45,8 @@ func TestLoggerToFile(t *testing.T) {
|
||||
"structured",
|
||||
} {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
tempFile, err := os.CreateTemp(os.TempDir(), "mtx-logger-")
|
||||
tempFile, err := os.CreateTemp(t.TempDir(), "mtx-logger-")
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tempFile.Name())
|
||||
defer tempFile.Close()
|
||||
|
||||
l := &Logger{
|
||||
|
||||
@@ -3,7 +3,6 @@ package packetdumper
|
||||
import (
|
||||
"io"
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -40,41 +39,33 @@ func startTCPPair(t *testing.T) (client, server net.Conn) {
|
||||
return client, server
|
||||
}
|
||||
|
||||
func cleanupPcapng(t *testing.T, prefix string) {
|
||||
func checkPcapngPresence(t *testing.T, prefix string) {
|
||||
t.Helper()
|
||||
|
||||
matches, err := filepath.Glob(prefix + "_*.pcapng")
|
||||
require.NoError(t, err, "glob for pcapng files")
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, matches, "expected at least one pcapng file to have been created")
|
||||
|
||||
for _, f := range matches {
|
||||
require.NoError(t, os.Remove(f), "removing pcapng file %s", f)
|
||||
}
|
||||
}
|
||||
|
||||
func TestConnInitialize_CreatesFile(t *testing.T) {
|
||||
client, server := startTCPPair(t)
|
||||
defer server.Close()
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &conn{Prefix: prefix, Conn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapng(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close()
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestConnWrite(t *testing.T) {
|
||||
client, server := startTCPPair(t)
|
||||
defer server.Close()
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &conn{Prefix: prefix, Conn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapng(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
|
||||
n, err := c.Write([]byte("hello world"))
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 11, n)
|
||||
@@ -83,19 +74,20 @@ func TestConnWrite(t *testing.T) {
|
||||
_, err = io.ReadFull(server, buf)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, []byte("hello world"), buf)
|
||||
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close()
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestConnRead(t *testing.T) {
|
||||
client, server := startTCPPair(t)
|
||||
defer server.Close()
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &conn{Prefix: prefix, Conn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapng(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
|
||||
_, err := server.Write([]byte("incoming data"))
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -103,19 +95,20 @@ func TestConnRead(t *testing.T) {
|
||||
n, err := c.Read(buf)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, []byte("incoming data"), buf[:n])
|
||||
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close()
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestConnServerSide(t *testing.T) {
|
||||
client, server := startTCPPair(t)
|
||||
defer client.Close()
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &conn{Prefix: prefix, Conn: server, ServerSide: true}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapng(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
|
||||
n, err := c.Write([]byte("server response"))
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 15, n)
|
||||
@@ -124,19 +117,20 @@ func TestConnServerSide(t *testing.T) {
|
||||
_, err = io.ReadFull(client, buf)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, []byte("server response"), buf)
|
||||
|
||||
c.Close() //nolint:errcheck
|
||||
client.Close()
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestConnMultipleWriteRead(t *testing.T) {
|
||||
client, server := startTCPPair(t)
|
||||
defer server.Close()
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &conn{Prefix: prefix, Conn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapng(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
|
||||
for _, msg := range []string{"foo", "bar", "baz"} {
|
||||
n, err := c.Write([]byte(msg))
|
||||
require.NoError(t, err)
|
||||
@@ -157,37 +151,43 @@ func TestConnMultipleWriteRead(t *testing.T) {
|
||||
_, err = io.ReadFull(c, readBuf)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, []byte("abcdefghij"), readBuf)
|
||||
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close()
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestConnCloseIdempotent(t *testing.T) {
|
||||
client, server := startTCPPair(t)
|
||||
defer server.Close()
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &conn{Prefix: prefix, Conn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapng(t, prefix)
|
||||
c.Close() //nolint:errcheck
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close()
|
||||
|
||||
defer c.Close() //nolint:errcheck
|
||||
defer c.Close() //nolint:errcheck
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestConnDelegatesAddrMethods(t *testing.T) {
|
||||
client, server := startTCPPair(t)
|
||||
defer server.Close()
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &conn{Prefix: prefix, Conn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapng(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
|
||||
require.Equal(t, client.LocalAddr(), c.LocalAddr())
|
||||
require.Equal(t, client.RemoteAddr(), c.RemoteAddr())
|
||||
|
||||
require.NoError(t, c.SetDeadline(time.Now().Add(time.Second)))
|
||||
require.NoError(t, c.SetReadDeadline(time.Now().Add(time.Second)))
|
||||
require.NoError(t, c.SetWriteDeadline(time.Now().Add(time.Second)))
|
||||
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close()
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package packetdumper
|
||||
|
||||
import (
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -34,41 +33,26 @@ func startUDPPair(t *testing.T) (client, server *net.UDPConn) {
|
||||
return client, server
|
||||
}
|
||||
|
||||
func cleanupPcapngPacket(t *testing.T, prefix string) {
|
||||
t.Helper()
|
||||
|
||||
matches, err := filepath.Glob(prefix + "_*.pcapng")
|
||||
require.NoError(t, err, "glob for pcapng files")
|
||||
require.NotEmpty(t, matches, "expected at least one pcapng file to have been created")
|
||||
|
||||
for _, f := range matches {
|
||||
require.NoError(t, os.Remove(f), "removing pcapng file %s", f)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPacketConnInitialize_CreatesFile(t *testing.T) {
|
||||
client, server := startUDPPair(t)
|
||||
defer server.Close() //nolint:errcheck
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &packetConn{Prefix: prefix, PacketConn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapngPacket(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close() //nolint:errcheck
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestPacketConnWriteTo(t *testing.T) {
|
||||
client, server := startUDPPair(t)
|
||||
defer server.Close() //nolint:errcheck
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &packetConn{Prefix: prefix, PacketConn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapngPacket(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
|
||||
n, err := c.WriteTo([]byte("hello world"), server.LocalAddr())
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 11, n)
|
||||
@@ -78,19 +62,20 @@ func TestPacketConnWriteTo(t *testing.T) {
|
||||
rn, _, err := server.ReadFromUDP(buf)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, []byte("hello world"), buf[:rn])
|
||||
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close() //nolint:errcheck
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestPacketConnReadFrom(t *testing.T) {
|
||||
client, server := startUDPPair(t)
|
||||
defer server.Close() //nolint:errcheck
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &packetConn{Prefix: prefix, PacketConn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapngPacket(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
|
||||
_, err := server.WriteTo([]byte("incoming data"), client.LocalAddr())
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -100,19 +85,20 @@ func TestPacketConnReadFrom(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, []byte("incoming data"), buf[:n])
|
||||
require.NotNil(t, addr)
|
||||
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close() //nolint:errcheck
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestPacketConnMultipleWriteRead(t *testing.T) {
|
||||
client, server := startUDPPair(t)
|
||||
defer server.Close() //nolint:errcheck
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &packetConn{Prefix: prefix, PacketConn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapngPacket(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
|
||||
serverAddr := server.LocalAddr()
|
||||
for _, msg := range []string{"foo", "bar", "baz"} {
|
||||
n, err := c.WriteTo([]byte(msg), serverAddr)
|
||||
@@ -143,51 +129,53 @@ func TestPacketConnMultipleWriteRead(t *testing.T) {
|
||||
readReceived = append(readReceived, buf[:n]...)
|
||||
}
|
||||
require.Equal(t, []byte("abcdefghij"), readReceived)
|
||||
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close() //nolint:errcheck
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestPacketConnCloseIdempotent(t *testing.T) {
|
||||
client, server := startUDPPair(t)
|
||||
defer server.Close() //nolint:errcheck
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &packetConn{Prefix: prefix, PacketConn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapngPacket(t, prefix)
|
||||
c.Close() //nolint:errcheck
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close() //nolint:errcheck
|
||||
|
||||
defer c.Close() //nolint:errcheck
|
||||
defer c.Close() //nolint:errcheck
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestPacketConnDelegatesAddrMethods(t *testing.T) {
|
||||
client, server := startUDPPair(t)
|
||||
defer server.Close() //nolint:errcheck
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &packetConn{Prefix: prefix, PacketConn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapngPacket(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
|
||||
require.Equal(t, client.LocalAddr(), c.LocalAddr())
|
||||
|
||||
require.NoError(t, c.SetDeadline(time.Now().Add(time.Second)))
|
||||
require.NoError(t, c.SetReadDeadline(time.Now().Add(time.Second)))
|
||||
require.NoError(t, c.SetWriteDeadline(time.Now().Add(time.Second)))
|
||||
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close() //nolint:errcheck
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
func TestPacketConnReadFromRecordsSource(t *testing.T) {
|
||||
client, server := startUDPPair(t)
|
||||
defer server.Close() //nolint:errcheck
|
||||
|
||||
prefix := filepath.Join(t.TempDir(), "capture")
|
||||
c := &packetConn{Prefix: prefix, PacketConn: client}
|
||||
require.NoError(t, c.Initialize())
|
||||
|
||||
defer cleanupPcapngPacket(t, prefix)
|
||||
defer c.Close() //nolint:errcheck
|
||||
|
||||
_, err := server.WriteTo([]byte("ping"), client.LocalAddr())
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -199,4 +187,9 @@ func TestPacketConnReadFromRecordsSource(t *testing.T) {
|
||||
|
||||
// The reported source address should match the server's address.
|
||||
require.Equal(t, server.LocalAddr().String(), addr.String())
|
||||
|
||||
c.Close() //nolint:errcheck
|
||||
server.Close() //nolint:errcheck
|
||||
|
||||
checkPcapngPresence(t, prefix)
|
||||
}
|
||||
|
||||
@@ -239,11 +239,9 @@ func TestOnGet(t *testing.T) {
|
||||
"mtxi",
|
||||
} {
|
||||
t.Run(format+"_"+mode, func(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
init := fmp4.Init{
|
||||
@@ -700,11 +698,9 @@ func TestOnGet(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestOnGetDifferentInit(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
writeSegment1(t, filepath.Join(dir, "mypath", "2008-11-07_11-22-00-500000.mp4"))
|
||||
@@ -782,11 +778,9 @@ func TestOnGetDifferentInit(t *testing.T) {
|
||||
func TestOnGetInMiddleOfLastSample(t *testing.T) {
|
||||
for _, format := range []string{"fmp4", "mp4"} {
|
||||
t.Run(format, func(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
init := fmp4.Init{
|
||||
@@ -914,11 +908,9 @@ func TestOnGetBetweenSegments(t *testing.T) {
|
||||
"idr after",
|
||||
} {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
init := fmp4.Init{
|
||||
|
||||
@@ -31,11 +31,9 @@ func TestOnList(t *testing.T) {
|
||||
"start before first",
|
||||
} {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
switch ca {
|
||||
@@ -289,11 +287,9 @@ func TestOnListInvalidPath(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestOnListCachedDuration(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
func() {
|
||||
@@ -371,11 +367,9 @@ func TestOnListCachedDuration(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestOnListXForwardedProto(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, "mypath"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
writeSegment1(t, filepath.Join(dir, "mypath", "2008-11-07_11-22-00-500000.mp4"))
|
||||
|
||||
@@ -54,11 +54,10 @@ func writeBenchInit(f io.WriteSeeker) {
|
||||
}
|
||||
|
||||
func BenchmarkFMP4ReadHeader(b *testing.B) {
|
||||
f, err := os.CreateTemp(os.TempDir(), "mediamtx-playback-fmp4-")
|
||||
f, err := os.CreateTemp(b.TempDir(), "mediamtx-playback-fmp4-")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer os.Remove(f.Name())
|
||||
|
||||
writeBenchInit(f)
|
||||
f.Close()
|
||||
|
||||
@@ -10,10 +10,9 @@ import (
|
||||
)
|
||||
|
||||
func TestListen(t *testing.T) {
|
||||
socket, err := os.CreateTemp(os.TempDir(), "mtx-unix-")
|
||||
socket, err := os.CreateTemp(t.TempDir(), "mtx-unix-")
|
||||
require.NoError(t, err)
|
||||
socket.Close()
|
||||
defer os.Remove(socket.Name())
|
||||
|
||||
l := &Listener{
|
||||
Path: socket.Name(),
|
||||
|
||||
@@ -17,13 +17,11 @@ func TestCleaner(t *testing.T) {
|
||||
return time.Date(2009, 5, 20, 22, 15, 25, 427000, time.Local)
|
||||
}
|
||||
|
||||
dir, err := os.MkdirTemp("", "mediamtx-cleaner")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
const specialChars = "_-+*?^$()[]{}|"
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, specialChars+"_mypath"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, specialChars+"_mypath"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = os.WriteFile(filepath.Join(dir, specialChars+"_mypath", "2008-05-20_22-15-25-000125.mp4"), []byte{1}, 0o644)
|
||||
@@ -61,11 +59,9 @@ func TestCleanerMultipleEntriesSamePath(t *testing.T) {
|
||||
return time.Date(2009, 5, 20, 22, 15, 25, 427000, time.Local)
|
||||
}
|
||||
|
||||
dir, err := os.MkdirTemp("", "mediamtx-cleaner")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "path1"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, "path1"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "path2"), 0o755)
|
||||
|
||||
@@ -146,9 +146,7 @@ func TestRecorder(t *testing.T) {
|
||||
err = subStream.Initialize()
|
||||
require.NoError(t, err)
|
||||
|
||||
dir, err := os.MkdirTemp("", "mediamtx-agent")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
recordPath := filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")
|
||||
|
||||
@@ -441,9 +439,7 @@ func TestRecorderFMP4NegativeInitialDTS(t *testing.T) {
|
||||
err = subStream.Initialize()
|
||||
require.NoError(t, err)
|
||||
|
||||
dir, err := os.MkdirTemp("", "mediamtx-agent")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
recordPath := filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")
|
||||
|
||||
@@ -536,9 +532,7 @@ func TestRecorderFMP4NegativeDTSDiff(t *testing.T) {
|
||||
err = subStream.Initialize()
|
||||
require.NoError(t, err)
|
||||
|
||||
dir, err := os.MkdirTemp("", "mediamtx-agent")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
recordPath := filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")
|
||||
|
||||
@@ -636,9 +630,7 @@ func TestRecorderSkipTracksPartial(t *testing.T) {
|
||||
err = subStream.Initialize()
|
||||
require.NoError(t, err)
|
||||
|
||||
dir, err := os.MkdirTemp("", "mediamtx-agent")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
recordPath := filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")
|
||||
|
||||
@@ -704,9 +696,7 @@ func TestRecorderSkipTracksFull(t *testing.T) {
|
||||
err = subStream.Initialize()
|
||||
require.NoError(t, err)
|
||||
|
||||
dir, err := os.MkdirTemp("", "mediamtx-agent")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
recordPath := filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")
|
||||
|
||||
@@ -774,9 +764,7 @@ func TestRecorderFMP4SegmentSwitch(t *testing.T) {
|
||||
err = subStream.Initialize()
|
||||
require.NoError(t, err)
|
||||
|
||||
dir, err := os.MkdirTemp("", "mediamtx-agent")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
n := 0
|
||||
|
||||
@@ -903,9 +891,7 @@ func TestRecorderTimeDriftDetector(t *testing.T) {
|
||||
err = subStream.Initialize()
|
||||
require.NoError(t, err)
|
||||
|
||||
dir, err := os.MkdirTemp("", "mediamtx-agent")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
recordPath := filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f")
|
||||
|
||||
|
||||
@@ -18,11 +18,9 @@ func ptrOf[T any](v T) *T {
|
||||
}
|
||||
|
||||
func TestFindAllPathsWithSegments(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-recordstore")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "path1"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, "path1"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "path2"), 0o755)
|
||||
@@ -51,11 +49,9 @@ func TestFindAllPathsWithSegments(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFindAllPathsWithSegmentsInvalidPath(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-recordstore")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.WriteFile(filepath.Join(dir, "_2015-05-19_22-15-25-000427.mp4"), []byte{1}, 0o644)
|
||||
err := os.WriteFile(filepath.Join(dir, "_2015-05-19_22-15-25-000427.mp4"), []byte{1}, 0o644)
|
||||
require.NoError(t, err)
|
||||
|
||||
paths := FindAllPathsWithSegments(map[string]*conf.Path{
|
||||
@@ -76,11 +72,9 @@ func TestFindSegments(t *testing.T) {
|
||||
"start before first",
|
||||
} {
|
||||
t.Run(ca, func(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-recordstore")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "path1"), 0o755)
|
||||
err := os.Mkdir(filepath.Join(dir, "path1"), 0o755)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = os.Mkdir(filepath.Join(dir, "path2"), 0o755)
|
||||
|
||||
@@ -488,9 +488,7 @@ func TestServerRead(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestServerDirectory(t *testing.T) {
|
||||
dir, err := os.MkdirTemp("", "mediamtx-playback")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
dir := t.TempDir()
|
||||
|
||||
desc := &description.Session{Medias: []*description.Media{test.MediaH264}}
|
||||
|
||||
@@ -500,7 +498,7 @@ func TestServerDirectory(t *testing.T) {
|
||||
RTPMaxPayloadSize: 1450,
|
||||
Parent: test.NilLogger,
|
||||
}
|
||||
err = strm.Initialize()
|
||||
err := strm.Initialize()
|
||||
require.NoError(t, err)
|
||||
|
||||
subStream := &stream.SubStream{
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"net/url"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -50,14 +49,8 @@ func TestServerPublish(t *testing.T) {
|
||||
var serverKeyFpath string
|
||||
|
||||
if encrypt == "tls" {
|
||||
var err error
|
||||
serverCertFpath, err = test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
|
||||
serverKeyFpath, err = test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
serverCertFpath = test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath = test.CreateTempFile(t, test.TLSCertKey)
|
||||
}
|
||||
|
||||
var strm *stream.Stream
|
||||
@@ -225,14 +218,8 @@ func TestServerRead(t *testing.T) {
|
||||
var serverKeyFpath string
|
||||
|
||||
if encrypt == "tls" {
|
||||
var err error
|
||||
serverCertFpath, err = test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
|
||||
serverKeyFpath, err = test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
serverCertFpath = test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath = test.CreateTempFile(t, test.TLSCertKey)
|
||||
}
|
||||
desc := &description.Session{Medias: []*description.Media{test.MediaH264}}
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ func TestSourceUnixSocket(t *testing.T) {
|
||||
if ca == "relative" {
|
||||
pa = "test_mpegts.sock"
|
||||
} else {
|
||||
pa = filepath.Join(os.TempDir(), "test_mpegts.sock")
|
||||
pa = filepath.Join(t.TempDir(), "test_mpegts.sock")
|
||||
}
|
||||
|
||||
func() {
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"net"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -34,16 +33,11 @@ func TestSource(t *testing.T) {
|
||||
ln, err = net.Listen("tcp", "127.0.0.1:1935")
|
||||
require.NoError(t, err)
|
||||
} else {
|
||||
serverCertFpath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
|
||||
serverKeyFpath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
var cert tls.Certificate
|
||||
cert, err = tls.LoadX509KeyPair(serverCertFpath, serverKeyFpath)
|
||||
cert, err := tls.LoadX509KeyPair(serverCertFpath, serverKeyFpath)
|
||||
require.NoError(t, err)
|
||||
|
||||
ln, err = tls.Listen("tcp", "127.0.0.1:1936", &tls.Config{Certificates: []tls.Certificate{cert}})
|
||||
|
||||
@@ -159,7 +159,7 @@ func TestSourceUnixSocket(t *testing.T) {
|
||||
if ca == "relative" {
|
||||
pa = "test_rtp.sock"
|
||||
} else {
|
||||
pa = filepath.Join(os.TempDir(), "test_rtp.sock")
|
||||
pa = filepath.Join(t.TempDir(), "test_rtp.sock")
|
||||
}
|
||||
|
||||
func() {
|
||||
|
||||
@@ -3,7 +3,6 @@ package rtsp
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -131,15 +130,8 @@ func TestSource(t *testing.T) {
|
||||
s.UDPRTCPAddress = "127.0.0.1:8003"
|
||||
|
||||
case "rtsps", "rtsps+http", "rtsps+ws":
|
||||
var serverCertFpath string
|
||||
serverCertFpath, err = test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
|
||||
var serverKeyFpath string
|
||||
serverKeyFpath, err = test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
var cert tls.Certificate
|
||||
cert, err = tls.LoadX509KeyPair(serverCertFpath, serverKeyFpath)
|
||||
|
||||
@@ -148,9 +148,8 @@ func TestStreamAlwaysAvailable(t *testing.T) {
|
||||
{Codec: conf.CodecLPCM, SampleRate: 48000, ChannelCount: 2},
|
||||
}
|
||||
} else {
|
||||
tmpf, err := os.CreateTemp(os.TempDir(), "rtsp-")
|
||||
tmpf, err := os.CreateTemp(t.TempDir(), "rtsp-")
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(tmpf.Name())
|
||||
|
||||
pmp4 := &pmp4.Presentation{
|
||||
Tracks: []*pmp4.Track{
|
||||
|
||||
+11
-10
@@ -1,19 +1,20 @@
|
||||
package test
|
||||
|
||||
import "os"
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// CreateTempFile creates a temporary file with given content.
|
||||
func CreateTempFile(byts []byte) (string, error) {
|
||||
tmpf, err := os.CreateTemp(os.TempDir(), "rtsp-")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
func CreateTempFile(t *testing.T, byts []byte) string {
|
||||
tmpf, err := os.CreateTemp(t.TempDir(), "rtsp-")
|
||||
require.NoError(t, err)
|
||||
defer tmpf.Close()
|
||||
|
||||
_, err = tmpf.Write(byts)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
require.NoError(t, err)
|
||||
|
||||
return tmpf.Name(), nil
|
||||
return tmpf.Name()
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
)
|
||||
|
||||
func TestHLSServerRead(t *testing.T) {
|
||||
p, ok := newInstance("paths:\n" +
|
||||
p, ok := newInstance(t, "paths:\n"+
|
||||
" all_others:\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -52,7 +52,7 @@ func TestHLSServerAuth(t *testing.T) {
|
||||
" readPass: testpass\n" +
|
||||
" readIPs: [127.0.0.0/16]\n"
|
||||
|
||||
p, ok := newInstance(cnf)
|
||||
p, ok := newInstance(t, cnf)
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
package teste2e
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -42,11 +41,11 @@ func TestRTSPServerPublishRead(t *testing.T) {
|
||||
proto = "rtsp"
|
||||
port = "8554"
|
||||
|
||||
p, ok := newInstance("rtmp: no\n" +
|
||||
"hls: no\n" +
|
||||
"webrtc: no\n" +
|
||||
"readTimeout: 20s\n" +
|
||||
"paths:\n" +
|
||||
p, ok := newInstance(t, "rtmp: no\n"+
|
||||
"hls: no\n"+
|
||||
"webrtc: no\n"+
|
||||
"readTimeout: 20s\n"+
|
||||
"paths:\n"+
|
||||
" all_others:\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -54,23 +53,18 @@ func TestRTSPServerPublishRead(t *testing.T) {
|
||||
proto = "rtsps"
|
||||
port = "8322"
|
||||
|
||||
serverCertFpath, err := test.CreateTempFile(test.TLSCertPub)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverCertFpath)
|
||||
serverCertFpath := test.CreateTempFile(t, test.TLSCertPub)
|
||||
serverKeyFpath := test.CreateTempFile(t, test.TLSCertKey)
|
||||
|
||||
serverKeyFpath, err := test.CreateTempFile(test.TLSCertKey)
|
||||
require.NoError(t, err)
|
||||
defer os.Remove(serverKeyFpath)
|
||||
|
||||
p, ok := newInstance("rtmp: no\n" +
|
||||
"hls: no\n" +
|
||||
"webrtc: no\n" +
|
||||
"readTimeout: 20s\n" +
|
||||
"rtspTransports: [tcp]\n" +
|
||||
"rtspEncryption: \"yes\"\n" +
|
||||
"rtspServerCert: " + serverCertFpath + "\n" +
|
||||
"rtspServerKey: " + serverKeyFpath + "\n" +
|
||||
"paths:\n" +
|
||||
p, ok := newInstance(t, "rtmp: no\n"+
|
||||
"hls: no\n"+
|
||||
"webrtc: no\n"+
|
||||
"readTimeout: 20s\n"+
|
||||
"rtspTransports: [tcp]\n"+
|
||||
"rtspEncryption: \"yes\"\n"+
|
||||
"rtspServerCert: "+serverCertFpath+"\n"+
|
||||
"rtspServerKey: "+serverKeyFpath+"\n"+
|
||||
"paths:\n"+
|
||||
" all_others:\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p.Close()
|
||||
@@ -199,13 +193,13 @@ func TestRTSPServerPublishRead(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRTSPServerRedirect(t *testing.T) {
|
||||
p1, ok := newInstance("rtmp: no\n" +
|
||||
"hls: no\n" +
|
||||
"webrtc: no\n" +
|
||||
"paths:\n" +
|
||||
" path1:\n" +
|
||||
" source: redirect\n" +
|
||||
" sourceRedirect: rtsp://localhost:8554/path2\n" +
|
||||
p1, ok := newInstance(t, "rtmp: no\n"+
|
||||
"hls: no\n"+
|
||||
"webrtc: no\n"+
|
||||
"paths:\n"+
|
||||
" path1:\n"+
|
||||
" source: redirect\n"+
|
||||
" sourceRedirect: rtsp://localhost:8554/path2\n"+
|
||||
" path2:\n")
|
||||
require.Equal(t, true, ok)
|
||||
defer p1.Close()
|
||||
|
||||
@@ -6,22 +6,19 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/bluenviron/mediamtx/internal/core"
|
||||
"github.com/bluenviron/mediamtx/internal/test"
|
||||
)
|
||||
|
||||
func newInstance(conf string) (*core.Core, bool) {
|
||||
func newInstance(t *testing.T, conf string) (*core.Core, bool) {
|
||||
if conf == "" {
|
||||
return core.New([]string{})
|
||||
}
|
||||
|
||||
tmpf, err := test.CreateTempFile([]byte(conf))
|
||||
if err != nil {
|
||||
return nil, false
|
||||
}
|
||||
defer os.Remove(tmpf)
|
||||
tmpf := test.CreateTempFile(t, []byte(conf))
|
||||
|
||||
return core.New([]string{tmpf})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user