Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
5493948
Fix progress display when using JSON, add None option; exhance progre…
SteveL-MSFT Feb 18, 2025
74611a9
update lockfiles
SteveL-MSFT Feb 25, 2025
bf52376
Fix appx version string for non-preview version
SteveL-MSFT Feb 26, 2025
7af1ce5
Update pipeline to use clean/verbose
SteveL-MSFT Feb 27, 2025
863087c
add clean/verbose switches
SteveL-MSFT Feb 27, 2025
11c9972
use Trim() to ensure productVersion is string
SteveL-MSFT Feb 27, 2025
166ed59
remove use of rustup as Windows images don't have it
SteveL-MSFT Feb 27, 2025
224d393
use msrustup in onebranch pipeline to add target
SteveL-MSFT Feb 27, 2025
2dc84ae
use msrustup when available
SteveL-MSFT Mar 1, 2025
b1efde4
remove cleaning
SteveL-MSFT Mar 1, 2025
5c4d84f
update lockfiles
Mar 3, 2025
27f27a4
split windows to separate jobs
SteveL-MSFT Mar 3, 2025
ff47911
remove tree-sitter init --update
SteveL-MSFT Mar 3, 2025
e2cab4e
move rustup command to only for builds
SteveL-MSFT Mar 3, 2025
79d26d2
remove verbose from build
SteveL-MSFT Mar 3, 2025
7818945
fix names of downloaded drops
SteveL-MSFT Mar 4, 2025
926bbe6
explicitly publish artifact
SteveL-MSFT Mar 4, 2025
0f36ff9
remove publish, fix name of artifact drop
SteveL-MSFT Mar 4, 2025
a923371
fix drop path
SteveL-MSFT Mar 4, 2025
3e0fd05
split windows part into template
SteveL-MSFT Mar 5, 2025
987ad11
fix path to template
SteveL-MSFT Mar 5, 2025
d32da8b
add self ref
SteveL-MSFT Mar 5, 2025
52b56bd
move variables as parameters
SteveL-MSFT Mar 5, 2025
70047a9
fix use of parameters in template
SteveL-MSFT Mar 5, 2025
7a778dc
fix incorrect merging and not have rustup add unspecified arch
SteveL-MSFT Mar 5, 2025
d183bd4
revert old changes
SteveL-MSFT Mar 5, 2025
faf9dfc
revert change
SteveL-MSFT Mar 5, 2025
4a3517d
add CI to release branch
SteveL-MSFT Mar 26, 2025
d884188
add diagnostics
SteveL-MSFT Mar 26, 2025
7abf659
fix variable use
SteveL-MSFT Mar 26, 2025
4889a24
Fix when resource test returns '_inDesiredState', that takes precedence
SteveL-MSFT Mar 6, 2025
5222901
make stateAndDiff also respect resource, enhance tests
SteveL-MSFT Mar 6, 2025
0f9d781
fix whitespace
SteveL-MSFT Mar 6, 2025
12426c0
revert change to test
SteveL-MSFT Mar 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
make stateAndDiff also respect resource, enhance tests
  • Loading branch information
SteveL-MSFT committed Mar 27, 2025
commit 52229019a5ca26d14240d80a6d141569a3910a0a
17 changes: 10 additions & 7 deletions dsc/tests/dsc_config_test.tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,13 @@ Describe 'dsc config test tests' {
}
}

