From d1dc93569f72503bdcd1019b7d593780604c8d87 Mon Sep 17 00:00:00 2001 From: Justin Donn Date: Tue, 15 Oct 2024 11:18:56 -0700 Subject: [PATCH] add more test cases and address comments --- .../linkedin/metadata/dao/utils/EBeanDAOUtils.java | 7 +++++-- .../metadata/dao/utils/EBeanDAOUtilsTest.java | 13 +++++++++++-- .../AnnotatedAspectBarWithRelationshipFields.pdl | 10 ++++++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/dao-impl/ebean-dao/src/main/java/com/linkedin/metadata/dao/utils/EBeanDAOUtils.java b/dao-impl/ebean-dao/src/main/java/com/linkedin/metadata/dao/utils/EBeanDAOUtils.java index b59d36f98..83ce335e0 100644 --- a/dao-impl/ebean-dao/src/main/java/com/linkedin/metadata/dao/utils/EBeanDAOUtils.java +++ b/dao-impl/ebean-dao/src/main/java/com/linkedin/metadata/dao/utils/EBeanDAOUtils.java @@ -386,14 +386,17 @@ public static clazz = (Class) aspect.getClass(); try { - Method getMethod = clazz.getMethod("get" + StringUtils.capitalize(fieldName)); - Object obj = getMethod.invoke(aspect); + Method getMethod = clazz.getMethod("get" + StringUtils.capitalize(fieldName)); // getFieldName + Object obj = getMethod.invoke(aspect); // invoke getFieldName + // all relationship fields will be represented as Arrays so filter out any non-lists, empty lists, and lists that don't contain RecordTemplates if (!(obj instanceof List) || ((List) obj).isEmpty() || !(((List) obj).get(0) instanceof RecordTemplate)) { return null; } List relationshipsList = (List) obj; ModelType modelType = parseModelTypeFromGmaAnnotation(relationshipsList.get(0)); if (modelType == ModelType.RELATIONSHIP) { + log.debug(String.format("Found {%d} relationships of type {%s} for field {%s} of aspect class {%s}.", + relationshipsList.size(), relationshipsList.get(0).getClass(), fieldName, clazz.getName())); return (List) relationshipsList; } } catch (ReflectiveOperationException e) { diff --git a/dao-impl/ebean-dao/src/test/java/com/linkedin/metadata/dao/utils/EBeanDAOUtilsTest.java b/dao-impl/ebean-dao/src/test/java/com/linkedin/metadata/dao/utils/EBeanDAOUtilsTest.java index ad71e9580..a1272e581 100644 --- a/dao-impl/ebean-dao/src/test/java/com/linkedin/metadata/dao/utils/EBeanDAOUtilsTest.java +++ b/dao-impl/ebean-dao/src/test/java/com/linkedin/metadata/dao/utils/EBeanDAOUtilsTest.java @@ -1,6 +1,7 @@ package com.linkedin.metadata.dao.utils; import com.google.common.io.Resources; +import com.linkedin.data.template.IntegerArray; import com.linkedin.data.template.RecordTemplate; import com.linkedin.data.template.StringArray; import com.linkedin.metadata.aspect.AuditedAspect; @@ -21,6 +22,8 @@ import com.linkedin.testing.AnnotatedRelationshipFooArray; import com.linkedin.testing.AspectFoo; import com.linkedin.testing.AnnotatedAspectFooWithRelationshipField; +import com.linkedin.testing.CommonAspect; +import com.linkedin.testing.CommonAspectArray; import com.linkedin.testing.urn.BurgerUrn; import com.linkedin.testing.urn.FooUrn; import io.ebean.Ebean; @@ -40,7 +43,6 @@ import org.testng.annotations.Test; import static com.linkedin.testing.TestUtils.*; -import static org.junit.Assert.*; import static org.mockito.Mockito.*; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; @@ -600,13 +602,16 @@ public void testExtractRelationshipsFromAspect() { AnnotatedAspectFooWithRelationshipField fooWithNullRelationshipField = new AnnotatedAspectFooWithRelationshipField(); assertTrue(EBeanDAOUtils.extractRelationshipsFromAspect(fooWithNullRelationshipField).isEmpty()); - // case 4: aspect model contains multiple relationship fields, some null and some non-null + // case 4: aspect model contains multiple relationship fields, some null and some non-null, as well as array fields + // containing non-Relationship objects // expected: return only the non-null relationships relationshipFoos = new AnnotatedRelationshipFooArray(new AnnotatedRelationshipFoo(), new AnnotatedRelationshipFoo()); AnnotatedRelationshipBarArray relationshipBars = new AnnotatedRelationshipBarArray(new AnnotatedRelationshipBar()); // given: // aspect = { // value -> "abc" + // integers -> [1] + // nonRelationshipStructs -> [commonAspect1] // relationshipFoos -> [foo1, foo2] // relationshipBars -> [bar1] // moreRelationshipFoos -> not present @@ -615,6 +620,8 @@ public void testExtractRelationshipsFromAspect() { // [[foo1, foo2], [bar1]] AnnotatedAspectBarWithRelationshipFields barWithRelationshipFields = new AnnotatedAspectBarWithRelationshipFields() .setValue("abc") + .setIntegers(new IntegerArray(1)) + .setNonRelationshipStructs(new CommonAspectArray(new CommonAspect())) .setRelationshipFoos(relationshipFoos) .setRelationshipBars(relationshipBars); // don't set moreRelationshipFoos field @@ -626,4 +633,6 @@ public void testExtractRelationshipsFromAspect() { assertEquals(new AnnotatedRelationshipFoo(), results.get(0).get(1)); assertEquals(new AnnotatedRelationshipBar(), results.get(1).get(0)); } + + } \ No newline at end of file diff --git a/gradle-plugins/metadata-annotations-test-models/src/main/pegasus/com/linkedin/testing/AnnotatedAspectBarWithRelationshipFields.pdl b/gradle-plugins/metadata-annotations-test-models/src/main/pegasus/com/linkedin/testing/AnnotatedAspectBarWithRelationshipFields.pdl index 05e1717cb..55466e65d 100644 --- a/gradle-plugins/metadata-annotations-test-models/src/main/pegasus/com/linkedin/testing/AnnotatedAspectBarWithRelationshipFields.pdl +++ b/gradle-plugins/metadata-annotations-test-models/src/main/pegasus/com/linkedin/testing/AnnotatedAspectBarWithRelationshipFields.pdl @@ -11,6 +11,16 @@ record AnnotatedAspectBarWithRelationshipFields { */ value: string + /** + * For unit tests + */ + integers: optional array[int] + + /** + * For unit tests + */ + nonRelationshipStructs: optional array[CommonAspect] + /** * For unit tests */