chore: establish local platform baseline
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
package media
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNormalizeManifestIsDeterministic(t *testing.T) {
|
||||
first := []SegmentDeclaration{
|
||||
{Track: "far", SequenceNo: 2, Codec: "wav_pcm_s16le", ContentType: "audio/wav", DurationMS: 5000, ExpectedSize: 1200, ExpectedDigest: strings.Repeat("b", 64)},
|
||||
{Track: "near", SequenceNo: 1, Codec: "wav_pcm_s16le", ContentType: "audio/wav", DurationMS: 5000, ExpectedSize: 2400, ExpectedDigest: strings.Repeat("a", 64)},
|
||||
}
|
||||
second := []SegmentDeclaration{first[1], first[0]}
|
||||
digestA, normalized, total, err := normalizeManifest(first)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
digestB, _, _, err := normalizeManifest(second)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if digestA != digestB {
|
||||
t.Fatalf("manifest digest changed with input order: %s != %s", digestA, digestB)
|
||||
}
|
||||
if normalized[0].Track != "far" || normalized[1].Track != "near" {
|
||||
t.Fatalf("manifest was not sorted: %#v", normalized)
|
||||
}
|
||||
if total != 3600 {
|
||||
t.Fatalf("total = %d, want 3600", total)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeManifestRejectsInvalidDeclarations(t *testing.T) {
|
||||
base := SegmentDeclaration{Track: "near", SequenceNo: 1, Codec: "wav_pcm_s16le", ContentType: "audio/wav", DurationMS: 5000, ExpectedSize: 1200, ExpectedDigest: strings.Repeat("a", 64)}
|
||||
tests := []struct {
|
||||
name string
|
||||
items []SegmentDeclaration
|
||||
}{
|
||||
{name: "empty"},
|
||||
{name: "duplicate", items: []SegmentDeclaration{base, base}},
|
||||
{name: "track", items: []SegmentDeclaration{func() SegmentDeclaration { item := base; item.Track = "mixed"; return item }()}},
|
||||
{name: "codec content type mismatch", items: []SegmentDeclaration{func() SegmentDeclaration { item := base; item.ContentType = "audio/opus"; return item }()}},
|
||||
{name: "digest", items: []SegmentDeclaration{func() SegmentDeclaration { item := base; item.ExpectedDigest = "no"; return item }()}},
|
||||
{name: "size", items: []SegmentDeclaration{func() SegmentDeclaration { item := base; item.ExpectedSize = 0; return item }()}},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if _, _, _, err := normalizeManifest(tt.items); err == nil {
|
||||
t.Fatal("normalizeManifest accepted invalid input")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user