uplink/app/streams/metadata_extractor_test.go

99 lines
1.9 KiB
Go
Raw Normal View History

2018-04-11 07:33:07 +00:00
package streams
2018-04-11 09:05:40 +00:00
import (
"bytes"
"io"
"sync"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
2018-04-11 07:33:07 +00:00
var (
exampleMetadataStr = `StreamTitle='Test 123';`
exampleMetadata = map[string]string{
"StreamTitle": "Test 123",
}
exampleData = []byte{
0, 1, 2, 3, 4, 5, 6, 7,
}
2018-04-11 09:05:40 +00:00
exampleMetadataInterval = 4
exampleCompleteData = []byte{}
2018-04-11 07:33:07 +00:00
)
2018-04-11 09:05:40 +00:00
func init() {
metadataBytes := make([]byte, 2*16)
copy(metadataBytes, []byte(exampleMetadataStr))
exampleCompleteData = append(exampleCompleteData, exampleData[0:4]...)
exampleCompleteData = append(exampleCompleteData, 2)
exampleCompleteData = append(exampleCompleteData, metadataBytes...)
exampleCompleteData = append(exampleCompleteData, exampleData[4:8]...)
exampleCompleteData = append(exampleCompleteData, 0)
}
func Test_MetadataExtractor(t *testing.T) {
Convey("MetadataExtractor", t, func(c C) {
me := NewMetadataExtractor(bytes.NewReader(exampleCompleteData), exampleMetadataInterval)
metastream := me.Metadata()
buf := make([]byte, 32)
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
So := c.So
meta, err := metastream.Read()
t.Log("Metastream.Read:", meta, err)
So(err, ShouldBeNil)
So(meta, ShouldNotBeNil)
So(meta, ShouldContainKey, "StreamTitle")
So(meta["StreamTitle"], ShouldEqual, "Test 123")
/*meta, err = metastream.Read()
t.Log("Metastream.Read:", meta, err)
So(err, ShouldBeNil)
So(meta, ShouldNotBeNil)
So(meta, ShouldBeEmpty)*/
meta, err = metastream.Read()
t.Log("Metastream.Read:", meta, err)
So(err, ShouldEqual, io.EOF)
So(meta, ShouldBeNil)
}()
allData := []byte{}
attempts := 0
for {
attempts++
if attempts == 100 {
t.Fail()
return
}
n, err := me.Read(buf)
t.Logf("Read: %d %s %q", n, err, buf[0:n])
if err == io.EOF {
break
}
So(err, ShouldBeNil)
allData = append(allData, buf[0:n]...)
}
wg.Wait()
So(allData, ShouldResemble, exampleData[0:8])
})
}