package onvif
import (
"html"
"net/url"
"strings"
"testing"
"github.com/stretchr/testify/require"
)
func TestGetStreamUri(t *testing.T) {
tests := []struct {
name string
xml string
url string
}{
{
name: "Dahua stream default",
xml: `rtsp://192.168.1.123:554/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=OnviftruetruePT0S`,
url: "rtsp://192.168.1.123:554/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif",
},
{
name: "Dahua snapshot default",
xml: `http://192.168.1.123/onvifsnapshot/media_service/snapshot?channel=1&subtype=1falsefalsePT0S`,
url: "http://192.168.1.123/onvifsnapshot/media_service/snapshot?channel=1&subtype=1",
},
{
name: "Dahua stream formatted",
xml: `
rtsp://192.168.1.123:554/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif
true
true
PT0S
`,
url: "rtsp://192.168.1.123:554/cam/realmonitor?channel=1&subtype=1&unicast=true&proto=Onvif",
},
{
name: "Dahua snapshot formatted",
xml: `
http://192.168.1.123/onvifsnapshot/media_service/snapshot?channel=1&subtype=1
false
false
PT0S
`,
url: "http://192.168.1.123/onvifsnapshot/media_service/snapshot?channel=1&subtype=1",
},
{
name: "Unknown",
xml: `
rtsp://192.168.5.53:8090/profile1=r
`,
url: "rtsp://192.168.5.53:8090/profile1=r",
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
uri := FindTagValue([]byte(test.xml), "Uri")
uri = strings.TrimSpace(html.UnescapeString(uri))
u, err := url.Parse(uri)
require.Nil(t, err)
require.Equal(t, test.url, u.String())
})
}
}
func TestGetCapabilities(t *testing.T) {
tests := []struct {
name string
xml string
}{
{
name: "Dahua default",
xml: `http://192.168.1.123/onvif/analytics_servicetruetruehttp://192.168.1.123/onvif/device_servicefalsefalsefalsefalsefalsefalsetruefalsefalsetruetrue200210220230240242161218061812190619122006truefalsefalsefalse21falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse0falsehttp://192.168.1.123/onvif/event_servicetruetruefalsehttp://192.168.1.123/onvif/imaging_servicehttp://192.168.1.123/onvif/media_servicetruetruetrue6http://192.168.1.123/onvif/deviceIO_service10111`,
},
{
name: "Dahua formatted",
xml: `
http://192.168.1.123/onvif/analytics_service
true
true
http://192.168.1.123/onvif/device_service
false
false
false
false
false
...
2
1
false
...
http://192.168.1.123/onvif/event_service
true
true
false
http://192.168.1.123/onvif/imaging_service
http://192.168.1.123/onvif/media_service
true
true
true
6
http://192.168.1.123/onvif/deviceIO_service
1
0
1
1
1
`,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
rawURL := FindTagValue([]byte(test.xml), "Media.+?XAddr")
require.Equal(t, "http://192.168.1.123/onvif/media_service", rawURL)
rawURL = FindTagValue([]byte(test.xml), "Imaging.+?XAddr")
require.Equal(t, "http://192.168.1.123/onvif/imaging_service", rawURL)
})
}
}