Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion Rules/UseIdenticalMandatoryParametersDSC.cs
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ private IDictionary<string, string> GetKeys(string fileName)
// todo log the error
}

var cimClass = cimClasses?.FirstOrDefault();
var cimClass = cimClasses?.FirstOrDefault(_cimClass => _cimClass.CimSuperClass != null);
var cimSuperClassProperties = new HashSet<string>(
cimClass?.CimSuperClass?.CimClassProperties.Select(cimPropertyDeclaration => cimPropertyDeclaration.Name) ??
Enumerable.Empty<string>());
Expand Down
54 changes: 54 additions & 0 deletions Tests/Rules/UseIdenticalMandatoryParametersForDSC.tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,60 @@ class ClassWithNoParent
{
[Write] Boolean Anonymous;
};
"@

# Act - run scriptanalyzer
$violations = Invoke-ScriptAnalyzer -Path $noParentClassFilepath -IncludeRule $ruleName -ErrorAction Stop
$violations.Count | Should -Be 0
}
}

Context "When a CIM class has no parent, but does contain a subclass which should not be processed" {
# regression test for #1192 - just check no uncaught exception
It "Should find no violations, and throw no exceptions" -Skip:($IsLinux -or $IsMacOS) {

# Arrange test content in testdrive
$dscResources = Join-Path -Path "TestDrive:" -ChildPath "DSCResources"
$noparentClassDir = Join-Path -Path $dscResources "ClassWithNoParent"

# need a fake module
$fakeModulePath = Join-Path -Path "TestDrive:" -ChildPath "test.psd1"
Set-Content -Path $fakeModulePath -Value @"
@{
ModuleVersion = '1.0'
GUID = 'fe2acc06-d9e6-4ca6-b57d-068e8fc5ad57'
Author = 'DummyAuthor'
}
"@
# and under it a directory called dscresources\something
New-Item -ItemType Directory -Path $noParentClassDir
$noparentClassFilepath = Join-Path -Path $noParentClassDir -ChildPath 'MSFT_ClassWithNoParent.psm1'
$noparentClassMofFilepath = Join-Path -Path $noParentClassDir -ChildPath 'MSFT_ClassWithNoParent.schema.mof'

# containing a .psm1 file and a .schema.mof file with same base name
Set-Content -Path $noParentClassFilepath -Value @"
#requires -Version 4.0 -Modules CimCmdlets
function Get-TargetResource { }
function Set-TargetResource { }
function Test-TargetResource { }
Export-ModuleMember -Function *-TargetResource
"@

Set-Content -Path $noParentClassMofFilePath -Value @"
[ClassVersion("1.0.0.0")]
Class MSFT_SubClass
{
[Key, Description("Key of the subclass")] String Name;
[Required, Description("Required parameter of the subclass")] String Description;
[Write, Description("Additional non-required parameter")] Boolean Enabled;
};

[ClassVersion("1.0.0"), FriendlyName("ClassWithNoParent")]
class MSFT_ClassWithNoParent : OMI_BaseResource
{
[write, Description("dummy subclass variable"), EmbeddedInstance("MSFT_SubClass")]
string Subclass;
};
"@

# Act - run scriptanalyzer
Expand Down