mirror of
https://github.com/pion/mediadevices.git
synced 2025-09-26 20:41:46 +08:00
115 lines
3.2 KiB
Go
115 lines
3.2 KiB
Go
package driver
|
|
|
|
import (
|
|
"github.com/pion/mediadevices/pkg/io/audio"
|
|
"github.com/pion/mediadevices/pkg/io/video"
|
|
"github.com/pion/mediadevices/pkg/prop"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
func filterTrue(_ Driver) bool {
|
|
return true
|
|
}
|
|
func filterFalse(_ Driver) bool {
|
|
return false
|
|
}
|
|
|
|
func TestFilterNot(t *testing.T) {
|
|
if FilterNot(filterTrue)(nil) != false {
|
|
t.Error("FilterNot(filterTrue)() must be false")
|
|
}
|
|
if FilterNot(filterFalse)(nil) != true {
|
|
t.Error("FilterNot(filterFalse)() must be true")
|
|
}
|
|
}
|
|
|
|
func TestFilterAnd(t *testing.T) {
|
|
if FilterAnd(filterTrue, filterTrue)(nil) != true {
|
|
t.Error("FilterAnd(filterTrue, filterTrue)() must be true")
|
|
}
|
|
if FilterAnd(filterTrue, filterFalse)(nil) != false {
|
|
t.Error("FilterAnd(filterTrue, filterFalse)() must be false")
|
|
}
|
|
if FilterAnd(filterFalse, filterTrue)(nil) != false {
|
|
t.Error("FilterAnd(filterFalse, filterTrue)() must be false")
|
|
}
|
|
if FilterAnd(filterFalse, filterFalse)(nil) != false {
|
|
t.Error("FilterAnd(filterFalse, filterFalse)() must be false")
|
|
}
|
|
if FilterAnd(filterFalse, filterTrue, filterTrue)(nil) != false {
|
|
t.Error("FilterAnd(filterFalse, filterTrue, filterTrue)() must be false")
|
|
}
|
|
if FilterAnd(filterTrue, filterTrue, filterTrue)(nil) != true {
|
|
t.Error("FilterAnd(filterTrue, filterTrue, filterTrue)() must be true")
|
|
}
|
|
}
|
|
|
|
type fakeVideoAdapter struct{}
|
|
|
|
func (a *fakeVideoAdapter) Open() error { return nil }
|
|
func (a *fakeVideoAdapter) Close() error { return nil }
|
|
func (a *fakeVideoAdapter) Properties() []prop.Media { return nil }
|
|
|
|
func (a *fakeVideoAdapter) VideoRecord(_ prop.Media) (r video.Reader, err error) { return nil, nil }
|
|
|
|
type fakeAudioAdapter struct{}
|
|
|
|
func (a *fakeAudioAdapter) Open() error { return nil }
|
|
func (a *fakeAudioAdapter) Close() error { return nil }
|
|
func (a *fakeAudioAdapter) Properties() []prop.Media { return nil }
|
|
|
|
func (a *fakeAudioAdapter) AudioRecord(_ prop.Media) (r audio.Reader, err error) { return nil, nil }
|
|
|
|
type fakeAdapter struct{}
|
|
|
|
func (a *fakeAdapter) Open() error { return nil }
|
|
func (a *fakeAdapter) Close() error { return nil }
|
|
func (a *fakeAdapter) Properties() []prop.Media { return nil }
|
|
|
|
func TestRegister(t *testing.T) {
|
|
m := GetManager()
|
|
|
|
va := &fakeVideoAdapter{}
|
|
err := m.Register(va, Info{})
|
|
assert.NoError(t, err, "cannot register video adapter")
|
|
assert.Equal(t, len(m.Query(filterTrue)), 1)
|
|
|
|
aa := &fakeAudioAdapter{}
|
|
err = m.Register(aa, Info{})
|
|
assert.NoError(t, err, "cannot register audio adapter")
|
|
assert.Equal(t, len(m.Query(filterTrue)), 2)
|
|
|
|
a := &fakeAdapter{}
|
|
assert.Panics(t, func() { m.Register(a, Info{}) }, "should not register adapter that is neither audio nor video")
|
|
assert.Equal(t, len(m.Query(filterTrue)), 2)
|
|
}
|
|
|
|
func TestRegisterSync(t *testing.T) {
|
|
m := GetManager()
|
|
start := make(chan struct{})
|
|
race := func() {
|
|
<-start
|
|
assert.NoError(t, m.Register(&fakeVideoAdapter{}, Info{}))
|
|
}
|
|
|
|
go race()
|
|
go race()
|
|
close(start)
|
|
}
|
|
|
|
func TestQuerySync(t *testing.T) {
|
|
m := GetManager()
|
|
start := make(chan struct{})
|
|
race := func() {
|
|
<-start
|
|
m.Query(filterTrue)
|
|
}
|
|
|
|
go race()
|
|
go race()
|
|
close(start)
|
|
// write while reading
|
|
assert.NoError(t, m.Register(&fakeVideoAdapter{}, Info{}))
|
|
}
|