uplink/app/streams/metadata_injector_test.go

72 lines
1.7 KiB
Go

package streams
import (
"bytes"
"io"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func Test_MetadataInjector(t *testing.T) {
metadata := Metadata{
"StreamTitle": "Hello",
}
metadataLengthByte := (len(metadata.Bytes()) + 15) / 16
paddedMetadataLength := (metadataLengthByte * 16)
paddedMetadataBytes := make([]byte, paddedMetadataLength)
copy(paddedMetadataBytes, metadata.Bytes())
inputBytes := make([]byte, 1024)
reader := bytes.NewReader(inputBytes)
buffer := new(bytes.Buffer)
Convey("MetadataInjector", t, func() {
t.Log(len(metadata.Bytes()), "=>", paddedMetadataLength)
mi := NewMetadataInjector(buffer, 256)
mi.SetMetadata(metadata)
// 128
// 64
// [metadata]
// 128
// 64
// [metadata]
n, err := io.Copy(mi, reader)
So(err, ShouldBeNil)
So(n, ShouldEqual, len(inputBytes))
So(buffer.Len(), ShouldEqual, len(inputBytes)+3+paddedMetadataLength)
outBytes := buffer.Bytes()
for i := 0; i < 3; i++ {
t.Log("part", i)
contentStartOffset := i + i*256
if i > 0 {
contentStartOffset += paddedMetadataLength
}
t.Log("contentStartOffset", contentStartOffset)
contentEndOffset := contentStartOffset + 256
t.Log("contentEndOffset", contentEndOffset)
metadataEndOffset := contentEndOffset + 1
if i == 0 {
metadataEndOffset += paddedMetadataLength
}
t.Log("metadataEndOffset", metadataEndOffset)
So(outBytes[contentStartOffset:contentEndOffset], ShouldResemble, inputBytes[0:256])
if i == 0 {
So(outBytes[contentEndOffset], ShouldEqual, metadataLengthByte)
So(outBytes[contentEndOffset+1:metadataEndOffset], ShouldResemble, paddedMetadataBytes)
} else {
So(outBytes[contentEndOffset], ShouldEqual, 0)
}
}
})
}