@@ -283,11 +283,29 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
283283 return Err ( DscError :: Operation ( t ! ( "dscresources.commandResource.failedParseJson" , executable = & test. executable, stdout = stdout, stderr = stderr, err = err) . to_string ( ) ) )
284284 }
285285 } ;
286- let diff_properties = get_diff ( & expected_value, & actual_value) ;
286+ // if actual state contains _inDesiredState, we use that to determine if the resource is in desired state
287+ let mut in_desired_state: Option < bool > = None ;
288+ if let Some ( in_desired_state_value) = actual_value. get ( "_inDesiredState" ) {
289+ if let Some ( desired_state) = in_desired_state_value. as_bool ( ) {
290+ in_desired_state = Some ( desired_state) ;
291+ } else {
292+ return Err ( DscError :: Operation ( t ! ( "dscresources.commandResource.inDesiredStateNotBool" ) . to_string ( ) ) ) ;
293+ }
294+ }
295+
296+ let mut diff_properties: Vec < String > = Vec :: new ( ) ;
297+ match in_desired_state {
298+ Some ( true ) => {
299+ // if _inDesiredState is true, we don't need to check for diff properties
300+ } ,
301+ Some ( false ) | None => {
302+ diff_properties = get_diff ( & expected_value, & actual_value) ;
303+ }
304+ }
287305 Ok ( TestResult :: Resource ( ResourceTestResponse {
288306 desired_state : expected_value,
289307 actual_state : actual_value,
290- in_desired_state : diff_properties. is_empty ( ) ,
308+ in_desired_state : in_desired_state . unwrap_or ( diff_properties. is_empty ( ) ) ,
291309 diff_properties,
292310 } ) )
293311 } ,
0 commit comments