MCPcopy Create free account
hub / github.com/PowerShell/DSC / invoke_test

Method invoke_test

lib/dsc-lib/src/configure/mod.rs:801–877  ·  view source on GitHub ↗

Invoke the test operation on a resource. # Returns `ConfigurationTestResult` - The result of the test operation. # Errors This function will return an error if the underlying resource fails.

(&mut self)

Source from the content-addressed store, hash-verified

799 ///
800 /// This function will return an error if the underlying resource fails.
801 pub fn invoke_test(&mut self) -> Result<ConfigurationTestResult, DscError> {
802 let mut result = ConfigurationTestResult::new();
803 self.context.operation = Some(Operation::Test);
804 let resources = get_resource_invocation_order(&self.config, &mut self.statement_parser, &mut self.context)?;
805 let mut progress = ProgressBar::new(resources.len() as u64, self.progress_format)?;
806 let discovery = &mut self.discovery.clone();
807 for resource in resources {
808 let evaluated_name = self.evaluate_resource_name(&resource.name)?;
809
810 progress.set_resource(&evaluated_name, &resource.resource_type);
811 progress.write_activity(format!("Test '{evaluated_name}'").as_str());
812 if self.skip_resource(&resource)? {
813 progress.write_increment(1);
814 continue;
815 }
816 let directive_security_context = resource.directives.as_ref().and_then(|d| d.security_context.as_ref());
817 check_security_context(resource.metadata.as_ref(), directive_security_context)?;
818 let adapter = get_require_adapter_from_directive(&resource.directives);
819 find_resource_or_error!(dsc_resource, discovery, resource, adapter);
820 let properties = self.get_properties(&resource, &dsc_resource.kind)?;
821 debug!("resource_type {}", &resource.resource_type);
822 let expected = add_metadata(dsc_resource, properties, resource.metadata.clone())?;
823 trace!("{}", t!("configure.mod.expectedState", state = expected));
824 let start_datetime = chrono::Local::now();
825 let mut test_result = match dsc_resource.test(&expected) {
826 Ok(result) => result,
827 Err(e) => {
828 progress.set_failure(get_failure_from_error(&e));
829 progress.write_increment(1);
830 return Err(e);
831 },
832 };
833 let end_datetime = chrono::Local::now();
834 let mut execution_information = ExecutionInformation::new_with_duration(&start_datetime, &end_datetime);
835 let mut metadata = Metadata {
836 microsoft: Some(
837 MicrosoftDscMetadata::new_with_duration(&start_datetime, &end_datetime)
838 ),
839 other: Map::new(),
840 };
841 match &mut test_result {
842 TestResult::Resource(resource_test_result) => {
843 self.context.references.insert(resource_id(&resource.resource_type, &evaluated_name), serde_json::to_value(&resource_test_result.actual_state)?);
844 get_metadata_from_result(Some(&mut self.context), &mut resource_test_result.actual_state, &mut metadata, &mut execution_information)?;
845 },
846 TestResult::Group(group) => {
847 let mut results = Vec::<Value>::new();
848 for result in group {
849 results.push(serde_json::to_value(&result.result)?);
850 }
851 self.context.references.insert(resource_id(&resource.resource_type, &evaluated_name), Value::Array(results.clone()));
852 },
853 }
854 let resource_result = config_result::ResourceTestResult {
855 execution_information: Some(execution_information),
856 metadata: Some(metadata),
857 name: evaluated_name,
858 resource_type: resource.resource_type.clone(),

Callers 3

config_testFunction · 0.80
invoke_dsc_configMethod · 0.80

Calls 15

check_security_contextFunction · 0.85
add_metadataFunction · 0.85
get_failure_from_errorFunction · 0.85
resource_idFunction · 0.85
get_metadata_from_resultFunction · 0.85
ArrayClass · 0.85
set_resourceMethod · 0.80
write_activityMethod · 0.80
as_strMethod · 0.80

Tested by

no test coverage detected