Skip to content

Commit

Permalink
Instead of using the first cimClass and then having no superClass, us…
Browse files Browse the repository at this point in the history
…e the first cimClass that has a non-null superClass (#1200)

* Instead of using the first cimClass and then having to superClass, use the first cimClass that has a non-null superClass

* add regression test
  • Loading branch information
bergmeister authored May 5, 2019
1 parent 7a3688e commit 1cdd33c
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 1 deletion.
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

0 comments on commit 1cdd33c

Please sign in to comment.