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) } } }) }