m3u8d/m3u8_test.go

71 lines
1.4 KiB
Go

package m3u8d
import (
"encoding/hex"
"strconv"
"strings"
"testing"
)
func TestM3u8Parse(t *testing.T) {
info := M3u8Parse(`#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="/20230502/xthms/2000kb/hls/key.key"
`)
part := info.GetPart("#EXT-X-KEY")
if part.KeyValue["METHOD"] != EncryptMethod_AES128 {
panic("method")
}
if part.KeyValue["URI"] != "/20230502/xthms/2000kb/hls/key.key" {
panic("uri")
}
}
func TestGetFileNameFromUrl(t *testing.T) {
{
part := M3u8Parse(`#EXT-X-KEY:IV=0x10c27a9e3fa363dfe4c44b59b67304b3`).GetPart("#EXT-X-KEY")
iv, err := hex.DecodeString(strings.TrimPrefix(part.KeyValue["IV"], "0x"))
checkErr(err)
if len(iv) != 16 {
panic("iv " + strconv.Quote(string(iv)))
}
}
{
part := M3u8Parse(`#EXT-X-KEY:nothing`).GetPart("#EXT-X-KEY")
iv, err := hex.DecodeString(strings.TrimPrefix(part.KeyValue["IV"], "0x"))
checkErr(err)
if len(iv) != 0 {
panic("iv " + strconv.Quote(string(iv)))
}
}
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
func TestM3u8Parse2(t *testing.T) {
seq1 := parseBeginSeq([]byte(`#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0`))
if seq1 != 0 {
panic(seq1)
}
seq2 := parseBeginSeq([]byte(`#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:2`))
if seq2 != 2 {
panic(seq2)
}
}