Skip to content

Commit 056b18a

Browse files
committed
address clippy, add resource testes
1 parent 95ecd7a commit 056b18a

File tree

8 files changed

+52
-19
lines changed

8 files changed

+52
-19
lines changed

dsc/src/subcommand.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ pub fn validate_config(config: &Configuration, progress_format: ProgressFormat)
494494
let Some(type_name) = resource_block["type"].as_str() else {
495495
return Err(DscError::Validation(t!("subcommand.resourceTypeNotSpecified").to_string()));
496496
};
497-
resource_types.push(DiscoveryFilter::new(type_name.to_lowercase().to_string(), resource_block["api_version"].as_str().map(|s| s.to_string())));
497+
resource_types.push(DiscoveryFilter::new(&type_name.to_lowercase(), resource_block["api_version"].as_str().map(std::string::ToString::to_string)));
498498
}
499499
dsc.find_resources(&resource_types, progress_format);
500500

@@ -574,16 +574,16 @@ pub fn resource(subcommand: &ResourceSubCommand, progress_format: ProgressFormat
574574
list_resources(&mut dsc, resource_name.as_ref(), adapter_name.as_ref(), description.as_ref(), tags.as_ref(), output_format.as_ref(), progress_format);
575575
},
576576
ResourceSubCommand::Schema { resource , version, output_format } => {
577-
dsc.find_resources(&[DiscoveryFilter::new(resource.clone(), version.clone())], progress_format);
577+
dsc.find_resources(&[DiscoveryFilter::new(resource, version.clone())], progress_format);
578578
resource_command::schema(&mut dsc, resource, version.as_deref(), output_format.as_ref());
579579
},
580580
ResourceSubCommand::Export { resource, version, input, file, output_format } => {
581-
dsc.find_resources(&[DiscoveryFilter::new(resource.clone(), version.clone())], progress_format);
581+
dsc.find_resources(&[DiscoveryFilter::new(resource, version.clone())], progress_format);
582582
let parsed_input = get_input(input.as_ref(), file.as_ref(), false);
583583
resource_command::export(&mut dsc, resource, version.as_deref(), &parsed_input, output_format.as_ref());
584584
},
585585
ResourceSubCommand::Get { resource, version, input, file: path, all, output_format } => {
586-
dsc.find_resources(&[DiscoveryFilter::new(resource.clone(), version.clone())], progress_format);
586+
dsc.find_resources(&[DiscoveryFilter::new(resource, version.clone())], progress_format);
587587
if *all {
588588
resource_command::get_all(&mut dsc, resource, version.as_deref(), output_format.as_ref());
589589
}
@@ -597,17 +597,17 @@ pub fn resource(subcommand: &ResourceSubCommand, progress_format: ProgressFormat
597597
}
598598
},
599599
ResourceSubCommand::Set { resource, version, input, file: path, output_format } => {
600-
dsc.find_resources(&[DiscoveryFilter::new(resource.clone(), version.clone())], progress_format);
600+
dsc.find_resources(&[DiscoveryFilter::new(resource, version.clone())], progress_format);
601601
let parsed_input = get_input(input.as_ref(), path.as_ref(), false);
602602
resource_command::set(&mut dsc, resource, version.as_deref(), &parsed_input, output_format.as_ref());
603603
},
604604
ResourceSubCommand::Test { resource, version, input, file: path, output_format } => {
605-
dsc.find_resources(&[DiscoveryFilter::new(resource.clone(), version.clone())], progress_format);
605+
dsc.find_resources(&[DiscoveryFilter::new(resource, version.clone())], progress_format);
606606
let parsed_input = get_input(input.as_ref(), path.as_ref(), false);
607607
resource_command::test(&mut dsc, resource, version.as_deref(), &parsed_input, output_format.as_ref());
608608
},
609609
ResourceSubCommand::Delete { resource, version, input, file: path } => {
610-
dsc.find_resources(&[DiscoveryFilter::new(resource.clone(), version.clone())], progress_format);
610+
dsc.find_resources(&[DiscoveryFilter::new(resource, version.clone())], progress_format);
611611
let parsed_input = get_input(input.as_ref(), path.as_ref(), false);
612612
resource_command::delete(&mut dsc, resource, version.as_deref(), &parsed_input);
613613
},

dsc/tests/dsc_resource_get.tests.ps1

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,10 @@ Describe 'resource get tests' {
7070
$out.bitness | Should -BeIn @('32', '64')
7171
$out.architecture | Should -BeIn @('x86', 'x86_64', 'arm64')
7272
}
73+
74+
It 'version works' {
75+
$out = dsc resource get -r Test/Version --version 1.1.2 | ConvertFrom-Json
76+
$LASTEXITCODE | Should -Be 0
77+
$out.actualState.version | Should -BeExactly '1.1.2'
78+
}
7379
}

dsc/tests/dsc_resource_set.tests.ps1

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Copyright (c) Microsoft Corporation.
2+
# Licensed under the MIT License.
3+
4+
Describe 'Invoke a resource set directly' {
5+
It 'set returns proper error code if no input is provided' {
6+
$out = dsc resource set -r Test/Version 2>&1
7+
$LASTEXITCODE | Should -Be 1
8+
$out | Should -BeLike '*ERROR*'
9+
}
10+
11+
It 'version works' {
12+
$out = dsc resource set -r Test/Version --version 1.1.2 --input '{"version":"1.1.2"}' | ConvertFrom-Json
13+
$LASTEXITCODE | Should -Be 0
14+
$out.afterState.version | Should -BeExactly '1.1.2'
15+
$out.changedProperties | Should -BeNullOrEmpty
16+
}
17+
}

