Files
livekit/pkg/rtc/audiolevel_test.go
David Zhao 95539a3cdd fix tests
2021-02-17 18:07:14 -08:00

67 lines
1.6 KiB
Go

package rtc_test
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/livekit/livekit-server/pkg/rtc"
)
const (
samplesPerBatch = 30
defaultActiveLevel = 30
// requires two noisy samples to count
defaultPercentile = 10
)
func TestAudioLevel(t *testing.T) {
t.Run("initially to return not noisy, within a few samples", func(t *testing.T) {
a := rtc.NewAudioLevel(defaultActiveLevel, defaultPercentile)
_, noisy := a.GetLevel()
assert.False(t, noisy)
observeSamples(a, 28, 5)
_, noisy = a.GetLevel()
assert.False(t, noisy)
})
t.Run("not noisy when all samples are below threshold", func(t *testing.T) {
a := rtc.NewAudioLevel(defaultActiveLevel, defaultPercentile)
observeSamples(a, 35, 100)
_, noisy := a.GetLevel()
assert.False(t, noisy)
})
t.Run("not noisy when less than percentile samples are above threshold", func(t *testing.T) {
a := rtc.NewAudioLevel(defaultActiveLevel, defaultPercentile)
observeSamples(a, 35, samplesPerBatch-1)
observeSamples(a, 25, 1)
observeSamples(a, 35, 1)
_, noisy := a.GetLevel()
assert.False(t, noisy)
})
t.Run("noisy when higher than percentile samples are above threshold", func(t *testing.T) {
a := rtc.NewAudioLevel(defaultActiveLevel, defaultPercentile)
observeSamples(a, 35, samplesPerBatch-4)
observeSamples(a, 25, 2)
observeSamples(a, 29, 2)
level, noisy := a.GetLevel()
assert.True(t, noisy)
assert.Less(t, level, uint8(defaultActiveLevel))
assert.Greater(t, level, uint8(25))
})
}
func observeSamples(a *rtc.AudioLevel, level uint8, count int) {
for i := 0; i < count; i++ {
a.Observe(level)
}
}