Update to use Schema Service 08/74708/2
authorRavi Geda <gravik@amdocs.com>
Mon, 17 Dec 2018 11:34:46 +0000 (11:34 +0000)
committerRavi Geda <gravik@amdocs.com>
Mon, 17 Dec 2018 12:24:27 +0000 (12:24 +0000)
The code supports both Schema Service and local schema files.
The property schema.translator.list drives which one to use.

Change-Id: Idc9c5832d7286e7904ddf0b2637c83b0a3cfa15c
Issue-ID: AAI-2008
Signed-off-by: Ravi Geda <gravik@amdocs.com>
13 files changed:
pom.xml
src/main/java/org/onap/crud/CrudApplication.java
src/main/java/org/onap/crud/SchemaIngestConfiguration.java
src/main/java/org/onap/crud/dao/champ/ChampDao.java
src/main/java/org/onap/crud/service/AbstractGraphDataService.java
src/main/java/org/onap/crud/util/CrudServiceUtil.java
src/main/java/org/onap/schema/EdgeRulesLoader.java
src/main/java/org/onap/schema/OxmModelLoader.java
src/main/resources/application.properties
src/test/java/org/onap/crud/OXMModelLoaderSetup.java
src/test/java/org/onap/crud/event/response/GraphEventResponseHandlerTest.java
src/test/java/org/onap/crud/service/ChampDaoMockTest.java
src/test/java/org/onap/schema/validation/MultiplicityValidatorTest.java

diff --git a/pom.xml b/pom.xml
index 61914b0..bf18c39 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -36,7 +36,7 @@ limitations under the License.
 
     <properties>
         <docker.location>${basedir}/target</docker.location>
-        <version.org.onap.aai.aai-common>1.4.0-SNAPSHOT</version.org.onap.aai.aai-common>
+        <version.org.onap.aai.aai-common>1.4.1-SNAPSHOT</version.org.onap.aai.aai-common>
         <event.client.version>1.3.1</event.client.version>
     </properties>
 
@@ -124,15 +124,10 @@ limitations under the License.
             <groupId>org.onap.aai.aai-common</groupId>
             <artifactId>aai-schema-ingest</artifactId>
             <version>${version.org.onap.aai.aai-common}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.aai.aai-common</groupId>
-            <artifactId>aai-core</artifactId>
-            <version>${version.org.onap.aai.aai-common}</version>
             <exclusions>
                 <exclusion>
-                    <groupId>*</groupId>
-                    <artifactId>*</artifactId>
+                  <groupId>org.powermock</groupId>
+                  <artifactId>*</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
index b2b2611..b91794d 100644 (file)
@@ -22,18 +22,14 @@ package org.onap.crud;
 
 import java.util.Collections;
 import java.util.HashMap;
-
 import javax.annotation.PostConstruct;
-
 import org.eclipse.jetty.util.security.Password;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.web.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Import;
 import org.springframework.context.annotation.ImportResource;
 import org.springframework.core.env.Environment;
-
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.builders.RequestHandlerSelectors;
 import springfox.documentation.service.ApiInfo;
@@ -47,7 +43,6 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
  */
 @SpringBootApplication
 @EnableSwagger2
