Skip to content

Commit 087715d

Browse files
committed
add test for multi-versions
1 parent ef33bf9 commit 087715d

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

dsc/tests/dsc_config_version.tests.ps1

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,25 @@ Describe 'Tests for resource versioning' {
5656
$LASTEXITCODE | Should -Be 0 -Because (Get-Content $TestDrive/error.log -Raw)
5757
$out.results[0].result.actualState.version | Should -BeExactly $expected
5858
}
59+
60+
It 'Multiple versions should be handled correctly' {
61+
$config_yaml = @"
62+
`$schema: https://aka.ms/dsc/schemas/v3/bundled/config/document.json
63+
resources:
64+
- name: Test Version 1
65+
type: Test/Version
66+
apiVersion: '1.1.2'
67+
- name: Test Version 2
68+
type: Test/Version
69+
apiVersion: '1.1.0'
70+
- name: Test Version 3
71+
type: Test/Version
72+
apiVersion: '2'
73+
"@
74+
$out = dsc -l trace config get -i $config_yaml 2> $TestDrive/error.log | ConvertFrom-Json
75+
$LASTEXITCODE | Should -Be 0 -Because (Get-Content $TestDrive/error.log -Raw)
76+
$out.results[0].result.actualState.version | Should -BeExactly '1.1.2'
77+
$out.results[1].result.actualState.version | Should -BeExactly '1.1.0'
78+
$out.results[2].result.actualState.version | Should -BeExactly '2.0.0'
79+
}
5980
}

dsc_lib/src/discovery/discovery_trait.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
use crate::{dscerror::DscError, extensions::dscextension::DscExtension, dscresources::dscresource::DscResource};
55
use std::collections::BTreeMap;
6-
76
use super::command_discovery::ImportedManifest;
87

98
#[derive(Debug, PartialEq)]

dsc_lib/src/discovery/mod.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ use semver::{Version, VersionReq};
1212
use std::collections::BTreeMap;
1313
use command_discovery::{CommandDiscovery, ImportedManifest};
1414
use tracing::error;
15-
use tracing::debug;
1615

1716
#[derive(Clone)]
1817
pub struct Discovery {
@@ -96,8 +95,15 @@ impl Discovery {
9695

9796
let type_name = type_name.to_lowercase();
9897
if let Some(resources) = self.resources.get(&type_name) {
99-
if let Some(version_string) = version_string {
100-
if let Ok(version_req) = VersionReq::parse(version_string) {
98+
if let Some(version) = version_string {
99+
// The semver crate uses caret (meaning compatible) by default instead of exact if not specified
100+
// 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()) {
102+
format!("={version}")
103+
} else {
104+
version.to_string()
105+
};
106+
if let Ok(version_req) = VersionReq::parse(&version) {
101107
for resource in resources {
102108
if let Ok(resource_version) = Version::parse(&resource.version) {
103109
if version_req.matches(&resource_version) {

0 commit comments

Comments
 (0)