2018-04-10 14:34:30 +00:00
|
|
|
package streams
|
2018-04-10 11:48:51 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
2018-04-11 12:33:55 +00:00
|
|
|
"io"
|
2018-04-10 11:48:51 +00:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
. "github.com/smartystreets/goconvey/convey"
|
|
|
|
)
|
|
|
|
|
|
|
|
func Test_MetadataInjector(t *testing.T) {
|
2018-04-11 12:33:55 +00:00
|
|
|
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)
|
2018-04-10 11:48:51 +00:00
|
|
|
|
|
|
|
Convey("MetadataInjector", t, func() {
|
2018-04-11 12:33:55 +00:00
|
|
|
t.Log(len(metadata.Bytes()), "=>", paddedMetadataLength)
|
|
|
|
|
|
|
|
mi := NewMetadataInjector(buffer, 256)
|
|
|
|
mi.SetMetadata(metadata)
|
2018-04-10 11:48:51 +00:00
|
|
|
|
|
|
|
// 128
|
|
|
|
// 64
|
|
|
|
// [metadata]
|
|
|
|
// 128
|
|
|
|
// 64
|
|
|
|
// [metadata]
|
|
|
|
|
2018-04-11 12:33:55 +00:00
|
|
|
n, err := io.Copy(mi, reader)
|
2018-04-10 11:48:51 +00:00
|
|
|
So(err, ShouldBeNil)
|
2018-04-11 12:33:55 +00:00
|
|
|
So(n, ShouldEqual, len(inputBytes))
|
|
|
|
So(buffer.Len(), ShouldEqual, len(inputBytes)+3+paddedMetadataLength)
|
2018-04-10 11:48:51 +00:00
|
|
|
|
2018-04-11 12:33:55 +00:00
|
|
|
outBytes := buffer.Bytes()
|
2018-04-10 11:48:51 +00:00
|
|
|
|
2018-04-11 12:33:55 +00:00
|
|
|
for i := 0; i < 3; i++ {
|
|
|
|
t.Log("part", i)
|
2018-04-10 11:48:51 +00:00
|
|
|
|
2018-04-11 12:33:55 +00:00
|
|
|
contentStartOffset := i + i*256
|
|
|
|
if i > 0 {
|
|
|
|
contentStartOffset += paddedMetadataLength
|
|
|
|
}
|
|
|
|
t.Log("contentStartOffset", contentStartOffset)
|
2018-04-10 11:48:51 +00:00
|
|
|
|
2018-04-11 12:33:55 +00:00
|
|
|
contentEndOffset := contentStartOffset + 256
|
|
|
|
t.Log("contentEndOffset", contentEndOffset)
|
2018-04-10 11:48:51 +00:00
|
|
|
|
2018-04-11 12:33:55 +00:00
|
|
|
metadataEndOffset := contentEndOffset + 1
|
|
|
|
if i == 0 {
|
|
|
|
metadataEndOffset += paddedMetadataLength
|
|
|
|
}
|
|
|
|
t.Log("metadataEndOffset", metadataEndOffset)
|
2018-04-10 11:48:51 +00:00
|
|
|
|
2018-04-11 12:33:55 +00:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|
2018-04-10 11:48:51 +00:00
|
|
|
})
|
|
|
|
}
|