-@Import({SchemaIngestConfiguration.class, SchemaLoaderConfiguration.class})
 @ImportResource({"file:${SERVICE_BEANS}/*.xml"})
 public class CrudApplication extends SpringBootServletInitializer{// NOSONAR
     @Autowired
@@ -59,8 +54,13 @@ public class CrudApplication extends SpringBootServletInitializer{// NOSONAR
           throw new RuntimeException("Env property KEY_STORE_PASSWORD not set");
         }
         HashMap<String, Object> props = new HashMap<>();
-        props.put("server.ssl.key-store-password", Password.deobfuscate(keyStorePassword));
-        new CrudApplication().configure(new SpringApplicationBuilder(SchemaIngestConfiguration.class, SchemaLoaderConfiguration.class).child(CrudApplication.class).properties(props)).run(args);
+        String deobfuscatedKeyStorePassword = Password.deobfuscate(keyStorePassword);
+        props.put("server.ssl.key-store-password", deobfuscatedKeyStorePassword);
+        props.put("schema.service.ssl.key-store-password", deobfuscatedKeyStorePassword);
+        props.put("schema.service.ssl.trust-store-password", deobfuscatedKeyStorePassword);
+        new CrudApplication()
+            .configure(new SpringApplicationBuilder(CrudApplication.class).properties(props))
+            .run(args);
     }
 
     /**
@@ -85,8 +85,6 @@ public class CrudApplication extends SpringBootServletInitializer{// NOSONAR
     public static final ApiInfo DEFAULT_API_INFO = new ApiInfo("AAI NCSO Adapter Service", "AAI NCSO Adapter Service.",
         "1.0", "urn:tos", DEFAULT_CONTACT, "Apache 2.0", "API license URL", Collections.emptyList());
 
-
-
     public Docket api() {
       return new Docket(DocumentationType.SWAGGER_2).apiInfo(DEFAULT_API_INFO).select().paths(PathSelectors.any())
           .apis(RequestHandlerSelectors.basePackage("org.onap.crud")).build();
index ee050dd..ca76dbd 100644 (file)
@@ -26,37 +26,44 @@ import org.onap.aai.setup.AAIConfigTranslator;
 import org.onap.aai.setup.ConfigTranslator;
 import org.onap.aai.setup.SchemaLocationsBean;
 import org.onap.aai.setup.SchemaVersions;
+import org.onap.aai.setup.Translator;
+import org.onap.schema.EdgePropsConfiguration;
+import org.onap.schema.EdgeRulesLoader;
+import org.onap.schema.OxmModelLoader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
 import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.PropertySource;
 
 @Configuration
+@ComponentScan(basePackages = {"org.onap.aai.config", "org.onap.aai.setup"})
 @PropertySource(value = "file:${schema.ingest.file}", ignoreResourceNotFound = true)
+@PropertySource(value = "file:${edgeprops.ingest.file}", ignoreResourceNotFound = true)
 public class SchemaIngestConfiguration {
 
-    @Bean
-    public SchemaVersions schemaVersions() {
-        return new SchemaVersions();
-    }
+    @Autowired
+    private Translator translator;
 
     @Bean
-    public SchemaLocationsBean schemaLocationsBean() {
-        return new SchemaLocationsBean();
+    public OxmModelLoader oxmModelLoader(NodeIngestor nodeIngestor) {
+        return new OxmModelLoader(translator, nodeIngestor );
     }
 
     @Bean
-    public ConfigTranslator configTranslator() {
-        return new AAIConfigTranslator(schemaLocationsBean(), schemaVersions());
+    public EdgeRulesLoader edgeRulesLoader(EdgeIngestor edgeIngestor) {
+        return new EdgeRulesLoader(translator, edgeIngestor, edgePropsConfiguration() );
     }
 
     @Bean
-    public NodeIngestor nodeIngestor() {
-        return new NodeIngestor(configTranslator());
+    public EdgePropsConfiguration edgePropsConfiguration() {
+        return new EdgePropsConfiguration();
     }
 
     @Bean
-    public EdgeIngestor edgeIngestor() {
-        return new EdgeIngestor(configTranslator(), schemaVersions());
+    @ConditionalOnExpression("'${schema.translator.list}'.contains('config')")
+    public ConfigTranslator configTranslator(SchemaLocationsBean schemaLocationsBean, SchemaVersions schemaVersions) {
+        return new AAIConfigTranslator(schemaLocationsBean, schemaVersions);
     }
-
 }
\ No newline at end of file
index 81980cc..8563807 100644 (file)
@@ -35,7 +35,6 @@ import org.apache.http.client.utils.URLEncodedUtils;
 import org.apache.http.message.BasicNameValuePair;
 import org.eclipse.jetty.util.security.Password;
 import org.onap.aai.cl.mdc.MdcContext;
-import org.onap.aai.logging.LoggingContext;
 import org.onap.aai.restclient.client.OperationResult;
 import org.onap.aai.restclient.client.RestClient;
 import org.onap.aai.restclient.enums.RestAuthenticationMode;
@@ -411,7 +410,7 @@ public class ChampDao implements GraphDao {
     String url = baseTransactionUrl + "/" + id;
     Map<String, List<String>> headers = new HashMap<>();
     headers.put(HEADER_FROM_APP, Arrays.asList("Gizmo"));
-    headers.put(HEADER_TRANS_ID, Arrays.asList(MDC.get(LoggingContext.LoggingField.REQUEST_ID.toString())));
+    headers.put(HEADER_TRANS_ID, Arrays.asList(MDC.get(MdcContext.MDC_REQUEST_ID)));
 
     OperationResult getResult = client.get(url, headers, MediaType.APPLICATION_JSON_TYPE);
 
@@ -550,7 +549,7 @@ public class ChampDao implements GraphDao {
       throw createErrorException(getResult, javax.ws.rs.core.Response.Status.NOT_FOUND, "No edge with id " + id + " found in graph");
     }
   }
-  
+
   @Override
   public Edge getEdge(String id) throws CrudException {
     String url = baseRelationshipUrl + "/" + id;
index db4c4d8..14ea242 100644 (file)
  */
 package org.onap.crud.service;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonElement;
+import com.google.gson.reflect.TypeToken;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -28,6 +32,7 @@ import java.util.Set;
 import javax.ws.rs.core.EntityTag;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Response.Status;
+import net.dongliu.gson.GsonJava8TypeAdapterFactory;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.onap.aai.restclient.client.OperationResult;
 import org.onap.crud.dao.GraphDao;
@@ -44,18 +49,12 @@ import org.onap.crud.parser.util.EdgePayloadUtil;
 import org.onap.crud.util.CrudServiceUtil;
 import org.onap.schema.validation.OxmModelValidator;
 import org.onap.schema.validation.RelationshipSchemaValidator;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-import com.google.gson.reflect.TypeToken;
