Skip to content

Commit 293b9f5

Browse files
SCAN4NET-245 Add more truststore ITs (#2325)
1 parent 2ca7ad7 commit 293b9f5

File tree

6 files changed

+388
-99
lines changed

6 files changed

+388
-99
lines changed

Tests/SonarScanner.MSBuild.PreProcessor.Test/AnalysisConfigProcessing/AnalysisConfigGeneratorTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,12 +570,14 @@ public void GenerateFile_TrustStorePropertiesNullValue_Mapped()
570570
var settings = BuildSettings.CreateNonTeamBuildSettingsForTesting(analysisDir);
571571
var propertiesProvider = new ListPropertiesProvider();
572572
propertiesProvider.AddProperty("sonar.scanner.truststorePath", null);
573+
propertiesProvider.AddProperty("sonar.scanner.truststorePassword", null);
573574
var args = CreateProcessedArgs(propertiesProvider);
574575

575576
var config = AnalysisConfigGenerator.GenerateFile(args, settings, new(), EmptyProperties, new(), "9.9", null, Substitute.For<ILogger>());
576577

577-
AssertExpectedScannerOptsSettings("javax.net.ssl.trustStore", null, config);
578+
config.ScannerOptsSettings.Should().BeEmpty();
578579
Property.TryGetProperty("javax.net.ssl.trustStore", config.LocalSettings, out _).Should().BeFalse();
580+
Property.TryGetProperty("javax.net.ssl.trustStorePassword", config.LocalSettings, out _).Should().BeFalse();
579581
}
580582

581583
[DataTestMethod]
Lines changed: 86 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
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

73
namespace 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
}

Tests/SonarScanner.MSBuild.PreProcessor.Test/ArgumentProcessorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@ public void PreArgProc_TruststorePath()
746746
fileWrapper.Exists(Arg.Any<string>()).Returns(true);
747747
var result = CheckProcessingSucceeds(new TestLogger(), fileWrapper, Substitute.For<IDirectoryWrapper>(), "/k:key", @"/d:sonar.scanner.truststorePath=""c:\test.pfx""");
748748
result.TruststorePath.Should().Be(@"""c:\test.pfx""");
749-
result.TruststorePassword.Should().BeNull();
749+
result.TruststorePassword.Should().Be(SonarPropertiesDefault.TruststorePassword);
750750
}
751751

752752
[TestMethod]

0 commit comments

Comments
 (0)