tests: use testing.T.TempDir rather than os.TempDir (#5709)

This commit is contained in:
Alessandro Ros
2026-04-29 22:47:47 +02:00
committed by GitHub
parent 9a44fd7eaa
commit 66a67188fe
31 changed files with 324 additions and 523 deletions
+10 -20
View File
@@ -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()
+1 -4
View File
@@ -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)
+2 -7
View File
@@ -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
View File
@@ -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)
+9 -12
View File
@@ -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
View File
@@ -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
+5 -11
View File
@@ -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)
+14 -20
View File
@@ -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()
+3 -3
View File
@@ -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
View File
@@ -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()
+1 -2
View File
@@ -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{
+35 -35
View File
@@ -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)
}
+33 -40
View File
@@ -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)
}
+8 -16
View File
@@ -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{
+6 -12
View File
@@ -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"))
+1 -2
View File
@@ -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()
+1 -2
View File
@@ -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(),
+4 -8
View File
@@ -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)
+7 -21
View File
@@ -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")
+6 -12
View File
@@ -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)
+2 -4
View File
@@ -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 -17
View File
@@ -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}}
+1 -1
View File
@@ -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() {
+3 -9
View File
@@ -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}})
+1 -1
View File
@@ -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() {
+2 -10
View File
@@ -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
View File
@@ -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()
}
+2 -2
View File
@@ -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()
+23 -29
View File
@@ -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()
+3 -6
View File
@@ -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})
}