-import net.dongliu.gson.GsonJava8TypeAdapterFactory;
 
 public abstract class AbstractGraphDataService {
   protected GraphDao daoForGet;
   protected GraphDao dao;
 
   public AbstractGraphDataService() throws CrudException {
-    CrudServiceUtil.loadModels();
   }
 
   public ImmutablePair<EntityTag, String> getEdge(String version, String id, String type, Map<String, String> queryParams) throws CrudException {
index 5eeb38e..2441776 100644 (file)
@@ -20,6 +20,9 @@
  */
 package org.onap.crud.util;
 
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
 import java.util.AbstractMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -29,22 +32,18 @@ import javax.ws.rs.core.EntityTag;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response.Status;
-import org.onap.aai.db.props.AAIProperties;
 import org.onap.crud.exception.CrudException;
 import org.onap.crud.parser.EdgePayload;
 import org.onap.crud.parser.util.EdgePayloadUtil;
 import org.onap.schema.EdgeRulesLoader;
-import org.onap.schema.OxmModelLoader;
 import org.onap.schema.RelationshipSchema;
 
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
 public class CrudServiceUtil {
 
   private static Gson gson = new Gson();
-  
+  public static final java.lang.String LAST_MOD_SOURCE_OF_TRUTH = "last-mod-source-of-truth";
+  public static final java.lang.String SOURCE_OF_TRUTH = "source-of-truth";
+
   @SuppressWarnings({"unchecked", "rawtypes"})
   public static Object validateFieldType(String value, Class clazz) throws CrudException {
     try {
@@ -76,16 +75,6 @@ public class CrudServiceUtil {
     }
   }
 
-  public static void loadModels() throws CrudException {
-    // load the schemas
-    try {
-      OxmModelLoader.loadModels();
-      EdgeRulesLoader.loadModels ();
-    } catch (Exception e) {
-      throw new CrudException(e);
-    }
-  }
-
   /**
    * This method will merge header property from app id in request payload if not already populated
    * @param propertiesFromRequest
@@ -96,22 +85,22 @@ public class CrudServiceUtil {
     @SuppressWarnings("unchecked")
     public static JsonElement mergeHeaderInFoToPayload(JsonElement propertiesFromRequest, HttpHeaders headers,
             boolean isAdd) {
-    String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId");  
+    String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId");
     Set<Map.Entry<String, JsonElement>> properties = new HashSet<Map.Entry<String, JsonElement>>();
     properties.addAll(propertiesFromRequest.getAsJsonObject().entrySet());
-    
+
     Set<String> propertyKeys = new HashSet<String>();
     for(Map.Entry<String, JsonElement> property : properties) {
       propertyKeys.add(property.getKey());
     }
-    
-    if(!propertyKeys.contains(AAIProperties.LAST_MOD_SOURCE_OF_TRUTH)) {
-        properties.add(new AbstractMap.SimpleEntry<String, JsonElement>(AAIProperties.LAST_MOD_SOURCE_OF_TRUTH,
+
+    if(!propertyKeys.contains(LAST_MOD_SOURCE_OF_TRUTH)) {
+        properties.add(new AbstractMap.SimpleEntry<String, JsonElement>(LAST_MOD_SOURCE_OF_TRUTH,
             (new JsonPrimitive(sourceOfTruth))));
     }
-   
-    if(isAdd && !propertyKeys.contains(AAIProperties.SOURCE_OF_TRUTH)) {
-        properties.add(new AbstractMap.SimpleEntry<String, JsonElement>(AAIProperties.SOURCE_OF_TRUTH,
+
+    if(isAdd && !propertyKeys.contains(SOURCE_OF_TRUTH)) {
+        properties.add(new AbstractMap.SimpleEntry<String, JsonElement>(SOURCE_OF_TRUTH,
             (new JsonPrimitive(sourceOfTruth))));
     }
 
@@ -144,23 +133,22 @@ public class CrudServiceUtil {
 
   public static String determineEdgeType(EdgePayload payload, String version) throws CrudException {
     RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
-    
+
     if (payload.getSource() == null || payload.getTarget() == null) {
       throw new CrudException("Source/Target not specified", Status.BAD_REQUEST);
     }
-    
-    Set<String> edgeTypes = schema.getValidRelationTypes(EdgePayloadUtil.getVertexNodeType(payload.getSource()), 
+
+    Set<String> edgeTypes = schema.getValidRelationTypes(EdgePayloadUtil.getVertexNodeType(payload.getSource()),
         EdgePayloadUtil.getVertexNodeType(payload.getTarget()));
-    
+
     if (edgeTypes.size() == 0) {
       throw new CrudException("No valid relationship types from " + payload.getSource() + " to " + payload.getTarget(), Status.BAD_REQUEST);
     }
-    
+
     if (edgeTypes.size() > 1) {
       throw new CrudException("Multiple possible relationship types from " + payload.getSource() + " to " + payload.getTarget(), Status.BAD_REQUEST);
     }
-    
+
     return edgeTypes.iterator().next();
   }
-
 }
index 2c139a7..47be12b 100644 (file)
@@ -32,6 +32,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;\r
 import java.util.stream.Collectors;\r
 \r
+import javax.annotation.PostConstruct;\r
 import javax.ws.rs.core.Response.Status;\r
 \r
 import org.apache.commons.io.IOUtils;\r
@@ -39,8 +40,8 @@ import org.onap.aai.cl.eelf.LoggerFactory;
 import org.onap.aai.edges.EdgeIngestor;\r
 import org.onap.aai.edges.EdgeRule;\r
 import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException;\r
-import org.onap.aai.setup.ConfigTranslator;\r
 import org.onap.aai.setup.SchemaVersion;\r
+import org.onap.aai.setup.Translator;\r
 import org.onap.crud.exception.CrudException;\r
 import org.onap.crud.logging.CrudServiceMsgs;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
@@ -48,8 +49,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import com.google.common.collect.Multimap;\r
 \r
 public class EdgeRulesLoader {\r
-       \r
-       private static ConfigTranslator configTranslator;\r
+\r
+       private static Translator translator;\r
     private static EdgeIngestor edgeIngestor;\r
 \r
     private static EdgePropsConfiguration edgePropsConfiguration;\r
@@ -67,14 +68,19 @@ public class EdgeRulesLoader {
             LoggerFactory.getInstance ().getLogger ( EdgeRulesLoader.class.getName () );\r
 \r
     private EdgeRulesLoader () { }\r
-    \r
+\r
     @Autowired\r
-    public EdgeRulesLoader(ConfigTranslator configTranslator, EdgeIngestor edgeIngestor, EdgePropsConfiguration edgePropsConfiguration) {\r
-        EdgeRulesLoader.configTranslator = configTranslator;\r
+    public EdgeRulesLoader(Translator translator, EdgeIngestor edgeIngestor, EdgePropsConfiguration edgePropsConfiguration) {\r
+        EdgeRulesLoader.translator = translator;\r
         EdgeRulesLoader.edgeIngestor = edgeIngestor;\r
         EdgeRulesLoader.edgePropsConfiguration = edgePropsConfiguration;\r
     }\r
 \r
+    @PostConstruct\r
+    public void init() throws CrudException {\r
+       EdgeRulesLoader.loadModels();\r
+    }\r
+    \r
     /**\r
      * Finds all DB Edge Rules and Edge Properties files for all OXM models.\r
      *\r
@@ -89,7 +95,7 @@ public class EdgeRulesLoader {
 \r
         for (String version : OxmModelLoader.getLoadedOXMVersions()) {\r
             try {\r
-                SchemaVersion schemaVersion = configTranslator.getSchemaVersions().getVersions().stream()\r
+                SchemaVersion schemaVersion = translator.getSchemaVersions().getVersions().stream()\r
                         .filter(s -> s.toString().equalsIgnoreCase(version)).findAny().orElse(null);\r
                 loadModel(schemaVersion, edgeIngestor, propFiles);\r
             } catch (IOException | EdgeRuleNotFoundException e) {\r
@@ -112,7 +118,7 @@ public class EdgeRulesLoader {
         }\r
 \r
         try {\r
-            SchemaVersion schemaVersion = configTranslator.getSchemaVersions().getVersions().stream()\r
+            SchemaVersion schemaVersion = translator.getSchemaVersions().getVersions().stream()\r
                     .filter(s -> s.toString().equalsIgnoreCase(v)).findAny().orElse(null);\r
 \r
             loadModel(schemaVersion, edgeIngestor, propFiles);\r
index 12f8f09..fb41fc9 100644 (file)
@@ -29,14 +29,15 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import javax.annotation.PostConstruct;
 import javax.ws.rs.core.Response.Status;
 import org.eclipse.persistence.dynamic.DynamicType;
 import org.eclipse.persistence.internal.oxm.mappings.Descriptor;
 import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
 import org.onap.aai.cl.eelf.LoggerFactory;
 import org.onap.aai.nodes.NodeIngestor;
-import org.onap.aai.setup.ConfigTranslator;
 import org.onap.aai.setup.SchemaVersion;
+import org.onap.aai.setup.Translator;
 import org.onap.crud.exception.CrudException;
 import org.onap.crud.logging.CrudServiceMsgs;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,9 +46,9 @@ import org.springframework.stereotype.Component;
 @Component
 public class OxmModelLoader {
 
-    private static ConfigTranslator configTranslator;
+    private static Translator translator;
     private static NodeIngestor nodeIngestor;
-    
+
     private static Map<String, DynamicJAXBContext> versionContextMap = new ConcurrentHashMap<>();
     private static Map<String, HashMap<String, DynamicType>> xmlElementLookup = new ConcurrentHashMap<>();
 
@@ -57,13 +58,18 @@ public class OxmModelLoader {
             LoggerFactory.getInstance().getLogger(OxmModelLoader.class.getName());
 
     private OxmModelLoader() { }
-    
+
     @Autowired
-    public OxmModelLoader(ConfigTranslator configTranslator, NodeIngestor nodeIngestor) {
-       OxmModelLoader.configTranslator = configTranslator;
+    public OxmModelLoader(Translator translator, NodeIngestor nodeIngestor) {
+       OxmModelLoader.translator = translator;
        OxmModelLoader.nodeIngestor = nodeIngestor;
     }
 
+    @PostConstruct
+    public void init() throws CrudException {
+       OxmModelLoader.loadModels();
+    }
+
     /**
      * Finds all OXM model files
      *
@@ -77,7 +83,7 @@ public class OxmModelLoader {
             logger.debug("Loading OXM Models");
         }
 
-        for (SchemaVersion oxmVersion : configTranslator.getSchemaVersions().getVersions()) {
+        for (SchemaVersion oxmVersion : translator.getSchemaVersions().getVersions()) {
             DynamicJAXBContext jaxbContext = nodeIngestor.getContextForVersion(oxmVersion);
             if (jaxbContext != null) {
                 loadModel(oxmVersion.toString(), jaxbContext);
@@ -166,8 +172,8 @@ public class OxmModelLoader {
     public static void setVersionContextMap(Map<String, DynamicJAXBContext> versionContextMap) {
         OxmModelLoader.versionContextMap = versionContextMap;
     }
-    
-   
+
+
     public static void loadXmlLookupMap(String version, DynamicJAXBContext jaxbContext )  {
 
         @SuppressWarnings("rawtypes")
@@ -183,8 +189,8 @@ public class OxmModelLoader {
         }
         xmlElementLookup.put(version, types);
     }
-    
-    
+
+
   public static DynamicType getDynamicTypeForVersion(String version, String type) throws CrudException {
 
       DynamicType dynamicType;
@@ -220,7 +226,7 @@ public class OxmModelLoader {
 
       return dynamicType;
   }
-  
+
   /**
    * Retrieves the list of all Loaded OXM versions.
    *
index 049a2d9..2b1f302 100644 (file)
@@ -1,3 +1,5 @@
+spring.application.name=gizmo
+
 server.port=9520
 
 SERVICE_BEANS=dynamic/conf
index 0b34048..005a393 100644 (file)
@@ -22,8 +22,9 @@ package org.onap.crud;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
-
+import java.util.Set;
 import org.junit.Before;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -33,6 +34,7 @@ import org.onap.aai.setup.AAIConfigTranslator;
 import org.onap.aai.setup.SchemaLocationsBean;
 import org.onap.aai.setup.SchemaVersion;
 import org.onap.aai.setup.SchemaVersions;
+import org.onap.aai.setup.Translator;
 import org.onap.schema.EdgePropsConfiguration;
 import org.onap.schema.EdgeRulesLoader;
 import org.onap.schema.OxmModelLoader;
@@ -67,12 +69,16 @@ public class OXMModelLoaderSetup {
         Mockito.when(schemaLocationsBean.getNodesInclusionPattern()).thenReturn(Arrays.asList(".*oxm(.*).xml"));
         Mockito.when(schemaLocationsBean.getEdgesInclusionPattern()).thenReturn(Arrays.asList("DbEdgeRules_.*.json"));
         Mockito.when(schemaLocationsBean.getNodeDirectory()).thenReturn("src/test/resources/multi-oxm/");
-        Mockito.when(schemaLocationsBean.getEdgeDirectory()).thenReturn("src/test/resources/rules");
+        Mockito.when(schemaLocationsBean.getEdgeDirectory()).thenReturn("src/test/resources/rules/");
         Mockito.when(edgePropsConfiguration.getEdgePropsDir()).thenReturn("src/test/resources/edgeProps/");
 
         AAIConfigTranslator aaiConfigTranslator = new AAIConfigTranslator(schemaLocationsBean, schemaVersions);
-        NodeIngestor nodeIngestor = new NodeIngestor(aaiConfigTranslator);
-        EdgeIngestor edgeIngestor = new EdgeIngestor(aaiConfigTranslator, schemaVersions);
+        Set<Translator> translators = new HashSet<>();
+        translators.add(aaiConfigTranslator);
+        NodeIngestor nodeIngestor = new NodeIngestor(translators);
+        nodeIngestor.initialize();
+        EdgeIngestor edgeIngestor = new EdgeIngestor(translators);
+        edgeIngestor.initialize();
         edgeRulesLoader = new EdgeRulesLoader(aaiConfigTranslator, edgeIngestor, edgePropsConfiguration);
         oxmModelLoader = new OxmModelLoader(aaiConfigTranslator, nodeIngestor);
     }
index a5edd7c..b28ba3a 100644 (file)
@@ -30,6 +30,7 @@ import org.onap.crud.event.GraphEvent.GraphEventOperation;
 import org.onap.crud.event.envelope.GraphEventEnvelope;
 import org.onap.crud.exception.CrudException;
 import org.onap.crud.util.TestUtil;
+import org.onap.schema.EdgeRulesLoader;
 import org.onap.schema.OxmModelLoader;
 import com.google.gson.Gson;
 import com.google.gson.JsonParser;
@@ -51,6 +52,7 @@ public class GraphEventResponseHandlerTest extends OXMModelLoaderSetup {
         System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
 
         OxmModelLoader.loadModels();
+        EdgeRulesLoader.loadModels();
     }
 
     @Test
index dadf81a..01e4646 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.crud.service;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -30,11 +31,9 @@ import java.util.Map;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.MultivaluedMap;
-import org.onap.aai.logging.LoggingContext;
 import org.onap.aai.restclient.client.OperationResult;
 import org.onap.aai.restclient.client.RestClient;
 import org.onap.crud.dao.champ.ChampDao;
-import org.slf4j.MDC;
 
 public class ChampDaoMockTest {
     // @formatter:off
@@ -44,7 +43,7 @@ public class ChampDaoMockTest {
            "\"properties\": {" +
            "\"fqdn\": \"myhost.onap.com\"," +
            "\"hostname\": \"myhost\" } }";
-       
+
        private final String champEdge = "{" +
            "\"key\": \"test-uuid\"," +
            "\"type\": \"edgeType\"," +
@@ -55,154 +54,154 @@ public class ChampDaoMockTest {
            "\"target\": {" +
            "\"key\": \"1d326bc7-b985-492b-9604-0d5d1f06f908\", \"type\": \"pserver\"}" +
            " }";
-       
-       private final String edgePayload = "{" + 
-               "\"type\":\"tosca.relationships.HostedOn\"," + 
-               "\"properties\":{" + 
-               "\"prevent-delete\":\"NONE\"}," + 
-               "\"source\":{" + 
-               "\"key\":\"test-uuid\"," + 
-               "\"type\":\"vserver\"," + 
-               "\"properties\":{}}," + 
-               "\"target\":{" + 
-               "\"key\":\"test-uuid\"," + 
-               "\"type\":\"pserver\"," + 
-               "\"properties\":{" + 
-               "\"hostname\":\"myhost\"," + 
+
+       private final String edgePayload = "{" +
+               "\"type\":\"tosca.relationships.HostedOn\"," +
+               "\"properties\":{" +
+               "\"prevent-delete\":\"NONE\"}," +
+               "\"source\":{" +
+               "\"key\":\"test-uuid\"," +
+               "\"type\":\"vserver\"," +
+               "\"properties\":{}}," +
+               "\"target\":{" +
+               "\"key\":\"test-uuid\"," +
+               "\"type\":\"pserver\"," +
+               "\"properties\":{" +
+               "\"hostname\":\"myhost\"," +
                "\"fqdn\":\"myhost.onap.com\"}}}";
 
-       private final String edgePayloadForPut = "{" + 
-               "\"key\":\"test-uuid\"," + 
-               "\"type\":\"tosca.relationships.HostedOn\"," + 
-               "\"properties\":{" + 
-               "\"prevent-delete\":\"NONE\"}," + 
-               "\"source\":{" + 
-               "\"key\":\"50bdab41-ad1c-4d00-952c-a0aa5d827811\"," + 
-               "\"type\":\"vserver\"," + 
-               "\"properties\":{}}," + 
-               "\"target\":{" + 
-               "\"key\":\"1d326bc7-b985-492b-9604-0d5d1f06f908\"," + 
-               "\"type\":\"pserver\"," + 
+       private final String edgePayloadForPut = "{" +
+               "\"key\":\"test-uuid\"," +
+               "\"type\":\"tosca.relationships.HostedOn\"," +
+               "\"properties\":{" +
+               "\"prevent-delete\":\"NONE\"}," +
+               "\"source\":{" +
+               "\"key\":\"50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
+               "\"type\":\"vserver\"," +
+               "\"properties\":{}}," +
+               "\"target\":{" +
+               "\"key\":\"1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
+               "\"type\":\"pserver\"," +
                "\"properties\":{}}}";
-       
-       private final String edgePayloadForPatch = "{" + 
-               "\"key\":\"test-uuid\"," + 
-               "\"type\":\"tosca.relationships.HostedOn\"," + 
-               "\"properties\":{" + 
-               "\"prevent-delete\":\"NONE\"}," + 
-               "\"source\":{" + 
-               "\"key\":\"50bdab41-ad1c-4d00-952c-a0aa5d827811\"," + 
-               "\"type\":\"vserver\"}," + 
-               "\"target\":{" + 
-               "\"key\":\"1d326bc7-b985-492b-9604-0d5d1f06f908\"," + 
+
+       private final String edgePayloadForPatch = "{" +
+               "\"key\":\"test-uuid\"," +
+               "\"type\":\"tosca.relationships.HostedOn\"," +
+               "\"properties\":{" +
+               "\"prevent-delete\":\"NONE\"}," +
+               "\"source\":{" +
+               "\"key\":\"50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
+               "\"type\":\"vserver\"}," +
+               "\"target\":{" +
+               "\"key\":\"1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
                "\"type\":\"pserver\"}}";
-       
-       private final String edgePayloadForPost = "{" + 
-               "\"type\":\"tosca.relationships.HostedOn\"," + 
-               "\"properties\":{" + 
-               "\"SVC-INFRA\":\"OUT\"," + 
-               "\"prevent-delete\":\"IN\"," + 
-               "\"delete-other-v\":\"NONE\"," + 
-               "\"contains-other-v\":\"NONE\"" + 
-               "}," + 
-               "\"source\":{" + 
-               "\"key\":\"test-uuid\"," + 
-               "\"type\":\"vserver\"," + 
-               "\"properties\":{" + 
-               "" + 
-               "}" + 
-               "}," + 
-               "\"target\":{" + 
-               "\"key\":\"test-uuid\"," + 
-               "\"type\":\"pserver\"," + 
-               "\"properties\":{" + 
-               "\"hostname\":\"myhost\"," + 
-               "\"fqdn\":\"myhost.onap.com\"" + 
-               "}" + 
-               "}" + 
+
+       private final String edgePayloadForPost = "{" +
+               "\"type\":\"tosca.relationships.HostedOn\"," +
+               "\"properties\":{" +
+               "\"SVC-INFRA\":\"OUT\"," +
+               "\"prevent-delete\":\"IN\"," +
+               "\"delete-other-v\":\"NONE\"," +
+               "\"contains-other-v\":\"NONE\"" +
+               "}," +
+               "\"source\":{" +
+               "\"key\":\"test-uuid\"," +
+               "\"type\":\"vserver\"," +
+               "\"properties\":{" +
+               "" +
+               "}" +
+               "}," +
+               "\"target\":{" +
+               "\"key\":\"test-uuid\"," +
+               "\"type\":\"pserver\"," +
+               "\"properties\":{" +
+               "\"hostname\":\"myhost\"," +
+               "\"fqdn\":\"myhost.onap.com\"" +
+               "}" +
+               "}" +
                "}";
-       
-       private final String edgePayloadForPutNoProperties = "{" + 
-               "\"key\":\"test-uuid\"," + 
-               "\"type\":\"tosca.relationships.HostedOn\"," + 
-               "\"properties\":{" + 
-               "\"SVC-INFRA\":\"OUT\"," + 
-               "\"prevent-delete\":\"IN\"," + 
-               "\"delete-other-v\":\"NONE\"," + 
-               "\"contains-other-v\":\"NONE\"" + 
-               "}," + 
-               "\"source\":{" + 
-               "\"key\":\"50bdab41-ad1c-4d00-952c-a0aa5d827811\"," + 
-               "\"type\":\"vserver\"," + 
-               "\"properties\":{" + 
-               "" + 
-               "}" + 
-               "}," + 
-               "\"target\":{" + 
-               "\"key\":\"1d326bc7-b985-492b-9604-0d5d1f06f908\"," + 
-               "\"type\":\"pserver\"," + 
-               "\"properties\":{" + 
-               "" + 
-               "}" + 
-               "}" + 
+
+       private final String edgePayloadForPutNoProperties = "{" +
+               "\"key\":\"test-uuid\"," +
+               "\"type\":\"tosca.relationships.HostedOn\"," +
+               "\"properties\":{" +
+               "\"SVC-INFRA\":\"OUT\"," +
+               "\"prevent-delete\":\"IN\"," +
+               "\"delete-other-v\":\"NONE\"," +
+               "\"contains-other-v\":\"NONE\"" +
+               "}," +
+               "\"source\":{" +
+               "\"key\":\"50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
+               "\"type\":\"vserver\"," +
+               "\"properties\":{" +
+               "" +
+               "}" +
+               "}," +
+               "\"target\":{" +
+               "\"key\":\"1d326bc7-b985-492b-9604-0d5d1f06f908\"," +
+               "\"type\":\"pserver\"," +
+               "\"properties\":{" +
+               "" +
+               "}" +
+               "}" +
                "}";
-       
-       private final String vertexPayload = "{" + 
-               "\"type\":\"pserver\"," + 
-               "\"properties\":{" + 
-               "\"hostname\":\"myhost\"," + 
-               "\"in-maint\":false," + 
-               "\"fqdn\":\"myhost.onap.com\"," + 
-               "\"last-mod-source-of-truth\":\"source-of-truth\"," + 
-               "\"source-of-truth\":\"source-of-truth\"," + 
+
+       private final String vertexPayload = "{" +
+               "\"type\":\"pserver\"," +
+               "\"properties\":{" +
+               "\"hostname\":\"myhost\"," +
+               "\"in-maint\":false," +
+               "\"fqdn\":\"myhost.onap.com\"," +
+               "\"last-mod-source-of-truth\":\"source-of-truth\"," +
+               "\"source-of-truth\":\"source-of-truth\"," +
                "\"aai-node-type\":\"pserver\"}}";
-       
-       private final String vertexPayloadForVserver = "{" + 
-               "\"type\":\"vserver\"," + 
-               "\"properties\":{" + 
-               "\"in-maint\":false," + 
-               "\"vserver-name\":\"test-vserver\"," + 
-               "\"vserver-id\":\"VSER1\"," + 
-               "\"last-mod-source-of-truth\":\"source-of-truth\"," + 
-               "\"vserver-name2\":\"alt-test-vserver\"," + 
-               "\"source-of-truth\":\"source-of-truth\"," + 
-               "\"vserver-selflink\":\"http://1.2.3.4/moreInfo\"," + 
-               "\"is-closed-loop-disabled\":false," + 
+
+       private final String vertexPayloadForVserver = "{" +
+               "\"type\":\"vserver\"," +
+               "\"properties\":{" +
+               "\"in-maint\":false," +
+               "\"vserver-name\":\"test-vserver\"," +
+               "\"vserver-id\":\"VSER1\"," +
+               "\"last-mod-source-of-truth\":\"source-of-truth\"," +
+               "\"vserver-name2\":\"alt-test-vserver\"," +
+               "\"source-of-truth\":\"source-of-truth\"," +
+               "\"vserver-selflink\":\"http://1.2.3.4/moreInfo\"," +
+               "\"is-closed-loop-disabled\":false," +
                "\"aai-node-type\":\"vserver\"}}";
-       
-       private final String vertexPayloadForPserver = "{" + 
-               "\"key\":\"50bdab41-ad1c-4d00-952c-a0aa5d827811\"," + 
-               "\"type\":\"pserver\"," + 
-               "\"properties\":{" + 
-               "\"ptnii-equip-name\":\"e-name\"," + 
-               "\"hostname\":\"steve-host2\"," + 
-               "\"equip-type\":\"server\"," + 
-               "\"equip-vendor\":\"HP\"," + 
-               "\"equip-model\":\"DL380p-nd\"," + 
-               "\"in-maint\":false," + 
-               "\"fqdn\":\"myhost.onap.net\"," + 
-               "\"purpose\":\"my-purpose\"," + 
-               "\"ipv4-oam-address\":\"1.2.3.4\"," + 
-               "\"last-mod-source-of-truth\":\"source-of-truth\"," + 
+
+       private final String vertexPayloadForPserver = "{" +
+               "\"key\":\"50bdab41-ad1c-4d00-952c-a0aa5d827811\"," +
+               "\"type\":\"pserver\"," +
+               "\"properties\":{" +
+               "\"ptnii-equip-name\":\"e-name\"," +
+               "\"hostname\":\"steve-host2\"," +
+               "\"equip-type\":\"server\"," +
+               "\"equip-vendor\":\"HP\"," +
+               "\"equip-model\":\"DL380p-nd\"," +
+               "\"in-maint\":false," +
+               "\"fqdn\":\"myhost.onap.net\"," +
+               "\"purpose\":\"my-purpose\"," +
+               "\"ipv4-oam-address\":\"1.2.3.4\"," +
+               "\"last-mod-source-of-truth\":\"source-of-truth\"," +
                "\"aai-node-type\":\"pserver\"}}";
-       
-       private final String vertexPayloadForPut = "{" + 
-               "\"key\":\"test-uuid\"," + 
-               "\"type\":\"pserver\"," + 
-               "\"properties\":{" + 
-               "\"hostname\":\"myhost\"," + 
-               "\"in-maint\":false," + 
-               "\"fqdn\":\"myhost.onap.com\"," + 
-               "\"last-mod-source-of-truth\":\"source-of-truth\"," + 
+
+       private final String vertexPayloadForPut = "{" +
+               "\"key\":\"test-uuid\"," +
+               "\"type\":\"pserver\"," +
+               "\"properties\":{" +
+               "\"hostname\":\"myhost\"," +
+               "\"in-maint\":false," +
+               "\"fqdn\":\"myhost.onap.com\"," +
+               "\"last-mod-source-of-truth\":\"source-of-truth\"," +
                "\"aai-node-type\":\"pserver\"}}";
-       
-       private final String vertexPayloadForPatch = "{" + 
-               "\"key\":\"test-uuid\"," + 
-               "\"type\":\"pserver\"," + 
-               "\"properties\":{" + 
-               "\"hostname\":\"myhost\"," + 
-               "\"fqdn\":\"myhost.onap.com\"," + 
-               "\"last-mod-source-of-truth\":\"source-of-truth\"," + 
+
+       private final String vertexPayloadForPatch = "{" +
+               "\"key\":\"test-uuid\"," +
+               "\"type\":\"pserver\"," +
+               "\"properties\":{" +
+               "\"hostname\":\"myhost\"," +
+               "\"fqdn\":\"myhost.onap.com\"," +
+               "\"last-mod-source-of-truth\":\"source-of-truth\"," +
                "\"aai-node-type\":\"pserver\"}}";
        // @formatter:on
 
@@ -345,7 +344,7 @@ public class ChampDaoMockTest {
 
         Map<String, List<String>> headers = new HashMap<>();
         headers.put(HEADER_FROM_APP, Arrays.asList(FROM_APP_NAME));
-        headers.put(HEADER_TRANS_ID, Arrays.asList(MDC.get(LoggingContext.LoggingField.REQUEST_ID.toString())));
+        headers.put(HEADER_TRANS_ID, Arrays.asList(HEADER_TRANS_ID_VALUE));
 
         when(restClientMock.get(url, headers, MediaType.APPLICATION_JSON_TYPE)).thenReturn(operationResult);
     }
@@ -383,7 +382,7 @@ public class ChampDaoMockTest {
         operationResult.setResultCode(200);
         String baseUrl = BASE_OBJECT_URL + "/" + RELATIONSHIP_SUB_URL + "/" + id;
         String url;
-        
+
         if (txId != null) {
             url = baseUrl + txId;
         }
index b4d5a31..64cab0d 100644 (file)
@@ -36,7 +36,12 @@ import org.onap.crud.parser.EdgePayload;
 import org.onap.schema.EdgeRulesLoader;\r
 import org.onap.schema.validation.MultiplicityValidator.MultiplicityType;\r
 \r
-public class MultiplicityValidatorTest {\r
+import org.junit.runner.RunWith;\r
+import org.mockito.junit.MockitoJUnitRunner;\r
+import org.onap.crud.OXMModelLoaderSetup;\r
+\r
+@RunWith(MockitoJUnitRunner.Silent.class)\r
+public class MultiplicityValidatorTest extends OXMModelLoaderSetup{\r
 \r
     private final String postEdgePayload = "{" + "\"type\": \"tosca.relationships.HostedOn\","\r
             + "\"source\": \"services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\","\r