Refactor code structure and optimize performance across multiple modules

This commit is contained in:
StellaOps Bot
2025-12-26 20:03:22 +02:00
parent c786faae84
commit f10d83c444
1385 changed files with 69732 additions and 10280 deletions

View File

@@ -31,7 +31,8 @@ public class JavaCallGraphExtractorTests
#region JavaEntrypointClassifier Tests
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaEntrypointClassifier_SpringRequestMapping_DetectedAsHttpHandler()
{
var classifier = new JavaEntrypointClassifier();
@@ -61,7 +62,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(EntrypointType.HttpHandler, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaEntrypointClassifier_SpringRestController_PublicMethodDetectedAsHttpHandler()
{
var classifier = new JavaEntrypointClassifier();
@@ -91,7 +93,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(EntrypointType.HttpHandler, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaEntrypointClassifier_JaxRsPath_DetectedAsHttpHandler()
{
var classifier = new JavaEntrypointClassifier();
@@ -121,7 +124,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(EntrypointType.HttpHandler, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaEntrypointClassifier_SpringScheduled_DetectedAsScheduledJob()
{
var classifier = new JavaEntrypointClassifier();
@@ -151,7 +155,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(EntrypointType.ScheduledJob, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaEntrypointClassifier_KafkaListener_DetectedAsMessageHandler()
{
var classifier = new JavaEntrypointClassifier();
@@ -181,7 +186,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(EntrypointType.MessageHandler, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaEntrypointClassifier_GrpcService_DetectedAsGrpcMethod()
{
var classifier = new JavaEntrypointClassifier();
@@ -212,7 +218,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(EntrypointType.GrpcMethod, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaEntrypointClassifier_MainMethod_DetectedAsCliCommand()
{
var classifier = new JavaEntrypointClassifier();
@@ -242,7 +249,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(EntrypointType.CliCommand, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaEntrypointClassifier_PrivateMethod_NotDetectedAsEntrypoint()
{
var classifier = new JavaEntrypointClassifier();
@@ -276,7 +284,8 @@ public class JavaCallGraphExtractorTests
#region JavaSinkMatcher Tests
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaSinkMatcher_RuntimeExec_DetectedAsCmdExec()
{
var matcher = new JavaSinkMatcher();
@@ -286,7 +295,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(SinkCategory.CmdExec, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaSinkMatcher_ProcessBuilderInit_DetectedAsCmdExec()
{
var matcher = new JavaSinkMatcher();
@@ -296,7 +306,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(SinkCategory.CmdExec, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaSinkMatcher_StatementExecute_DetectedAsSqlRaw()
{
var matcher = new JavaSinkMatcher();
@@ -306,7 +317,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(SinkCategory.SqlRaw, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaSinkMatcher_ObjectInputStream_DetectedAsUnsafeDeser()
{
var matcher = new JavaSinkMatcher();
@@ -316,7 +328,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(SinkCategory.UnsafeDeser, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaSinkMatcher_HttpClientExecute_DetectedAsSsrf()
{
var matcher = new JavaSinkMatcher();
@@ -326,7 +339,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(SinkCategory.Ssrf, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaSinkMatcher_FileWriter_DetectedAsPathTraversal()
{
var matcher = new JavaSinkMatcher();
@@ -336,7 +350,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(SinkCategory.PathTraversal, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaSinkMatcher_UnknownMethod_ReturnsNull()
{
var matcher = new JavaSinkMatcher();
@@ -346,7 +361,8 @@ public class JavaCallGraphExtractorTests
Assert.Null(result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaSinkMatcher_XxeVulnerableParsing_DetectedAsXxe()
{
var matcher = new JavaSinkMatcher();
@@ -356,7 +372,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(SinkCategory.XxeInjection, result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaSinkMatcher_ScriptEngineEval_DetectedAsCodeInjection()
{
var matcher = new JavaSinkMatcher();
@@ -370,7 +387,8 @@ public class JavaCallGraphExtractorTests
#region JavaBytecodeAnalyzer Tests
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaBytecodeAnalyzer_ValidClassHeader_Parsed()
{
var analyzer = new JavaBytecodeAnalyzer(NullLogger<JavaCallGraphExtractor>.Instance);
@@ -394,7 +412,8 @@ public class JavaCallGraphExtractorTests
// The important thing is it doesn't throw
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaBytecodeAnalyzer_InvalidMagic_ReturnsNull()
{
var analyzer = new JavaBytecodeAnalyzer(NullLogger<JavaCallGraphExtractor>.Instance);
@@ -406,7 +425,8 @@ public class JavaCallGraphExtractorTests
Assert.Null(result);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaBytecodeAnalyzer_EmptyArray_ReturnsNull()
{
var analyzer = new JavaBytecodeAnalyzer(NullLogger<JavaCallGraphExtractor>.Instance);
@@ -420,7 +440,8 @@ public class JavaCallGraphExtractorTests
#region Integration Tests
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task ExtractAsync_InvalidPath_ThrowsFileNotFound()
{
var request = new CallGraphExtractionRequest(
@@ -432,7 +453,8 @@ public class JavaCallGraphExtractorTests
() => _extractor.ExtractAsync(request));
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task ExtractAsync_WrongLanguage_ThrowsArgumentException()
{
await using var temp = await TempDirectory.CreateAsync();
@@ -446,7 +468,8 @@ public class JavaCallGraphExtractorTests
() => _extractor.ExtractAsync(request));
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task ExtractAsync_EmptyDirectory_ProducesEmptySnapshot()
{
await using var temp = await TempDirectory.CreateAsync();
@@ -468,7 +491,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(_fixedTime, snapshot.ExtractedAt);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void Extractor_Language_IsJava()
{
Assert.Equal("java", _extractor.Language);
@@ -478,7 +502,8 @@ public class JavaCallGraphExtractorTests
#region Determinism Verification Tests (JCG-020)
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task ExtractAsync_SamePath_ProducesSameDigest()
{
// Arrange: Create a temp directory
@@ -497,12 +522,14 @@ public class JavaCallGraphExtractorTests
Assert.Equal(snapshot1.GraphDigest, snapshot2.GraphDigest);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public async Task ExtractAsync_DifferentScanId_SameNodesAndEdges()
{
// Arrange: Create a temp directory
await using var temp = await TempDirectory.CreateAsync();
using StellaOps.TestKit;
var request1 = new CallGraphExtractionRequest(
ScanId: "scan-a",
Language: "java",
@@ -523,7 +550,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(snapshot1.GraphDigest, snapshot2.GraphDigest);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void BuildNodeId_SameInputs_ProducesIdenticalIds()
{
// Act: Build node IDs multiple times with same inputs
@@ -534,7 +562,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(id1, id2);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void BuildNodeId_DifferentDescriptors_ProducesDifferentIds()
{
// Act: Build node IDs with different descriptors (overloaded methods)
@@ -545,7 +574,8 @@ public class JavaCallGraphExtractorTests
Assert.NotEqual(id1, id2);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaEntrypointClassifier_SameInput_AlwaysSameResult()
{
var classifier = new JavaEntrypointClassifier();
@@ -581,7 +611,8 @@ public class JavaCallGraphExtractorTests
Assert.Equal(result2, result3);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
[Fact]
public void JavaSinkMatcher_SameInput_AlwaysSameResult()
{
var matcher = new JavaSinkMatcher();