It '_inDesiredState returned is used when: <inDesiredState>' -TestCases @(
@{ inDesiredState = $true }
@{ inDesiredState = $false }
It '_inDesiredState returned is used when: inDesiredState = <inDesiredState> and same = <same>' -TestCases @(
@{ inDesiredState = $true; valueOne = 1; valueTwo = 2; same = $true }
@{ inDesiredState = $true; valueOne = 3; valueTwo = 4; same = $false }
@{ inDesiredState = $false; valueOne = 1; valueTwo = 2; same = $true }
@{ inDesiredState = $false; valueOne = 3; valueTwo = 4; same = $false }
) {
param($inDesiredState)
param($inDesiredState, $valueOne, $valueTwo)

$configYaml = @"
`$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
Expand All @@ -46,17 +48,18 @@ Describe 'dsc config test tests' {
type: Test/InDesiredState
properties:
_inDesiredState: $inDesiredState
value: Hello
valueOne: $valueOne
valueTwo: $valueTwo
"@

$out = dsc config test -i $configYaml | ConvertFrom-Json
$LASTEXITCODE | Should -Be 0
$out.results[0].result.inDesiredState | Should -Be $inDesiredState
if ($inDesiredState) {
if ($same) {
$out.results[0].result.differingProperties | Should -BeNullOrEmpty
}
else {
$out.results[0].result.differingProperties | Should -Contain 'value'
$out.results[0].result.differingProperties | Should -Be @('valueOne', 'valueTwo')
}
}
}
37 changes: 17 additions & 20 deletions dsc_lib/src/dscresources/command_resource.rs
Original file line number Diff line number Diff line change
Expand Up @@ -283,25 +283,8 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
return Err(DscError::Operation(t!("dscresources.commandResource.failedParseJson", executable = &test.executable, stdout = stdout, stderr = stderr, err = err).to_string()))
}
};
// if actual state contains _inDesiredState, we use that to determine if the resource is in desired state
let mut in_desired_state: Option<bool> = None;
if let Some(in_desired_state_value) = actual_value.get("_inDesiredState") {
if let Some(desired_state) = in_desired_state_value.as_bool() {
in_desired_state = Some(desired_state);
} else {
return Err(DscError::Operation(t!("dscresources.commandResource.inDesiredStateNotBool").to_string()));
}
}

let mut diff_properties: Vec<String> = Vec::new();
match in_desired_state {
Some(true) => {
// if _inDesiredState is true, we don't need to check for diff properties
},
Some(false) | None => {
diff_properties = get_diff(&expected_value, &actual_value);
}
}
let in_desired_state = get_desired_state(&actual_value)?;
let diff_properties = get_diff(&expected_value, &actual_value);
Ok(TestResult::Resource(ResourceTestResponse {
desired_state: expected_value,
actual_state: actual_value,
Expand All @@ -320,10 +303,11 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
return Err(DscError::Command(resource.resource_type.clone(), exit_code, t!("dscresources.commandResource.testNoDiff").to_string()));
};
let diff_properties: Vec<String> = serde_json::from_str(diff_properties)?;
let in_desired_state = get_desired_state(&actual_value)?;
Ok(TestResult::Resource(ResourceTestResponse {
desired_state: expected_value,
actual_state: actual_value,
in_desired_state: diff_properties.is_empty(),
in_desired_state: in_desired_state.unwrap_or(diff_properties.is_empty()),
diff_properties,
}))
},
Expand Down Expand Up @@ -353,6 +337,19 @@ pub fn invoke_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Re
}
}

fn get_desired_state(actual: &Value) -> Result<Option<bool>, DscError> {
// if actual state contains _inDesiredState, we use that to determine if the resource is in desired state
let mut in_desired_state: Option<bool> = None;
if let Some(in_desired_state_value) = actual.get("_inDesiredState") {
if let Some(desired_state) = in_desired_state_value.as_bool() {
in_desired_state = Some(desired_state);
} else {
return Err(DscError::Operation(t!("dscresources.commandResource.inDesiredStateNotBool").to_string()));
}
}
Ok(in_desired_state)
}

fn invoke_synthetic_test(resource: &ResourceManifest, cwd: &str, expected: &str) -> Result<TestResult, DscError> {
let get_result = invoke_get(resource, cwd, expected)?;
let actual_state = match get_result {
Expand Down
6 changes: 5 additions & 1 deletion tools/dsctest/src/in_desired_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,14 @@
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};

#[allow(clippy::struct_field_names)]
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct InDesiredState {
#[serde(rename = "_inDesiredState", skip_serializing_if = "Option::is_none")]
pub in_desired_state: Option<bool>,
pub value: String,
#[serde(rename = "valueOne")]
pub value_one: i32,
#[serde(rename = "valueTwo")]
pub value_two: i32,
}
3 changes: 2 additions & 1 deletion tools/dsctest/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ fn main() {
std::process::exit(1);
}
};
in_desired_state.value = "SomethingElse".to_string();
in_desired_state.value_one = 1;
in_desired_state.value_two= 2;
serde_json::to_string(&in_desired_state).unwrap()
},
SubCommand::Schema { subcommand } => {
Expand Down