@@ -283,11 +283,12 @@ 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 in_desired_state = get_desired_state ( & actual_value) ?;
286
287
let diff_properties = get_diff ( & expected_value, & actual_value) ;
287
288
Ok ( TestResult :: Resource ( ResourceTestResponse {
288
289
desired_state : expected_value,
289
290
actual_state : actual_value,
290
- in_desired_state : diff_properties. is_empty ( ) ,
291
+ in_desired_state : in_desired_state . unwrap_or ( diff_properties. is_empty ( ) ) ,
291
292
diff_properties,
292
293
} ) )
293
294
} ,
@@ -302,10 +303,11 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
302
303
return Err ( DscError :: Command ( resource. resource_type . clone ( ) , exit_code, t ! ( "dscresources.commandResource.testNoDiff" ) . to_string ( ) ) ) ;
303
304
} ;
304
305
let diff_properties: Vec < String > = serde_json:: from_str ( diff_properties) ?;
306
+ let in_desired_state = get_desired_state ( & actual_value) ?;
305
307
Ok ( TestResult :: Resource ( ResourceTestResponse {
306
308
desired_state : expected_value,
307
309
actual_state : actual_value,
308
- in_desired_state : diff_properties. is_empty ( ) ,
310
+ in_desired_state : in_desired_state . unwrap_or ( diff_properties. is_empty ( ) ) ,
309
311
diff_properties,
310
312
} ) )
311
313
} ,
@@ -335,6 +337,19 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
335
337
}
336
338
}
337
339
340
+ fn get_desired_state ( actual : & Value ) -> Result < Option < bool > , DscError > {
341
+ // if actual state contains _inDesiredState, we use that to determine if the resource is in desired state
342
+ let mut in_desired_state: Option < bool > = None ;
343
+ if let Some ( in_desired_state_value) = actual. get ( "_inDesiredState" ) {
344
+ if let Some ( desired_state) = in_desired_state_value. as_bool ( ) {
345
+ in_desired_state = Some ( desired_state) ;
346
+ } else {
347
+ return Err ( DscError :: Operation ( t ! ( "dscresources.commandResource.inDesiredStateNotBool" ) . to_string ( ) ) ) ;
348
+ }
349
+ }
350
+ Ok ( in_desired_state)
351
+ }
352
+
338
353
fn invoke_synthetic_test ( resource : & ResourceManifest , cwd : & str , expected : & str ) -> Result < TestResult , DscError > {
339
354
let get_result = invoke_get ( resource, cwd, expected) ?;
340
355
let actual_state = match get_result {
0 commit comments