From 6744e451ac38f5b4e1a1a5b565f3e42436664635 Mon Sep 17 00:00:00 2001 From: "vibhor.garg" Date: Tue, 24 Sep 2024 02:24:07 +0530 Subject: [PATCH 1/4] Added Test case for exclusion not honored bug. --- pom.xml | 2 +- .../flipkart/tef/execution/FlowBuilder.java | 10 +++++----- .../FluentCapabilityBuilderTest.java | 19 ++++++++++++++++++- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 8d91e9d..9abfaed 100644 --- a/pom.xml +++ b/pom.xml @@ -109,7 +109,7 @@ 0.1.5 19.0 - 4.2.3 + 5.1.0 diff --git a/tef-impl/src/main/java/flipkart/tef/execution/FlowBuilder.java b/tef-impl/src/main/java/flipkart/tef/execution/FlowBuilder.java index 13110a5..a05c956 100644 --- a/tef-impl/src/main/java/flipkart/tef/execution/FlowBuilder.java +++ b/tef-impl/src/main/java/flipkart/tef/execution/FlowBuilder.java @@ -31,7 +31,7 @@ import flipkart.tef.capability.AdapterConflictRuntimeException; import flipkart.tef.exceptions.UnableToResolveDataFromAdapterRuntimeException; import flipkart.tef.flow.SimpleFlow; -import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl; +import java.lang.reflect.ParameterizedType; import java.lang.reflect.Field; import java.util.ArrayList; @@ -293,13 +293,13 @@ private void populateDataAdapterMap(Class bizlogic) { @SuppressWarnings("unchecked") private Class getReturnTypeFromBizlogicUsingSunApi(Class> dataAdapterBizLogic, List>> classHierarchy) { classHierarchy.add(dataAdapterBizLogic); - if (dataAdapterBizLogic.getGenericSuperclass() instanceof ParameterizedTypeImpl) { - ParameterizedTypeImpl genericSuperClass = (ParameterizedTypeImpl) dataAdapterBizLogic.getGenericSuperclass(); + if (dataAdapterBizLogic.getGenericSuperclass() instanceof ParameterizedType) { + ParameterizedType genericSuperClass = (ParameterizedType) dataAdapterBizLogic.getGenericSuperclass(); if (genericSuperClass.getActualTypeArguments()[0] instanceof Class) { return (Class) genericSuperClass.getActualTypeArguments()[0]; - } else if (genericSuperClass.getActualTypeArguments()[0] instanceof ParameterizedTypeImpl) { + } else if (genericSuperClass.getActualTypeArguments()[0] instanceof ParameterizedType) { // The type itself is parameterized - return ((ParameterizedTypeImpl) genericSuperClass.getActualTypeArguments()[0]).getRawType(); + return (Class)((ParameterizedType) genericSuperClass.getActualTypeArguments()[0]).getRawType(); } } else { // This could be a case of a data adapter being a subclass of another diff --git a/tef-impl/src/test/java/flipkart/tef/execution/FluentCapabilityBuilderTest.java b/tef-impl/src/test/java/flipkart/tef/execution/FluentCapabilityBuilderTest.java index 46fc2aa..677ea03 100644 --- a/tef-impl/src/test/java/flipkart/tef/execution/FluentCapabilityBuilderTest.java +++ b/tef-impl/src/test/java/flipkart/tef/execution/FluentCapabilityBuilderTest.java @@ -31,6 +31,7 @@ import org.junit.BeforeClass; import org.junit.Test; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -147,7 +148,15 @@ public List> adapters() { @Override public List> exclusions() { - return Collections.emptyList(); + return ImmutableList.of(DataAdapterBizlogic2.class); + } + + @Override + public List bizlogicDependencies() { + List list = new ArrayList<>(); + // Adding adapter 2 on adapter 1 + list.add(new BizlogicDependency(DataAdapterBizlogic2.class, new Class[]{DataAdapterBizlogic1.class})); + return list; } }; @@ -206,4 +215,12 @@ public Object adapt(TefContext tefContext) { return null; } } + + class DataAdapterBizlogic2 extends DataAdapterBizlogic { + + @Override + public Object adapt(TefContext tefContext) { + return null; + } + } } \ No newline at end of file From d7be490550c7a13adc33077aa096b5730f1b70cc Mon Sep 17 00:00:00 2001 From: "vibhor.garg" Date: Tue, 24 Sep 2024 04:18:34 +0530 Subject: [PATCH 2/4] Adding fix for control dependency being excluded in FluentCapabilityBuilder. --- tef-impl/src/main/java/flipkart/tef/execution/FlowBuilder.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tef-impl/src/main/java/flipkart/tef/execution/FlowBuilder.java b/tef-impl/src/main/java/flipkart/tef/execution/FlowBuilder.java index a05c956..eb184e2 100644 --- a/tef-impl/src/main/java/flipkart/tef/execution/FlowBuilder.java +++ b/tef-impl/src/main/java/flipkart/tef/execution/FlowBuilder.java @@ -168,6 +168,9 @@ SimpleFlow build() { for (Class e : excludedBizlogics) { bizlogics.remove(e); bizlogicDependencyMap.removeAll(e); + if (reverseBizlogicDependencyMap.containsValue(e)){ + reverseBizlogicDependencyMap.entries().removeIf(entry -> entry.getValue().equals(e)); + } } int idx = 0; From e06f1e18955d977245138e85ca9c850604c288f0 Mon Sep 17 00:00:00 2001 From: "vibhor.garg" Date: Tue, 24 Sep 2024 12:23:35 +0530 Subject: [PATCH 3/4] Bumped version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9abfaed..c48b2aa 100644 --- a/pom.xml +++ b/pom.xml @@ -107,7 +107,7 @@ - 0.1.5 + 0.2.0 19.0 5.1.0 From c4826dbd20091f784205ae24a277f924b2124b3c Mon Sep 17 00:00:00 2001 From: "vibhor.garg" Date: Wed, 25 Sep 2024 05:16:42 +0530 Subject: [PATCH 4/4] Adding Test case -> testThatExclusionIsHonoredWhenControlDependencyIsExcluded --- .../FluentCapabilityBuilderTest.java | 60 ++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/tef-impl/src/test/java/flipkart/tef/execution/FluentCapabilityBuilderTest.java b/tef-impl/src/test/java/flipkart/tef/execution/FluentCapabilityBuilderTest.java index 677ea03..fdc83a5 100644 --- a/tef-impl/src/test/java/flipkart/tef/execution/FluentCapabilityBuilderTest.java +++ b/tef-impl/src/test/java/flipkart/tef/execution/FluentCapabilityBuilderTest.java @@ -120,6 +120,53 @@ public String name() { @Test public void testBasicCapability() throws Exception { + CapabilityDefinition capabilityDefinition = new EmptyCapabilityDefinition() { + @Override + public String name() { + return "C1"; + } + + @Override + public List dependentCapabilities() { + return Collections.emptyList(); + } + + @Override + public List> validators() { + return ImmutableList.of(BasicValidationBizlogic1.class); + } + + @Override + public List> enrichers() { + return ImmutableList.of(BasicEnrichmentBizlogic1.class); + } + + @Override + public List> adapters() { + return ImmutableList.of(DataAdapterBizlogic1.class); + } + + @Override + public List> exclusions() { + return Collections.emptyList(); + } + }; + + FluentCapabilityBuilder manager = new FluentCapabilityBuilder(); + SimpleFlow flow = manager.withCapability(capabilityDefinition).dataflow(); + + assertNotNull(flow); + + assertEquals(3, flow.getBizlogics().size()); + assertTrue(flow.getBizlogics().contains(BasicValidationBizlogic1.class)); + assertTrue(flow.getBizlogics().contains(BasicEnrichmentBizlogic1.class)); + assertTrue(flow.getBizlogics().contains(DataAdapterBizlogic1.class)); + + } + + @Test + public void testThatExclusionIsHonoredWhenControlDependencyIsExcluded() throws Exception { + CapabilityDefinition capabilityDefinition = new EmptyCapabilityDefinition() { @Override public String name() { @@ -155,7 +202,7 @@ public List> exclusions() { public List bizlogicDependencies() { List list = new ArrayList<>(); // Adding adapter 2 on adapter 1 - list.add(new BizlogicDependency(DataAdapterBizlogic2.class, new Class[]{DataAdapterBizlogic1.class})); + list.add(new BizlogicDependency(DataAdapterBizlogic2.class, new Class[]{DataAdapterBizlogic1.class, DataAdapterBizlogic3.class})); return list; } }; @@ -165,10 +212,11 @@ public List bizlogicDependencies() { assertNotNull(flow); - assertEquals(3, flow.getBizlogics().size()); + assertEquals(4, flow.getBizlogics().size()); assertTrue(flow.getBizlogics().contains(BasicValidationBizlogic1.class)); assertTrue(flow.getBizlogics().contains(BasicEnrichmentBizlogic1.class)); assertTrue(flow.getBizlogics().contains(DataAdapterBizlogic1.class)); + assertTrue(flow.getBizlogics().contains(DataAdapterBizlogic3.class)); } @@ -223,4 +271,12 @@ public Object adapt(TefContext tefContext) { return null; } } + + class DataAdapterBizlogic3 extends DataAdapterBizlogic { + + @Override + public String adapt(TefContext tefContext) { + return null; + } + } } \ No newline at end of file