Fix logic in Schema Generator to properly 50/84450/1
authorKajur, Harish (vk250x) <vk250x@att.com>
Mon, 8 Apr 2019 00:38:42 +0000 (20:38 -0400)
committerKajur, Harish (vk250x) <vk250x@att.com>
Mon, 8 Apr 2019 00:38:42 +0000 (20:38 -0400)
check if indexes are needed on dbaliased properties
Added test to verify indexes are created.

Issue-ID: AAI-2333
Change-Id: Ib80de5cce3dfc99277d7cbd6e1a51530ff588478
Signed-off-by: Kajur, Harish (vk250x) <vk250x@att.com>
aai-core/src/main/java/org/onap/aai/dbgen/SchemaGenerator.java
aai-core/src/test/java/org/onap/aai/dbmap/AAIGraphTest.java

index e6eb1bc..c0a9e20 100644 (file)
@@ -163,8 +163,8 @@ public class SchemaGenerator {
                                                        String dmsg = " Index  [" + dbPropName + "] already existed in the DB. ";
                                                        LOGGER.debug(dmsg);
                                                } else {
-                                                       if (obj.getIndexedProperties().contains(dbPropName)) {
-                                                               if (obj.getUniqueProperties().contains(dbPropName)) {
+                                                       if (obj.getIndexedProperties().contains(propName)) {
+                                                               if (obj.getUniqueProperties().contains(propName)) {
                                                                        imsg = "Add Unique index for PropertyKey: [" + dbPropName + "]";
                                                                        LOGGER.info(imsg);
                                                                        graphMgmt.buildIndex(dbPropName, Vertex.class).addKey(propK).unique()
index 5915ce6..41a5f20 100644 (file)
  */
 package org.onap.aai.dbmap;
 
-import org.janusgraph.core.JanusGraphFactory;
 import org.janusgraph.core.JanusGraph;
+import org.janusgraph.core.JanusGraphFactory;
+import org.janusgraph.core.schema.JanusGraphIndex;
 import org.janusgraph.core.schema.JanusGraphManagement;
-import org.junit.*;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
 import org.onap.aai.AAISetup;
+import org.onap.aai.config.SpringContextAware;
+import org.onap.aai.introspection.Introspector;
+import org.onap.aai.introspection.Loader;
+import org.onap.aai.introspection.LoaderFactory;
+import org.onap.aai.introspection.ModelType;
+import org.onap.aai.schema.enums.PropertyMetadata;
+import org.onap.aai.setup.SchemaVersions;
 import org.onap.aai.util.AAIConstants;
 
+import java.io.FileNotFoundException;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
 
 import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.Matchers.matchesPattern;
 import static org.junit.Assert.*;
 
-import java.io.FileNotFoundException;
-
 public class AAIGraphTest extends AAISetup{
        @Before
        public void setup() {
@@ -70,7 +84,7 @@ public class AAIGraphTest extends AAISetup{
                graphMgt.rollback();
                graph.close();
        }
-       
+
        @Test (expected=FileNotFoundException.class)
        public void JanusGraphOpenNameWithInvalidFilePathTest() throws Exception{
                JanusGraph graph = JanusGraphFactory.open(new AAIGraphConfig.Builder("invalid").forService(SERVICE_NAME).withGraphType("graphType").buildConfiguration());
@@ -81,4 +95,38 @@ public class AAIGraphTest extends AAISetup{
                graph.close();
        }
 
+       @Ignore("Need to create schema specific to the test")
+    @Test
+    public void checkIndexOfAliasedIndexedProps() throws Exception {
+        Set<String> aliasedIndexedProps = getAliasedIndexedProps();
+        JanusGraphManagement graphMgt = AAIGraph.getInstance().getGraph().openManagement();
+        for (String aliasedIndexedProp : aliasedIndexedProps) {
+            JanusGraphIndex index = graphMgt.getGraphIndex(aliasedIndexedProp);
+            assertNotNull(aliasedIndexedProp + " index exists", index);
+            assertEquals(aliasedIndexedProp + " index has 1 property keys", index.getFieldKeys().length, 1);
+            assertThat(aliasedIndexedProp + " index indexes " + aliasedIndexedProp + " property key", index.getFieldKeys()[0].name(), is(aliasedIndexedProp));
+        }
+        graphMgt.rollback();
+    }
+
+    private Set<String> getAliasedIndexedProps() {
+        Set<String> aliasedIndexedProps = new HashSet<>();
+        LoaderFactory loaderFactory   = SpringContextAware.getBean(LoaderFactory.class);
+        SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class);
+        Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
+        Map<String, Introspector> objs = loader.getAllObjects();
+        for (Introspector obj : objs.values()) {
+            for (String propName : obj.getProperties()) {
+                Optional<String> alias = obj.getPropertyMetadata(propName, PropertyMetadata.DB_ALIAS);
+                if (alias.isPresent()) {
+                    String dbPropName = alias.get();
+                    if (obj.getIndexedProperties().contains(propName)) {
+                        aliasedIndexedProps.add(dbPropName);
+                    }
+                }
+            }
+        }
+        return aliasedIndexedProps;
+    }
+
 }