package onvif import ( "os" "path/filepath" "testing" ) func TestParseFixtureProfilesAndStreamURI(t *testing.T) { profilesData, err := os.ReadFile(filepath.Join("..", "..", "..", "..", "..", "testdata", "onvif", "profiles.xml")) if err != nil { t.Fatal(err) } profiles, err := ParseProfiles(profilesData) if err != nil || len(profiles) != 2 || profiles[0].Width != 1920 { t.Fatalf("profiles=%#v err=%v", profiles, err) } uriData, err := os.ReadFile(filepath.Join("..", "..", "..", "..", "..", "testdata", "onvif", "stream-uri.xml")) if err != nil { t.Fatal(err) } uri, err := ParseStreamURI(uriData) if err != nil || uri != "rtsp://camera.invalid/live/main" { t.Fatalf("uri=%q err=%v", uri, err) } } func TestRejectCredentialInStreamURI(t *testing.T) { if _, err := ParseStreamURI([]byte(`rtsp://user:pass@camera.invalid/live`)); err == nil { t.Fatal("credential URI accepted") } } func TestParseMediaServiceAddress(t *testing.T) { data := []byte(`http://camera.invalid:8000/onvif/media_service`) address, err := ParseMediaServiceAddress(data) if err != nil || address != "http://camera.invalid:8000/onvif/media_service" { t.Fatalf("address=%q err=%v", address, err) } } func TestParseMediaServiceAddressRejectsMissingMedia(t *testing.T) { if _, err := ParseMediaServiceAddress([]byte(``)); err == nil { t.Fatal("missing media service accepted") } }