package media2 import ( "encoding/xml" "fmt" "testing" "github.com/kerberos-io/onvif/xsd" "github.com/kerberos-io/onvif/xsd/onvif" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestUnmarshalGetProfilesResponse(t *testing.T) { profile1Name := "H26x_L1S1" profile1Token := "profile_1" profile1Fixed := false profile2Name := "JPEG_L1S3" profile2Token := "profile_2" profile2Fixed := true GetProfilesResponseData := fmt.Sprintf(` %s %s `, profile1Token, profile1Fixed, profile1Name, profile2Token, profile2Fixed, profile2Name) getProfilesResponse := &GetProfilesResponse{} err := xml.Unmarshal([]byte(GetProfilesResponseData), getProfilesResponse) require.NoError(t, err) assert.Equal(t, getProfilesResponse.Profiles[0].Token, profile1Token) assert.Equal(t, getProfilesResponse.Profiles[0].Fixed, profile1Fixed) assert.Equal(t, getProfilesResponse.Profiles[0].Name, profile1Name) assert.Equal(t, getProfilesResponse.Profiles[1].Token, profile2Token) assert.Equal(t, getProfilesResponse.Profiles[1].Fixed, profile2Fixed) assert.Equal(t, getProfilesResponse.Profiles[1].Name, profile2Name) } func TestUnmarshalGetAnalyticsConfigurationsResponse(t *testing.T) { configToken := onvif.ReferenceToken("token_1") configName := onvif.Name("Analytics_1") useCount := 0 analyticsModuleName := "Viproc" analyticsModuleType := "tt:Viproc" analyticsModuleItemName := "AnalysisType" analyticsModuleItemValue := "Intelligent Video Analytics" ruleName := "The Min ObjectHeight" ruleType := "tt:ObjectInField" ruleItemName := "MaxObjectHeight" ruleItemValue := "100" responseData := fmt.Sprintf(` %s %d `, configToken, configName, useCount, analyticsModuleName, analyticsModuleType, analyticsModuleItemName, analyticsModuleItemValue, ruleName, ruleType, ruleItemName, ruleItemValue) response := &GetAnalyticsConfigurationsResponse{} err := xml.Unmarshal([]byte(responseData), response) require.NoError(t, err) assert.Equal(t, response.Configurations[0].Token, configToken) assert.Equal(t, response.Configurations[0].Name, configName) assert.Equal(t, response.Configurations[0].AnalyticsEngineConfiguration.AnalyticsModule[0].Name, analyticsModuleName) assert.Equal(t, response.Configurations[0].AnalyticsEngineConfiguration.AnalyticsModule[0].Type, analyticsModuleType) assert.Equal(t, response.Configurations[0].AnalyticsEngineConfiguration.AnalyticsModule[0].Parameters.SimpleItem[0].Name, analyticsModuleItemName) assert.Equal(t, response.Configurations[0].AnalyticsEngineConfiguration.AnalyticsModule[0].Parameters.SimpleItem[0].Value, analyticsModuleItemValue) assert.Equal(t, response.Configurations[0].RuleEngineConfiguration.Rule[0].Name, ruleName) assert.Equal(t, response.Configurations[0].RuleEngineConfiguration.Rule[0].Type, ruleType) assert.Equal(t, response.Configurations[0].RuleEngineConfiguration.Rule[0].Parameters.SimpleItem[0].Name, ruleItemName) assert.Equal(t, response.Configurations[0].RuleEngineConfiguration.Rule[0].Parameters.SimpleItem[0].Value, ruleItemValue) } func TestMarshalAddConfigurationRequest(t *testing.T) { analyticsType := xsd.String("Analytics") analyticsToken := xsd.String("AnalyticsToken") request := AddConfiguration{ ProfileToken: "profile_1", Configuration: []Configuration{ { Type: &analyticsType, Token: &analyticsToken, }, }, } expected := fmt.Sprintf("%s%s%s", request.ProfileToken, *request.Configuration[0].Type, *request.Configuration[0].Token) data, err := xml.Marshal(request) require.NoError(t, err) assert.Equal(t, expected, string(data)) } func TestMarshalRemoveConfigurationRequest(t *testing.T) { analyticsType := xsd.String("Analytics") analyticsToken := xsd.String("AnalyticsToken") request := RemoveConfiguration{ ProfileToken: "profile_1", Configuration: []Configuration{ { Type: &analyticsType, Token: &analyticsToken, }, }, } expected := fmt.Sprintf("%s%s%s", request.ProfileToken, *request.Configuration[0].Type, *request.Configuration[0].Token) data, err := xml.Marshal(request) require.NoError(t, err) assert.Equal(t, expected, string(data)) }