Files
cneicy ceddfd3d6b feat: sync deployed v1.0.0-rc.38-custom.42
Sync production source including routing, billing, Astra detection and public uptime. Update custom build instructions and license packaging.
2026-09-26 04:49:11 +08:00

55 lines
1.8 KiB
Go

package common
import (
"bytes"
"context"
"encoding/binary"
"strings"
"testing"
)
// minimalWAV builds a valid 16-bit PCM mono WAV with the given number of sample frames.
func minimalWAV(sampleRate uint32, frames int) []byte {
const numChannels = 1
const bitsPerSample = 16
dataSize := frames * numChannels * (bitsPerSample / 8)
buf := &bytes.Buffer{}
buf.WriteString("RIFF")
binary.Write(buf, binary.LittleEndian, uint32(36+dataSize))
buf.WriteString("WAVE")
buf.WriteString("fmt ")
binary.Write(buf, binary.LittleEndian, uint32(16))
binary.Write(buf, binary.LittleEndian, uint16(1)) // PCM
binary.Write(buf, binary.LittleEndian, uint16(numChannels))
binary.Write(buf, binary.LittleEndian, sampleRate)
byteRate := sampleRate * numChannels * (bitsPerSample / 8)
binary.Write(buf, binary.LittleEndian, byteRate)
binary.Write(buf, binary.LittleEndian, uint16(numChannels*(bitsPerSample/8)))
binary.Write(buf, binary.LittleEndian, uint16(bitsPerSample))
buf.WriteString("data")
binary.Write(buf, binary.LittleEndian, uint32(dataSize))
buf.Write(make([]byte, dataSize))
return buf.Bytes()
}
func TestGetAudioDurationCaseInsensitiveExt(t *testing.T) {
wav := minimalWAV(8000, 8000) // 1 second
for _, ext := range []string{".wav", ".WAV", ".Wav"} {
d, err := GetAudioDuration(context.Background(), bytes.NewReader(wav), ext)
if err != nil {
t.Fatalf("ext %q: unexpected error: %v", ext, err)
}
if d < 0.99 || d > 1.01 {
t.Fatalf("ext %q: expected ~1s duration, got %v", ext, d)
}
}
}
func TestGetAudioDurationUppercaseNotUnsupported(t *testing.T) {
_, err := GetAudioDuration(context.Background(), bytes.NewReader([]byte("not audio")), ".MP3")
if err != nil && strings.Contains(err.Error(), "unsupported audio format") {
t.Fatalf("uppercase extension rejected as unsupported: %v", err)
}
}