public void AudioEncoderAACConfiguration() { RunTest(() => { string reason; AudioEncoderConfiguration[] configs = GetAudioEncoderConfigurations(); Assert(ValidateAudioEncoderConfigs(configs, out reason), reason, Resources.StepValidatingAudioEncoders_Title); AudioEncoderConfigurationOption options = null; AudioEncoderConfiguration config = GetAudioEncoderConfiguration(configs, AudioEncoding.AAC, out options); config.Encoding = AudioEncoding.AAC; config.SampleRate = options.SampleRateList[0] + 1; config.Bitrate = options.BitrateList[0]; //config.SessionTimeout = "PT600S";//send the same as received string details = string.Format("Setting invalid configuration (/AudioEncoderConfiguration/SampleRate = {0})", config.SampleRate); SetInvalidAudioEncoderConfiguration(config, false, details); config.SampleRate = options.SampleRateList[0]; SetAudioEncoderConfiguration(config, false); AudioEncoderConfiguration newConfig = GetAudioEncoderConfiguration(config.token); Assert(EqualConfigurations(config, newConfig, out reason), string.Format(Resources.ErrorAudioEncoderConfigNotEqual_Format, reason), Resources.StepCompareAudioEncoderConfigs_Title); }); }
public void SetAudioSourceConfigurationTest() { Profile deletedProfile = null; Profile createdProfile = null; Profile modifiedProfile = null; AudioEncoding backupEncoding = AudioEncoding.G711; AudioEncoderConfiguration configBackup = null; RunTest( () => { string reason; bool executeAnnex = false; Profile profile = null; //3. ONVIF Client invokes CreateProfileRequest message (ProfileToken = ‘testprofileX’) // to create new profile. //4. Verify CreateProfileResponse message or SOAP 1.2 fault message (Action/MaxNVTProfiles) // from the DUT. If fault was received execute Annex A.1 /// create profile try { BeginStep("Create profile"); profile = Client.CreateProfile("testprofileX", null); StepPassed(); Assert(IsEmptyProfile(profile, out reason), reason, Resources.StepValidatingNewProfile_Title); createdProfile = profile; } catch (FaultException exc) { LogFault(exc); string faultDump; if (exc.IsValidOnvifFault("Receiver/Action/MaxNVTProfiles", out faultDump)) { LogStepEvent("Unable to create profile - delete one or select existing for test"); executeAnnex = true; StepPassed(); } else { throw exc; } } if (executeAnnex) { Profile[] profiles = GetProfiles(); bool nonFixedFound = false; foreach (Profile p in profiles) { if (!(p.fixedSpecified && p.@fixed)) { nonFixedFound = true; deletedProfile = p; DeleteProfile(p.token); break; } } if (nonFixedFound) { profile = CreateProfile("testprofileX", null); createdProfile = profile; } else { bool audioProfileFound = false; foreach (Profile p in profiles) { if (p.AudioSourceConfiguration != null) { profile = p; LogTestEvent(string.Format("Use profile with token '{0}' for test{1}", p.token, System.Environment.NewLine)); modifiedProfile = p; audioProfileFound = true; break; } } if (!audioProfileFound) { LogTestEvent("Unable to create or select profile with Audio configuration for test."); return; } } } //5. ONVIF Client will invoke GetCompatibleAudioSourceConfigurationsRequest message // (ProfileToken = ‘testprofileX’) to retrieve the list of audio source configurations // compatible with profile. //6. ONVIF Client verifies the list of audio source configurations sent by DUT. // Audio source AudioSourceConfiguration[] configs = GetCompatibleAudioSourceConfigurations(profile.token); Assert(ValidateAudioSourceConfigs(configs, out reason), reason, Resources.StepValidatingAudioSources_Title); //7. ONVIF Client invokes AddAudioSourceConfigurationRequest message // (ProfileToken = ‘testprofileX’, ConfigurationToken as one of the tokens received in the // GetCompatibleAudioSourceConfigurationsResponse message) to add audio source configuration // to profile. //8. DUT adds the audio source configuration to the profile and sends the response. AudioSourceConfiguration config = configs[0]; AddAudioSourceConfiguration(profile.token, config.token); //9. ONVIF Client invokes GetCompatibleAudioEncoderConfigurationsRequest message // (ProfileToken = ‘testprofileX’) to retrieve audio encoder configurations compatible with // profile. //10. DUT sends the list of audio encoder configurations compatible with the received // media profile token. // Audio encoder AudioEncoderConfiguration[] encoderConfigurations = GetCompatibleAudioEncoderConfigurations(profile.token); Assert(ValidateAudioEncoderConfigs(encoderConfigurations, out reason), reason, Resources.StepValidatingAudioEncoders_Title); //11. ONVIF Client invokes AddAudioEncoderConfigurationRequest message (ProfileToken = // ‘testprofileX’, ConfigurationToken as one of the tokens received in the // GetCompatibleAudioencoderConfigurationsResponse message) to add audio encoder // configuration to profile. //12. DUT adds the audio encoder configuration to the profile and sends the response. AudioEncoderConfiguration encoderConfig = encoderConfigurations[0]; AddAudioEncoderConfiguration(profile.token, encoderConfig.token); //13. ONVIF Client invokes GetAudioEncoderConfigurationOptionsRequest // (ProfileToken = ‘testprofileX’) request to retrieve audio encoder options for // specified profile. //14. DUT sends the audio encoder configuration options which could be applied // to audio encoder from specified profile. AudioEncoderConfigurationOptions options = GetAudioEncoderConfigurationOptions(null, profile.token); Assert(options != null && options.Options != null, "No Audio Encoder Configuration options returned", "Validate response received"); // Select valid options List <AudioEncoderConfigurationOption> validOptions = options.Options.Where(o => o.BitrateList != null && o.SampleRateList != null).ToList(); Assert(validOptions.Count > 0, "No valid options can be selected", "Select AudioEncoderConfigurationOption to check configuration changing"); configBackup = Utils.CopyMaker.CreateCopy(encoderConfig); backupEncoding = encoderConfig.Encoding; List <AudioEncoderConfigurationOption> opts = validOptions.Where(O => O.Encoding != backupEncoding).ToList(); AudioEncoderConfigurationOption encodingDifferent = opts.FirstOrDefault(); if (opts.Count == 0) { opts = validOptions; } // select with different encoding AudioEncoderConfigurationOption selectedOptions = null; AudioEncoderConfigurationOption bitrateDifferent = null; AudioEncoderConfigurationOption sampleRateDifferent = null; foreach (AudioEncoderConfigurationOption opt in opts) { bool bitrateDiffers = opt.BitrateList.Where(B => B != encoderConfig.Bitrate).Count() > 0; bool sampleRateDiffers = opt.SampleRateList.Where(SR => SR != encoderConfig.SampleRate).Count() > 0; if (bitrateDiffers && sampleRateDiffers) { selectedOptions = opt; break; } if (bitrateDiffers) { bitrateDifferent = opt; } if (sampleRateDiffers) { sampleRateDifferent = opt; } } if (selectedOptions == null) { selectedOptions = (encodingDifferent != null) ? encodingDifferent : (bitrateDifferent != null ? bitrateDifferent : sampleRateDifferent); } if (selectedOptions != null) { //15. ONVIF Client invokes SetAudioEncoderConfigurationRequest message // (ConfigurationToken, Encoding=[other than current], Bitrate = [other than current], // SampleRate = [other than current], ForcePersistence = false, where all values was // taken from audio encoder configuration options) to change //16. DUT sends SetAudioEncoderConfigurationResponse message. // Update encoder configuration encoderConfig.Encoding = selectedOptions.Encoding; List <int> bitrates = selectedOptions.BitrateList.Where(B => B != encoderConfig.Bitrate).ToList(); if (bitrates.Count > 0) { encoderConfig.Bitrate = bitrates[0]; } List <int> sampleRates = selectedOptions.SampleRateList.Where(SR => SR != encoderConfig.SampleRate).ToList(); if (sampleRates.Count > 0) { encoderConfig.SampleRate = sampleRates[0]; } SetAudioEncoderConfiguration(encoderConfig, false); //17. ONVIF Client invokes GetAudioEncoderConfigurationRequest message // (ConfigurationToken) to get new audio encoder configuration parameters. //18. DUT sends GetAudioEncoderConfigurationResponse message with parameters // specified in set request. AudioEncoderConfiguration actual = GetAudioEncoderConfiguration(encoderConfig.token); //19. ONVIF Client checks that Audio configuration in GetAudioEncoderConfigurationResponse // message is the same as in SetAudioEncoderConfigurationRequest message. string err = null; bool equal = EqualConfigurations(encoderConfig, actual, out err); string message = string.Format(Resources.ErrorAudioEncoderConfigNotEqual_Format, System.Environment.NewLine + err); Assert(equal, message, Resources.StepCompareAudioEncoderConfigs_Title); } //20. If used created Media Profile then ONVIF Client invokes DeleteProfileRequest // message (ProfileToken = ‘testprofileX’). Otherwise ONVIF client skip rest steps // and and restore profile settings. //21. DUT deletes the media profile and sends the response. if (modifiedProfile == null) { // // if modifiedProfile != null, it means that all profiles have "fixed" attribute // and one of them has been selected for test. // In this case we cannot delete this profile. // DeleteProfile(profile.token); createdProfile = null; } }, () => { if (configBackup != null) { SetAudioEncoderConfiguration(configBackup, true); } if (createdProfile != null) { DeleteProfile(createdProfile.token); } string remark = null; bool create = true; Profile profileToRestore = null; if (deletedProfile != null) { profileToRestore = deletedProfile; remark = "Restore profile deleted during the test"; } if (modifiedProfile != null) { // // We did not change video etc. configirations during the test. // The only configurations which (possible) need to be restored are // audio source and audio encoder (add) // profileToRestore = modifiedProfile; remark = "Restore profile modified during the test"; create = false; } if (profileToRestore != null) { // profile has been deleted for test: add all possible configurations // profile has been selected for test: it has been deleted at the end. RestoreProfile(profileToRestore, remark, create); } }); }
public void SetAudioSourceConfigurationTest() { Profile deletedProfile = null; Profile createdProfile = null; Profile modifiedProfile = null; AudioEncoding backupEncoding = AudioEncoding.G711; AudioEncoderConfiguration configBackup = null; RunTest( () => { Profile profile = CreateProfileByAnnex3("testprofileX", null, out deletedProfile, out createdProfile, out modifiedProfile); string reason; //5. ONVIF Client will invoke GetCompatibleAudioSourceConfigurationsRequest message // (ProfileToken = ‘testprofileX’) to retrieve the list of audio source configurations // compatible with profile. //6. ONVIF Client verifies the list of audio source configurations sent by DUT. // Audio source AudioSourceConfiguration[] configs = GetCompatibleAudioSourceConfigurations(profile.token); Assert(ValidateAudioSourceConfigs(configs, out reason), reason, Resources.StepValidatingAudioSources_Title); //7. ONVIF Client invokes AddAudioSourceConfigurationRequest message // (ProfileToken = ‘testprofileX’, ConfigurationToken as one of the tokens received in the // GetCompatibleAudioSourceConfigurationsResponse message) to add audio source configuration // to profile. //8. DUT adds the audio source configuration to the profile and sends the response. AudioSourceConfiguration config = configs[0]; AddAudioSourceConfiguration(profile.token, config.token); //9. ONVIF Client invokes GetCompatibleAudioEncoderConfigurationsRequest message // (ProfileToken = ‘testprofileX’) to retrieve audio encoder configurations compatible with // profile. //10. DUT sends the list of audio encoder configurations compatible with the received // media profile token. // Audio encoder AudioEncoderConfiguration[] encoderConfigurations = GetCompatibleAudioEncoderConfigurations(profile.token); Assert(ValidateAudioEncoderConfigs(encoderConfigurations, out reason), reason, Resources.StepValidatingAudioEncoders_Title); //11. ONVIF Client invokes AddAudioEncoderConfigurationRequest message (ProfileToken = // ‘testprofileX’, ConfigurationToken as one of the tokens received in the // GetCompatibleAudioencoderConfigurationsResponse message) to add audio encoder // configuration to profile. //12. DUT adds the audio encoder configuration to the profile and sends the response. AudioEncoderConfiguration encoderConfig = encoderConfigurations[0]; AddAudioEncoderConfiguration(profile.token, encoderConfig.token); //13. ONVIF Client invokes GetAudioEncoderConfigurationOptionsRequest // (ProfileToken = ‘testprofileX’) request to retrieve audio encoder options for // specified profile. //14. DUT sends the audio encoder configuration options which could be applied // to audio encoder from specified profile. AudioEncoderConfigurationOptions options = GetAudioEncoderConfigurationOptions(null, profile.token); Assert(options != null && options.Options != null, "No Audio Encoder Configuration options returned", "Validate response received"); // Select valid options List <AudioEncoderConfigurationOption> validOptions = options.Options.Where(o => o.BitrateList != null && o.SampleRateList != null).ToList(); Assert(validOptions.Count > 0, "No valid options can be selected", "Select AudioEncoderConfigurationOption to check configuration changing"); configBackup = Utils.CopyMaker.CreateCopy(encoderConfig); backupEncoding = encoderConfig.Encoding; List <AudioEncoderConfigurationOption> opts = validOptions.Where(O => O.Encoding != backupEncoding).ToList(); AudioEncoderConfigurationOption encodingDifferent = opts.FirstOrDefault(); if (opts.Count == 0) { opts = validOptions; } // select with different encoding AudioEncoderConfigurationOption selectedOptions = null; AudioEncoderConfigurationOption bitrateDifferent = null; AudioEncoderConfigurationOption sampleRateDifferent = null; foreach (AudioEncoderConfigurationOption opt in opts) { bool bitrateDiffers = opt.BitrateList.Where(B => B != encoderConfig.Bitrate).Count() > 0; bool sampleRateDiffers = opt.SampleRateList.Where(SR => SR != encoderConfig.SampleRate).Count() > 0; if (bitrateDiffers && sampleRateDiffers) { selectedOptions = opt; break; } if (bitrateDiffers) { bitrateDifferent = opt; } if (sampleRateDiffers) { sampleRateDifferent = opt; } } if (selectedOptions == null) { selectedOptions = (encodingDifferent != null) ? encodingDifferent : (bitrateDifferent != null ? bitrateDifferent : sampleRateDifferent); } if (selectedOptions != null) { //15. ONVIF Client invokes SetAudioEncoderConfigurationRequest message // (ConfigurationToken, Encoding=[other than current], Bitrate = [other than current], // SampleRate = [other than current], ForcePersistence = false, where all values was // taken from audio encoder configuration options) to change //16. DUT sends SetAudioEncoderConfigurationResponse message. // Update encoder configuration encoderConfig.Encoding = selectedOptions.Encoding; List <int> bitrates = selectedOptions.BitrateList.Where(B => B != encoderConfig.Bitrate).ToList(); if (bitrates.Count > 0) { encoderConfig.Bitrate = bitrates[0]; } List <int> sampleRates = selectedOptions.SampleRateList.Where(SR => SR != encoderConfig.SampleRate).ToList(); if (sampleRates.Count > 0) { encoderConfig.SampleRate = sampleRates[0]; } SetAudioEncoderConfiguration(encoderConfig, false); //17. ONVIF Client invokes GetAudioEncoderConfigurationRequest message // (ConfigurationToken) to get new audio encoder configuration parameters. //18. DUT sends GetAudioEncoderConfigurationResponse message with parameters // specified in set request. AudioEncoderConfiguration actual = GetAudioEncoderConfiguration(encoderConfig.token); //19. ONVIF Client checks that Audio configuration in GetAudioEncoderConfigurationResponse // message is the same as in SetAudioEncoderConfigurationRequest message. string err = null; bool equal = EqualConfigurations(encoderConfig, actual, out err); string message = string.Format(Resources.ErrorAudioEncoderConfigNotEqual_Format, System.Environment.NewLine + err); Assert(equal, message, Resources.StepCompareAudioEncoderConfigs_Title); } }, () => { if (configBackup != null) { SetAudioEncoderConfiguration(configBackup, true); } RestoreProfileByAnnex3(deletedProfile, createdProfile, modifiedProfile); }); }