diff --git a/src/EmbeddedSonarAnalyzer.props b/src/EmbeddedSonarAnalyzer.props
index 735d1a1f7..539f4afc9 100644
--- a/src/EmbeddedSonarAnalyzer.props
+++ b/src/EmbeddedSonarAnalyzer.props
@@ -7,7 +7,7 @@
10.3.0.106239
6.60.0.76379
10.18.0.28572
- 2.16.0.4008
+ 2.19.0.4883
10.10.0.79572
diff --git a/src/SLCore.IntegrationTests/FileAnalysisTestsRunner.cs b/src/SLCore.IntegrationTests/FileAnalysisTestsRunner.cs
index 8575f8ef6..a038cf8ca 100644
--- a/src/SLCore.IntegrationTests/FileAnalysisTestsRunner.cs
+++ b/src/SLCore.IntegrationTests/FileAnalysisTestsRunner.cs
@@ -177,41 +177,41 @@ public void Dispose()
internal interface ITestingFile
{
string RelativePath { get; }
- List ExpectedIssues { get; }
+ List ExpectedIssues { get; }
}
-internal record ExpectedTestIssue(string ruleKey, TextRangeDto textRange, CleanCodeAttribute cleanCodeAttribute, int expectedFlows);
+internal record TestIssue(string ruleKey, TextRangeDto textRange, CleanCodeAttribute? cleanCodeAttribute, int expectedFlows);
internal class JavaScriptIssuesFile : ITestingFile
{
public string RelativePath => @"Resources\JavaScriptIssues.js";
- public List ExpectedIssues =>
+ public List ExpectedIssues =>
[
- new ExpectedTestIssue("javascript:S1135", new TextRangeDto(1, 3, 1, 7), CleanCodeAttribute.COMPLETE, 0),
- new ExpectedTestIssue("javascript:S3504", new TextRangeDto(2, 0, 2, 5), CleanCodeAttribute.CLEAR, 0)
+ new("javascript:S1135", new TextRangeDto(1, 3, 1, 7), CleanCodeAttribute.COMPLETE, 0),
+ new("javascript:S3504", new TextRangeDto(2, 0, 2, 5), CleanCodeAttribute.CLEAR, 0)
];
}
internal class OneIssueRuleWithParamFile : ITestingFile
{
public string RelativePath => @"Resources\RuleParam.js";
-
- public readonly string CtorParamRuleId = "javascript:S107";
- public readonly int ActualCtorParams = 4;
- public readonly string CtorParamName = "maximumFunctionParameters";
- public List ExpectedIssues { get; set; }
+
+ public const string CtorParamRuleId = "javascript:S107";
+ public const int ActualCtorParams = 4;
+ public const string CtorParamName = "maximumFunctionParameters";
+ public List ExpectedIssues { get; set; }
}
internal class TypeScriptIssuesFile : ITestingFile
{
public string RelativePath => @"Resources\TypeScriptIssues.ts";
- public List ExpectedIssues =>
+ public List ExpectedIssues =>
[
- new ExpectedTestIssue("typescript:S2737", new TextRangeDto(3, 2, 3, 7), CleanCodeAttribute.CLEAR, 0),
- new ExpectedTestIssue("typescript:S1186", new TextRangeDto(7, 16, 7, 19), CleanCodeAttribute.COMPLETE, 0),
- new ExpectedTestIssue("typescript:S3776", new TextRangeDto(30, 9, 30, 18), CleanCodeAttribute.FOCUSED, 21)
+ new("typescript:S2737", new TextRangeDto(3, 2, 3, 7), CleanCodeAttribute.CLEAR, 0),
+ new("typescript:S1186", new TextRangeDto(7, 16, 7, 19), CleanCodeAttribute.COMPLETE, 0),
+ new("typescript:S3776", new TextRangeDto(30, 9, 30, 18), CleanCodeAttribute.FOCUSED, 21)
];
}
@@ -219,10 +219,10 @@ internal class CssIssuesFile : ITestingFile
{
public string RelativePath => @"Resources\CssIssues.css";
- public List ExpectedIssues =>
+ public List ExpectedIssues =>
[
- new ExpectedTestIssue("css:S4666", new TextRangeDto(20, 0, 20, 77), CleanCodeAttribute.LOGICAL, 0),
- new ExpectedTestIssue("css:S4655", new TextRangeDto(12, 0, 12, 38), CleanCodeAttribute.LOGICAL, 0),
+ new("css:S4666", new TextRangeDto(20, 0, 20, 77), CleanCodeAttribute.LOGICAL, 0),
+ new("css:S4655", new TextRangeDto(12, 0, 12, 38), CleanCodeAttribute.LOGICAL, 0),
];
}
@@ -230,24 +230,25 @@ internal class VueIssuesFile : ITestingFile
{
public string RelativePath => @"Resources\VueIssues.vue";
- public List ExpectedIssues =>
+ public List ExpectedIssues =>
[
- new ExpectedTestIssue("css:S4661", new TextRangeDto(12, 0, 12, 43), CleanCodeAttribute.LOGICAL, 0),
- new ExpectedTestIssue("css:S4658", new TextRangeDto(12, 0, 12, 43), CleanCodeAttribute.CLEAR, 0),
+ new("css:S4661", new TextRangeDto(12, 0, 12, 43), CleanCodeAttribute.LOGICAL, 0),
+ new("css:S4658", new TextRangeDto(12, 0, 12, 43), CleanCodeAttribute.CLEAR, 0),
];
}
internal class SecretsIssuesFile : ITestingFile
{
- private const string CloudSecretsRuleKey = "secrets:S6336";
+ private const string AmazonSecretsRuleKey = "secrets:S6290";
+ private const string AzureSecretsRuleKey = "secrets:S6684";
public string RelativePath => @"Resources\Secrets.yml";
- public (string ruleKey, int issuesCount) RuleWithMultipleIssues => (CloudSecretsRuleKey, 2);
+ public (string ruleKey, int issuesCount) RuleWithMultipleIssues => (AmazonSecretsRuleKey, 2);
- public List ExpectedIssues =>
+ public List ExpectedIssues =>
[
- new ExpectedTestIssue(CloudSecretsRuleKey, new TextRangeDto(9, 24, 9, 40), CleanCodeAttribute.TRUSTWORTHY, 0),
- new ExpectedTestIssue(CloudSecretsRuleKey, new TextRangeDto(14, 24, 14, 40), CleanCodeAttribute.TRUSTWORTHY, 0),
- new ExpectedTestIssue("secrets:S6337", new TextRangeDto(20, 12, 20, 56), CleanCodeAttribute.TRUSTWORTHY, 0),
+ new(AmazonSecretsRuleKey, new TextRangeDto(9, 38, 9, 78), CleanCodeAttribute.TRUSTWORTHY, 0),
+ new(AmazonSecretsRuleKey, new TextRangeDto(14, 38, 14, 78), CleanCodeAttribute.TRUSTWORTHY, 0),
+ new(AzureSecretsRuleKey, new TextRangeDto(20, 33, 20, 65), CleanCodeAttribute.TRUSTWORTHY, 0),
];
}
diff --git a/src/SLCore.IntegrationTests/Resources/Secrets.yml b/src/SLCore.IntegrationTests/Resources/Secrets.yml
index 6f4e4057e..70756f2b6 100644
--- a/src/SLCore.IntegrationTests/Resources/Secrets.yml
+++ b/src/SLCore.IntegrationTests/Resources/Secrets.yml
@@ -4,20 +4,26 @@
#________________
-# S6336 - Alibaba Cloud AccessKeys should not be disclosed
+# S6290 - Amazon Web Services credentials should not be disclosed
-#"String aliyunAcecret="LTAI5tBcc9SecYAo";
+# props.set("aws-secret-access-key", "kHeUAwnSUizTWpSbyGAz4f+As5LshPIjvtpswqGb")
#___________________________________________________________________
-# S6336 - Alibaba Cloud AccessKeys should not be disclosed
+# S6290 - Amazon Web Services credentials should not be disclosed
-#"String aliyunAcecret="LTAI5tBcc9SecYAo";
+# props.set("aws-secret-access-key", "kHeUAwnSUizTWpSbyGAz4f+As5LshPIjvtpswqGb")
+
+#___________________________________________________________________
+
+# S6684 Azure Subscription Keys should not be disclosed
+
+# props.set("subscription_key", "efbb1a98f026d061464af685cd16dcd3")
#___________________________________________________________________
# S6337 - IBM API keys should not be disclosed
-#"apikey": "fDKU7e_u_EnQgWgDVO4b_ubGqVTa5IYwWEey7lMfEB_1"
+#"apikey": "fDKU7e_u_EnQgWgDVO4b_ubGqVTa5IYwWEey7lMfEB_1" NOT SUPPORTED WITH BASIC ANALYZER
#___________________________________________________________________
diff --git a/src/SLCore.IntegrationTests/RuleConfigurationAnalysisTests.cs b/src/SLCore.IntegrationTests/RuleConfigurationAnalysisTests.cs
index 5800290fb..e044244ec 100644
--- a/src/SLCore.IntegrationTests/RuleConfigurationAnalysisTests.cs
+++ b/src/SLCore.IntegrationTests/RuleConfigurationAnalysisTests.cs
@@ -35,7 +35,7 @@ public static void ClassInitialize(TestContext context)
{
sharedFileAnalysisTestsRunner = new FileAnalysisTestsRunner(nameof(RuleConfigurationAnalysisTests));
}
-
+
[ClassCleanup]
public static void ClassCleanup()
{
@@ -48,13 +48,13 @@ public async Task StandaloneRuleConfig_JavaScriptAnalysisShouldIgnoreOneIssueOfI
var ruleToDisable = FileAnalysisTestsRunner.JavaScriptIssues.ExpectedIssues[0];
var ruleConfig = CreateInactiveRuleConfig(ruleToDisable.ruleKey);
sharedFileAnalysisTestsRunner.SetRuleConfiguration(ruleConfig);
-
+
var issuesByFileUri = await sharedFileAnalysisTestsRunner.RunFileAnalysis(FileAnalysisTestsRunner.JavaScriptIssues, TestContext.TestName);
issuesByFileUri.Should().HaveCount(1);
issuesByFileUri[new FileUri(FileAnalysisTestsRunner.JavaScriptIssues.GetFullPath())].Should().HaveCount(FileAnalysisTestsRunner.JavaScriptIssues.ExpectedIssues.Count - 1);
}
-
+
[TestMethod]
public async Task StandaloneRuleConfig_SecretsAnalysisShouldIgnoreTwoIssuesOfInactiveRule()
{
@@ -67,7 +67,7 @@ public async Task StandaloneRuleConfig_SecretsAnalysisShouldIgnoreTwoIssuesOfIna
issuesByFileUri.Should().HaveCount(1);
issuesByFileUri[new FileUri(FileAnalysisTestsRunner.SecretsIssues.GetFullPath())].Should().HaveCount(FileAnalysisTestsRunner.SecretsIssues.ExpectedIssues.Count - multipleIssuesRule.issuesCount);
}
-
+
[TestMethod]
public async Task StandaloneRuleConfig_JsLetRuleIsDisableInSettingsFile_JavaScriptAnalysisShouldIgnoreIssueOnInitialization()
{
@@ -80,7 +80,7 @@ public async Task StandaloneRuleConfig_JsLetRuleIsDisableInSettingsFile_JavaScri
issuesByFileUri.Should().HaveCount(1);
issuesByFileUri[new FileUri(FileAnalysisTestsRunner.JavaScriptIssues.GetFullPath())].Should().HaveCount(FileAnalysisTestsRunner.JavaScriptIssues.ExpectedIssues.Count - 1);
}
-
+
[TestMethod]
public async Task StandaloneRuleConfig_CloudSecretsRuleIsDisabledInSettingsFile_SecretsAnalysisShouldIgnoreIssueOnInitialization()
{
@@ -89,31 +89,31 @@ public async Task StandaloneRuleConfig_CloudSecretsRuleIsDisabledInSettingsFile_
using var customTestRunner = new FileAnalysisTestsRunner(TestContext.TestName, secretsRuleConfig);
var issuesByFileUri = await customTestRunner.RunFileAnalysis(FileAnalysisTestsRunner.SecretsIssues, TestContext.TestName);
-
+
issuesByFileUri.Should().HaveCount(1);
issuesByFileUri[new FileUri(FileAnalysisTestsRunner.SecretsIssues.GetFullPath())].Should().HaveCount(FileAnalysisTestsRunner.SecretsIssues.ExpectedIssues.Count - multipleIssuesRule.issuesCount);
}
-
+
[TestMethod]
public async Task StandaloneRuleConfig_CtorParamsUnderThreshold_JavaScriptActiveRuleShouldHaveNoIssue()
{
- var ctorParamsRuleConfig = CreateActiveCtorParamRuleConfig(threshold: FileAnalysisTestsRunner.OneIssueRuleWithParam.ActualCtorParams + 1);
+ var ctorParamsRuleConfig = CreateActiveCtorParamRuleConfig(threshold: OneIssueRuleWithParamFile.ActualCtorParams + 1);
sharedFileAnalysisTestsRunner.SetRuleConfiguration(ctorParamsRuleConfig);
-
+
var issuesByFileUri = await sharedFileAnalysisTestsRunner.RunFileAnalysis(FileAnalysisTestsRunner.OneIssueRuleWithParam, TestContext.TestName);
-
+
issuesByFileUri.Should().HaveCount(1);
issuesByFileUri[new FileUri(FileAnalysisTestsRunner.OneIssueRuleWithParam.GetFullPath())].Should().HaveCount(0);
}
-
+
[TestMethod]
public async Task StandaloneRuleConfig_CtorParamsAboveThreshold_JavaScriptActiveRuleShouldHaveOneIssue()
{
- var ctorParamsRuleConfig = CreateActiveCtorParamRuleConfig(threshold: FileAnalysisTestsRunner.OneIssueRuleWithParam.ActualCtorParams - 1);
+ var ctorParamsRuleConfig = CreateActiveCtorParamRuleConfig(threshold: OneIssueRuleWithParamFile.ActualCtorParams - 1);
sharedFileAnalysisTestsRunner.SetRuleConfiguration(ctorParamsRuleConfig);
-
+
var issuesByFileUri = await sharedFileAnalysisTestsRunner.RunFileAnalysis(FileAnalysisTestsRunner.OneIssueRuleWithParam, TestContext.TestName);
-
+
issuesByFileUri.Should().HaveCount(1);
issuesByFileUri[new FileUri(FileAnalysisTestsRunner.OneIssueRuleWithParam.GetFullPath())].Should().HaveCount(1);
}
@@ -122,7 +122,7 @@ private static Dictionary CreateActiveCtorParam
{
return new()
{
- { FileAnalysisTestsRunner.OneIssueRuleWithParam.CtorParamRuleId, new StandaloneRuleConfigDto(isActive: true, new() { { FileAnalysisTestsRunner.OneIssueRuleWithParam.CtorParamName, threshold.ToString() } }) }
+ { OneIssueRuleWithParamFile.CtorParamRuleId, new StandaloneRuleConfigDto(isActive: true, new() { { OneIssueRuleWithParamFile.CtorParamName, threshold.ToString() } }) }
};
}
diff --git a/src/SLCore.IntegrationTests/SimpleAnalysisTests.cs b/src/SLCore.IntegrationTests/SimpleAnalysisTests.cs
index e8fdabb45..b950c9359 100644
--- a/src/SLCore.IntegrationTests/SimpleAnalysisTests.cs
+++ b/src/SLCore.IntegrationTests/SimpleAnalysisTests.cs
@@ -19,6 +19,7 @@
*/
using SonarLint.VisualStudio.SLCore.Common.Models;
+using SonarLint.VisualStudio.SLCore.Listener.Analysis.Models;
namespace SonarLint.VisualStudio.SLCore.IntegrationTests;
@@ -34,27 +35,27 @@ public static void ClassInitialize(TestContext context)
{
sharedFileAnalysisTestsRunner = new FileAnalysisTestsRunner(nameof(SimpleAnalysisTests));
}
-
+
[ClassCleanup]
public static void ClassCleanup()
{
sharedFileAnalysisTestsRunner.Dispose();
}
-
+
[TestMethod]
- public Task DefaultRuleConfig_ContentFromDisk_JavaScriptAnalysisProducesExpectedIssues()
+ public Task DefaultRuleConfig_ContentFromDisk_JavaScriptAnalysisProducesExpectedIssues()
=> DefaultRuleConfig_AnalysisProducesExpectedIssuesInFile(FileAnalysisTestsRunner.JavaScriptIssues,false);
-
+
[TestMethod]
- public Task DefaultRuleConfig_ContentFromRpc_JavaScriptAnalysisProducesExpectedIssues()
+ public Task DefaultRuleConfig_ContentFromRpc_JavaScriptAnalysisProducesExpectedIssues()
=> DefaultRuleConfig_AnalysisProducesExpectedIssuesInFile(FileAnalysisTestsRunner.JavaScriptIssues,true);
[TestMethod]
- public Task DefaultRuleConfig_ContentFromDisk_SecretsAnalysisProducesExpectedIssues()
+ public Task DefaultRuleConfig_ContentFromDisk_SecretsAnalysisProducesExpectedIssues()
=> DefaultRuleConfig_AnalysisProducesExpectedIssuesInFile(FileAnalysisTestsRunner.SecretsIssues, false);
[TestMethod]
- public Task DefaultRuleConfig_ContentFromRpc_SecretsAnalysisProducesExpectedIssues()
+ public Task DefaultRuleConfig_ContentFromRpc_SecretsAnalysisProducesExpectedIssues()
=> DefaultRuleConfig_AnalysisProducesExpectedIssuesInFile(FileAnalysisTestsRunner.SecretsIssues, true);
[TestMethod]
@@ -87,16 +88,7 @@ private async Task DefaultRuleConfig_AnalysisProducesExpectedIssuesInFile(ITesti
issuesByFileUri.Should().HaveCount(1);
var receivedIssues = issuesByFileUri[new FileUri(testingFile.GetFullPath())];
- receivedIssues.Should().HaveCount(testingFile.ExpectedIssues.Count);
-
- foreach (var expectedIssue in testingFile.ExpectedIssues)
- {
- var receivedIssue = receivedIssues.SingleOrDefault(x => x.ruleKey == expectedIssue.ruleKey && x.textRange.Equals(expectedIssue.textRange));
- receivedIssue.Should().NotBeNull();
- receivedIssue.severityMode.Right.Should().NotBeNull();
- receivedIssue.severityMode.Right.cleanCodeAttribute.Should().Be(expectedIssue.cleanCodeAttribute);
- receivedIssue.flows.Count.Should().Be(expectedIssue.expectedFlows);
- }
+ var receivedTestIssues = receivedIssues.Select(x => new TestIssue(x.ruleKey, x.textRange, x.severityMode.Right?.cleanCodeAttribute, x.flows.Count));
+ receivedTestIssues.Should().BeEquivalentTo(testingFile.ExpectedIssues);
}
-
}