@@ -283,11 +283,29 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
283
283
return Err ( DscError :: Operation ( t ! ( "dscresources.commandResource.failedParseJson" , executable = & test. executable, stdout = stdout, stderr = stderr, err = err) . to_string ( ) ) )
284
284
}
285
285
} ;
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
+ }
287
305
Ok ( TestResult :: Resource ( ResourceTestResponse {
288
306
desired_state : expected_value,
289
307
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 ( ) ) ,
291
309
diff_properties,
292
310
} ) )
293
311
} ,
0 commit comments