mirror of
https://github.com/bluenviron/mediamtx.git
synced 2025-12-20 02:00:05 -08:00
143 lines
3.8 KiB
Go
143 lines
3.8 KiB
Go
package recordstore
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"regexp"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/bluenviron/mediamtx/internal/conf"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func ptrOf[T any](v T) *T {
|
|
return &v
|
|
}
|
|
|
|
func TestFindAllPathsWithSegments(t *testing.T) {
|
|
dir, err := os.MkdirTemp("", "mediamtx-recordstore")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(dir)
|
|
|
|
err = os.Mkdir(filepath.Join(dir, "path1"), 0o755)
|
|
require.NoError(t, err)
|
|
|
|
err = os.Mkdir(filepath.Join(dir, "path2"), 0o755)
|
|
require.NoError(t, err)
|
|
|
|
err = os.WriteFile(filepath.Join(dir, "path1", "2015-05-19_22-15-25-000427.mp4"), []byte{1}, 0o644)
|
|
require.NoError(t, err)
|
|
|
|
err = os.WriteFile(filepath.Join(dir, "path2", "2015-07-19_22-15-25-000427.mp4"), []byte{1}, 0o644)
|
|
require.NoError(t, err)
|
|
|
|
paths := FindAllPathsWithSegments(map[string]*conf.Path{
|
|
"~^.*$": {
|
|
Name: "~^.*$",
|
|
Regexp: regexp.MustCompile("^.*$"),
|
|
RecordPath: filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f"),
|
|
RecordFormat: conf.RecordFormatFMP4,
|
|
},
|
|
"path2": {
|
|
Name: "path2",
|
|
RecordPath: filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f"),
|
|
RecordFormat: conf.RecordFormatFMP4,
|
|
},
|
|
})
|
|
require.Equal(t, []string{"path1", "path2"}, paths)
|
|
}
|
|
|
|
func TestFindAllPathsWithSegmentsInvalidPath(t *testing.T) {
|
|
dir, err := os.MkdirTemp("", "mediamtx-recordstore")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(dir)
|
|
|
|
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{
|
|
"~^.*$": {
|
|
Name: "~^.*$",
|
|
Regexp: regexp.MustCompile("^.*$"),
|
|
RecordPath: filepath.Join(dir, "%path_%Y-%m-%d_%H-%M-%S-%f"),
|
|
RecordFormat: conf.RecordFormatFMP4,
|
|
},
|
|
})
|
|
require.Equal(t, []string{}, paths)
|
|
}
|
|
|
|
func TestFindSegments(t *testing.T) {
|
|
for _, ca := range []string{
|
|
"no filtering",
|
|
"filtering",
|
|
"start before first",
|
|
} {
|
|
t.Run(ca, func(t *testing.T) {
|
|
dir, err := os.MkdirTemp("", "mediamtx-recordstore")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(dir)
|
|
|
|
err = os.Mkdir(filepath.Join(dir, "path1"), 0o755)
|
|
require.NoError(t, err)
|
|
|
|
err = os.Mkdir(filepath.Join(dir, "path2"), 0o755)
|
|
require.NoError(t, err)
|
|
|
|
err = os.WriteFile(filepath.Join(dir, "path1", "2015-05-19_22-15-25-000427.mp4"), []byte{1}, 0o644)
|
|
require.NoError(t, err)
|
|
|
|
err = os.WriteFile(filepath.Join(dir, "path1", "2016-05-19_22-15-25-000427.mp4"), []byte{1}, 0o644)
|
|
require.NoError(t, err)
|
|
|
|
var start *time.Time
|
|
var end *time.Time
|
|
|
|
switch ca {
|
|
case "no filtering":
|
|
|
|
case "filtering":
|
|
start = ptrOf(time.Date(2015, 5, 19, 22, 18, 25, 427000, time.Local))
|
|
end = ptrOf(start.Add(60 * time.Minute))
|
|
|
|
case "start before first":
|
|
start = ptrOf(time.Date(2014, 5, 19, 22, 18, 25, 427000, time.Local))
|
|
}
|
|
|
|
segments, err := FindSegments(
|
|
&conf.Path{
|
|
Name: "~^.*$",
|
|
Regexp: regexp.MustCompile("^.*$"),
|
|
RecordPath: filepath.Join(dir, "%path/%Y-%m-%d_%H-%M-%S-%f"),
|
|
RecordFormat: conf.RecordFormatFMP4,
|
|
},
|
|
"path1",
|
|
start,
|
|
end,
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
switch ca {
|
|
case "no filtering", "start before first":
|
|
require.Equal(t, []*Segment{
|
|
{
|
|
Fpath: filepath.Join(dir, "path1", "2015-05-19_22-15-25-000427.mp4"),
|
|
Start: time.Date(2015, 5, 19, 22, 15, 25, 427000, time.Local),
|
|
},
|
|
{
|
|
Fpath: filepath.Join(dir, "path1", "2016-05-19_22-15-25-000427.mp4"),
|
|
Start: time.Date(2016, 5, 19, 22, 15, 25, 427000, time.Local),
|
|
},
|
|
}, segments)
|
|
|
|
case "filtering":
|
|
require.Equal(t, []*Segment{
|
|
{
|
|
Fpath: filepath.Join(dir, "path1", "2015-05-19_22-15-25-000427.mp4"),
|
|
Start: time.Date(2015, 5, 19, 22, 15, 25, 427000, time.Local),
|
|
},
|
|
}, segments)
|
|
}
|
|
})
|
|
}
|
|
}
|