113 lines
2.3 KiB
Go
113 lines
2.3 KiB
Go
//go:build !disable_format_flac
|
|
|
|
package packetizer
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/sha256"
|
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format/flac"
|
|
"git.gammaspectra.live/S.O.N.G/Kirika/test"
|
|
"io"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestPacketizeFLAC(t *testing.T) {
|
|
t.Parallel()
|
|
fp, err := os.Open(test.SingleSample24)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
defer fp.Close()
|
|
source, err := flac.NewFormat().Open(fp)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
reader, writer := io.Pipe()
|
|
|
|
shaHasher := sha256.New()
|
|
shaPacketHasher := sha256.New()
|
|
encodeReader := io.TeeReader(reader, shaHasher)
|
|
|
|
go func() {
|
|
defer writer.Close()
|
|
err = flac.NewFormat().Encode(source, writer, nil)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
}()
|
|
|
|
pipePacketizer := NewFLACPacketizer(encodeReader)
|
|
packetCount := 0
|
|
packetBytes := 0
|
|
for {
|
|
packet := pipePacketizer.GetPacket()
|
|
if packet == nil {
|
|
break
|
|
}
|
|
packetCount++
|
|
pData := packet.GetData()
|
|
packetBytes += len(pData)
|
|
shaPacketHasher.Write(pData)
|
|
}
|
|
if packetCount != 4231 {
|
|
t.Errorf("Wrong Packet Count %d != %d", packetCount, 4231)
|
|
}
|
|
if packetBytes < 50000000 {
|
|
t.Errorf("Wrong Packet Bytes %d < %d", packetBytes, 50000000)
|
|
}
|
|
if bytes.Compare(shaHasher.Sum([]byte{}), shaPacketHasher.Sum([]byte{})) != 0 {
|
|
t.Errorf("Mismatch on byte output %X != %X", shaPacketHasher.Sum([]byte{}), shaHasher.Sum([]byte{}))
|
|
}
|
|
}
|
|
|
|
func TestPacketizeFLACOffset(t *testing.T) {
|
|
t.Parallel()
|
|
fp, err := os.Open(test.SingleSample24)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
defer fp.Close()
|
|
source, err := flac.NewFormat().Open(fp)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
reader, writer := io.Pipe()
|
|
|
|
go func() {
|
|
defer writer.Close()
|
|
err = flac.NewFormat().Encode(source, writer, nil)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
}()
|
|
|
|
pipePacketizer := NewFLACPacketizer(reader)
|
|
packetCount := 0
|
|
packetBytes := 0
|
|
for {
|
|
packet := pipePacketizer.GetPacket()
|
|
if packet == nil {
|
|
break
|
|
}
|
|
packetCount++
|
|
if offsetablePacket, ok := packet.(OffsetablePacket); ok {
|
|
packetBytes += len(offsetablePacket.GetDataOffset(4096))
|
|
}
|
|
}
|
|
if packetCount != 4231 {
|
|
t.Errorf("Wrong Packet Count %d != %d", packetCount, 4231)
|
|
}
|
|
if packetBytes < 50000000 {
|
|
t.Errorf("Wrong Packet Bytes %d < %d", packetBytes, 50000000)
|
|
}
|
|
}
|