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