- Prevent deadlock when stopping capture - Make file recorder writes thread-safe - Add idempotent close for recorder - Cap waveIn devices and recover panics - Validate mic device range in HTTP API
54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
package mic
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestRecorderCloseIdempotent(t *testing.T) {
|
|
t.Parallel()
|
|
dir := t.TempDir()
|
|
path := dir + "/rec.wav"
|
|
// openRecorder uses MicDir(); write through fileRecorder directly.
|
|
f, err := os.Create(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
r := &fileRecorder{path: path, f: f}
|
|
if err := r.Write([]byte{1, 0, 2, 0}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
n, err := r.Close()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if n != 4 {
|
|
t.Fatalf("written = %d, want 4", n)
|
|
}
|
|
n2, err := r.Close()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if n2 != 4 {
|
|
t.Fatalf("second close written = %d, want 4", n2)
|
|
}
|
|
if err := r.Write([]byte{3, 0}); err == nil {
|
|
t.Fatal("write after close should fail")
|
|
}
|
|
}
|
|
|
|
func TestAppendChunkPCMCaps(t *testing.T) {
|
|
t.Parallel()
|
|
half := maxChunkPCM / 2
|
|
buf := appendChunkPCM(nil, bytes.Repeat([]byte{1}, half))
|
|
buf = appendChunkPCM(buf, bytes.Repeat([]byte{2}, half))
|
|
buf = appendChunkPCM(buf, bytes.Repeat([]byte{3}, half))
|
|
if len(buf) != maxChunkPCM {
|
|
t.Fatalf("len = %d, want %d", len(buf), maxChunkPCM)
|
|
}
|
|
if buf[0] != 2 {
|
|
t.Fatalf("first byte = %d, want 2 (oldest chunk dropped)", buf[0])
|
|
}
|
|
}
|