heauristic bean resolution
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
package click.kamil.springstatemachineexporter.analysis.enricher.routing;
|
||||
|
||||
import click.kamil.springstatemachineexporter.analysis.model.CallChain;
|
||||
import org.junit.jupiter.api.Tag;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
@Tag("heuristic_bean_resolution")
|
||||
public class HeuristicRoutingEngineTest {
|
||||
|
||||
private final HeuristicRoutingEngine engine = new HeuristicRoutingEngine();
|
||||
|
||||
@Test
|
||||
public void testDeepPackageDivergenceMismatch() {
|
||||
// This is the bug case: sharing a deep root, but diverging into different domains
|
||||
CallChain chain = CallChain.builder()
|
||||
.methodChain(Arrays.asList("com.acme.corp.division.project.orders.OrderService.pay()"))
|
||||
.build();
|
||||
|
||||
String machineName = "com.acme.corp.division.project.payments.PaymentStateMachine";
|
||||
|
||||
boolean result = engine.isRoutedToCorrectMachine(chain, machineName);
|
||||
|
||||
// They share com.acme.corp.division.project, but diverge into orders vs payments
|
||||
// This should be a strong mismatch, so it should return false
|
||||
assertFalse(result, "Deep package divergence into different domains should be rejected");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSameDomainMatch() {
|
||||
CallChain chain = CallChain.builder()
|
||||
.methodChain(Arrays.asList("com.acme.ecommerce.orders.OrderService.process()"))
|
||||
.build();
|
||||
|
||||
String machineName = "com.acme.ecommerce.orders.OrderStateMachine";
|
||||
|
||||
boolean result = engine.isRoutedToCorrectMachine(chain, machineName);
|
||||
|
||||
// Same exact domain, should match
|
||||
assertTrue(result, "Same domain should be accepted");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSubPackageMatch() {
|
||||
CallChain chain = CallChain.builder()
|
||||
.methodChain(Arrays.asList("com.acme.ecommerce.orders.impl.OrderServiceImpl.process()"))
|
||||
.build();
|
||||
|
||||
String machineName = "com.acme.ecommerce.orders.OrderStateMachine";
|
||||
|
||||
boolean result = engine.isRoutedToCorrectMachine(chain, machineName);
|
||||
|
||||
// Subpackage should match
|
||||
assertTrue(result, "Sub-packages of the same domain should be accepted");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSharedDomainTermMatch() {
|
||||
CallChain chain = CallChain.builder()
|
||||
.methodChain(Arrays.asList("com.acme.orders.web.OrderController.submit()"))
|
||||
.build();
|
||||
|
||||
String machineName = "com.acme.orders.service.OrderStateMachine";
|
||||
|
||||
boolean result = engine.isRoutedToCorrectMachine(chain, machineName);
|
||||
|
||||
// Different subpackages, but they share the "order" domain term and common prefix
|
||||
assertTrue(result, "Divergent packages that share a domain term should be accepted");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExplicitTargetVariableMatch() {
|
||||
CallChain chain = CallChain.builder()
|
||||
.methodChain(Arrays.asList("com.acme.common.GlobalTrigger.fire()"))
|
||||
.contextMachineId("paymentStateMachine") // Explicitly targets payment
|
||||
.build();
|
||||
|
||||
String machineName = "com.acme.corp.payments.PaymentStateMachine";
|
||||
|
||||
boolean result = engine.isRoutedToCorrectMachine(chain, machineName);
|
||||
|
||||
// Mismatched domains, but explicit variable targeting works
|
||||
assertTrue(result, "Explicit variable target matching the machine name should be accepted");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExplicitTargetVariableMismatch() {
|
||||
CallChain chain = CallChain.builder()
|
||||
.methodChain(Arrays.asList("com.acme.common.GlobalTrigger.fire()"))
|
||||
.contextMachineId("paymentStateMachine") // Explicitly targets payment
|
||||
.build();
|
||||
|
||||
String machineName = "com.acme.corp.orders.OrderStateMachine"; // But this is Order
|
||||
|
||||
boolean result = engine.isRoutedToCorrectMachine(chain, machineName);
|
||||
|
||||
// Explicit variable targeting completely conflicts
|
||||
assertFalse(result, "Explicit variable target mismatching the machine name should be rejected");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user