stream/mts: checking data is also good in mts segment test

This commit is contained in:
saxon 2019-02-17 00:31:30 +10:30
parent a5cb1c5abb
commit b3b8c6bb44
1 changed files with 100 additions and 3 deletions

View File

@ -38,6 +38,7 @@ import (
"bitbucket.org/ausocean/utils/logger" "bitbucket.org/ausocean/utils/logger"
"bitbucket.org/ausocean/utils/ring" "bitbucket.org/ausocean/utils/ring"
"github.com/Comcast/gots/packet" "github.com/Comcast/gots/packet"
"github.com/Comcast/gots/pes"
) )
// Ring buffer sizes and read/write timeouts. // Ring buffer sizes and read/write timeouts.
@ -50,10 +51,17 @@ const (
type testSender struct { type testSender struct {
Buf [][]byte Buf [][]byte
tstDiscon bool
disconAt int
curPktNo int
} }
func (ts *testSender) send(d []byte) error { func (ts *testSender) send(d []byte) error {
if ts.tstDiscon && ts.curPktNo == ts.disconAt {
return nil
}
ts.Buf = append(ts.Buf, d) ts.Buf = append(ts.Buf, d)
ts.curPktNo++
return nil return nil
} }
@ -139,11 +147,100 @@ func TestSegment(t *testing.T) {
copy(pkt[:], firstPkt) copy(pkt[:], firstPkt)
pid := (*packet.Packet)(&pkt).PID() pid := (*packet.Packet)(&pkt).PID()
if pid != mts.PatPid { if pid != mts.PatPid {
t.Fatalf("First packte of clip %v is not pat, but rather: %v\n", clipNo, pid) t.Fatalf("First packet of clip %v is not pat, but rather: %v\n", clipNo, pid)
}
// Check that the clip data is okay
for i := 0; i < len(clip); i += mts.PacketSize {
copy(pkt[:], firstPkt)
p := (*packet.Packet)(&pkt)
pid := p.PID()
if pid == mts.VideoPid {
// Mts payload
payload, err := p.Payload()
if err != nil {
t.Fatalf("Unexpected err: %v\n", err)
}
// Parse pes from the mts payload
pes, err := pes.NewPESHeader(payload)
if err != nil {
t.Fatalf("Unexpected err: %v\n", err)
}
// Get the data from the pes packet and convert to int
data := int(pes.Data()[0])
// Calc expected data in the pes and then check
expectedData := clipNo*10 + ((i / mts.PacketSize) - 2)
if data != expectedData {
t.Fatalf("Did not get expected pkt data. Got: %v, want: %v\n", data, expectedData)
}
}
} }
} }
} }
func TestDiscontinuity(t *testing.T) { /*
func TestSendFailDiscontinuity(t *testing.T) {
mts.Meta = meta.New()
// Create ringbuffer tst sender, loadsender and the mpegts encoder
rb := ring.NewBuffer(rbSize, rbElementSize, wTimeout)
const disconClipNo = 3
tstSender := &testSender{tstDiscon: true, disconAt: disconClipNo}
loadSender := newMtsSender(tstSender, log)
packer := tstPacker{rb: rb}
encoder := mts.NewEncoder(&packer, 25)
// Turn time based psi writing off for encoder
const psiSendCount = 10
encoder.TimeBasedPsi(false, psiSendCount)
const noOfPacketsToWrite = 100
for i := 0; i < noOfPacketsToWrite; i++ {
// Our payload will just be packet no
encoder.Encode([]byte{byte(i)})
rb.Flush()
next, err := rb.Next(rTimeout)
if err != nil {
t.Fatalf("Unexpected err: %v\n", err)
}
err = loadSender.load(next)
if err != nil {
t.Fatalf("Unexpected err: %v\n", err)
}
err = loadSender.send()
if err != nil {
t.Fatalf("Unexpected err: %v\n", err)
}
loadSender.release()
}
result := tstSender.Buf
// First check that we have less clips
expectedLen := ((noOfPacketsToWrite / psiSendCount) - 1)
gotLen := len(result)
if gotLen != expectedLen {
t.Fatalf("We don't have one less clip as we should. Got: %v, want: %v\n", gotLen, expectedLen)
}
// Now check that the discontonuity indicator is set at the disconClip pat
disconClip := result[disconClipNo]
firstPkt := disconClip[:mts.PacketSize]
var pkt [mts.PacketSize]byte
copy(pkt[:], firstPkt)
discon, err := (*packet.AdaptationField)((*packet.Packet)(&pkt)).Discontinuity()
if err != nil {
t.Fatalf("Unexpected err: %v\n", err)
}
if !discon {
t.Fatalf("Did not get discontinuity indicator for PAT")
}
} }
*/