mirror of
https://github.com/pion/mediadevices.git
synced 2025-09-27 12:52:20 +08:00
73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package camera
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"sort"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/pion/mediadevices/pkg/driver"
|
|
)
|
|
|
|
func TestDiscover(t *testing.T) {
|
|
const (
|
|
shortName = "unittest-video0"
|
|
shortName2 = "unittest-video1"
|
|
longName = "unittest-long-device-name:0:1:2:3"
|
|
)
|
|
|
|
dir, err := ioutil.TempDir("", "")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.RemoveAll(dir)
|
|
|
|
byPathDir := filepath.Join(dir, "v4l", "by-path")
|
|
if err := os.MkdirAll(byPathDir, 0755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := ioutil.WriteFile(filepath.Join(dir, shortName), []byte{}, 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := ioutil.WriteFile(filepath.Join(dir, shortName2), []byte{}, 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.Symlink(
|
|
filepath.Join(dir, shortName),
|
|
filepath.Join(byPathDir, longName),
|
|
); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
discovered := make(map[string]struct{})
|
|
discover(discovered, filepath.Join(byPathDir, "*"))
|
|
discover(discovered, filepath.Join(dir, "unittest-video*"))
|
|
|
|
drvs := driver.GetManager().Query(func(d driver.Driver) bool {
|
|
// Ignore real cameras.
|
|
return d.Info().DeviceType == driver.Camera && strings.Contains(d.Info().Label, "unittest")
|
|
})
|
|
if len(drvs) != 2 {
|
|
t.Fatalf("Expected 2 driver, got %d drivers", len(drvs))
|
|
}
|
|
|
|
labels := []string{
|
|
drvs[0].Info().Label,
|
|
drvs[1].Info().Label,
|
|
}
|
|
// Returned drivers are unordered. Sort to get static result.
|
|
sort.Sort(sort.StringSlice(labels))
|
|
|
|
expected := longName + LabelSeparator + shortName
|
|
if label := labels[0]; label != expected {
|
|
t.Errorf("Expected label: %s, got: %s", expected, label)
|
|
}
|
|
|
|
expectedNoLink := shortName2 + LabelSeparator + shortName2
|
|
if label := labels[1]; label != expectedNoLink {
|
|
t.Errorf("Expected label: %s, got: %s", expectedNoLink, label)
|
|
}
|
|
}
|