1- using FluentAssertions ;
2- using Microsoft . VisualStudio . TestTools . UnitTesting ;
3- using NSubstitute ;
4- using SonarScanner . MSBuild . Common ;
5- using SonarScanner . MSBuild . PreProcessor . AnalysisConfigProcessing . Processors ;
1+ using SonarScanner . MSBuild . PreProcessor . AnalysisConfigProcessing . Processors ;
62
73namespace SonarScanner . MSBuild . PreProcessor . Test . AnalysisConfigProcessing . Processors ;
84
@@ -13,39 +9,74 @@ public class PropertyAsScannerOptsMappingProcessorTests
139 public void Update_TrustStorePropertiesNullValue_Mapped ( )
1410 {
1511 // Arrange
16- var processor = CreateProcessor ( isUnix : false ) ;
17- var config = new AnalysisConfig { LocalSettings = [ new Property ( "sonar.scanner.truststorePath" , null ) ] } ;
12+ var cmdLineArgs = new ListPropertiesProvider ( ) ;
13+ cmdLineArgs . AddProperty ( "sonar.scanner.truststorePath" , null ) ;
14+ cmdLineArgs . AddProperty ( "sonar.scanner.truststorePassword" , null ) ;
15+ var processor = CreateProcessor ( CreateProcessedArgs ( cmdLineArgs ) , isUnix : false ) ;
16+ var config = new AnalysisConfig
17+ {
18+ LocalSettings =
19+ [
20+ new Property ( "sonar.scanner.truststorePath" , null ) ,
21+ new Property ( "sonar.scanner.truststorePassword" , null )
22+ ]
23+ } ;
1824
1925 // Act
2026 processor . Update ( config ) ;
2127
22- AssertExpectedScannerOptsSettings ( "javax.net.ssl.trustStore" , null , config ) ;
28+ config . ScannerOptsSettings . Should ( ) . BeEmpty ( ) ;
2329 Property . TryGetProperty ( "javax.net.ssl.trustStore" , config . LocalSettings , out _ ) . Should ( ) . BeFalse ( ) ;
2430 }
2531
2632 [ TestMethod ]
2733 public void Update_TrustStorePropertiesValue_Mapped ( )
2834 {
2935 // Arrange
30- var processor = CreateProcessor ( isUnix : false ) ;
36+ var cmdLineArgs = new ListPropertiesProvider ( ) ;
37+ cmdLineArgs . AddProperty ( "sonar.scanner.truststorePath" , @"C:\path\to\truststore.pfx" ) ;
38+ cmdLineArgs . AddProperty ( "sonar.scanner.truststorePassword" , "itchange" ) ;
39+ var processor = CreateProcessor ( CreateProcessedArgs ( cmdLineArgs ) , isUnix : false ) ;
3140 var config = new AnalysisConfig
3241 {
3342 LocalSettings =
3443 [
3544 new Property ( "sonar.scanner.truststorePath" , @"C:\path\to\truststore.pfx" ) ,
36- new Property ( "sonar.scanner.truststorePassword" , "changeit " )
45+ new Property ( "sonar.scanner.truststorePassword" , "itchange " )
3746 ]
3847 } ;
3948
4049 // Act
4150 processor . Update ( config ) ;
4251
4352 AssertExpectedScannerOptsSettings ( "javax.net.ssl.trustStore" , @"""C:/path/to/truststore.pfx""" , config ) ;
44- AssertExpectedScannerOptsSettings ( "javax.net.ssl.trustStorePassword" , @"""changeit """ , config ) ;
53+ AssertExpectedScannerOptsSettings ( "javax.net.ssl.trustStorePassword" , @"""itchange """ , config ) ;
4554 Property . TryGetProperty ( "javax.net.ssl.trustStore" , config . LocalSettings , out _ ) . Should ( ) . BeFalse ( ) ;
4655 Property . TryGetProperty ( "javax.net.ssl.trustStorePassword" , config . LocalSettings , out _ ) . Should ( ) . BeFalse ( ) ;
4756 }
4857
58+ [ TestMethod ]
59+ public void Update_DefaultPropertyValues ( )
60+ {
61+ // Arrange
62+ var sonarUserHome = Path . Combine ( "~" , ".sonar" ) ;
63+ var defaultTruststorePath = Path . Combine ( sonarUserHome , SonarPropertiesDefault . TruststorePath ) ;
64+ var cmdLineArgs = new ListPropertiesProvider ( ) ;
65+ cmdLineArgs . AddProperty ( "sonar.userHome" , sonarUserHome ) ;
66+ var fileWrapper = Substitute . For < IFileWrapper > ( ) ;
67+ fileWrapper . Exists ( defaultTruststorePath ) . Returns ( true ) ;
68+ var processor = CreateProcessor ( CreateProcessedArgs ( cmdLineArgs , fileWrapper ) , isUnix : false ) ;
69+ var config = new AnalysisConfig { LocalSettings = [ new Property ( "sonar.userHome" , sonarUserHome ) ] } ;
70+
71+ // Act
72+ processor . Update ( config ) ;
73+
74+ config . LocalSettings . Should ( ) . ContainSingle ( x => x . Id == "sonar.userHome" && x . Value == sonarUserHome ) ;
75+ config . ScannerOptsSettings . Should ( ) . HaveCount ( 2 )
76+ . And . Contain ( x => x . Id == "javax.net.ssl.trustStore" && x . Value == $ "\" { defaultTruststorePath . Replace ( Path . DirectorySeparatorChar , Path . AltDirectorySeparatorChar ) } \" ")
77+ . And . Contain ( x => x . Id == "javax.net.ssl.trustStorePassword" && x . Value == $ "\" { SonarPropertiesDefault . TruststorePassword } \" ") ;
78+ }
79+
4980 [ DataTestMethod ]
5081 [ DataRow ( SonarProperties . Verbose , "true" ) ]
5182 [ DataRow ( SonarProperties . Organization , "org" ) ]
@@ -54,7 +85,9 @@ public void Update_TrustStorePropertiesValue_Mapped()
5485 public void Update_UnmappedProperties ( string id , string value )
5586 {
5687 // Arrange
57- var processor = CreateProcessor ( isUnix : false ) ;
88+ var cmdLineArgs = new ListPropertiesProvider ( ) ;
89+ cmdLineArgs . AddProperty ( id , value ) ;
90+ var processor = CreateProcessor ( CreateProcessedArgs ( cmdLineArgs ) , isUnix : false ) ;
5891 var config = new AnalysisConfig { LocalSettings = [ new Property ( id , value ) ] } ;
5992
6093 // Act
@@ -69,37 +102,41 @@ public void Update_UnmappedProperties(string id, string value)
69102 public void Update_MapsTruststorePathToScannerOpts_Windows ( string input , string expected )
70103 {
71104 // Arrange
72- var processor = CreateProcessor ( isUnix : false ) ;
105+ var cmdLineArgs = new ListPropertiesProvider ( ) ;
106+ cmdLineArgs . AddProperty ( "sonar.scanner.truststorePath" , input ) ;
107+ var processor = CreateProcessor ( CreateProcessedArgs ( cmdLineArgs ) , isUnix : false ) ;
73108 var config = new AnalysisConfig { LocalSettings = [ new Property ( "sonar.scanner.truststorePath" , input ) ] } ;
74109
75110 // Act
76111 processor . Update ( config ) ;
77112
78113 // Assert
79- config . LocalSettings . Should ( ) . BeEmpty ( ) ;
80- config . ScannerOptsSettings . Should ( ) . ContainSingle ( ) ;
114+ config . LocalSettings . Should ( ) . ContainSingle ( x => x . Id == SonarProperties . TruststorePassword && x . Value == SonarPropertiesDefault . TruststorePassword ) ;
115+ config . ScannerOptsSettings . Should ( ) . HaveCount ( 2 ) ;
81116 AssertExpectedScannerOptsSettings ( "javax.net.ssl.trustStore" , expected , config ) ;
117+ AssertExpectedScannerOptsSettings ( "javax.net.ssl.trustStorePassword" , $ "\" { SonarPropertiesDefault . TruststorePassword } \" ", config ) ;
82118 Property . TryGetProperty ( "sonar.scanner.truststorePath" , config . LocalSettings , out _ ) . Should ( ) . BeFalse ( ) ;
83119 }
84120
85121 [ DataTestMethod ]
86- [ DataRow ( "changeit " , @"""changeit """ ) ]
87- [ DataRow ( "change it " , @"""change it """ ) ]
88- [ DataRow ( @"""changeit """ , @"""changeit """ ) ]
122+ [ DataRow ( "itchange " , @"""itchange """ ) ]
123+ [ DataRow ( "it change " , @"""it change """ ) ]
124+ [ DataRow ( @"""itchange """ , @"""itchange """ ) ]
89125 public void Update_MapsTruststorePasswordToScannerOpts_Windows ( string input , string expected )
90126 {
91127 // Arrange
92- var processor = CreateProcessor ( isUnix : false ) ;
128+ var cmdLineArgs = new ListPropertiesProvider ( ) ;
129+ cmdLineArgs . AddProperty ( "sonar.scanner.truststorePassword" , input ) ;
130+ var processor = CreateProcessor ( CreateProcessedArgs ( cmdLineArgs ) , isUnix : false ) ;
93131 var config = new AnalysisConfig { LocalSettings = [ new Property ( "sonar.scanner.truststorePassword" , input ) ] } ;
94132
95133 // Act
96134 processor . Update ( config ) ;
97135
98136 // Assert
99- config . LocalSettings . Should ( ) . BeEmpty ( ) ;
137+ config . LocalSettings . Should ( ) . ContainSingle ( x => x . Id == SonarProperties . TruststorePassword && x . Value == input ) ;
100138 config . ScannerOptsSettings . Should ( ) . ContainSingle ( ) ;
101139 AssertExpectedScannerOptsSettings ( "javax.net.ssl.trustStorePassword" , expected , config ) ;
102- Property . TryGetProperty ( "sonar.scanner.truststorePassword" , config . LocalSettings , out _ ) . Should ( ) . BeFalse ( ) ;
103140 }
104141
105142 [ DataTestMethod ]
@@ -108,36 +145,40 @@ public void Update_MapsTruststorePasswordToScannerOpts_Windows(string input, str
108145 public void Update_MapsTruststorePathToScannerOpts_Linux ( string input , string expected )
109146 {
110147 // Arrange
111- var processor = CreateProcessor ( isUnix : true ) ;
148+ var cmdLineArgs = new ListPropertiesProvider ( ) ;
149+ cmdLineArgs . AddProperty ( "sonar.scanner.truststorePath" , input ) ;
150+ var processor = CreateProcessor ( CreateProcessedArgs ( cmdLineArgs ) , isUnix : true ) ;
112151 var config = new AnalysisConfig { LocalSettings = [ new Property ( "sonar.scanner.truststorePath" , input ) ] } ;
113152
114153 // Act
115154 processor . Update ( config ) ;
116155
117156 // Assert
118- config . LocalSettings . Should ( ) . BeEmpty ( ) ;
119- config . ScannerOptsSettings . Should ( ) . ContainSingle ( ) ;
157+ config . LocalSettings . Should ( ) . ContainSingle ( x => x . Id == SonarProperties . TruststorePassword && x . Value == SonarPropertiesDefault . TruststorePassword ) ;
158+ config . ScannerOptsSettings . Should ( ) . HaveCount ( 2 ) ;
120159 AssertExpectedScannerOptsSettings ( "javax.net.ssl.trustStore" , expected , config ) ;
160+ AssertExpectedScannerOptsSettings ( "javax.net.ssl.trustStorePassword" , SonarPropertiesDefault . TruststorePassword , config ) ;
121161 Property . TryGetProperty ( "sonar.scanner.truststorePath" , config . LocalSettings , out _ ) . Should ( ) . BeFalse ( ) ;
122162 }
123163
124164 [ DataTestMethod ]
125- [ DataRow ( "changeit " , "changeit " ) ]
126- [ DataRow ( "change it " , "change it " ) ]
165+ [ DataRow ( "itchange " , "itchange " ) ]
166+ [ DataRow ( "it change " , "it change " ) ]
127167 public void Update_MapsTruststorePasswordToScannerOpts_Linux ( string input , string expected )
128168 {
129169 // Arrange
130- var processor = CreateProcessor ( isUnix : true ) ;
170+ var cmdLineArgs = new ListPropertiesProvider ( ) ;
171+ cmdLineArgs . AddProperty ( "sonar.scanner.truststorePassword" , input ) ;
172+ var processor = CreateProcessor ( CreateProcessedArgs ( cmdLineArgs ) , isUnix : true ) ;
131173 var config = new AnalysisConfig { LocalSettings = [ new Property ( "sonar.scanner.truststorePassword" , input ) ] } ;
132174
133175 // Act
134176 processor . Update ( config ) ;
135177
136178 // Assert
137- config . LocalSettings . Should ( ) . BeEmpty ( ) ;
179+ config . LocalSettings . Should ( ) . ContainSingle ( x => x . Id == SonarProperties . TruststorePassword && x . Value == input ) ;
138180 config . ScannerOptsSettings . Should ( ) . ContainSingle ( ) ;
139181 AssertExpectedScannerOptsSettings ( "javax.net.ssl.trustStorePassword" , expected , config ) ;
140- Property . TryGetProperty ( "sonar.scanner.truststorePassword" , config . LocalSettings , out _ ) . Should ( ) . BeFalse ( ) ;
141182 }
142183
143184 private static void AssertExpectedScannerOptsSettings ( string key , string expectedValue , AnalysisConfig actualConfig )
@@ -147,10 +188,24 @@ private static void AssertExpectedScannerOptsSettings(string key, string expecte
147188 property . Value . Should ( ) . Be ( expectedValue , "Unexpected local value. Key: {0}" , key ) ;
148189 }
149190
150- private static PropertyAsScannerOptsMappingProcessor CreateProcessor ( bool isUnix = false )
191+ private static PropertyAsScannerOptsMappingProcessor CreateProcessor ( ProcessedArgs args , bool isUnix = false )
151192 {
152193 var operatingSystemProvider = Substitute . For < IOperatingSystemProvider > ( ) ;
153194 operatingSystemProvider . IsUnix ( ) . Returns ( isUnix ) ;
154- return new PropertyAsScannerOptsMappingProcessor ( null , null , operatingSystemProvider ) ;
195+ return new PropertyAsScannerOptsMappingProcessor ( args , null , operatingSystemProvider ) ;
155196 }
197+
198+ private static ProcessedArgs CreateProcessedArgs ( IAnalysisPropertyProvider cmdLineProvider = null , IFileWrapper fileWrapper = null ) =>
199+ new ( "valid.key" ,
200+ "valid.name" ,
201+ "1.0" ,
202+ "organization" ,
203+ false ,
204+ cmdLineProvider ?? Substitute . For < IAnalysisPropertyProvider > ( ) ,
205+ Substitute . For < IAnalysisPropertyProvider > ( ) ,
206+ EmptyPropertyProvider . Instance ,
207+ fileWrapper ?? Substitute . For < IFileWrapper > ( ) ,
208+ Substitute . For < IDirectoryWrapper > ( ) ,
209+ Substitute . For < IOperatingSystemProvider > ( ) ,
210+ Substitute . For < ILogger > ( ) ) ;
156211}
0 commit comments