dsc/tests/dsc_resource_test.tests.ps1

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,11 @@ Describe 'Invoke a resource test directly' {
2626
$LASTEXITCODE | Should -Be 1
2727
$out | Should -BeLike '*ERROR*'
2828
}
29+
30+
It 'version works' {
31+
$out = dsc resource test -r Test/Version --version 1.1.2 --input '{"version":"1.1.2"}' | ConvertFrom-Json
32+
$LASTEXITCODE | Should -Be 0
33+
$out.actualState.version | Should -BeExactly '1.1.2'
34+
$out.inDesiredState | Should -Be $true
35+
}
2936
}

dsc_lib/src/configure/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -855,7 +855,7 @@ impl Configurator {
855855
// create an array of DiscoveryFilter using the resource types and api_versions from the config
856856
let mut discovery_filter: Vec<DiscoveryFilter> = Vec::new();
857857
for resource in &config.resources {
858-
let filter = DiscoveryFilter::new(resource.resource_type.clone(), resource.api_version.clone());
858+
let filter = DiscoveryFilter::new(&resource.resource_type, resource.api_version.clone());
859859
if !discovery_filter.contains(&filter) {
860860
discovery_filter.push(filter);
861861
}

dsc_lib/src/discovery/command_discovery.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -476,12 +476,12 @@ impl ResourceDiscovery for CommandDiscovery {
476476
required_resources.insert(filter.clone(), false);
477477
}
478478

479-
for filter in required_resource_types.iter() {
479+
for filter in required_resource_types {
480480
if let Some(resources) = self.resources.get(filter.resource_type()) {
481-
for resource in resources.iter() {
481+
for resource in resources {
482482
if let Some(required_version) = filter.version() {
483483
if let Ok(resource_version) = Version::parse(&resource.version) {
484-
if let Ok(version_req) = VersionReq::parse(&required_version) {
484+
if let Ok(version_req) = VersionReq::parse(required_version) {
485485
if version_req.matches(&resource_version) {
486486
found_resources.entry(filter.resource_type().to_string()).or_default().push(resource.clone());
487487
required_resources.insert(filter.clone(), true);
@@ -505,7 +505,7 @@ impl ResourceDiscovery for CommandDiscovery {
505505
}
506506
} else {
507507
let version = match &filter.version() {
508-
Some(v) => v.to_string(),
508+
Some(v) => (*v).to_string(),
509509
None => String::new(),
510510
};
511511
return Err(DscError::ResourceNotFound(filter.resource_type().to_string(), version));
@@ -522,14 +522,14 @@ impl ResourceDiscovery for CommandDiscovery {
522522

523523
// now go through the adapters, this is for implicit adapters so version can't be specified so use latest version
524524
for adapter_name in self.adapters.clone().keys() {
525-
self.discover_adapted_resources("*", &adapter_name)?;
525+
self.discover_adapted_resources("*", adapter_name)?;
526526
add_resources_to_lookup_table(&self.adapted_resources);
527-
for filter in required_resource_types.iter() {
527+
for filter in required_resource_types {
528528
if let Some(adapted_resources) = self.adapted_resources.get(filter.resource_type()) {
529529
for resource in adapted_resources.iter().rev() {
530530
if let Some(required_version) = filter.version() {
531531
if let Ok(resource_version) = Version::parse(&resource.version) {
532-
if let Ok(version_req) = VersionReq::parse(&required_version) {
532+
if let Ok(version_req) = VersionReq::parse(required_version) {
533533
if version_req.matches(&resource_version) {
534534
found_resources.entry(filter.resource_type().to_string()).or_default().push(resource.clone());
535535
required_resources.insert(filter.clone(), true);

dsc_lib/src/discovery/discovery_trait.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@ pub struct DiscoveryFilter {
1818
}
1919

2020
impl DiscoveryFilter {
21-
pub fn new(resource_type: String, version: Option<String>) -> Self {
21+
#[must_use]
22+
pub fn new(resource_type: &str, version: Option<String>) -> Self {
2223
// The semver crate uses caret (meaning compatible) by default instead of exact if not specified
2324
// If the first character is a number, then we prefix with =
2425
let version = match version {
25-
Some(v) if v.chars().next().map_or(false, |c| c.is_ascii_digit()) => Some(format!("={v}")),
26+
Some(v) if v.chars().next().is_some_and(|c| c.is_ascii_digit()) => Some(format!("={v}")),
2627
other => other,
2728
};
2829
Self {
@@ -31,10 +32,12 @@ impl DiscoveryFilter {
3132
}
3233
}
3334

35+
#[must_use]
3436
pub fn resource_type(&self) -> &str {
3537
&self.resource_type
3638
}
3739

40+
#[must_use]
3841
pub fn version(&self) -> Option<&String> {
3942
self.version.as_ref()
4043
}

dsc_lib/src/discovery/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ impl Discovery {
8989
#[must_use]
9090
pub fn find_resource(&mut self, type_name: &str, version_string: Option<&str>) -> Option<&DscResource> {
9191
if self.resources.is_empty() {
92-
let discovery_filter = DiscoveryFilter::new(type_name.to_string(), version_string.map(|v| v.to_string()));
92+
let discovery_filter = DiscoveryFilter::new(type_name, version_string.map(std::string::ToString::to_string));
9393
self.find_resources(&[discovery_filter], ProgressFormat::None);
9494
}
9595

@@ -98,7 +98,7 @@ impl Discovery {
9898
if let Some(version) = version_string {
9999
// The semver crate uses caret (meaning compatible) by default instead of exact if not specified
100100
// If the first character is a number, then we prefix with =
101-
let version = if version.chars().next().map_or(false, |c| c.is_ascii_digit()) {
101+
let version = if version.chars().next().is_some_and(|c| c.is_ascii_digit()) {
102102
format!("={version}")
103103
} else {
104104
version.to_string()

0 commit comments

Comments
 (0)