mirror of
https://github.com/datarhei/core.git
synced 2025-10-06 00:17:07 +08:00
113 lines
2.1 KiB
Go
113 lines
2.1 KiB
Go
package session
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"net/url"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/datarhei/core/v16/mem"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestHLSSegmentReader(t *testing.T) {
|
|
data, err := os.ReadFile("./fixtures/segments.txt")
|
|
require.NoError(t, err)
|
|
|
|
r := bytes.NewReader(data)
|
|
|
|
br := &segmentReader{
|
|
reader: io.NopCloser(r),
|
|
buffer: &bytes.Buffer{},
|
|
}
|
|
|
|
_, err = io.ReadAll(br)
|
|
require.NoError(t, err)
|
|
|
|
segments := br.getSegments("/foobar")
|
|
require.Equal(t, []string{
|
|
"/foobar/test_0_0_0303.ts",
|
|
"/foobar/test_0_0_0304.ts",
|
|
"/foobar/test_0_0_0305.ts",
|
|
"/foobar/test_0_0_0306.ts",
|
|
"/foobar/test_0_0_0307.ts",
|
|
"/foobar/test_0_0_0308.ts",
|
|
"/foobar/test_0_0_0309.ts",
|
|
"/foobar/test_0_0_0310.ts",
|
|
}, segments)
|
|
}
|
|
|
|
func BenchmarkHLSSegmentReader(b *testing.B) {
|
|
pool := mem.NewBufferPool()
|
|
|
|
data, err := os.ReadFile("./fixtures/segments.txt")
|
|
require.NoError(b, err)
|
|
|
|
rd := bytes.NewReader(data)
|
|
r := io.NopCloser(rd)
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
rd.Reset(data)
|
|
br := &segmentReader{
|
|
reader: io.NopCloser(r),
|
|
buffer: pool.Get(),
|
|
}
|
|
|
|
_, err := io.ReadAll(br)
|
|
require.NoError(b, err)
|
|
|
|
pool.Put(br.buffer)
|
|
}
|
|
}
|
|
|
|
func TestHLSRewrite(t *testing.T) {
|
|
data, err := os.ReadFile("./fixtures/segments.txt")
|
|
require.NoError(t, err)
|
|
|
|
br := &sessionRewriter{
|
|
buffer: &bytes.Buffer{},
|
|
}
|
|
|
|
_, err = br.Write(data)
|
|
require.NoError(t, err)
|
|
|
|
u, err := url.Parse("http://example.com/test.m3u8")
|
|
require.NoError(t, err)
|
|
|
|
buffer := &bytes.Buffer{}
|
|
|
|
br.rewriteHLS("oT5GV8eWBbRAh4aib5egoK", u, buffer)
|
|
|
|
data, err = os.ReadFile("./fixtures/segments_with_session.txt")
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, data, buffer.Bytes())
|
|
}
|
|
|
|
func BenchmarkHLSRewrite(b *testing.B) {
|
|
pool := mem.NewBufferPool()
|
|
|
|
data, err := os.ReadFile("./fixtures/segments.txt")
|
|
require.NoError(b, err)
|
|
|
|
u, err := url.Parse("http://example.com/test.m3u8")
|
|
require.NoError(b, err)
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
br := &sessionRewriter{
|
|
buffer: pool.Get(),
|
|
}
|
|
|
|
_, err = br.Write(data)
|
|
require.NoError(b, err)
|
|
|
|
buffer := pool.Get()
|
|
|
|
br.rewriteHLS("oT5GV8eWBbRAh4aib5egoK", u, buffer)
|
|
|
|
pool.Put(br.buffer)
|
|
pool.Put(buffer)
|
|
}
|
|
}
|