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);
            });
        }
Ejemplo n.º 2
0
        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);
            });
        }