diff options
254 files changed, 25204 insertions, 23101 deletions
diff --git a/aai-traversal/.classpath b/aai-traversal/.classpath index ff97a07..ed528ab 100644 --- a/aai-traversal/.classpath +++ b/aai-traversal/.classpath @@ -10,6 +10,7 @@ <attributes> <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> + <attribute name="test" value="true"/> </attributes> </classpathentry> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> @@ -30,8 +31,37 @@ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> <attributes> <attribute name="maven.pomderived" value="true"/> + <attribute name="test" value="true"/> </attributes> </classpathentry> <classpathentry exported="true" kind="con" path="GROOVY_DSL_SUPPORT"/> + <classpathentry kind="src" output="target/classes" path="target/generated-sources/antlr4"> + <attributes> + <attribute name="optional" value="true"/> + <attribute name="maven.pomderived" value="true"/> + </attributes> + </classpathentry> + <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/docker"> + <attributes> + <attribute name="maven.pomderived" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="src" path="target/generated-sources/annotations"> + <attributes> + <attribute name="optional" value="true"/> + <attribute name="maven.pomderived" value="true"/> + <attribute name="ignore_optional_problems" value="true"/> + <attribute name="m2e-apt" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> + <attributes> + <attribute name="optional" value="true"/> + <attribute name="maven.pomderived" value="true"/> + <attribute name="ignore_optional_problems" value="true"/> + <attribute name="m2e-apt" value="true"/> + <attribute name="test" value="true"/> + </attributes> + </classpathentry> <classpathentry kind="output" path="target/classes"/> </classpath> diff --git a/aai-traversal/src/main/java/org/onap/aai/Profiles.java b/aai-traversal/src/main/java/org/onap/aai/Profiles.java index 25f51c3..0a886af 100644 --- a/aai-traversal/src/main/java/org/onap/aai/Profiles.java +++ b/aai-traversal/src/main/java/org/onap/aai/Profiles.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -21,15 +21,16 @@ package org.onap.aai; public final class Profiles { - public static final String DMAAP = "dmaap"; - public static final String DME2 = "dme2"; + public static final String DMAAP = "dmaap"; + public static final String DME2 = "dme2"; - public static final String ONE_WAY_SSL = "one-way-ssl"; + public static final String ONE_WAY_SSL = "one-way-ssl"; // AAF Basic Auth - public static final String AAF_AUTHENTICATION = "aaf-auth"; + public static final String AAF_AUTHENTICATION = "aaf-auth"; // AAF Auth with Client Certs - public static final String AAF_CERT_AUTHENTICATION = "aaf-cert-auth"; - public static final String TWO_WAY_SSL = "two-way-ssl"; + public static final String AAF_CERT_AUTHENTICATION = "aaf-cert-auth"; + public static final String TWO_WAY_SSL = "two-way-ssl"; - private Profiles(){} + private Profiles() { + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/TraversalApp.java b/aai-traversal/src/main/java/org/onap/aai/TraversalApp.java index 56573bc..5ac3ff1 100644 --- a/aai-traversal/src/main/java/org/onap/aai/TraversalApp.java +++ b/aai-traversal/src/main/java/org/onap/aai/TraversalApp.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,11 @@ */ package org.onap.aai; +import java.util.Map; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + import org.apache.commons.lang3.exception.ExceptionUtils; import org.onap.aai.aailog.logs.AaiDebugLog; import org.onap.aai.config.PropertyPasswordConfiguration; @@ -41,164 +46,154 @@ import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfigurat import org.springframework.context.annotation.ComponentScan; import org.springframework.core.env.Environment; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import java.util.Map; - -@SpringBootApplication(exclude = { - DataSourceAutoConfiguration.class, - DataSourceTransactionManagerAutoConfiguration.class, - HibernateJpaAutoConfiguration.class -}) +@SpringBootApplication( + exclude = {DataSourceAutoConfiguration.class, + DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) // Component Scan provides a way to look for spring beans // It only searches beans in the following packages // Any method annotated with @Bean annotation or any class // with @Component, @Configuration, @Service will be picked up -@ComponentScan(basePackages = { - "org.onap.aai.config", - "org.onap.aai.web", - "org.onap.aai.setup", - "org.onap.aai.tasks", - "org.onap.aai.service", - "org.onap.aai.rest", - "org.onap.aai.aaf", - "org.onap.aai.aailog" -}) +@ComponentScan( + basePackages = {"org.onap.aai.config", "org.onap.aai.web", "org.onap.aai.setup", + "org.onap.aai.tasks", "org.onap.aai.service", "org.onap.aai.rest", "org.onap.aai.aaf", + "org.onap.aai.aailog"}) public class TraversalApp { - private static final Logger logger = LoggerFactory.getLogger(TraversalApp.class.getName()); - - private static AaiDebugLog debugLog = new AaiDebugLog(); - static { - debugLog.setupMDC(); - } - - private static final String APP_NAME = "aai-traversal"; - private static Map<String,String> contextMap; - - @Autowired - private Environment env; - - @Autowired - private NodeIngestor nodeIngestor; - - @Autowired - private SpringContextAware context; - - @Autowired - private SpringContextAware loaderFactory; - - - @PostConstruct - private void init() throws AAIException { - System.setProperty("org.onap.aai.serverStarted", "false"); - setDefaultProps(); - - contextMap = MDC.getCopyOfContextMap(); - - logger.debug("AAI Server initialization started..."); - - // Setting this property to allow for encoded slash (/) in the path parameter - // This is only needed for tomcat keeping this as temporary - System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true"); - - logger.debug("Starting AAIGraph connections and the NodeInjestor"); - - if(env.acceptsProfiles(Profiles.TWO_WAY_SSL) && env.acceptsProfiles(Profiles.ONE_WAY_SSL)){ - logger.debug("You have seriously misconfigured your application"); - } - - AAIConfig.init(); - - AAIGraph.getInstance(); - } - - @PreDestroy - public void cleanup(){ - logger.debug("Traversal MicroService stopped"); - logger.info("Shutting down both realtime and cached connections"); - AAIGraph.getInstance().graphShutdown(); - } - - public static void main(String[] args) throws AAIException{ - - setDefaultProps(); - - Environment env =null; - AAIConfig.init(); - - try{ - SpringApplication app = new SpringApplication(TraversalApp.class); - app.setLogStartupInfo(false); - app.setRegisterShutdownHook(true); - app.addInitializers(new PropertyPasswordConfiguration()); - env = app.run(args).getEnvironment(); - } - catch(Exception ex){ - AAIException aai = schemaServiceExceptionTranslator(ex); - ErrorLogHelper.logException(aai); - ErrorLogHelper.logError(aai.getCode(), ex.getMessage() + ", resolve and restart Traversal"); - throw aai; - } - - - MDC.setContextMap (contextMap); - logger.info( - "Application '{}' is running on {}!" , - env.getProperty("spring.application.name"), - env.getProperty("server.port") - ); - - logger.debug("Traversal MicroService Started"); - System.out.println("Traversal Microservice Started"); - } - - public static void setDefaultProps(){ - - if (System.getProperty("file.separator") == null) { - System.setProperty("file.separator", "/"); - } - - String currentDirectory = System.getProperty("user.dir"); - System.setProperty("aai.service.name", TraversalApp.class.getSimpleName()); - - if (System.getProperty("AJSC_HOME") == null) { - System.setProperty("AJSC_HOME", "."); - } - - if(currentDirectory.contains(APP_NAME)){ - if (System.getProperty("BUNDLECONFIG_DIR") == null) { - System.setProperty("BUNDLECONFIG_DIR", "src/main/resources"); - } - } else { - if (System.getProperty("BUNDLECONFIG_DIR") == null) { - System.setProperty("BUNDLECONFIG_DIR", "aai-traversal/src/main/resources"); - } - } - - } - private static AAIException schemaServiceExceptionTranslator(Exception ex) { - AAIException aai = null; - logger.info("Error Message is {} details - {}", ExceptionUtils.getRootCause(ex).toString(), ExceptionUtils.getRootCause(ex).getMessage()); - if ( ExceptionUtils.getRootCause(ex) == null || ExceptionUtils.getRootCause(ex).getMessage() == null ) { - aai = new AAIException("AAI_3025","Error parsing exception - Please Investigate" + - LogFormatTools.getStackTop(ex)); + private static final Logger logger = LoggerFactory.getLogger(TraversalApp.class.getName()); + + private static AaiDebugLog debugLog = new AaiDebugLog(); + static { + debugLog.setupMDC(); + } + + private static final String APP_NAME = "aai-traversal"; + private static Map<String, String> contextMap; + + @Autowired + private Environment env; + + @Autowired + private NodeIngestor nodeIngestor; + + @Autowired + private SpringContextAware context; + + @Autowired + private SpringContextAware loaderFactory; + + @PostConstruct + private void init() throws AAIException { + System.setProperty("org.onap.aai.serverStarted", "false"); + setDefaultProps(); + + contextMap = MDC.getCopyOfContextMap(); + + logger.debug("AAI Server initialization started..."); + + // Setting this property to allow for encoded slash (/) in the path parameter + // This is only needed for tomcat keeping this as temporary + System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true"); + + logger.debug("Starting AAIGraph connections and the NodeInjestor"); + + if (env.acceptsProfiles(Profiles.TWO_WAY_SSL) + && env.acceptsProfiles(Profiles.ONE_WAY_SSL)) { + logger.debug("You have seriously misconfigured your application"); + } + + AAIConfig.init(); + + AAIGraph.getInstance(); + } + + @PreDestroy + public void cleanup() { + logger.debug("Traversal MicroService stopped"); + logger.info("Shutting down both realtime and cached connections"); + AAIGraph.getInstance().graphShutdown(); + } + + public static void main(String[] args) throws AAIException { + + setDefaultProps(); + + Environment env = null; + AAIConfig.init(); + + try { + SpringApplication app = new SpringApplication(TraversalApp.class); + app.setLogStartupInfo(false); + app.setRegisterShutdownHook(true); + app.addInitializers(new PropertyPasswordConfiguration()); + env = app.run(args).getEnvironment(); + } catch (Exception ex) { + AAIException aai = schemaServiceExceptionTranslator(ex); + ErrorLogHelper.logException(aai); + ErrorLogHelper.logError(aai.getCode(), + ex.getMessage() + ", resolve and restart Traversal"); + throw aai; + } + + MDC.setContextMap(contextMap); + logger.info("Application '{}' is running on {}!", + env.getProperty("spring.application.name"), env.getProperty("server.port")); + + logger.debug("Traversal MicroService Started"); + System.out.println("Traversal Microservice Started"); + } + + public static void setDefaultProps() { + + if (System.getProperty("file.separator") == null) { + System.setProperty("file.separator", "/"); + } + + String currentDirectory = System.getProperty("user.dir"); + System.setProperty("aai.service.name", TraversalApp.class.getSimpleName()); + + if (System.getProperty("AJSC_HOME") == null) { + System.setProperty("AJSC_HOME", "."); + } + + if (currentDirectory.contains(APP_NAME)) { + if (System.getProperty("BUNDLECONFIG_DIR") == null) { + System.setProperty("BUNDLECONFIG_DIR", "src/main/resources"); + } + } else { + if (System.getProperty("BUNDLECONFIG_DIR") == null) { + System.setProperty("BUNDLECONFIG_DIR", "aai-traversal/src/main/resources"); + } + } + + } + + private static AAIException schemaServiceExceptionTranslator(Exception ex) { + AAIException aai = null; + logger.info("Error Message is {} details - {}", ExceptionUtils.getRootCause(ex).toString(), + ExceptionUtils.getRootCause(ex).getMessage()); + if (ExceptionUtils.getRootCause(ex) == null + || ExceptionUtils.getRootCause(ex).getMessage() == null) { + aai = new AAIException("AAI_3025", + "Error parsing exception - Please Investigate" + LogFormatTools.getStackTop(ex)); } else { - logger.info("Exception is " + ExceptionUtils.getRootCause(ex).getMessage() + "Root cause is"+ ExceptionUtils.getRootCause(ex).toString()); - if(ExceptionUtils.getRootCause(ex).getMessage().contains("NodeIngestor")){ - aai = new AAIException("AAI_3026","Error reading OXM from SchemaService - Investigate"); - } - else if(ExceptionUtils.getRootCause(ex).getMessage().contains("EdgeIngestor")){ - aai = new AAIException("AAI_3027","Error reading EdgeRules from SchemaService - Investigate"); - } - else if(ExceptionUtils.getRootCause(ex).getMessage().contains("Connection refused")){ - aai = new AAIException("AAI_3025","Error connecting to SchemaService - Investigate"); - }else { - aai = new AAIException("AAI_3025","Error connecting to SchemaService - Please Investigate"); - } + logger.info("Exception is " + ExceptionUtils.getRootCause(ex).getMessage() + + "Root cause is" + ExceptionUtils.getRootCause(ex).toString()); + if (ExceptionUtils.getRootCause(ex).getMessage().contains("NodeIngestor")) { + aai = new AAIException("AAI_3026", + "Error reading OXM from SchemaService - Investigate"); + } else if (ExceptionUtils.getRootCause(ex).getMessage().contains("EdgeIngestor")) { + aai = new AAIException("AAI_3027", + "Error reading EdgeRules from SchemaService - Investigate"); + } else if (ExceptionUtils.getRootCause(ex).getMessage() + .contains("Connection refused")) { + aai = + new AAIException("AAI_3025", "Error connecting to SchemaService - Investigate"); + } else { + aai = new AAIException("AAI_3025", + "Error connecting to SchemaService - Please Investigate"); + } } - return aai; - } + return aai; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/aailog/logs/AaiDBTraversalMetricLog.java b/aai-traversal/src/main/java/org/onap/aai/aailog/logs/AaiDBTraversalMetricLog.java index 8afc58b..7b28c7b 100644 --- a/aai-traversal/src/main/java/org/onap/aai/aailog/logs/AaiDBTraversalMetricLog.java +++ b/aai-traversal/src/main/java/org/onap/aai/aailog/logs/AaiDBTraversalMetricLog.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,6 +20,12 @@ package org.onap.aai.aailog.logs; +import java.net.URI; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Optional; + import org.onap.aai.util.AAIConstants; import org.onap.logging.filter.base.Constants; import org.onap.logging.filter.base.MDCSetup; @@ -28,23 +34,17 @@ import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.slf4j.*; import org.springframework.beans.factory.annotation.Value; -import java.net.URI; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Optional; - public class AaiDBTraversalMetricLog extends MDCSetup { protected static final Logger logger = LoggerFactory.getLogger(AaiDBTraversalMetricLog.class); private final String partnerName; private static final Marker INVOKE_RETURN = MarkerFactory.getMarker("INVOKE-RETURN"); private static final String TARGET_ENTITY = ONAPComponents.AAI.toString() + ".DB"; + public AaiDBTraversalMetricLog(String subcomponent) { partnerName = getPartnerName(subcomponent); } - protected String getTargetServiceName(Optional<URI> uri) { return (getServiceName(uri)); } @@ -60,12 +60,11 @@ public class AaiDBTraversalMetricLog extends MDCSetup { return serviceName; } - protected String getTargetEntity(Optional<URI> uri) { return TARGET_ENTITY; } - protected String getPartnerName(@Value(AAIConstants.AAI_TRAVERSAL_MS) String subcomponent ) { + protected String getPartnerName(@Value(AAIConstants.AAI_TRAVERSAL_MS) String subcomponent) { StringBuilder sb = new StringBuilder(ONAPComponents.AAI.toString()).append(subcomponent); return (sb.toString()); } @@ -95,7 +94,8 @@ public class AaiDBTraversalMetricLog extends MDCSetup { } protected void setupMDC(Optional<URI> uri) { - MDC.put("InvokeTimestamp", ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT)); + MDC.put("InvokeTimestamp", + ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT)); MDC.put("TargetServiceName", this.getTargetServiceName(uri)); MDC.put("StatusCode", ONAPLogConstants.ResponseStatus.INPROGRESS.toString()); this.setInvocationIdFromMDC(); diff --git a/aai-traversal/src/main/java/org/onap/aai/config/DslConfiguration.java b/aai-traversal/src/main/java/org/onap/aai/config/DslConfiguration.java index d10d4ac..81e96d1 100644 --- a/aai-traversal/src/main/java/org/onap/aai/config/DslConfiguration.java +++ b/aai-traversal/src/main/java/org/onap/aai/config/DslConfiguration.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,9 @@ */ package org.onap.aai.config; +import java.util.HashMap; +import java.util.Map; + import org.antlr.v4.runtime.tree.ParseTreeListener; import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.introspection.LoaderFactory; @@ -30,24 +33,24 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; -import java.util.HashMap; -import java.util.Map; - @Configuration public class DslConfiguration { @Bean @Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE) - public Map<QueryVersion, ParseTreeListener> dslListeners(EdgeIngestor edgeIngestor, SchemaVersions schemaVersions, LoaderFactory loaderFactory){ + public Map<QueryVersion, ParseTreeListener> dslListeners(EdgeIngestor edgeIngestor, + SchemaVersions schemaVersions, LoaderFactory loaderFactory) { Map<QueryVersion, ParseTreeListener> dslListeners = new HashMap<>(); - dslListeners.put(QueryVersion.V1,new org.onap.aai.rest.dsl.v1.DslListener(edgeIngestor, schemaVersions, loaderFactory)); - dslListeners.put(QueryVersion.V2,new org.onap.aai.rest.dsl.v2.DslListener(edgeIngestor, schemaVersions, loaderFactory)); + dslListeners.put(QueryVersion.V1, + new org.onap.aai.rest.dsl.v1.DslListener(edgeIngestor, schemaVersions, loaderFactory)); + dslListeners.put(QueryVersion.V2, + new org.onap.aai.rest.dsl.v2.DslListener(edgeIngestor, schemaVersions, loaderFactory)); return dslListeners; } @Bean @Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE) - public DslQueryProcessor dslQueryProcessor(Map<QueryVersion, ParseTreeListener> dslListeners){ + public DslQueryProcessor dslQueryProcessor(Map<QueryVersion, ParseTreeListener> dslListeners) { return new DslQueryProcessor(dslListeners); } } diff --git a/aai-traversal/src/main/java/org/onap/aai/config/ErrorHandler.java b/aai-traversal/src/main/java/org/onap/aai/config/ErrorHandler.java index 22e12a6..40a0eee 100644 --- a/aai-traversal/src/main/java/org/onap/aai/config/ErrorHandler.java +++ b/aai-traversal/src/main/java/org/onap/aai/config/ErrorHandler.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,21 +19,22 @@ */ package org.onap.aai.config; -import org.onap.aai.exceptions.AAIException; -import org.onap.aai.logging.ErrorLogHelper; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; -import org.springframework.web.filter.OncePerRequestFilter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; + +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.logging.ErrorLogHelper; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; /** * Responsible for dealing with uri that doesn't start with basePath @@ -46,15 +47,17 @@ public class ErrorHandler extends OncePerRequestFilter { private String basePath; - public ErrorHandler(@Value("${schema.uri.base.path}") String basePath){ + public ErrorHandler(@Value("${schema.uri.base.path}") String basePath) { this.basePath = basePath; - if(!basePath.endsWith("/")){ + if (!basePath.endsWith("/")) { this.basePath = basePath + "/"; } } @Override - protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException { + protected void doFilterInternal(HttpServletRequest httpServletRequest, + HttpServletResponse httpServletResponse, FilterChain filterChain) + throws ServletException, IOException { String uri = httpServletRequest.getRequestURI(); diff --git a/aai-traversal/src/main/java/org/onap/aai/config/JettyPasswordDecoder.java b/aai-traversal/src/main/java/org/onap/aai/config/JettyPasswordDecoder.java index 944f951..bffb7fb 100644 --- a/aai-traversal/src/main/java/org/onap/aai/config/JettyPasswordDecoder.java +++ b/aai-traversal/src/main/java/org/onap/aai/config/JettyPasswordDecoder.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/aai-traversal/src/main/java/org/onap/aai/config/PasswordDecoder.java b/aai-traversal/src/main/java/org/onap/aai/config/PasswordDecoder.java index 0dcb845..a257b34 100644 --- a/aai-traversal/src/main/java/org/onap/aai/config/PasswordDecoder.java +++ b/aai-traversal/src/main/java/org/onap/aai/config/PasswordDecoder.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/aai-traversal/src/main/java/org/onap/aai/config/PropertyPasswordConfiguration.java b/aai-traversal/src/main/java/org/onap/aai/config/PropertyPasswordConfiguration.java index 0a76d6d..5d5a075 100644 --- a/aai-traversal/src/main/java/org/onap/aai/config/PropertyPasswordConfiguration.java +++ b/aai-traversal/src/main/java/org/onap/aai/config/PropertyPasswordConfiguration.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.config; +import com.att.eelf.configuration.EELFManager; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -29,19 +31,20 @@ import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.att.eelf.configuration.EELFManager; -import org.apache.commons.io.IOUtils; import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.*; -public class PropertyPasswordConfiguration implements ApplicationContextInitializer<ConfigurableApplicationContext> { +public class PropertyPasswordConfiguration + implements ApplicationContextInitializer<ConfigurableApplicationContext> { private static final Pattern decodePasswordPattern = Pattern.compile("password\\((.*?)\\)"); private PasswordDecoder passwordDecoder = new JettyPasswordDecoder(); - private static final Logger logger = LoggerFactory.getLogger(PropertyPasswordConfiguration.class.getName()); + private static final Logger logger = + LoggerFactory.getLogger(PropertyPasswordConfiguration.class.getName()); @Override public void initialize(ConfigurableApplicationContext applicationContext) { @@ -113,21 +116,25 @@ public class PropertyPasswordConfiguration implements ApplicationContextInitiali Map<String, Object> propertyOverrides = new LinkedHashMap<>(); decodePasswords(propertySource, propertyOverrides); if (!propertyOverrides.isEmpty()) { - PropertySource<?> decodedProperties = new MapPropertySource("decoded "+ propertySource.getName(), propertyOverrides); - environment.getPropertySources().addBefore(propertySource.getName(), decodedProperties); + PropertySource<?> decodedProperties = + new MapPropertySource("decoded " + propertySource.getName(), propertyOverrides); + environment.getPropertySources().addBefore(propertySource.getName(), + decodedProperties); } } if (!sslProps.isEmpty()) { logger.debug("Using AAF Certman files"); - PropertySource<?> additionalProperties = new MapPropertySource("additionalProperties", sslProps); + PropertySource<?> additionalProperties = + new MapPropertySource("additionalProperties", sslProps); environment.getPropertySources().addFirst(additionalProperties); } } private void decodePasswords(PropertySource<?> source, Map<String, Object> propertyOverrides) { if (source instanceof EnumerablePropertySource) { - EnumerablePropertySource<?> enumerablePropertySource = (EnumerablePropertySource<?>) source; + EnumerablePropertySource<?> enumerablePropertySource = + (EnumerablePropertySource<?>) source; for (String key : enumerablePropertySource.getPropertyNames()) { Object rawValue = source.getProperty(key); if (rawValue instanceof String) { @@ -139,7 +146,8 @@ public class PropertyPasswordConfiguration implements ApplicationContextInitiali } private String decodePasswordsInString(String input) { - if (input == null) return null; + if (input == null) + return null; StringBuffer output = new StringBuffer(); Matcher matcher = decodePasswordPattern.matcher(input); while (matcher.find()) { diff --git a/aai-traversal/src/main/java/org/onap/aai/config/SearchConfiguration.java b/aai-traversal/src/main/java/org/onap/aai/config/SearchConfiguration.java index 5f131bf..248e799 100644 --- a/aai-traversal/src/main/java/org/onap/aai/config/SearchConfiguration.java +++ b/aai-traversal/src/main/java/org/onap/aai/config/SearchConfiguration.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,7 +20,6 @@ package org.onap.aai.config; import org.onap.aai.dbgraphmap.SearchGraph; - import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.introspection.LoaderFactory; import org.onap.aai.rest.search.CQConfig; @@ -39,30 +38,28 @@ import org.springframework.context.annotation.PropertySource; public class SearchConfiguration { - private static final String SCHEMA_SERVICE_TRANSLATOR = "schema-service"; - - @Value("${schema.translator.list}") - private String translator; - - @Bean - public SearchGraph searchGraph(LoaderFactory loaderFactory, EdgeIngestor edgeIngestor, SchemaVersions schemaVersions) { - return new SearchGraph(loaderFactory, edgeIngestor, schemaVersions); - } - - @Bean - public GremlinServerSingleton gremlinServerSingleton(){ - return new GremlinServerSingleton(getCustomQueryConfig()); - } + private static final String SCHEMA_SERVICE_TRANSLATOR = "schema-service"; + @Value("${schema.translator.list}") + private String translator; - @Bean - public CQConfig getCustomQueryConfig(){ - if(translator.equals(SCHEMA_SERVICE_TRANSLATOR)) { - return new SchemaServiceCQConfig(); - } - return new LocalCQConfig(); - } + @Bean + public SearchGraph searchGraph(LoaderFactory loaderFactory, EdgeIngestor edgeIngestor, + SchemaVersions schemaVersions) { + return new SearchGraph(loaderFactory, edgeIngestor, schemaVersions); + } + @Bean + public GremlinServerSingleton gremlinServerSingleton() { + return new GremlinServerSingleton(getCustomQueryConfig()); + } + @Bean + public CQConfig getCustomQueryConfig() { + if (translator.equals(SCHEMA_SERVICE_TRANSLATOR)) { + return new SchemaServiceCQConfig(); + } + return new LocalCQConfig(); + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/dbgraphgen/ModelBasedProcessing.java b/aai-traversal/src/main/java/org/onap/aai/dbgraphgen/ModelBasedProcessing.java index de25586..aa4fdad 100644 --- a/aai-traversal/src/main/java/org/onap/aai/dbgraphgen/ModelBasedProcessing.java +++ b/aai-traversal/src/main/java/org/onap/aai/dbgraphgen/ModelBasedProcessing.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,17 +19,20 @@ */ package org.onap.aai.dbgraphgen; -import org.onap.aai.logging.ErrorLogHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import com.google.common.util.concurrent.SimpleTimeLimiter; import com.google.common.util.concurrent.TimeLimiter; import com.google.common.util.concurrent.UncheckedTimeoutException; + +import java.util.*; +import java.util.concurrent.TimeUnit; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.VertexProperty; +import org.onap.aai.concurrent.AaiCallable; +import org.onap.aai.config.SpringContextAware; import org.onap.aai.db.DbMethHelper; import org.onap.aai.db.props.AAIProperties; import org.onap.aai.dbgen.PropertyLimitDesc; @@ -40,3688 +43,3820 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.introspection.Introspector; import org.onap.aai.introspection.Loader; import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; +import org.onap.aai.logging.ErrorLogHelper; import org.onap.aai.query.builder.QueryBuilder; import org.onap.aai.schema.enums.PropertyMetadata; import org.onap.aai.serialization.db.DBSerializer; - import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.util.AAIConfig; -import org.onap.aai.concurrent.AaiCallable; -import org.onap.aai.config.SpringContextAware; - -import java.util.*; -import java.util.concurrent.TimeUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** - * Utility class that uses Model/Named-Query definitions to navigate the graph. + * Utility class that uses Model/Named-Query definitions to navigate the graph. */ public class ModelBasedProcessing { - private static Logger logger = LoggerFactory.getLogger(ModelBasedProcessing.class); - private static final int MAX_LEVELS = 50; // max depth allowed for our model - to protect against infinite loop problems - - private TransactionalGraphEngine engine; - private Loader loader; - private DBSerializer serializer; - private DbMethHelper dbMethHelper; - - protected ModelBasedProcessing() { - - } - public ModelBasedProcessing(Loader loader, TransactionalGraphEngine engine, DBSerializer serializer) { - this.loader = loader; - this.engine = engine; - this.serializer = serializer; - dbMethHelper = new DbMethHelper(loader, engine); - } - /** - * Gets the start nodes and model-ver's. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param passedModelVersionId the passed model-version-id -- optional (unique id for a model-ver) - * @param passedModelInvId the passed model-invariant-id -- optional - * @param passedModelName the passed model-name -- optional - * @param passedTopNodeType the passed top node type -- optional (needed if neither model=invariant-id nor model-version-id is passed) - * @param startNodeFilterArrayOfHashes the start node filter array of hashes -- optional (used to locate the first node(s) of instance data) - * @param apiVer the api ver - * @return HashMap of startNodes and their corresponding model-version-id's - * @throws AAIException the AAI exception - */ - public Map<String,String> getStartNodesAndModVersionIds( String transId, String fromAppId, - String passedModelVersionId, - String passedModelInvId, - String passedModelName, - String passedTopNodeType, - List<Map<String,Object>> startNodeFilterArrayOfHashes, - String apiVer ) - throws AAIException { - // ---------------------------------------------------------------------------------------------------- - // Get a hash for all start-nodes (key = vtxId, val = modelVersionId that applies) - // If no start-node-key info is passed, then use either the passed modelVersion or - // the passed model-invariant-id or model-name to collect them. - // If start-node-key info is given, use it instead to look for start-nodes. - // Note: if ONLY start-node-key info is given, then it would have to map to nodes which - // have persona data. Otherwise we'd have no way to know what model to collect data with. - // ---------------------------------------------------------------------------------------------------- - - Iterator<Vertex> startVerts = null; - Map<String, String> startVertInfo = new HashMap<>(); - - if( startNodeFilterArrayOfHashes.isEmpty() ){ - // Since they did not give any data to find start instances, we will have to find them - // using whatever model-info they provided so we can use it to map to persona-data in the db. - if( (passedModelVersionId == null || passedModelVersionId.equals("")) - && (passedModelInvId == null || passedModelInvId.equals("")) - && (passedModelName == null || passedModelName.equals(""))){ - throw new AAIException("AAI_6118", "ModelInvariantId or ModelName or ModelVersionId required if no startNodeFilter data passed."); - } - else { - // Use whatever model info they pass to find start-node instances - // Get the first/top named-query-element used by this query - if( passedModelVersionId != null && !passedModelVersionId.equals("") ){ - // Need to look up the model-invariant-id and model-version to check against persona data - Vertex modVerVtx = getNodeUsingUniqueId(transId, fromAppId, "model-ver", - "model-version-id", passedModelVersionId); - Vertex modVtx = getModelGivenModelVer( modVerVtx, "" ); - String calcModId = modVtx.<String>property("model-invariant-id").orElse(null); - // Now we can look up instances that match this model's info - if( calcModId != null ){ - startVerts = this.engine.asAdmin().getReadOnlyTraversalSource().V().has(addDBAliasedSuffix("model-invariant-id"),calcModId).has(addDBAliasedSuffix("model-version-id"),passedModelVersionId); - } - } - else if( passedModelInvId != null && !passedModelInvId.equals("") ){ - // They gave us the model-invariant-id - startVerts = this.engine.asAdmin().getReadOnlyTraversalSource().V().has(addDBAliasedSuffix("model-invariant-id"),passedModelInvId); - } - else if( passedModelName != null && !passedModelName.equals("") ){ - List<Vertex> modelVerVtxList = getModelVersUsingName(transId, fromAppId, passedModelName); - List<Vertex> startVtxList = new ArrayList<>(); - // Need to look up the model-inv-ids and model-versions to check against persona data - if( !modelVerVtxList.isEmpty() ){ - for( int i = 0; i < modelVerVtxList.size(); i++ ){ - String calcModVerId = (modelVerVtxList.get(i)).<String>property("model-version-id").orElse(null); - Vertex modVtx = getModelGivenModelVer(modelVerVtxList.get(i),""); - String calcModInvId = modVtx.<String>property("model-invariant-id").orElse(null); - // Now we can look up instances that match this model's info - Iterator<Vertex> tmpStartIter = this.engine.asAdmin().getReadOnlyTraversalSource().V().has(addDBAliasedSuffix("model-invariant-id"),calcModInvId).has(addDBAliasedSuffix("model-version-id"),calcModVerId); - while( tmpStartIter.hasNext() ){ - Vertex tmpStartVert = tmpStartIter.next(); - startVtxList.add(tmpStartVert); - } - } - } - if( !startVtxList.isEmpty() ){ - startVerts = startVtxList.iterator(); - } - } - } - - if( startVerts != null ){ - while( startVerts.hasNext() ){ - Vertex tmpStartVert = startVerts.next(); - String vid = tmpStartVert.id().toString(); - //String tmpModId = tmpStartVert.<String>property(addDBAliasedSuffix("model-invariant-id")).orElse(null); - String tmpModVerId = tmpStartVert.<String>property(addDBAliasedSuffix("model-version-id")).orElse(null); - startVertInfo.put(vid, tmpModVerId); - } - } - if( startVertInfo.isEmpty() ){ - throw new AAIException("AAI_6114", "Start Node(s) could not be found for model data passed. " + - "(modelVersionId = [" + passedModelVersionId + - "], modelInvariantId = [" + passedModelInvId + - "], modelName = [" + passedModelName + - "])"); - } - - return startVertInfo; - } - else { - // Use start-node filter info to find start-node(s) - Note - there could also be model info passed that we'll need - // to use to trim down the set of start-nodes that we find based on the startNodeFilter data. - String modTopNodeType =""; - String modInfoStr = ""; - if( passedModelVersionId != null && !passedModelVersionId.equals("") ){ - modTopNodeType = getModelVerTopWidgetType( transId, fromAppId, passedModelVersionId, "", "" ); - modInfoStr = "modelVersionId = (" + passedModelVersionId + ")"; - } - else if( passedModelInvId != null && !passedModelInvId.equals("") ){ - modTopNodeType = getModelVerTopWidgetType( transId, fromAppId,"", passedModelInvId, "" ); - modInfoStr = "modelId = (" + passedModelInvId + ")"; - } - else if( passedModelName != null && !passedModelName.equals("") ){ - modTopNodeType = getModelVerTopWidgetType( transId, fromAppId,"", "", passedModelName ); - modInfoStr = "modelName = (" + passedModelName + ")"; - } - - if( modTopNodeType.equals("") ){ - if( (passedTopNodeType == null) || passedTopNodeType.equals("") ){ - String msg = "Could not determine the top-node nodeType for this request. modelInfo: [" + modInfoStr + "]"; - throw new AAIException("AAI_6118", msg); - } - else { - // We couldn't find a top-model-type based on passed in model info, but they - // gave us a type to use -- so use it. - modTopNodeType = passedTopNodeType; - } - } - else { - // we did get a topNode type based on model info - make sure it doesn't contradict - // the passsed-in one (if there is one) - if( passedTopNodeType != null && !passedTopNodeType.equals("") - && !passedTopNodeType.equals(modTopNodeType) ){ - throw new AAIException("AAI_6120", "topNodeType passed in [" + passedTopNodeType - + "] does not match nodeType derived for model info passed in: [" - + modTopNodeType + "]"); - } - } - - List<String> modelVersionIds2Check = new ArrayList<>(); - if( (passedModelName != null && !passedModelName.equals("")) ){ - // They passed a modelName, so find all the model UUIDs (model-version-id's) that map to this - modelVersionIds2Check = getModelVerIdsUsingName(transId, fromAppId, passedModelName); - } - if( (passedModelVersionId != null && !passedModelVersionId.equals("")) ){ - // They passed in a modelNameVersionId - if( modelVersionIds2Check.isEmpty() ){ - // There was no modelName passed, so we can use the passed modelNameVersionId - modelVersionIds2Check.add(passedModelVersionId); - } - else if( modelVersionIds2Check.contains(passedModelVersionId) ){ - // The passed in uuid does not conflict with what we got using the passed-in modelName. - // We'll just use the passed in uuid in this case. - // Hopefully they would not be passing strange combinations like this, but we'll try to deal with it. - modelVersionIds2Check = new ArrayList<>(); // Clear out what we had - modelVersionIds2Check.add(passedModelVersionId); - } - } - - // We should now be OK with our topNodeType for this request, so we can look for the actual startNodes - for( int i=0; i < startNodeFilterArrayOfHashes.size(); i++ ){ - // Locate the starting node which will be used to look which corresponds to this set of filter data - Vertex startVtx = null; - try { - Optional<Vertex> result = dbMethHelper.searchVertexByIdentityMap(modTopNodeType, startNodeFilterArrayOfHashes.get(i)); - if (!result.isPresent()) { - throw new AAIException("AAI_6114", "No Node of type " + modTopNodeType + " found for properties"); - } - startVtx = result.get(); - } - catch( AAIException e ){ - String msg = "Could not find startNode of type = [" + modTopNodeType + "], given these params: " - + startNodeFilterArrayOfHashes.get(i) + ". msg # from getUniqueNode() = " + e.getMessage(); - throw new AAIException("AAI_6114", msg); - } - - String vid = startVtx.id().toString(); - String personaModInvId = startVtx.<String>property(addDBAliasedSuffix("model-invariant-id")).orElse(null); - String personaModVerId = startVtx.<String>property(addDBAliasedSuffix("model-version-id")).orElse(null); - - // Either this start-node has persona info (which should not contradict any passed-in model info) - // or they should have passed in the model to use - so we'd just use that. - if( personaModVerId != null && !personaModVerId.equals("") ){ - // There is persona data in this start-node. So make sure it doesn't contradict any "passed" stuff - if( modelVersionIds2Check.isEmpty() - && (passedModelInvId == null || passedModelInvId.equals("")) ){ - // They didn't pass any model info, so use the persona one. - startVertInfo.put(vid, personaModVerId); - } - else if( modelVersionIds2Check.isEmpty() - && (passedModelInvId != null && !passedModelInvId.equals("")) ){ - // They passed in just the modelId - so check it - if( passedModelInvId.equals(personaModInvId) ){ - startVertInfo.put(vid, personaModVerId); - } - } - else if( !modelVersionIds2Check.isEmpty() - && (passedModelInvId == null || passedModelInvId.equals("")) ){ - // They passed in just modelVersionId - so check - if( modelVersionIds2Check.contains(personaModVerId) ){ - startVertInfo.put(vid, personaModVerId); - } - } - else if( !modelVersionIds2Check.isEmpty() - && (passedModelInvId != null && !passedModelInvId.equals("")) ){ - // We have BOTH a modelVersionIds and a modelId to check - if( passedModelInvId.equals(personaModInvId) - && modelVersionIds2Check.contains(personaModVerId) ){ - startVertInfo.put(vid, personaModVerId); - } - } - } - else { - // This start node did not have persona info -- so we will use the passed in model info if they passed one - if( passedModelVersionId!= null && !passedModelVersionId.equals("") ){ - // The model-version-id uniquely identifies a model-ver, so we can use it. - startVertInfo.put(vid, passedModelVersionId); - } - else { - throw new AAIException("AAI_6118", "Found startNode but since it does not have persona data, the " + - " model-version-id is required. "); - } - } - } - } - - return startVertInfo; - - }//end of getStartNodesAndModVersionIds() - - - /** - * Query by model. (really model-ver) - * - * @param transId the trans id - * @param fromAppId the from app id - * @param modelVersionId the model-version-id (unique id in model-ver) - * @param modelInvariantId the model-invariant-id (unique id in model) - * @param modelName the model name - * @param topNodeType - optional (needed if neither model-invariant-id nor model-version-id is passed) - * @param startNodeFilterArrayOfHashes the start node filter array of hashes -- optional (used to locate the first node(s) of instance data) - * @param apiVer the api ver - * @return resultSet - * @throws AAIException the AAI exception - */ - public List<ResultSet> queryByModel(String transId, String fromAppId, - String modelVersionId, - String modelInvariantId, - String modelName, - String topNodeType, - List<Map<String,Object>> startNodeFilterArrayOfHashes, - String apiVer ) - throws AAIException { - - final String transId_f = transId; - final String fromAppId_f = fromAppId; - final String modelVersionId_f = modelVersionId; - final String modelInvId_f = modelInvariantId; - final String modelName_f = modelName; - final String topNodeType_f = topNodeType; - final List<Map<String,Object>> startNodeFilterArrayOfHashes_f = startNodeFilterArrayOfHashes; - final String apiVer_f = apiVer; - - // Find out what our time-limit should be - int timeLimitSec = 0; - String timeLimitString = AAIConfig.get("aai.model.query.timeout.sec"); - if( timeLimitString != null && !timeLimitString.equals("") ){ - try { - timeLimitSec = Integer.parseInt(timeLimitString); - } - catch ( Exception nfe ){ - // Don't worry, we will leave the limit as zero - which tells us not to use it. - } - } - - if( timeLimitSec <= 0 ){ - // We will NOT be using a timer - return queryByModel_Timed( transId, fromAppId, - modelVersionId, - modelInvariantId, - modelName, - topNodeType, - startNodeFilterArrayOfHashes, - apiVer ); - } - - List<ResultSet> resultList = new ArrayList<>(); - TimeLimiter limiter = new SimpleTimeLimiter(); - try { - - resultList = limiter.callWithTimeout(new AaiCallable <List<ResultSet>>() { - public List<ResultSet> process() throws AAIException { - return queryByModel_Timed( transId_f, fromAppId_f, - modelVersionId_f, - modelInvId_f, - modelName_f, - topNodeType_f, - startNodeFilterArrayOfHashes_f, - apiVer_f ); - } - }, timeLimitSec, TimeUnit.SECONDS, true); - } - catch (AAIException ae) { - // Re-throw AAIException so we get can tell what happened internally - throw ae; - } - catch (UncheckedTimeoutException ute) { - throw new AAIException("AAI_6140", "Query Processing Limit exceeded. (limit = " + timeLimitSec + " seconds)"); - } - catch (Exception e) { - throw new AAIException("AAI_6128", "Unexpected exception in queryByModel(): " + e.getMessage() ); - } - - return resultList; - } - - - /** - * Query by model (model-ver) timed. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param modelVersionId the model-version-id (unique id in model-ver) - * @param modelInvariantId the model-invariant-id (unique id in model) - * @param modelName the model name - * @param topNodeType the top node type - * @param startNodeFilterArrayOfHashesVal the start node filter array of hashes - * @param apiVer the api ver - * @return the array list - * @throws AAIException the AAI exception - */ - public List<ResultSet> queryByModel_Timed(String transId, String fromAppId, - String modelVersionId, - String modelInvariantId, - String modelName, - String topNodeType, - List<Map<String,Object>> startNodeFilterArrayOfHashesVal, - String apiVer ) - throws AAIException { - - List<ResultSet> resultArray = new ArrayList<>(); - - // NOTE: this method can be used for different styles of queries: - // a) They could pass neither a modelVersionId or a modelInvariantId but just pass a set of data defining start-nodes. - // Note - with no model info, we need them to pass the startNodeType for us to be able to use the - // start-node-filter data. We would look at each start node and ensure that each has persona-model info. - // Then use whatever model corresponds to each instance to pull that instance's data. - // b) They could pass a modelInvariantId, but no modelVersionId and no startNode info. In this case, we - // Would look in the database for all nodes that have a model-invariant-id-local that matches what was - // passed, and then for each of those instances, pull the data based on the corresponding model. - // c) They could pass a model-version-id, but no startNode info. We'd make sure that if a - // model-invariant-id was also passed, that it does not conflict - but it really should be null if they - // are passing a full model-version-id. Like case -b-, we'd do a query for all nodes - // that have persona info that corresponds to the model-version-id passed and then - // collect data for each one. - // d) They could pass either modelVersionId or modelInvariantId AND startNodeFilter info. In this case we - // would look at the model info to figure out what the top-node-type is, then look at the - // top-node instances based on the startNodeFilter. We'd only collect data for each instance if - // it's persona model info matches what was passed in. - - - // Sorry to do this, but code that gets called with an empty hash as the first array element was causing errors - List<Map<String,Object>> startNodeFilterArrayOfHashes = new ArrayList <>(); - if( !startNodeFilterArrayOfHashesVal.isEmpty() ){ - Map<String,Object> tmpH = startNodeFilterArrayOfHashesVal.get(0); - if( !tmpH.isEmpty() ){ - for( int i=0; i < startNodeFilterArrayOfHashesVal.size(); i++ ){ - startNodeFilterArrayOfHashes.add( startNodeFilterArrayOfHashesVal.get(i) ); - } - } - } - - // ---------------------------------------------------------------------------------------------------------- - // Get a Hash of all the start-nodes (top instance-data node for a model-ver where we will - // start collecting data) for startNode2ModelVerHash: - // key = vertex-id for the startNode, - // value = model-version-id for the corresponding model-ver - // ---------------------------------------------------------------------------------------------------------- - Map<String, String> startNode2ModelVerHash = getStartNodesAndModVersionIds( transId, fromAppId, - modelVersionId, modelInvariantId, modelName, topNodeType, - startNodeFilterArrayOfHashes, apiVer ); - - //System.out.println("\nDEBUG -- Here's a dump of the startnodes/model-vers: " + startNode2ModelVerHash.toString()); - - // -------------------------------------------------------------------------------------------------------- - // Figure out what-all models (model-ver nodes) we will be dealing with - // Note - Instances must all use the same type of start-node, but do not have to all use the same model-ver. - // -------------------------------------------------------------------------------------------------------- - Map<String, Vertex> distinctModelVersHash = new HashMap<>(); - // For distinctModelVersHash: key = modelVersionId, val= modelVerVertex - String startNodeType = ""; - if( topNodeType != null && !topNodeType.equals("") ){ - startNodeType = topNodeType; - } - - List<String> skipModelVerIdList = new ArrayList<>(); - List<String> skipStartVertVerIdList = new ArrayList<>(); - Set <String> snKeySet = startNode2ModelVerHash.keySet(); - Iterator<String> startNodeIterator = snKeySet.iterator(); - while( startNodeIterator.hasNext() ){ - String modVerIdKey = startNodeIterator.next(); - String modVerId = startNode2ModelVerHash.get(modVerIdKey); - if( !distinctModelVersHash.containsKey(modVerId) ){ - // First time seeing this model-version-id - Vertex modVerVtx = getNodeUsingUniqueId(transId, fromAppId, "model-ver", - "model-version-id", modVerId); - String tmpNodeType = ""; - try { - tmpNodeType = getModelVerTopWidgetType( modVerVtx, "" ); - } - catch( AAIException ae ){ - // There must be some old bad data in the db - we will skip over this model-ver since its - // model is not good anymore - but will log that this is happening. - skipModelVerIdList.add(modVerId); - skipStartVertVerIdList.add(modVerIdKey); - System.out.println(">>> WARNING - will not collect model data for this vertex since " + - "it uses an inconsistant model-ver model. Model-version-id = " + modVerId ); - } - - if( tmpNodeType != null && !tmpNodeType.equals("") ){ - if( startNodeType.equals("") ){ - startNodeType = tmpNodeType; - } - else if( !startNodeType.equals(tmpNodeType) ){ - String msg = "Conflict between startNode types for models involved: [" + startNodeType - + "], [" + tmpNodeType + "]"; - throw new AAIException("AAI_6125", msg); - } - distinctModelVersHash.put(modVerId, modVerVtx); - } - } - } - - //System.out.println("\nDEBUG -- Here's a dump of the DISTINCT model-ver hash: " + distinctModelVersHash.toString() ); - - // ------------------------------------------------------------------------------------------------------ - // Get the "valid-next-step" hash for each distinct model-ver - // While we're at it, get a mapping of model-invariant-id|model-version to model-version-id for - // the model-vers being used - // ------------------------------------------------------------------------------------------------------ - Map<String, Multimap<String, String>> validNextStepHash = new HashMap<>(); - // validNextStepHash: key = modelVerId, value = nextStepMap - Set <String> keySet = distinctModelVersHash.keySet(); - Iterator<String> modelVerIterator = keySet.iterator(); - while( modelVerIterator.hasNext() ){ - String modVerKey = modelVerIterator.next(); - if( ! skipModelVerIdList.contains(modVerKey) ){ - Vertex modelVerVtx = distinctModelVersHash.get(modVerKey); - Multimap<String, String> tmpTopoMap = genTopoMap4ModelVer( transId, fromAppId, - modelVerVtx, modVerKey); - validNextStepHash.put(modVerKey, tmpTopoMap); - } - } - - // ------------------------------------------------------------------------------------------------- - // Figure out what the "start-node" for each instance will be (plus the info we will use to - // represent that in our topology) - // ------------------------------------------------------------------------------------------------- - List<String> failedPersonaCheckVids = new ArrayList<>(); - Map<String, String> firstStepInfoHash = new HashMap<>(); - // For firstStepInfoHash: key = startNodeVtxId, val=topNodeType plus personaData if applicable - // ie. the value is what we'd use as the "first-step" for this model. - if( !nodeTypeSupportsPersona( startNodeType) ){ - // This node type doesn't have persona info, so we just use startNodeType for the first-step-info - snKeySet = startNode2ModelVerHash.keySet(); - startNodeIterator = snKeySet.iterator(); - while( startNodeIterator.hasNext() ){ - String vtxKey = startNodeIterator.next(); - firstStepInfoHash.put(vtxKey,startNodeType); - } - } - else { - // Need to check that this node's persona data is good and if it is - use it for the first step info - snKeySet = startNode2ModelVerHash.keySet(); - startNodeIterator = snKeySet.iterator(); - while( startNodeIterator.hasNext() ){ - String vtxKey = startNodeIterator.next(); - Iterator<Vertex> vtxIterator = this.engine.asAdmin().getReadOnlyTraversalSource().V(vtxKey); - Vertex tmpVtx = vtxIterator.next(); - String thisVtxModelVerId = startNode2ModelVerHash.get(vtxKey); - if( skipModelVerIdList.contains(thisVtxModelVerId) ){ - // Skip this vertex because it uses a model-ver that is bad - continue; - } - Vertex modelVerVtx = distinctModelVersHash.get(thisVtxModelVerId); - Vertex modelVtx = getModelGivenModelVer( modelVerVtx, "" ); - String modInvId = modelVtx.<String>property("model-invariant-id").orElse(null); - String personaModInvId = tmpVtx.<String>property(addDBAliasedSuffix("model-invariant-id")).orElse(null); - String personaModVerId = tmpVtx.<String>property(addDBAliasedSuffix("model-version-id")).orElse(null); - if( modInvId.equals(personaModInvId) && thisVtxModelVerId.equals(personaModVerId) ){ - String tmpPersonaInfoStr = startNodeType + "," + personaModInvId + "," + personaModVerId; - firstStepInfoHash.put(vtxKey, tmpPersonaInfoStr ); - } - else { - // we won't use this start node below when we collect data because it should have - // had persona data that matched it's model - but it did not. - failedPersonaCheckVids.add(vtxKey); - } - } - } - - //System.out.println("\nDEBUG -- Here's a dump of the firstStepInfoHash hash: " + firstStepInfoHash.toString() ); - - // ------------------------------------------------------------------------------------------------ - // Loop through each start-node, collect it's data using collectInstanceData() and put the - // resultSet onto the resultArray. - // ------------------------------------------------------------------------------------------------ - - // Make sure they're not bringing back too much data - String maxString = AAIConfig.get("aai.model.query.resultset.maxcount"); - if( maxString != null && !maxString.equals("") ){ - int maxSets = 0; - try { - maxSets = Integer.parseInt(maxString); - } - catch ( Exception nfe ){ - // Don't worry, we will leave the max as zero - which tells us not to use it. - } - - if( maxSets > 0 && (startNode2ModelVerHash.size() > maxSets) ){ - String msg = " Query returns " + startNode2ModelVerHash.size() + " resultSets. Max allowed is: " + maxSets; - throw new AAIException("AAI_6141", msg); - } - } - - snKeySet = startNode2ModelVerHash.keySet(); - startNodeIterator = snKeySet.iterator(); - while( startNodeIterator.hasNext() ){ - String topNodeVtxId = startNodeIterator.next(); - if( failedPersonaCheckVids.contains(topNodeVtxId) || skipStartVertVerIdList.contains(topNodeVtxId) ){ - // Skip this vertex because it failed it's persona-data check above - // Skip this vertex because it uses a model-ver that is bad - continue; - } - - Iterator<Vertex> vtxIterator = this.engine.asAdmin().getReadOnlyTraversalSource().V(topNodeVtxId); - Vertex tmpStartVtx = vtxIterator.next(); - String elementLocationTrail = firstStepInfoHash.get(topNodeVtxId); - String modelVerId = startNode2ModelVerHash.get(topNodeVtxId); - Multimap<String, String> validNextStepMap = validNextStepHash.get(modelVerId); - - List<String> vidsTraversed = new ArrayList<>(); - Map<String,String> emptyDelKeyHash = new HashMap<>(); - Map<String,String> emptyNQElementHash = new HashMap<>(); // Only applies to Named Queries - ResultSet tmpResSet = collectInstanceData( transId, fromAppId, - tmpStartVtx, elementLocationTrail, - validNextStepMap, vidsTraversed, 0, emptyDelKeyHash, emptyNQElementHash, apiVer ); - - resultArray.add(tmpResSet); - } - - return resultArray; - - }// queryByModel_Timed() - - - - /** - * Run delete by model-ver. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param modelVersionId the model version id -- unique id for a model-ver node - * @param topNodeTypeVal the top node type val -- required if no model-version-id is passed - * @param startNodeFilterHash the start node filter hash -- used to locate the first node of instance data - * @param apiVer the api ver - * @param resVersion the res version -- resourceVersion of the top/first widget in the model instance - * @return HashMap (keys = vertexIds that were deleted) - * @throws AAIException the AAI exception - */ - public Map<String,String> runDeleteByModel( String transId, String fromAppId, - String modelVersionId, String topNodeTypeVal, Map<String,Object> startNodeFilterHash, String apiVer, String resVersion ) - throws AAIException { - - Map<String,String> retHash = new HashMap<>(); - - // Locate the Model-ver node to be used - Vertex modelVerVtx = null; - if( modelVersionId != null && !modelVersionId.equals("") ){ - modelVerVtx = getNodeUsingUniqueId(transId, fromAppId, "model-ver", - "model-version-id", modelVersionId); - } - else { - // if they didn't pass the modelVersionId, then we need to use the startNode to figure it out - // Locate the starting node based on the start node params - if( topNodeTypeVal == null || topNodeTypeVal.equals("") ){ - throw new AAIException("AAI_6118", "If no model info is passed, then topNodeType is required. "); - } - - Optional<Vertex> result = dbMethHelper.searchVertexByIdentityMap(topNodeTypeVal, startNodeFilterHash); - if (!result.isPresent()) { - throw new AAIException("AAI_6114", "No Node of type " + topNodeTypeVal + " found for properties"); - } - Vertex startVtx = result.get(); - - String startVertModVerId = startVtx.<String>property(addDBAliasedSuffix("model-version-id")).orElse(null); - modelVerVtx = getNodeUsingUniqueId(transId, fromAppId, "model-ver", - "model-version-id", startVertModVerId); - } - - if( modelVerVtx == null ){ - throw new AAIException("AAI_6114", "Could not determine the model-ver for the given input parameters. "); - } - - String topNType = "unknown"; - String modelType = getModelTypeFromModelVer( modelVerVtx, "" ); - - if( modelType.equals("widget") ){ - // If they want to delete using a widget-level model.. That is just a delete of the one - // instance of one of our nodes. - String widgModNodeType = modelVerVtx.<String>property("model-name").orElse(null); - if( (widgModNodeType == null) || widgModNodeType.equals("") ){ - String msg = "Could not find model-name for the widget model [" + modelVersionId + "]."; - throw new AAIException("AAI_6132", msg); - } - Optional<Vertex> result = dbMethHelper.locateUniqueVertex(widgModNodeType, startNodeFilterHash); - if (!result.isPresent()) { - throw new AAIException("AAI_6114", "No Node of type " + topNType + " found for properties"); - } - Vertex widgetVtx = result.get(); - String widgId = widgetVtx.id().toString(); - serializer.delete(widgetVtx, resVersion, true); - retHash.put(widgId, widgModNodeType); - return retHash; - } - - // --------------------------------------------------------------------------------- - // If we got to here, this must be either a service or resource model. - // So, we'll need to get a Hash of which parts of the model to delete. - // NOTE- deleteByModel is deleting data based on one specific version of a model. - // --------------------------------------------------------------------------------- - String chkFirstNodePersonaModInvId = ""; - String chkFirstNodePersonaModVerId = ""; - String personaData = ""; - Vertex firstModElementVertex = getTopElementForSvcOrResModelVer( modelVerVtx, "" ); - topNType = getModElementWidgetType( firstModElementVertex, "" ); - if( (topNType == null) || topNType.equals("") ){ - String msg = "Could not determine the top-node nodeType for model-version-id: [" + modelVersionId + "]"; - throw new AAIException("AAI_6132", msg); - } - if( nodeTypeSupportsPersona(topNType) ){ - Vertex modelVtx = getModelGivenModelVer(modelVerVtx,""); - chkFirstNodePersonaModInvId = modelVtx.<String>property("model-invariant-id").orElse(null); - chkFirstNodePersonaModVerId = modelVerVtx.<String>property("model-version-id").orElse(null); - personaData = "," + chkFirstNodePersonaModInvId + "," + chkFirstNodePersonaModVerId; - } - - // Get the deleteKeyHash for this model - String incomingTrail = ""; - Map<String, String> currentHash = new HashMap<>(); - Map<String, Vertex> modConHash = new HashMap<>(); - ArrayList <String> vidsTraversed = new ArrayList<>(); - Map<String, String> delKeyHash = collectDeleteKeyHash( transId, fromAppId, - firstModElementVertex, incomingTrail, currentHash, vidsTraversed, - 0, modConHash, - chkFirstNodePersonaModInvId, chkFirstNodePersonaModVerId ); - - - System.out.println("\n ----DEBUG -----: Delete Hash for model: [" + modelVersionId + "] looks like: "); - for( Map.Entry<String, String> entry : delKeyHash.entrySet() ){ - System.out.println("key = [" + entry.getKey() + "], val = [" + entry.getValue() + "]"); - } - System.out.println("\n -----"); - // Locate the starting node that we'll use to start looking for instance data - Optional<Vertex> result = dbMethHelper.searchVertexByIdentityMap(topNType, startNodeFilterHash); - if (!result.isPresent()) { - throw new AAIException("AAI_6114", "No Node of type " + topNType + " found for properties"); - } - Vertex startVtx = result.get(); - if( !chkFirstNodePersonaModInvId.equals("") ){ - // NOTE: For Service or Resource models, if this is a nodeType that supports persona's, then - // we need to make sure that the start node matches the persona values. - String startVertPersonaModInvId = startVtx.<String>property(addDBAliasedSuffix("model-invariant-id")).orElse(null); - String startVertPersonaModVerId = startVtx.<String>property(addDBAliasedSuffix("model-version-id")).orElse(null); - if( !chkFirstNodePersonaModInvId.equals(startVertPersonaModInvId) - || !chkFirstNodePersonaModVerId.equals(startVertPersonaModVerId) ){ - String msg = "Persona-Model data mismatch for start node (" + topNType + "), " + - startNodeFilterHash ; - throw new AAIException("AAI_6114", msg); - } - } - String topVid = startVtx.id().toString(); - - // Read the model-ver into a Map for processing - Multimap<String, String> validNextStepMap = genTopoMap4ModelVer(transId, fromAppId, - modelVerVtx, modelVersionId); - - // Collect the data - String elementLocationTrail = topNType + personaData; - vidsTraversed = new ArrayList<>(); - Map<String,String> emptyHash = new HashMap<>(); - - // Pass emptyHash for the NQElement hash since that parameter only applies to Named Queries - ResultSet retResSet = collectInstanceData( transId, fromAppId, - startVtx, elementLocationTrail, - validNextStepMap, vidsTraversed, 0, delKeyHash, emptyHash, apiVer ); - - // Note: the new ResultSet will have each element tagged with the del flag so we'll know if it - // should be deleted or not - so loop through the results in a try-block since some things - // will get auto-deleted by parents before we get to them --- and try to remove each one. - String vidToResCheck = topVid; - - retHash = deleteAsNeededFromResultSet( transId, fromAppId, retResSet, - vidToResCheck, apiVer, resVersion, emptyHash ); - //String msgStr = "processed deletes for these vids: (\n"+ retHash.keySet().toString() + ")."; - - return retHash; - - }// End of runDeleteByModel() - - - - /** - * Delete as needed from result set. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param resSet the res set - * @param vidToResCheck -- this vertex will need to have its resource-version checked - * @param apiVer the api ver - * @param resVersion the res version - * @param hashSoFar the hash so far -- hash of what's been deleted so far - * @return String - * @throws AAIException the AAI exception - */ - public Map<String,String> deleteAsNeededFromResultSet(String transId, String fromAppId, - ResultSet resSet, String vidToResCheck, String apiVer, String resVersion, Map<String,String> hashSoFar ) - throws AAIException - { - Map<String,String> retHash = new HashMap<>(); - retHash.putAll( hashSoFar ); - Boolean deleteIt = false; - - if( resSet.getVert() == null ){ - return retHash; - } - - Vertex thisVtx = resSet.getVert(); - String thisGuyId = ""; - String thisNT = ""; - String thisGuyStr = ""; - - Boolean gotVtxOK = false; - try { - if( thisVtx != null ){ - thisGuyId = thisVtx.id().toString(); - thisNT = thisVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); - thisGuyStr = thisGuyId + "[" + thisNT + " found at:" + resSet.getLocationInModelSubGraph() + "]"; - - // NOTE -- will try to set the NodeType to itself to see if the node has been deleted already in - // this transaction. It lets you get properties from nodes being deleted where the - // delete hasn't been committed yet. This check used to be accomplished with a call to - // "vtx.isRemoved()" but that was a Titan-only feature and is not available anymore since - // we no longer use Titan vertices. - // If we don't do this check, we get errors later when we try to delete the node. - thisVtx.property(AAIProperties.NODE_TYPE, thisNT); - gotVtxOK = true; - } - } - catch (Exception ex) { - // Sometimes things have already been deleted by the time we get to them - just log it. - AAIException aaiException = new AAIException("AAI_6154", thisGuyStr + ". msg = " + ex.getMessage()); - ErrorLogHelper.logException(aaiException); - - } - - if( !gotVtxOK ){ - // The vertex must have already been removed. Just return. - // Note - We need to catch this because the DB sometimes can still have the vtx - // and be able to get its ID but it is flagged internally as removed already. - return retHash; - } - else { - if( resSet.getNewDataDelFlag() != null && resSet.getNewDataDelFlag().equals("T") ){ - logger.debug(">> will try to delete this one >> " + thisGuyStr); - - try { - Boolean requireResourceVersion = false; - if( thisGuyId.equals(vidToResCheck) ){ - // This is the one vertex that we want to check the resourceId before deleting - requireResourceVersion = true; - } - this.serializer.delete(thisVtx, resVersion, requireResourceVersion); - } - catch (AAIException ae) { - String errorCode = ae.getErrorObject().getErrorCode(); - if ( errorCode.equals("6130") || errorCode.equals("6131") ) { - // They didn't pass the correct resource-version for the top node. - throw ae; - } - else { - ErrorLogHelper.logException(ae); - String errText = ae.getErrorObject().getErrorText(); - String errDetail = ae.getMessage(); - logger.debug("Exception when deleting " + thisGuyStr + ". ErrorCode = " + errorCode + - ", errorText = " + errText + ", details = " + errDetail); - } - } - catch( Exception e ){ - // We'd expect to get a "node not found" here sometimes depending on the order that - // the model has us finding / deleting nodes. - // Ignore the exception - but log it so we can see what happened. - AAIException aaiException = new AAIException("AAI_6154", thisGuyStr + ". msg = " + e.getMessage()); - ErrorLogHelper.logException(aaiException); - - } - - // We can't depend on a thrown exception to tell us if a node was deleted since it may - // have been auto=deleted before this removeAaiNode() call. - // --- Not sure if we would want to check anything here -- because the graph.commit() is done outside of this call. - - deleteIt = true; - } - else { - // --- DEBUG ---- - System.out.println(">>>>>>> NOT DELETING THIS ONE >>>> " + thisGuyStr ); - List<String> retArr = dbMethHelper.getVertexProperties(thisVtx); - for( String info : retArr ){ System.out.println(info); } - // --- DEBUG ---- - } - } - - // Now call this routine for the sub-resultSets - List <ResultSet> subResultSetList = resSet.getSubResultSet(); - Iterator <ResultSet> subResSetIter = subResultSetList.iterator(); - while( subResSetIter.hasNext() ){ - ResultSet tmpSubResSet = subResSetIter.next(); - retHash = deleteAsNeededFromResultSet( transId, fromAppId, tmpSubResSet, - vidToResCheck, apiVer, resVersion, retHash ); - } - - if( deleteIt ){ - retHash.put(thisGuyId, thisGuyStr); - } - - return retHash; - - }// deleteAsNeededFromResultSet() - - - - /** - * Query by named query (old version). - * - * @param transId the trans id - * @param fromAppId the from app id - * @param namedQueryUuid the named query uuid - * @param startNodeFilterArrayOfHashes the start node filter array of hashes --used to locate the first nodes of instance data - * @param apiVer the api ver - * @return resultSet - * @throws AAIException the AAI exception - */ - public List<ResultSet> queryByNamedQuery(String transId, String fromAppId, - String namedQueryUuid, - List <Map<String,Object>> startNodeFilterArrayOfHashes, - String apiVer ) - throws AAIException { - - String dummyCutPoint = null; - Map<String,Object> dummySecondaryFilterHash = null; - - return queryByNamedQuery( transId, fromAppId, - namedQueryUuid, - startNodeFilterArrayOfHashes, - apiVer, - dummyCutPoint, - dummySecondaryFilterHash ); - } - - - /** - * Query by named query. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param namedQueryUuid the named query uuid - * @param startNodeFilterArrayOfHashes the start node filter array of hashes --used to locate the first nodes of instance data - * @param apiVer the api ver - * @param secondaryFilterCutPoint nodeType where we will prune if secondary filter is not met - * @param secondaryFilterHash secondary filter params - * @return resultSet - * @throws AAIException the AAI exception - */ - public List<ResultSet> queryByNamedQuery(String transId, String fromAppId, - String namedQueryUuid, - List<Map<String,Object>> startNodeFilterArrayOfHashes, - String apiVer, - String secondaryFilterCutPoint, - Map<String,Object> secondaryFilterHash ) - throws AAIException { - - final String transId_f = transId; - final String fromAppId_f = fromAppId; - final String namedQueryUuid_f = namedQueryUuid; - final List<Map<String,Object>> startNodeFilterArrayOfHashes_f = startNodeFilterArrayOfHashes; - final String apiVer_f = apiVer; - final String secondaryFilterCutPoint_f = secondaryFilterCutPoint; - final Map<String,Object> secondaryFilterHash_f = secondaryFilterHash; - - // Find out what our time-limit should be - int timeLimitSec = 0; - String timeLimitString = AAIConfig.get("aai.model.query.timeout.sec"); - if( timeLimitString != null && !timeLimitString.equals("") ){ - try { - timeLimitSec = Integer.parseInt(timeLimitString); - } - catch ( Exception nfe ){ - // Don't worry, we will leave the limit as zero - which tells us not to use it. - } - } - - if( timeLimitSec <= 0 ){ - // We will NOT be using a timer - return queryByNamedQuery_Timed( transId, fromAppId, - namedQueryUuid, - startNodeFilterArrayOfHashes, - apiVer, - secondaryFilterCutPoint_f, - secondaryFilterHash_f ); - } - - List<ResultSet> resultList = new ArrayList<>(); - TimeLimiter limiter = new SimpleTimeLimiter(); - try { - resultList = limiter.callWithTimeout(new AaiCallable <List<ResultSet>>() { - public List<ResultSet> process() throws AAIException { - return queryByNamedQuery_Timed( transId_f, fromAppId_f, - namedQueryUuid_f, - startNodeFilterArrayOfHashes_f, - apiVer_f, - secondaryFilterCutPoint_f, - secondaryFilterHash_f ); - } - }, timeLimitSec, TimeUnit.SECONDS, true); - - } - catch (AAIException ae) { - // Re-throw AAIException so we get can tell what happened internally - throw ae; - } - catch (UncheckedTimeoutException ute) { - throw new AAIException("AAI_6140", "Query Processing Limit exceeded. (limit = " + timeLimitSec + " seconds)"); - } - catch (Exception e) { - throw new AAIException("AAI_6128", "Unexpected exception in queryByNamedQuery(): " + e.getMessage() ); - } - - return resultList; - } - - - /** - * Query by named query timed. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param namedQueryUuid the named query uuid - * @param startNodeFilterArrayOfHashes the start node filter array of hashes --used to locate the first nodes of instance data - * @param apiVer the api ver - * @param secondaryFilterCutPoint the nodeType where we will parse for the secondary Filter - * @param secondaryFilterHash the secondary filter hash - * @return resultSet - * @throws AAIException the AAI exception - */ - public List<ResultSet> queryByNamedQuery_Timed(String transId, String fromAppId, - String namedQueryUuid, - List<Map<String,Object>> startNodeFilterArrayOfHashes, - String apiVer, - String secondaryFilterCutPoint, - Map<String,Object> secondaryFilterHash - ) - throws AAIException { - - // Locate the Query to be used - Vertex queryVtx = getNodeUsingUniqueId(transId, fromAppId, "named-query", - "named-query-uuid", namedQueryUuid); - - // Get the first/top named-query-element used by this query - Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, queryVtx, "named-query-element"); - Vertex firstNqElementVert = null; - int count = 0; - String topNType = ""; - while( vertI != null && vertI.hasNext() ){ - firstNqElementVert = vertI.next(); - count++; - topNType = getNqElementWidgetType( transId, fromAppId, firstNqElementVert, "" ); - } - - if( count < 1 ){ - // A named query must start with a single top element - throw new AAIException("AAI_6133", "No top-node defined for named-query-uuid = [" + namedQueryUuid + "]"); - } - else if( count > 1 ){ - // A named query should start with a single top element - throw new AAIException("AAI_6133", "More than one top-node defined for named-query-uuid = [" + namedQueryUuid + "]"); - } - if( (topNType == null) || topNType.equals("") ){ - String msg = "Could not determine the top-node nodeType for Named Query: [" + namedQueryUuid + "]"; - throw new AAIException("AAI_6133", msg); - } - - // Read the topology into a hash for processing - Multimap<String, String> validNextStepMap = genTopoMap4NamedQ(transId, fromAppId, queryVtx, namedQueryUuid); - - List<Vertex> startVertList = new ArrayList<>(); - if( startNodeFilterArrayOfHashes.size() == 1 ){ - // If there is only one set of startFilter info given, then allow it to possibly not be - // defining just one start node. - Map<String, Object> tmpHash = startNodeFilterArrayOfHashes.get(0); - Set <String> propKeySet = tmpHash.keySet(); - Iterator<String> propIter = propKeySet.iterator(); - Introspector obj = loader.introspectorFromName(topNType); - Set<String> keys = obj.getKeys(); - boolean foundIndexedField = false; - int propertiesSet = 0; - while( propIter.hasNext() ){ - String oldVtxKey = propIter.next(); - String newKey = oldVtxKey; - String [] parts = oldVtxKey.split("\\."); - if( parts.length == 2 ){ - newKey = parts[1]; - } - Object obVal = tmpHash.get(oldVtxKey); - if (obj.hasProperty(newKey)) { - if (keys.contains(newKey)) { - foundIndexedField = true; - } - obj.setValue(newKey, obVal); - propertiesSet++; - } - } - //we found all the properties in the startNodeType - if (propertiesSet == propKeySet.size()) { - if (foundIndexedField) { - QueryBuilder builder = this.engine.getQueryBuilder().exactMatchQuery(obj); - startVertList = builder.toList(); - } else { - //force a filter from aai-node-type - QueryBuilder builder = this.engine.getQueryBuilder().createContainerQuery(obj).exactMatchQuery(obj); - startVertList = builder.toList(); - } - } else { - Optional<Vertex> tmpVtx = dbMethHelper.searchVertexByIdentityMap(topNType, startNodeFilterArrayOfHashes.get(0)); - // Only found one, so just use it. - if (tmpVtx.isPresent()) { - startVertList.add(tmpVtx.get()); - } - } - } - else { - // Since they give an array of startNodeFilterHash info, we expect each one - // to just point to one node. - for( int i = 0; i < startNodeFilterArrayOfHashes.size(); i++ ){ - // Locate the starting node for each set of data - Optional<Vertex> tmpVtx = dbMethHelper.searchVertexByIdentityMap(topNType, startNodeFilterArrayOfHashes.get(i)); - if (tmpVtx.isPresent()) { - startVertList.add(tmpVtx.get()); - } - } - } - - if (startVertList.isEmpty()) { - throw new AAIException("AAI_6114", "No Node of type " + topNType + " found for properties"); - } - // Make sure they're not bringing back too much data - String maxString = AAIConfig.get("aai.model.query.resultset.maxcount"); - if( maxString != null && !maxString.equals("") ){ - int maxSets = Integer.parseInt(maxString); - if( startVertList.size() > maxSets ){ - String msg = " Query returns " + startVertList.size() + " resultSets. Max allowed is: " + maxSets; - throw new AAIException("AAI_6141", msg); - } - } - - // Loop through each start node and get its data - List<ResultSet> resSetList = new ArrayList<>(); - for( int i = 0; i < startVertList.size(); i++ ){ - Vertex startVtx = startVertList.get(i); - // Collect the data - String elementLocationTrail = topNType; - ArrayList <String> vidsTraversed = new ArrayList<>(); - Map<String,String> emptyDelKeyHash = new HashMap<>(); // Does not apply to Named Queries - - // Get the mapping of namedQuery elements to our widget topology for this namedQuery - String incomingTrail = ""; - Map<String, String> currentHash = new HashMap<>(); - - Map<String,String> namedQueryElementHash = collectNQElementHash( transId, fromAppId, - firstNqElementVert, incomingTrail, currentHash, vidsTraversed, 0 ); - - vidsTraversed = new ArrayList<>(); - ResultSet tmpResSet = collectInstanceData( transId, fromAppId, - startVtx, elementLocationTrail, - validNextStepMap, vidsTraversed, 0, emptyDelKeyHash, namedQueryElementHash, apiVer ); - resSetList.add(tmpResSet); - } - - // If a secondary filter was defined, we will prune the collected instance data result set(s) based on it. - List<ResultSet> prunedResSetList = new ArrayList<>(); - if( resSetList != null && !resSetList.isEmpty() ){ - for( int i = 0; i < resSetList.size(); i++ ){ - if( secondaryFilterCutPoint == null || secondaryFilterCutPoint.equals("") || secondaryFilterHash == null ){ - // They didn't want to do any pruning, so just use the results we already had - prunedResSetList.add(resSetList.get(i)); - } - else { - ResultSet tmpResSet = pruneResultSet(resSetList.get(i), secondaryFilterCutPoint, secondaryFilterHash); - if( tmpResSet != null ){ - prunedResSetList.add(tmpResSet); - } - } - } - } - - // Since a NamedQuery can mark some nodes as "do-not-display", we need to collapse our resultSet so - // does not display those nodes. - List<ResultSet> collapsedResSetList = new ArrayList<>(); - if( prunedResSetList != null && !prunedResSetList.isEmpty() ){ - for( int i = 0; i < prunedResSetList.size(); i++ ){ - // Note - a single resultSet could be collapsed into many smaller ones if they - // marked all the "top" node-elements as do-not-output. Ie. the query may - // have had a top-node of "generic-vnf" which joins down to different l-interfaces. - // If they only want to see the l-interfaces, then a single result set - // would be "collapsed" into many separate resultSets - each of which is - // just a single l-interface. - List<ResultSet> tmpResSetList = collapseForDoNotOutput(prunedResSetList.get(i)); - if( tmpResSetList != null && !tmpResSetList.isEmpty() ){ - for( int x = 0; x < tmpResSetList.size(); x++ ){ - //showResultSet( tmpResSetList.get(x), 0 ); //DEBUG-- this was just for testing - collapsedResSetList.add(tmpResSetList.get(x)); - } - } - } - } - - return collapsedResSetList; - - }// End of queryByNamedQuery() - - - /** - * Prune a result set as per a secondary filter. - * - * @param resSetVal the res set val - * @param cutPointType the nodeType where the trim will happen - * @param secFilterHash hash of properties and values to use as the secondary filter - * @return pruned result set - * @throws AAIException the AAI exception - */ - public ResultSet pruneResultSet(ResultSet resSetVal, String cutPointType, Map<String,Object> secFilterHash ) - throws AAIException { - - // Given a ResultSet and some secondary filter info, do pruning as needed - ResultSet pResSet = new ResultSet(); - - // For this ResultSet, we will see if we are on a node of the type that is our cutPoint; - // then only keep it if we peek "below" and see a match for our filter. - - String nt = resSetVal.getVert().<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( nt != null && nt.equals(cutPointType) ){ - // We are on the type of node that may need to be "pruned" along with it's sub-results - if( ! satisfiesFilters(resSetVal, secFilterHash) ){ - // Return an empty result set since we are pruning at this level. - return pResSet; - } - } - - // If we made it to here, we will not be pruning at this level, so we will - // be returning a copy of this resultSet that has it's subResults pruned (as needed). - pResSet.setVert(resSetVal.getVert()); - pResSet.setDoNotOutputFlag(resSetVal.getDoNotOutputFlag()); - pResSet.setExtraPropertyHash(resSetVal.getExtraPropertyHash()); - pResSet.setLocationInModelSubGraph(resSetVal.getLocationInModelSubGraph()); - pResSet.setNewDataDelFlag(resSetVal.getNewDataDelFlag()); - pResSet.setPropertyLimitDesc(resSetVal.getPropertyLimitDesc()); - pResSet.setPropertyOverRideHash(resSetVal.getPropertyOverRideHash()); - - if( !resSetVal.getSubResultSet().isEmpty() ){ - ListIterator<ResultSet> listItr = resSetVal.getSubResultSet().listIterator(); - List<ResultSet> newSubSetList = new ArrayList<>(); - while( listItr.hasNext() ){ - ResultSet tmpSubResSet = pruneResultSet( listItr.next(), cutPointType, secFilterHash ); - if( tmpSubResSet.getVert() != null ){ - // This one wasn't pruned - so keep it. - newSubSetList.add(tmpSubResSet); - } - } - pResSet.setSubResultSet(newSubSetList); - } - - return pResSet; - - }// End pruneResultSet() - - - /** - * Satisfies hash of filters. - * - * @param resSet the res set - * @param filterHash the filter hash - * @return true, if successful - * @throws AAIException the AAI exception - */ - public boolean satisfiesFilters(ResultSet resSet, Map<String,Object> filterHash ) - throws AAIException { - - if( filterHash.isEmpty() ){ - // Nothing to look for, so no, we didn't find it. - return false; - } - - Iterator <?> it = filterHash.entrySet().iterator(); - while( it.hasNext() ){ - Map.Entry<?,?> filtEntry = (Map.Entry<?,?>) it.next(); - String propNodeTypeDotName = (filtEntry.getKey()).toString(); - String fpv = (filtEntry.getValue()).toString(); - - int periodLoc = propNodeTypeDotName.indexOf('.'); - if( periodLoc <= 0 ){ - String emsg = "Bad filter param key passed in: [" + propNodeTypeDotName + "]. Expected format = [nodeName.paramName]\n"; - throw new AAIException("AAI_6120", emsg); - } - else { - String fnt = propNodeTypeDotName.substring(0,periodLoc); - String fpn = propNodeTypeDotName.substring(periodLoc + 1); - if( filterMetByThisSet( resSet, fnt, fpn, fpv ) ){ - //System.out.println(" DEBUG -- satisfied/matched filter: [" + fnt + "|" + fpn + "|" + fpv + "]."); - } - else { - //System.out.println(" DEBUG -- NOT satisfied/matched filter: [" + fnt + "|" + fpn + "|" + fpv + "]."); - return false; - } - } - } - - // Made it through all the filters -- it found what we were looking for. - return true; - - }// end of satisfiesFilters() - - - /** - * Filter met by this set. - * - * @param resSet the res set - * @param filtNodeType the filt node type - * @param filtPropName the filt prop name - * @param filtPropVal the filt prop val - * @return true, if successful - */ - public boolean filterMetByThisSet(ResultSet resSet, String filtNodeType, String filtPropName, String filtPropVal ) { + private static Logger logger = LoggerFactory.getLogger(ModelBasedProcessing.class); + private static final int MAX_LEVELS = 50; // max depth allowed for our model - to protect + // against infinite loop problems + + private TransactionalGraphEngine engine; + private Loader loader; + private DBSerializer serializer; + private DbMethHelper dbMethHelper; + + protected ModelBasedProcessing() { + + } + + public ModelBasedProcessing(Loader loader, TransactionalGraphEngine engine, + DBSerializer serializer) { + this.loader = loader; + this.engine = engine; + this.serializer = serializer; + dbMethHelper = new DbMethHelper(loader, engine); + } + + /** + * Gets the start nodes and model-ver's. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param passedModelVersionId the passed model-version-id -- optional (unique id for a + * model-ver) + * @param passedModelInvId the passed model-invariant-id -- optional + * @param passedModelName the passed model-name -- optional + * @param passedTopNodeType the passed top node type -- optional (needed if neither + * model=invariant-id nor model-version-id is passed) + * @param startNodeFilterArrayOfHashes the start node filter array of hashes -- optional (used + * to locate the first node(s) of instance data) + * @param apiVer the api ver + * @return HashMap of startNodes and their corresponding model-version-id's + * @throws AAIException the AAI exception + */ + public Map<String, String> getStartNodesAndModVersionIds(String transId, String fromAppId, + String passedModelVersionId, String passedModelInvId, String passedModelName, + String passedTopNodeType, List<Map<String, Object>> startNodeFilterArrayOfHashes, + String apiVer) throws AAIException { + // ---------------------------------------------------------------------------------------------------- + // Get a hash for all start-nodes (key = vtxId, val = modelVersionId that applies) + // If no start-node-key info is passed, then use either the passed modelVersion or + // the passed model-invariant-id or model-name to collect them. + // If start-node-key info is given, use it instead to look for start-nodes. + // Note: if ONLY start-node-key info is given, then it would have to map to nodes which + // have persona data. Otherwise we'd have no way to know what model to collect data with. + // ---------------------------------------------------------------------------------------------------- + + Iterator<Vertex> startVerts = null; + Map<String, String> startVertInfo = new HashMap<>(); + + if (startNodeFilterArrayOfHashes.isEmpty()) { + // Since they did not give any data to find start instances, we will have to find them + // using whatever model-info they provided so we can use it to map to persona-data in + // the db. + if ((passedModelVersionId == null || passedModelVersionId.equals("")) + && (passedModelInvId == null || passedModelInvId.equals("")) + && (passedModelName == null || passedModelName.equals(""))) { + throw new AAIException("AAI_6118", + "ModelInvariantId or ModelName or ModelVersionId required if no startNodeFilter data passed."); + } else { + // Use whatever model info they pass to find start-node instances + // Get the first/top named-query-element used by this query + if (passedModelVersionId != null && !passedModelVersionId.equals("")) { + // Need to look up the model-invariant-id and model-version to check against + // persona data + Vertex modVerVtx = getNodeUsingUniqueId(transId, fromAppId, "model-ver", + "model-version-id", passedModelVersionId); + Vertex modVtx = getModelGivenModelVer(modVerVtx, ""); + String calcModId = modVtx.<String>property("model-invariant-id").orElse(null); + // Now we can look up instances that match this model's info + if (calcModId != null) { + startVerts = this.engine.asAdmin().getReadOnlyTraversalSource().V() + .has(addDBAliasedSuffix("model-invariant-id"), calcModId) + .has(addDBAliasedSuffix("model-version-id"), passedModelVersionId); + } + } else if (passedModelInvId != null && !passedModelInvId.equals("")) { + // They gave us the model-invariant-id + startVerts = this.engine.asAdmin().getReadOnlyTraversalSource().V() + .has(addDBAliasedSuffix("model-invariant-id"), passedModelInvId); + } else if (passedModelName != null && !passedModelName.equals("")) { + List<Vertex> modelVerVtxList = + getModelVersUsingName(transId, fromAppId, passedModelName); + List<Vertex> startVtxList = new ArrayList<>(); + // Need to look up the model-inv-ids and model-versions to check against persona + // data + if (!modelVerVtxList.isEmpty()) { + for (int i = 0; i < modelVerVtxList.size(); i++) { + String calcModVerId = (modelVerVtxList.get(i)) + .<String>property("model-version-id").orElse(null); + Vertex modVtx = getModelGivenModelVer(modelVerVtxList.get(i), ""); + String calcModInvId = + modVtx.<String>property("model-invariant-id").orElse(null); + // Now we can look up instances that match this model's info + Iterator<Vertex> tmpStartIter = + this.engine.asAdmin().getReadOnlyTraversalSource().V() + .has(addDBAliasedSuffix("model-invariant-id"), calcModInvId) + .has(addDBAliasedSuffix("model-version-id"), calcModVerId); + while (tmpStartIter.hasNext()) { + Vertex tmpStartVert = tmpStartIter.next(); + startVtxList.add(tmpStartVert); + } + } + } + if (!startVtxList.isEmpty()) { + startVerts = startVtxList.iterator(); + } + } + } + + if (startVerts != null) { + while (startVerts.hasNext()) { + Vertex tmpStartVert = startVerts.next(); + String vid = tmpStartVert.id().toString(); + // String tmpModId = + // tmpStartVert.<String>property(addDBAliasedSuffix("model-invariant-id")).orElse(null); + String tmpModVerId = tmpStartVert + .<String>property(addDBAliasedSuffix("model-version-id")).orElse(null); + startVertInfo.put(vid, tmpModVerId); + } + } + if (startVertInfo.isEmpty()) { + throw new AAIException("AAI_6114", + "Start Node(s) could not be found for model data passed. " + + "(modelVersionId = [" + passedModelVersionId + "], modelInvariantId = [" + + passedModelInvId + "], modelName = [" + passedModelName + "])"); + } + + return startVertInfo; + } else { + // Use start-node filter info to find start-node(s) - Note - there could also be model + // info passed that we'll need + // to use to trim down the set of start-nodes that we find based on the startNodeFilter + // data. + String modTopNodeType = ""; + String modInfoStr = ""; + if (passedModelVersionId != null && !passedModelVersionId.equals("")) { + modTopNodeType = + getModelVerTopWidgetType(transId, fromAppId, passedModelVersionId, "", ""); + modInfoStr = "modelVersionId = (" + passedModelVersionId + ")"; + } else if (passedModelInvId != null && !passedModelInvId.equals("")) { + modTopNodeType = + getModelVerTopWidgetType(transId, fromAppId, "", passedModelInvId, ""); + modInfoStr = "modelId = (" + passedModelInvId + ")"; + } else if (passedModelName != null && !passedModelName.equals("")) { + modTopNodeType = + getModelVerTopWidgetType(transId, fromAppId, "", "", passedModelName); + modInfoStr = "modelName = (" + passedModelName + ")"; + } + + if (modTopNodeType.equals("")) { + if ((passedTopNodeType == null) || passedTopNodeType.equals("")) { + String msg = + "Could not determine the top-node nodeType for this request. modelInfo: [" + + modInfoStr + "]"; + throw new AAIException("AAI_6118", msg); + } else { + // We couldn't find a top-model-type based on passed in model info, but they + // gave us a type to use -- so use it. + modTopNodeType = passedTopNodeType; + } + } else { + // we did get a topNode type based on model info - make sure it doesn't contradict + // the passsed-in one (if there is one) + if (passedTopNodeType != null && !passedTopNodeType.equals("") + && !passedTopNodeType.equals(modTopNodeType)) { + throw new AAIException("AAI_6120", + "topNodeType passed in [" + passedTopNodeType + + "] does not match nodeType derived for model info passed in: [" + + modTopNodeType + "]"); + } + } + + List<String> modelVersionIds2Check = new ArrayList<>(); + if ((passedModelName != null && !passedModelName.equals(""))) { + // They passed a modelName, so find all the model UUIDs (model-version-id's) that + // map to this + modelVersionIds2Check = + getModelVerIdsUsingName(transId, fromAppId, passedModelName); + } + if ((passedModelVersionId != null && !passedModelVersionId.equals(""))) { + // They passed in a modelNameVersionId + if (modelVersionIds2Check.isEmpty()) { + // There was no modelName passed, so we can use the passed modelNameVersionId + modelVersionIds2Check.add(passedModelVersionId); + } else if (modelVersionIds2Check.contains(passedModelVersionId)) { + // The passed in uuid does not conflict with what we got using the passed-in + // modelName. + // We'll just use the passed in uuid in this case. + // Hopefully they would not be passing strange combinations like this, but we'll + // try to deal with it. + modelVersionIds2Check = new ArrayList<>(); // Clear out what we had + modelVersionIds2Check.add(passedModelVersionId); + } + } + + // We should now be OK with our topNodeType for this request, so we can look for the + // actual startNodes + for (int i = 0; i < startNodeFilterArrayOfHashes.size(); i++) { + // Locate the starting node which will be used to look which corresponds to this set + // of filter data + Vertex startVtx = null; + try { + Optional<Vertex> result = dbMethHelper.searchVertexByIdentityMap(modTopNodeType, + startNodeFilterArrayOfHashes.get(i)); + if (!result.isPresent()) { + throw new AAIException("AAI_6114", + "No Node of type " + modTopNodeType + " found for properties"); + } + startVtx = result.get(); + } catch (AAIException e) { + String msg = "Could not find startNode of type = [" + modTopNodeType + + "], given these params: " + startNodeFilterArrayOfHashes.get(i) + + ". msg # from getUniqueNode() = " + e.getMessage(); + throw new AAIException("AAI_6114", msg); + } + + String vid = startVtx.id().toString(); + String personaModInvId = startVtx + .<String>property(addDBAliasedSuffix("model-invariant-id")).orElse(null); + String personaModVerId = + startVtx.<String>property(addDBAliasedSuffix("model-version-id")).orElse(null); + + // Either this start-node has persona info (which should not contradict any + // passed-in model info) + // or they should have passed in the model to use - so we'd just use that. + if (personaModVerId != null && !personaModVerId.equals("")) { + // There is persona data in this start-node. So make sure it doesn't contradict + // any "passed" stuff + if (modelVersionIds2Check.isEmpty() + && (passedModelInvId == null || passedModelInvId.equals(""))) { + // They didn't pass any model info, so use the persona one. + startVertInfo.put(vid, personaModVerId); + } else if (modelVersionIds2Check.isEmpty() + && (passedModelInvId != null && !passedModelInvId.equals(""))) { + // They passed in just the modelId - so check it + if (passedModelInvId.equals(personaModInvId)) { + startVertInfo.put(vid, personaModVerId); + } + } else if (!modelVersionIds2Check.isEmpty() + && (passedModelInvId == null || passedModelInvId.equals(""))) { + // They passed in just modelVersionId - so check + if (modelVersionIds2Check.contains(personaModVerId)) { + startVertInfo.put(vid, personaModVerId); + } + } else if (!modelVersionIds2Check.isEmpty() + && (passedModelInvId != null && !passedModelInvId.equals(""))) { + // We have BOTH a modelVersionIds and a modelId to check + if (passedModelInvId.equals(personaModInvId) + && modelVersionIds2Check.contains(personaModVerId)) { + startVertInfo.put(vid, personaModVerId); + } + } + } else { + // This start node did not have persona info -- so we will use the passed in + // model info if they passed one + if (passedModelVersionId != null && !passedModelVersionId.equals("")) { + // The model-version-id uniquely identifies a model-ver, so we can use it. + startVertInfo.put(vid, passedModelVersionId); + } else { + throw new AAIException("AAI_6118", + "Found startNode but since it does not have persona data, the " + + " model-version-id is required. "); + } + } + } + } + + return startVertInfo; + + }// end of getStartNodesAndModVersionIds() + + /** + * Query by model. (really model-ver) + * + * @param transId the trans id + * @param fromAppId the from app id + * @param modelVersionId the model-version-id (unique id in model-ver) + * @param modelInvariantId the model-invariant-id (unique id in model) + * @param modelName the model name + * @param topNodeType - optional (needed if neither model-invariant-id nor model-version-id is + * passed) + * @param startNodeFilterArrayOfHashes the start node filter array of hashes -- optional (used + * to locate the first node(s) of instance data) + * @param apiVer the api ver + * @return resultSet + * @throws AAIException the AAI exception + */ + public List<ResultSet> queryByModel(String transId, String fromAppId, String modelVersionId, + String modelInvariantId, String modelName, String topNodeType, + List<Map<String, Object>> startNodeFilterArrayOfHashes, String apiVer) throws AAIException { + + final String transId_f = transId; + final String fromAppId_f = fromAppId; + final String modelVersionId_f = modelVersionId; + final String modelInvId_f = modelInvariantId; + final String modelName_f = modelName; + final String topNodeType_f = topNodeType; + final List<Map<String, Object>> startNodeFilterArrayOfHashes_f = + startNodeFilterArrayOfHashes; + final String apiVer_f = apiVer; + + // Find out what our time-limit should be + int timeLimitSec = 0; + String timeLimitString = AAIConfig.get("aai.model.query.timeout.sec"); + if (timeLimitString != null && !timeLimitString.equals("")) { + try { + timeLimitSec = Integer.parseInt(timeLimitString); + } catch (Exception nfe) { + // Don't worry, we will leave the limit as zero - which tells us not to use it. + } + } + + if (timeLimitSec <= 0) { + // We will NOT be using a timer + return queryByModel_Timed(transId, fromAppId, modelVersionId, modelInvariantId, + modelName, topNodeType, startNodeFilterArrayOfHashes, apiVer); + } + + List<ResultSet> resultList = new ArrayList<>(); + TimeLimiter limiter = new SimpleTimeLimiter(); + try { + + resultList = limiter.callWithTimeout(new AaiCallable<List<ResultSet>>() { + public List<ResultSet> process() throws AAIException { + return queryByModel_Timed(transId_f, fromAppId_f, modelVersionId_f, + modelInvId_f, modelName_f, topNodeType_f, startNodeFilterArrayOfHashes_f, + apiVer_f); + } + }, timeLimitSec, TimeUnit.SECONDS, true); + } catch (AAIException ae) { + // Re-throw AAIException so we get can tell what happened internally + throw ae; + } catch (UncheckedTimeoutException ute) { + throw new AAIException("AAI_6140", + "Query Processing Limit exceeded. (limit = " + timeLimitSec + " seconds)"); + } catch (Exception e) { + throw new AAIException("AAI_6128", + "Unexpected exception in queryByModel(): " + e.getMessage()); + } + + return resultList; + } + + /** + * Query by model (model-ver) timed. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param modelVersionId the model-version-id (unique id in model-ver) + * @param modelInvariantId the model-invariant-id (unique id in model) + * @param modelName the model name + * @param topNodeType the top node type + * @param startNodeFilterArrayOfHashesVal the start node filter array of hashes + * @param apiVer the api ver + * @return the array list + * @throws AAIException the AAI exception + */ + public List<ResultSet> queryByModel_Timed(String transId, String fromAppId, + String modelVersionId, String modelInvariantId, String modelName, String topNodeType, + List<Map<String, Object>> startNodeFilterArrayOfHashesVal, String apiVer) + throws AAIException { + + List<ResultSet> resultArray = new ArrayList<>(); + + // NOTE: this method can be used for different styles of queries: + // a) They could pass neither a modelVersionId or a modelInvariantId but just pass a set of + // data defining start-nodes. + // Note - with no model info, we need them to pass the startNodeType for us to be able to + // use the + // start-node-filter data. We would look at each start node and ensure that each has + // persona-model info. + // Then use whatever model corresponds to each instance to pull that instance's data. + // b) They could pass a modelInvariantId, but no modelVersionId and no startNode info. In + // this case, we + // Would look in the database for all nodes that have a model-invariant-id-local that + // matches what was + // passed, and then for each of those instances, pull the data based on the corresponding + // model. + // c) They could pass a model-version-id, but no startNode info. We'd make sure that if a + // model-invariant-id was also passed, that it does not conflict - but it really should be + // null if they + // are passing a full model-version-id. Like case -b-, we'd do a query for all nodes + // that have persona info that corresponds to the model-version-id passed and then + // collect data for each one. + // d) They could pass either modelVersionId or modelInvariantId AND startNodeFilter info. In + // this case we + // would look at the model info to figure out what the top-node-type is, then look at the + // top-node instances based on the startNodeFilter. We'd only collect data for each instance + // if + // it's persona model info matches what was passed in. + + // Sorry to do this, but code that gets called with an empty hash as the first array element + // was causing errors + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + if (!startNodeFilterArrayOfHashesVal.isEmpty()) { + Map<String, Object> tmpH = startNodeFilterArrayOfHashesVal.get(0); + if (!tmpH.isEmpty()) { + for (int i = 0; i < startNodeFilterArrayOfHashesVal.size(); i++) { + startNodeFilterArrayOfHashes.add(startNodeFilterArrayOfHashesVal.get(i)); + } + } + } + + // ---------------------------------------------------------------------------------------------------------- + // Get a Hash of all the start-nodes (top instance-data node for a model-ver where we will + // start collecting data) for startNode2ModelVerHash: + // key = vertex-id for the startNode, + // value = model-version-id for the corresponding model-ver + // ---------------------------------------------------------------------------------------------------------- + Map<String, String> startNode2ModelVerHash = + getStartNodesAndModVersionIds(transId, fromAppId, modelVersionId, modelInvariantId, + modelName, topNodeType, startNodeFilterArrayOfHashes, apiVer); + + // System.out.println("\nDEBUG -- Here's a dump of the startnodes/model-vers: " + + // startNode2ModelVerHash.toString()); + + // -------------------------------------------------------------------------------------------------------- + // Figure out what-all models (model-ver nodes) we will be dealing with + // Note - Instances must all use the same type of start-node, but do not have to all use the + // same model-ver. + // -------------------------------------------------------------------------------------------------------- + Map<String, Vertex> distinctModelVersHash = new HashMap<>(); + // For distinctModelVersHash: key = modelVersionId, val= modelVerVertex + String startNodeType = ""; + if (topNodeType != null && !topNodeType.equals("")) { + startNodeType = topNodeType; + } + + List<String> skipModelVerIdList = new ArrayList<>(); + List<String> skipStartVertVerIdList = new ArrayList<>(); + Set<String> snKeySet = startNode2ModelVerHash.keySet(); + Iterator<String> startNodeIterator = snKeySet.iterator(); + while (startNodeIterator.hasNext()) { + String modVerIdKey = startNodeIterator.next(); + String modVerId = startNode2ModelVerHash.get(modVerIdKey); + if (!distinctModelVersHash.containsKey(modVerId)) { + // First time seeing this model-version-id + Vertex modVerVtx = getNodeUsingUniqueId(transId, fromAppId, "model-ver", + "model-version-id", modVerId); + String tmpNodeType = ""; + try { + tmpNodeType = getModelVerTopWidgetType(modVerVtx, ""); + } catch (AAIException ae) { + // There must be some old bad data in the db - we will skip over this model-ver + // since its + // model is not good anymore - but will log that this is happening. + skipModelVerIdList.add(modVerId); + skipStartVertVerIdList.add(modVerIdKey); + System.out + .println(">>> WARNING - will not collect model data for this vertex since " + + "it uses an inconsistant model-ver model. Model-version-id = " + + modVerId); + } + + if (tmpNodeType != null && !tmpNodeType.equals("")) { + if (startNodeType.equals("")) { + startNodeType = tmpNodeType; + } else if (!startNodeType.equals(tmpNodeType)) { + String msg = "Conflict between startNode types for models involved: [" + + startNodeType + "], [" + tmpNodeType + "]"; + throw new AAIException("AAI_6125", msg); + } + distinctModelVersHash.put(modVerId, modVerVtx); + } + } + } + + // System.out.println("\nDEBUG -- Here's a dump of the DISTINCT model-ver hash: " + + // distinctModelVersHash.toString() ); + + // ------------------------------------------------------------------------------------------------------ + // Get the "valid-next-step" hash for each distinct model-ver + // While we're at it, get a mapping of model-invariant-id|model-version to model-version-id + // for + // the model-vers being used + // ------------------------------------------------------------------------------------------------------ + Map<String, Multimap<String, String>> validNextStepHash = new HashMap<>(); + // validNextStepHash: key = modelVerId, value = nextStepMap + Set<String> keySet = distinctModelVersHash.keySet(); + Iterator<String> modelVerIterator = keySet.iterator(); + while (modelVerIterator.hasNext()) { + String modVerKey = modelVerIterator.next(); + if (!skipModelVerIdList.contains(modVerKey)) { + Vertex modelVerVtx = distinctModelVersHash.get(modVerKey); + Multimap<String, String> tmpTopoMap = + genTopoMap4ModelVer(transId, fromAppId, modelVerVtx, modVerKey); + validNextStepHash.put(modVerKey, tmpTopoMap); + } + } + + // ------------------------------------------------------------------------------------------------- + // Figure out what the "start-node" for each instance will be (plus the info we will use to + // represent that in our topology) + // ------------------------------------------------------------------------------------------------- + List<String> failedPersonaCheckVids = new ArrayList<>(); + Map<String, String> firstStepInfoHash = new HashMap<>(); + // For firstStepInfoHash: key = startNodeVtxId, val=topNodeType plus personaData if + // applicable + // ie. the value is what we'd use as the "first-step" for this model. + if (!nodeTypeSupportsPersona(startNodeType)) { + // This node type doesn't have persona info, so we just use startNodeType for the + // first-step-info + snKeySet = startNode2ModelVerHash.keySet(); + startNodeIterator = snKeySet.iterator(); + while (startNodeIterator.hasNext()) { + String vtxKey = startNodeIterator.next(); + firstStepInfoHash.put(vtxKey, startNodeType); + } + } else { + // Need to check that this node's persona data is good and if it is - use it for the + // first step info + snKeySet = startNode2ModelVerHash.keySet(); + startNodeIterator = snKeySet.iterator(); + while (startNodeIterator.hasNext()) { + String vtxKey = startNodeIterator.next(); + Iterator<Vertex> vtxIterator = + this.engine.asAdmin().getReadOnlyTraversalSource().V(vtxKey); + Vertex tmpVtx = vtxIterator.next(); + String thisVtxModelVerId = startNode2ModelVerHash.get(vtxKey); + if (skipModelVerIdList.contains(thisVtxModelVerId)) { + // Skip this vertex because it uses a model-ver that is bad + continue; + } + Vertex modelVerVtx = distinctModelVersHash.get(thisVtxModelVerId); + Vertex modelVtx = getModelGivenModelVer(modelVerVtx, ""); + String modInvId = modelVtx.<String>property("model-invariant-id").orElse(null); + String personaModInvId = + tmpVtx.<String>property(addDBAliasedSuffix("model-invariant-id")).orElse(null); + String personaModVerId = + tmpVtx.<String>property(addDBAliasedSuffix("model-version-id")).orElse(null); + if (modInvId.equals(personaModInvId) && thisVtxModelVerId.equals(personaModVerId)) { + String tmpPersonaInfoStr = + startNodeType + "," + personaModInvId + "," + personaModVerId; + firstStepInfoHash.put(vtxKey, tmpPersonaInfoStr); + } else { + // we won't use this start node below when we collect data because it should + // have + // had persona data that matched it's model - but it did not. + failedPersonaCheckVids.add(vtxKey); + } + } + } + + // System.out.println("\nDEBUG -- Here's a dump of the firstStepInfoHash hash: " + + // firstStepInfoHash.toString() ); + + // ------------------------------------------------------------------------------------------------ + // Loop through each start-node, collect it's data using collectInstanceData() and put the + // resultSet onto the resultArray. + // ------------------------------------------------------------------------------------------------ + + // Make sure they're not bringing back too much data + String maxString = AAIConfig.get("aai.model.query.resultset.maxcount"); + if (maxString != null && !maxString.equals("")) { + int maxSets = 0; + try { + maxSets = Integer.parseInt(maxString); + } catch (Exception nfe) { + // Don't worry, we will leave the max as zero - which tells us not to use it. + } + + if (maxSets > 0 && (startNode2ModelVerHash.size() > maxSets)) { + String msg = " Query returns " + startNode2ModelVerHash.size() + + " resultSets. Max allowed is: " + maxSets; + throw new AAIException("AAI_6141", msg); + } + } + + snKeySet = startNode2ModelVerHash.keySet(); + startNodeIterator = snKeySet.iterator(); + while (startNodeIterator.hasNext()) { + String topNodeVtxId = startNodeIterator.next(); + if (failedPersonaCheckVids.contains(topNodeVtxId) + || skipStartVertVerIdList.contains(topNodeVtxId)) { + // Skip this vertex because it failed it's persona-data check above + // Skip this vertex because it uses a model-ver that is bad + continue; + } + + Iterator<Vertex> vtxIterator = + this.engine.asAdmin().getReadOnlyTraversalSource().V(topNodeVtxId); + Vertex tmpStartVtx = vtxIterator.next(); + String elementLocationTrail = firstStepInfoHash.get(topNodeVtxId); + String modelVerId = startNode2ModelVerHash.get(topNodeVtxId); + Multimap<String, String> validNextStepMap = validNextStepHash.get(modelVerId); + + List<String> vidsTraversed = new ArrayList<>(); + Map<String, String> emptyDelKeyHash = new HashMap<>(); + Map<String, String> emptyNQElementHash = new HashMap<>(); // Only applies to Named + // Queries + ResultSet tmpResSet = collectInstanceData(transId, fromAppId, tmpStartVtx, + elementLocationTrail, validNextStepMap, vidsTraversed, 0, emptyDelKeyHash, + emptyNQElementHash, apiVer); + + resultArray.add(tmpResSet); + } + + return resultArray; + + }// queryByModel_Timed() + + /** + * Run delete by model-ver. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param modelVersionId the model version id -- unique id for a model-ver node + * @param topNodeTypeVal the top node type val -- required if no model-version-id is passed + * @param startNodeFilterHash the start node filter hash -- used to locate the first node of + * instance data + * @param apiVer the api ver + * @param resVersion the res version -- resourceVersion of the top/first widget in the model + * instance + * @return HashMap (keys = vertexIds that were deleted) + * @throws AAIException the AAI exception + */ + public Map<String, String> runDeleteByModel(String transId, String fromAppId, + String modelVersionId, String topNodeTypeVal, Map<String, Object> startNodeFilterHash, + String apiVer, String resVersion) throws AAIException { + + Map<String, String> retHash = new HashMap<>(); + + // Locate the Model-ver node to be used + Vertex modelVerVtx = null; + if (modelVersionId != null && !modelVersionId.equals("")) { + modelVerVtx = getNodeUsingUniqueId(transId, fromAppId, "model-ver", "model-version-id", + modelVersionId); + } else { + // if they didn't pass the modelVersionId, then we need to use the startNode to figure + // it out + // Locate the starting node based on the start node params + if (topNodeTypeVal == null || topNodeTypeVal.equals("")) { + throw new AAIException("AAI_6118", + "If no model info is passed, then topNodeType is required. "); + } + + Optional<Vertex> result = + dbMethHelper.searchVertexByIdentityMap(topNodeTypeVal, startNodeFilterHash); + if (!result.isPresent()) { + throw new AAIException("AAI_6114", + "No Node of type " + topNodeTypeVal + " found for properties"); + } + Vertex startVtx = result.get(); + + String startVertModVerId = + startVtx.<String>property(addDBAliasedSuffix("model-version-id")).orElse(null); + modelVerVtx = getNodeUsingUniqueId(transId, fromAppId, "model-ver", "model-version-id", + startVertModVerId); + } + + if (modelVerVtx == null) { + throw new AAIException("AAI_6114", + "Could not determine the model-ver for the given input parameters. "); + } + + String topNType = "unknown"; + String modelType = getModelTypeFromModelVer(modelVerVtx, ""); + + if (modelType.equals("widget")) { + // If they want to delete using a widget-level model.. That is just a delete of the one + // instance of one of our nodes. + String widgModNodeType = modelVerVtx.<String>property("model-name").orElse(null); + if ((widgModNodeType == null) || widgModNodeType.equals("")) { + String msg = + "Could not find model-name for the widget model [" + modelVersionId + "]."; + throw new AAIException("AAI_6132", msg); + } + Optional<Vertex> result = + dbMethHelper.locateUniqueVertex(widgModNodeType, startNodeFilterHash); + if (!result.isPresent()) { + throw new AAIException("AAI_6114", + "No Node of type " + topNType + " found for properties"); + } + Vertex widgetVtx = result.get(); + String widgId = widgetVtx.id().toString(); + serializer.delete(widgetVtx, resVersion, true); + retHash.put(widgId, widgModNodeType); + return retHash; + } + + // --------------------------------------------------------------------------------- + // If we got to here, this must be either a service or resource model. + // So, we'll need to get a Hash of which parts of the model to delete. + // NOTE- deleteByModel is deleting data based on one specific version of a model. + // --------------------------------------------------------------------------------- + String chkFirstNodePersonaModInvId = ""; + String chkFirstNodePersonaModVerId = ""; + String personaData = ""; + Vertex firstModElementVertex = getTopElementForSvcOrResModelVer(modelVerVtx, ""); + topNType = getModElementWidgetType(firstModElementVertex, ""); + if ((topNType == null) || topNType.equals("")) { + String msg = "Could not determine the top-node nodeType for model-version-id: [" + + modelVersionId + "]"; + throw new AAIException("AAI_6132", msg); + } + if (nodeTypeSupportsPersona(topNType)) { + Vertex modelVtx = getModelGivenModelVer(modelVerVtx, ""); + chkFirstNodePersonaModInvId = + modelVtx.<String>property("model-invariant-id").orElse(null); + chkFirstNodePersonaModVerId = + modelVerVtx.<String>property("model-version-id").orElse(null); + personaData = "," + chkFirstNodePersonaModInvId + "," + chkFirstNodePersonaModVerId; + } + + // Get the deleteKeyHash for this model + String incomingTrail = ""; + Map<String, String> currentHash = new HashMap<>(); + Map<String, Vertex> modConHash = new HashMap<>(); + ArrayList<String> vidsTraversed = new ArrayList<>(); + Map<String, String> delKeyHash = collectDeleteKeyHash(transId, fromAppId, + firstModElementVertex, incomingTrail, currentHash, vidsTraversed, 0, modConHash, + chkFirstNodePersonaModInvId, chkFirstNodePersonaModVerId); + + System.out.println( + "\n ----DEBUG -----: Delete Hash for model: [" + modelVersionId + "] looks like: "); + for (Map.Entry<String, String> entry : delKeyHash.entrySet()) { + System.out.println("key = [" + entry.getKey() + "], val = [" + entry.getValue() + "]"); + } + System.out.println("\n -----"); + // Locate the starting node that we'll use to start looking for instance data + Optional<Vertex> result = + dbMethHelper.searchVertexByIdentityMap(topNType, startNodeFilterHash); + if (!result.isPresent()) { + throw new AAIException("AAI_6114", + "No Node of type " + topNType + " found for properties"); + } + Vertex startVtx = result.get(); + if (!chkFirstNodePersonaModInvId.equals("")) { + // NOTE: For Service or Resource models, if this is a nodeType that supports persona's, + // then + // we need to make sure that the start node matches the persona values. + String startVertPersonaModInvId = + startVtx.<String>property(addDBAliasedSuffix("model-invariant-id")).orElse(null); + String startVertPersonaModVerId = + startVtx.<String>property(addDBAliasedSuffix("model-version-id")).orElse(null); + if (!chkFirstNodePersonaModInvId.equals(startVertPersonaModInvId) + || !chkFirstNodePersonaModVerId.equals(startVertPersonaModVerId)) { + String msg = "Persona-Model data mismatch for start node (" + topNType + "), " + + startNodeFilterHash; + throw new AAIException("AAI_6114", msg); + } + } + String topVid = startVtx.id().toString(); + + // Read the model-ver into a Map for processing + Multimap<String, String> validNextStepMap = + genTopoMap4ModelVer(transId, fromAppId, modelVerVtx, modelVersionId); + + // Collect the data + String elementLocationTrail = topNType + personaData; + vidsTraversed = new ArrayList<>(); + Map<String, String> emptyHash = new HashMap<>(); + + // Pass emptyHash for the NQElement hash since that parameter only applies to Named Queries + ResultSet retResSet = + collectInstanceData(transId, fromAppId, startVtx, elementLocationTrail, + validNextStepMap, vidsTraversed, 0, delKeyHash, emptyHash, apiVer); + + // Note: the new ResultSet will have each element tagged with the del flag so we'll know if + // it + // should be deleted or not - so loop through the results in a try-block since some things + // will get auto-deleted by parents before we get to them --- and try to remove each one. + String vidToResCheck = topVid; + + retHash = deleteAsNeededFromResultSet(transId, fromAppId, retResSet, vidToResCheck, apiVer, + resVersion, emptyHash); + // String msgStr = "processed deletes for these vids: (\n"+ retHash.keySet().toString() + + // ")."; + + return retHash; + + }// End of runDeleteByModel() + + /** + * Delete as needed from result set. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param resSet the res set + * @param vidToResCheck -- this vertex will need to have its resource-version checked + * @param apiVer the api ver + * @param resVersion the res version + * @param hashSoFar the hash so far -- hash of what's been deleted so far + * @return String + * @throws AAIException the AAI exception + */ + public Map<String, String> deleteAsNeededFromResultSet(String transId, String fromAppId, + ResultSet resSet, String vidToResCheck, String apiVer, String resVersion, + Map<String, String> hashSoFar) throws AAIException { + Map<String, String> retHash = new HashMap<>(); + retHash.putAll(hashSoFar); + Boolean deleteIt = false; + + if (resSet.getVert() == null) { + return retHash; + } + + Vertex thisVtx = resSet.getVert(); + String thisGuyId = ""; + String thisNT = ""; + String thisGuyStr = ""; + + Boolean gotVtxOK = false; + try { + if (thisVtx != null) { + thisGuyId = thisVtx.id().toString(); + thisNT = thisVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); + thisGuyStr = thisGuyId + "[" + thisNT + " found at:" + + resSet.getLocationInModelSubGraph() + "]"; + + // NOTE -- will try to set the NodeType to itself to see if the node has been + // deleted already in + // this transaction. It lets you get properties from nodes being deleted where the + // delete hasn't been committed yet. This check used to be accomplished with a call + // to + // "vtx.isRemoved()" but that was a Titan-only feature and is not available anymore + // since + // we no longer use Titan vertices. + // If we don't do this check, we get errors later when we try to delete the node. + thisVtx.property(AAIProperties.NODE_TYPE, thisNT); + gotVtxOK = true; + } + } catch (Exception ex) { + // Sometimes things have already been deleted by the time we get to them - just log it. + AAIException aaiException = + new AAIException("AAI_6154", thisGuyStr + ". msg = " + ex.getMessage()); + ErrorLogHelper.logException(aaiException); + + } + + if (!gotVtxOK) { + // The vertex must have already been removed. Just return. + // Note - We need to catch this because the DB sometimes can still have the vtx + // and be able to get its ID but it is flagged internally as removed already. + return retHash; + } else { + if (resSet.getNewDataDelFlag() != null && resSet.getNewDataDelFlag().equals("T")) { + logger.debug(">> will try to delete this one >> " + thisGuyStr); + + try { + Boolean requireResourceVersion = false; + if (thisGuyId.equals(vidToResCheck)) { + // This is the one vertex that we want to check the resourceId before + // deleting + requireResourceVersion = true; + } + this.serializer.delete(thisVtx, resVersion, requireResourceVersion); + } catch (AAIException ae) { + String errorCode = ae.getErrorObject().getErrorCode(); + if (errorCode.equals("6130") || errorCode.equals("6131")) { + // They didn't pass the correct resource-version for the top node. + throw ae; + } else { + ErrorLogHelper.logException(ae); + String errText = ae.getErrorObject().getErrorText(); + String errDetail = ae.getMessage(); + logger.debug("Exception when deleting " + thisGuyStr + ". ErrorCode = " + + errorCode + ", errorText = " + errText + ", details = " + errDetail); + } + } catch (Exception e) { + // We'd expect to get a "node not found" here sometimes depending on the order + // that + // the model has us finding / deleting nodes. + // Ignore the exception - but log it so we can see what happened. + AAIException aaiException = + new AAIException("AAI_6154", thisGuyStr + ". msg = " + e.getMessage()); + ErrorLogHelper.logException(aaiException); + + } + + // We can't depend on a thrown exception to tell us if a node was deleted since it + // may + // have been auto=deleted before this removeAaiNode() call. + // --- Not sure if we would want to check anything here -- because the + // graph.commit() is done outside of this call. + + deleteIt = true; + } else { + // --- DEBUG ---- + System.out.println(">>>>>>> NOT DELETING THIS ONE >>>> " + thisGuyStr); + List<String> retArr = dbMethHelper.getVertexProperties(thisVtx); + for (String info : retArr) { + System.out.println(info); + } + // --- DEBUG ---- + } + } + + // Now call this routine for the sub-resultSets + List<ResultSet> subResultSetList = resSet.getSubResultSet(); + Iterator<ResultSet> subResSetIter = subResultSetList.iterator(); + while (subResSetIter.hasNext()) { + ResultSet tmpSubResSet = subResSetIter.next(); + retHash = deleteAsNeededFromResultSet(transId, fromAppId, tmpSubResSet, vidToResCheck, + apiVer, resVersion, retHash); + } + + if (deleteIt) { + retHash.put(thisGuyId, thisGuyStr); + } + + return retHash; + + }// deleteAsNeededFromResultSet() + + /** + * Query by named query (old version). + * + * @param transId the trans id + * @param fromAppId the from app id + * @param namedQueryUuid the named query uuid + * @param startNodeFilterArrayOfHashes the start node filter array of hashes --used to locate + * the first nodes of instance data + * @param apiVer the api ver + * @return resultSet + * @throws AAIException the AAI exception + */ + public List<ResultSet> queryByNamedQuery(String transId, String fromAppId, + String namedQueryUuid, List<Map<String, Object>> startNodeFilterArrayOfHashes, + String apiVer) throws AAIException { + + String dummyCutPoint = null; + Map<String, Object> dummySecondaryFilterHash = null; + + return queryByNamedQuery(transId, fromAppId, namedQueryUuid, startNodeFilterArrayOfHashes, + apiVer, dummyCutPoint, dummySecondaryFilterHash); + } + + /** + * Query by named query. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param namedQueryUuid the named query uuid + * @param startNodeFilterArrayOfHashes the start node filter array of hashes --used to locate + * the first nodes of instance data + * @param apiVer the api ver + * @param secondaryFilterCutPoint nodeType where we will prune if secondary filter is not met + * @param secondaryFilterHash secondary filter params + * @return resultSet + * @throws AAIException the AAI exception + */ + public List<ResultSet> queryByNamedQuery(String transId, String fromAppId, + String namedQueryUuid, List<Map<String, Object>> startNodeFilterArrayOfHashes, + String apiVer, String secondaryFilterCutPoint, Map<String, Object> secondaryFilterHash) + throws AAIException { + + final String transId_f = transId; + final String fromAppId_f = fromAppId; + final String namedQueryUuid_f = namedQueryUuid; + final List<Map<String, Object>> startNodeFilterArrayOfHashes_f = + startNodeFilterArrayOfHashes; + final String apiVer_f = apiVer; + final String secondaryFilterCutPoint_f = secondaryFilterCutPoint; + final Map<String, Object> secondaryFilterHash_f = secondaryFilterHash; + + // Find out what our time-limit should be + int timeLimitSec = 0; + String timeLimitString = AAIConfig.get("aai.model.query.timeout.sec"); + if (timeLimitString != null && !timeLimitString.equals("")) { + try { + timeLimitSec = Integer.parseInt(timeLimitString); + } catch (Exception nfe) { + // Don't worry, we will leave the limit as zero - which tells us not to use it. + } + } + + if (timeLimitSec <= 0) { + // We will NOT be using a timer + return queryByNamedQuery_Timed(transId, fromAppId, namedQueryUuid, + startNodeFilterArrayOfHashes, apiVer, secondaryFilterCutPoint_f, + secondaryFilterHash_f); + } + + List<ResultSet> resultList = new ArrayList<>(); + TimeLimiter limiter = new SimpleTimeLimiter(); + try { + resultList = limiter.callWithTimeout(new AaiCallable<List<ResultSet>>() { + public List<ResultSet> process() throws AAIException { + return queryByNamedQuery_Timed(transId_f, fromAppId_f, namedQueryUuid_f, + startNodeFilterArrayOfHashes_f, apiVer_f, secondaryFilterCutPoint_f, + secondaryFilterHash_f); + } + }, timeLimitSec, TimeUnit.SECONDS, true); + + } catch (AAIException ae) { + // Re-throw AAIException so we get can tell what happened internally + throw ae; + } catch (UncheckedTimeoutException ute) { + throw new AAIException("AAI_6140", + "Query Processing Limit exceeded. (limit = " + timeLimitSec + " seconds)"); + } catch (Exception e) { + throw new AAIException("AAI_6128", + "Unexpected exception in queryByNamedQuery(): " + e.getMessage()); + } + + return resultList; + } + + /** + * Query by named query timed. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param namedQueryUuid the named query uuid + * @param startNodeFilterArrayOfHashes the start node filter array of hashes --used to locate + * the first nodes of instance data + * @param apiVer the api ver + * @param secondaryFilterCutPoint the nodeType where we will parse for the secondary Filter + * @param secondaryFilterHash the secondary filter hash + * @return resultSet + * @throws AAIException the AAI exception + */ + public List<ResultSet> queryByNamedQuery_Timed(String transId, String fromAppId, + String namedQueryUuid, List<Map<String, Object>> startNodeFilterArrayOfHashes, + String apiVer, String secondaryFilterCutPoint, Map<String, Object> secondaryFilterHash) + throws AAIException { + + // Locate the Query to be used + Vertex queryVtx = getNodeUsingUniqueId(transId, fromAppId, "named-query", + "named-query-uuid", namedQueryUuid); + + // Get the first/top named-query-element used by this query + Iterator<Vertex> vertI = + this.traverseIncidentEdges(EdgeType.TREE, queryVtx, "named-query-element"); + Vertex firstNqElementVert = null; + int count = 0; + String topNType = ""; + while (vertI != null && vertI.hasNext()) { + firstNqElementVert = vertI.next(); + count++; + topNType = getNqElementWidgetType(transId, fromAppId, firstNqElementVert, ""); + } + + if (count < 1) { + // A named query must start with a single top element + throw new AAIException("AAI_6133", + "No top-node defined for named-query-uuid = [" + namedQueryUuid + "]"); + } else if (count > 1) { + // A named query should start with a single top element + throw new AAIException("AAI_6133", + "More than one top-node defined for named-query-uuid = [" + namedQueryUuid + "]"); + } + if ((topNType == null) || topNType.equals("")) { + String msg = "Could not determine the top-node nodeType for Named Query: [" + + namedQueryUuid + "]"; + throw new AAIException("AAI_6133", msg); + } + + // Read the topology into a hash for processing + Multimap<String, String> validNextStepMap = + genTopoMap4NamedQ(transId, fromAppId, queryVtx, namedQueryUuid); + + List<Vertex> startVertList = new ArrayList<>(); + if (startNodeFilterArrayOfHashes.size() == 1) { + // If there is only one set of startFilter info given, then allow it to possibly not be + // defining just one start node. + Map<String, Object> tmpHash = startNodeFilterArrayOfHashes.get(0); + Set<String> propKeySet = tmpHash.keySet(); + Iterator<String> propIter = propKeySet.iterator(); + Introspector obj = loader.introspectorFromName(topNType); + Set<String> keys = obj.getKeys(); + boolean foundIndexedField = false; + int propertiesSet = 0; + while (propIter.hasNext()) { + String oldVtxKey = propIter.next(); + String newKey = oldVtxKey; + String[] parts = oldVtxKey.split("\\."); + if (parts.length == 2) { + newKey = parts[1]; + } + Object obVal = tmpHash.get(oldVtxKey); + if (obj.hasProperty(newKey)) { + if (keys.contains(newKey)) { + foundIndexedField = true; + } + obj.setValue(newKey, obVal); + propertiesSet++; + } + } + // we found all the properties in the startNodeType + if (propertiesSet == propKeySet.size()) { + if (foundIndexedField) { + QueryBuilder builder = this.engine.getQueryBuilder().exactMatchQuery(obj); + startVertList = builder.toList(); + } else { + // force a filter from aai-node-type + QueryBuilder builder = this.engine.getQueryBuilder().createContainerQuery(obj) + .exactMatchQuery(obj); + startVertList = builder.toList(); + } + } else { + Optional<Vertex> tmpVtx = dbMethHelper.searchVertexByIdentityMap(topNType, + startNodeFilterArrayOfHashes.get(0)); + // Only found one, so just use it. + if (tmpVtx.isPresent()) { + startVertList.add(tmpVtx.get()); + } + } + } else { + // Since they give an array of startNodeFilterHash info, we expect each one + // to just point to one node. + for (int i = 0; i < startNodeFilterArrayOfHashes.size(); i++) { + // Locate the starting node for each set of data + Optional<Vertex> tmpVtx = dbMethHelper.searchVertexByIdentityMap(topNType, + startNodeFilterArrayOfHashes.get(i)); + if (tmpVtx.isPresent()) { + startVertList.add(tmpVtx.get()); + } + } + } + + if (startVertList.isEmpty()) { + throw new AAIException("AAI_6114", + "No Node of type " + topNType + " found for properties"); + } + // Make sure they're not bringing back too much data + String maxString = AAIConfig.get("aai.model.query.resultset.maxcount"); + if (maxString != null && !maxString.equals("")) { + int maxSets = Integer.parseInt(maxString); + if (startVertList.size() > maxSets) { + String msg = " Query returns " + startVertList.size() + + " resultSets. Max allowed is: " + maxSets; + throw new AAIException("AAI_6141", msg); + } + } + + // Loop through each start node and get its data + List<ResultSet> resSetList = new ArrayList<>(); + for (int i = 0; i < startVertList.size(); i++) { + Vertex startVtx = startVertList.get(i); + // Collect the data + String elementLocationTrail = topNType; + ArrayList<String> vidsTraversed = new ArrayList<>(); + Map<String, String> emptyDelKeyHash = new HashMap<>(); // Does not apply to Named + // Queries + + // Get the mapping of namedQuery elements to our widget topology for this namedQuery + String incomingTrail = ""; + Map<String, String> currentHash = new HashMap<>(); + + Map<String, String> namedQueryElementHash = collectNQElementHash(transId, fromAppId, + firstNqElementVert, incomingTrail, currentHash, vidsTraversed, 0); + + vidsTraversed = new ArrayList<>(); + ResultSet tmpResSet = collectInstanceData(transId, fromAppId, startVtx, + elementLocationTrail, validNextStepMap, vidsTraversed, 0, emptyDelKeyHash, + namedQueryElementHash, apiVer); + resSetList.add(tmpResSet); + } + + // If a secondary filter was defined, we will prune the collected instance data result + // set(s) based on it. + List<ResultSet> prunedResSetList = new ArrayList<>(); + if (resSetList != null && !resSetList.isEmpty()) { + for (int i = 0; i < resSetList.size(); i++) { + if (secondaryFilterCutPoint == null || secondaryFilterCutPoint.equals("") + || secondaryFilterHash == null) { + // They didn't want to do any pruning, so just use the results we already had + prunedResSetList.add(resSetList.get(i)); + } else { + ResultSet tmpResSet = pruneResultSet(resSetList.get(i), secondaryFilterCutPoint, + secondaryFilterHash); + if (tmpResSet != null) { + prunedResSetList.add(tmpResSet); + } + } + } + } + + // Since a NamedQuery can mark some nodes as "do-not-display", we need to collapse our + // resultSet so + // does not display those nodes. + List<ResultSet> collapsedResSetList = new ArrayList<>(); + if (prunedResSetList != null && !prunedResSetList.isEmpty()) { + for (int i = 0; i < prunedResSetList.size(); i++) { + // Note - a single resultSet could be collapsed into many smaller ones if they + // marked all the "top" node-elements as do-not-output. Ie. the query may + // have had a top-node of "generic-vnf" which joins down to different l-interfaces. + // If they only want to see the l-interfaces, then a single result set + // would be "collapsed" into many separate resultSets - each of which is + // just a single l-interface. + List<ResultSet> tmpResSetList = collapseForDoNotOutput(prunedResSetList.get(i)); + if (tmpResSetList != null && !tmpResSetList.isEmpty()) { + for (int x = 0; x < tmpResSetList.size(); x++) { + // showResultSet( tmpResSetList.get(x), 0 ); //DEBUG-- this was just for + // testing + collapsedResSetList.add(tmpResSetList.get(x)); + } + } + } + } + + return collapsedResSetList; + + }// End of queryByNamedQuery() + + /** + * Prune a result set as per a secondary filter. + * + * @param resSetVal the res set val + * @param cutPointType the nodeType where the trim will happen + * @param secFilterHash hash of properties and values to use as the secondary filter + * @return pruned result set + * @throws AAIException the AAI exception + */ + public ResultSet pruneResultSet(ResultSet resSetVal, String cutPointType, + Map<String, Object> secFilterHash) throws AAIException { + + // Given a ResultSet and some secondary filter info, do pruning as needed + ResultSet pResSet = new ResultSet(); + + // For this ResultSet, we will see if we are on a node of the type that is our cutPoint; + // then only keep it if we peek "below" and see a match for our filter. + + String nt = resSetVal.getVert().<String>property(AAIProperties.NODE_TYPE).orElse(null); + if (nt != null && nt.equals(cutPointType)) { + // We are on the type of node that may need to be "pruned" along with it's sub-results + if (!satisfiesFilters(resSetVal, secFilterHash)) { + // Return an empty result set since we are pruning at this level. + return pResSet; + } + } + + // If we made it to here, we will not be pruning at this level, so we will + // be returning a copy of this resultSet that has it's subResults pruned (as needed). + pResSet.setVert(resSetVal.getVert()); + pResSet.setDoNotOutputFlag(resSetVal.getDoNotOutputFlag()); + pResSet.setExtraPropertyHash(resSetVal.getExtraPropertyHash()); + pResSet.setLocationInModelSubGraph(resSetVal.getLocationInModelSubGraph()); + pResSet.setNewDataDelFlag(resSetVal.getNewDataDelFlag()); + pResSet.setPropertyLimitDesc(resSetVal.getPropertyLimitDesc()); + pResSet.setPropertyOverRideHash(resSetVal.getPropertyOverRideHash()); + + if (!resSetVal.getSubResultSet().isEmpty()) { + ListIterator<ResultSet> listItr = resSetVal.getSubResultSet().listIterator(); + List<ResultSet> newSubSetList = new ArrayList<>(); + while (listItr.hasNext()) { + ResultSet tmpSubResSet = + pruneResultSet(listItr.next(), cutPointType, secFilterHash); + if (tmpSubResSet.getVert() != null) { + // This one wasn't pruned - so keep it. + newSubSetList.add(tmpSubResSet); + } + } + pResSet.setSubResultSet(newSubSetList); + } + + return pResSet; + + }// End pruneResultSet() + + /** + * Satisfies hash of filters. + * + * @param resSet the res set + * @param filterHash the filter hash + * @return true, if successful + * @throws AAIException the AAI exception + */ + public boolean satisfiesFilters(ResultSet resSet, Map<String, Object> filterHash) + throws AAIException { + + if (filterHash.isEmpty()) { + // Nothing to look for, so no, we didn't find it. + return false; + } + + Iterator<?> it = filterHash.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry<?, ?> filtEntry = (Map.Entry<?, ?>) it.next(); + String propNodeTypeDotName = (filtEntry.getKey()).toString(); + String fpv = (filtEntry.getValue()).toString(); + + int periodLoc = propNodeTypeDotName.indexOf('.'); + if (periodLoc <= 0) { + String emsg = "Bad filter param key passed in: [" + propNodeTypeDotName + + "]. Expected format = [nodeName.paramName]\n"; + throw new AAIException("AAI_6120", emsg); + } else { + String fnt = propNodeTypeDotName.substring(0, periodLoc); + String fpn = propNodeTypeDotName.substring(periodLoc + 1); + if (filterMetByThisSet(resSet, fnt, fpn, fpv)) { + // System.out.println(" DEBUG -- satisfied/matched filter: [" + fnt + "|" + fpn + // + "|" + fpv + "]."); + } else { + // System.out.println(" DEBUG -- NOT satisfied/matched filter: [" + fnt + "|" + + // fpn + "|" + fpv + "]."); + return false; + } + } + } + + // Made it through all the filters -- it found what we were looking for. + return true; + + }// end of satisfiesFilters() + + /** + * Filter met by this set. + * + * @param resSet the res set + * @param filtNodeType the filt node type + * @param filtPropName the filt prop name + * @param filtPropVal the filt prop val + * @return true, if successful + */ + public boolean filterMetByThisSet(ResultSet resSet, String filtNodeType, String filtPropName, + String filtPropVal) { // Note - we are just looking for a positive match for one filter for this resultSet - // NOTE: we're expecting the filter to have a format like this: "nodeType.parameterName:parameterValue" - - Vertex vert = resSet.getVert(); - if( vert == null ){ - return false; - } - else { - String nt = resSet.getVert().<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( nt.equals( filtNodeType ) ){ - if( filtPropName.equals("vertex-id") ){ - // vertex-id can't be gotten the same way as other properties - String thisVtxId = vert.id().toString(); - if( thisVtxId.equals(filtPropVal) ){ - return true; - } - } - else { - Object thisValObj = vert.property(filtPropName).orElse(null); - if( thisValObj != null ){ - String thisVal = thisValObj.toString(); - if( thisVal.equals(filtPropVal) ){ - return true; - } - } - } - } - } - - // Didn't find a match at the this level, so check the sets below it meet the criteria - if( resSet.getSubResultSet() != null ){ - ListIterator<ResultSet> listItr = resSet.getSubResultSet().listIterator(); - while( listItr.hasNext() ){ - if( filterMetByThisSet(listItr.next(), filtNodeType, filtPropName, filtPropVal) ){ - return true; - } - } - } - - return false; - - }// end of filterMetByThisSet() - - - - /** - * Collapse for do not output. - * - * @param resSetVal the res set val - * @return the array list - * @throws AAIException the AAI exception - */ - public List<ResultSet> collapseForDoNotOutput(ResultSet resSetVal ) - throws AAIException { - - // Given a ResultSet -- if it is tagged to NOT be output, then replace it with - // it's sub-ResultSets if it has any. - List<ResultSet> colResultSet = new ArrayList<>(); - - if( resSetVal.getDoNotOutputFlag().equals("true") ){ - // This ResultSet isn't to be displayed, so replace it with it's sub-ResultSets - List<ResultSet> subResList = resSetVal.getSubResultSet(); - for( int k = 0; k < subResList.size(); k++ ){ - List<ResultSet> newSubResList = collapseForDoNotOutput(subResList.get(k)); - colResultSet.addAll(newSubResList); - } - } - else { - // This set will be displayed - colResultSet.add(resSetVal); - } - - // For each result set now at this level, call this same routine to collapse their sub-resultSets - for( int i = 0; i < colResultSet.size(); i++ ){ - List<ResultSet> newSubSet = new ArrayList<>(); - List<ResultSet> subResList = colResultSet.get(i).getSubResultSet(); - for( int n = 0; n < subResList.size(); n++ ){ - List<ResultSet> newSubResList = collapseForDoNotOutput(subResList.get(n)); - newSubSet.addAll(newSubResList); - } - // Replace the old subResultSet with the collapsed set - colResultSet.get(i).setSubResultSet(newSubSet); - } - - return colResultSet; - - }// End collapseForDoNotOutput() - - - - /** - * Collect instance data. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param thisLevelElemVtx the element vtx at this level - * @param thisVertsTrail the this verts trail - * @param validNextStepMap the valid next step map -- hash of valid next steps (node types) for this model - * @param vidsTraversed the vids traversed -- ArrayList of vertexId's that we traversed to get to this point - * @param levelCounter the level counter - * @param delKeyHash -- hashMap of which spots on our topology should be deleted during a modelDelete - * @param namedQueryElementHash - hashMap which maps each spot in our widget topology to the NamedQueryElemment that it maps to - * @param apiVer the api ver - * @return resultSet - * @throws AAIException the AAI exception - */ - public ResultSet collectInstanceData(String transId, String fromAppId, - Vertex thisLevelElemVtx, - String thisVertsTrail, - Multimap<String,String> validNextStepMap, - List<String> vidsTraversed, - int levelCounter, - Map<String,String> delKeyHash, // only applies when collecting data using the default model for delete - Map<String,String> namedQueryElementHash, // only applies to named-query data collecting - String apiVer - ) throws AAIException { - - levelCounter++; - - String thisElemVid = thisLevelElemVtx.id().toString(); - - if( levelCounter > MAX_LEVELS ) { - throw new AAIException("AAI_6125", "collectInstanceData() has looped across more levels than allowed: " + MAX_LEVELS + ". "); - } - - ResultSet rs = new ResultSet(); - if( namedQueryElementHash.containsKey(thisVertsTrail) ){ - // We're collecting data for a named-query, so need to see if we need to do anything special - String nqElUuid = namedQueryElementHash.get(thisVertsTrail); - Vertex nqElementVtx = getNodeUsingUniqueId(transId, fromAppId, "named-query-element", - "named-query-element-uuid", nqElUuid); - - String tmpDoNotShow = nqElementVtx.<String>property("do-not-output").orElse(null); - if( tmpDoNotShow != null && tmpDoNotShow.equals("true") ){ - rs.setDoNotOutputFlag("true"); - } - - if( namedQueryConstraintSaysStop(transId, fromAppId, nqElementVtx, thisLevelElemVtx, apiVer) ){ - // There was a property constraint which says they do not want to collect this vertex or whatever - // might be below it. Just return the empty rs here. - return rs; - } - - String propLimDesc = nqElementVtx.<String>property("property-limit-desc").orElse(null); - if( (propLimDesc != null) && !propLimDesc.equals("") ){ - if (propLimDesc.equalsIgnoreCase("show-all")) { - rs.setPropertyLimitDesc(PropertyLimitDesc.SHOW_ALL); - } else if (propLimDesc.equalsIgnoreCase("show-none")) { - rs.setPropertyLimitDesc(PropertyLimitDesc.SHOW_NONE); - }else if (propLimDesc.equalsIgnoreCase("name-and-keys-only")) { - rs.setPropertyLimitDesc(PropertyLimitDesc.SHOW_NAME_AND_KEYS_ONLY); - } - } - - // Look to see if we need to use an Override of the normal properties - Map<String,Object> tmpPropertyOverRideHash = getNamedQueryPropOverRide(transId, fromAppId, nqElementVtx, thisLevelElemVtx, apiVer); - //System.out.println(" DEBUG --- USING this propertyOverride data set on ResSet [" + tmpPropertyOverRideHash.toString() + "]"); - rs.setPropertyOverRideHash(tmpPropertyOverRideHash); - - // See if we need to look up any "unconnected" data that needs to be associated with this result set - Map<String,Object> tmpExtraPropHash = getNamedQueryExtraDataLookup(transId, fromAppId, nqElementVtx, thisLevelElemVtx, apiVer); - //System.out.println(" DEBUG --- ADDING this EXTRA Lookup data to the ResSet [" + tmpExtraPropHash.toString() + "]"); - rs.setExtraPropertyHash(tmpExtraPropHash); - } - - rs.setVert(thisLevelElemVtx); - rs.setLocationInModelSubGraph(thisVertsTrail); - if( delKeyHash.containsKey(thisVertsTrail) && delKeyHash.get(thisVertsTrail).equals("T") ){ - rs.setNewDataDelFlag("T"); - } - else { - rs.setNewDataDelFlag("F"); - } - - // Use Gremlin-pipeline to just look for edges that go to a valid "next-steps" - Collection <String> validNextStepColl = validNextStepMap.get(thisVertsTrail); - - // Because of how we process linkage-points, we may have duplicate node-types in our next-stepMap (for one step) - // So, to keep from looking (and bringing back) the same data twice, we need to make sure our next-steps are unique - Set<String> validNextStepHashSet = new HashSet<>(); - Iterator <String> ntcItr = validNextStepColl.iterator(); - while( ntcItr.hasNext() ){ - String targetStepStr = ntcItr.next(); - validNextStepHashSet.add(targetStepStr); - } - - List<String> tmpVidsTraversedList = new ArrayList<>(); - tmpVidsTraversedList.addAll(vidsTraversed); - tmpVidsTraversedList.add(thisElemVid); - - Iterator <String> ntItr = validNextStepHashSet.iterator(); - while( ntItr.hasNext() ){ - String targetStep = ntItr.next(); - // NOTE: NextSteps can either be just a nodeType, or can be a nodeType plus - // model-invariant-id-local and model-version-id-local (the two persona properties) - // if those need to be checked also. - // When the persona stuff is part of the step, it is a comma separated string. - // Ie. "nodeType,model-inv-id-local,model-version-id-local" (the two "persona" props) - // - String targetNodeType = ""; - String pmid = ""; - String pmv = ""; - Boolean stepIsJustNT = true; - if( targetStep.contains(",") ){ - stepIsJustNT = false; - String[] pieces = targetStep.split(","); - if( pieces.length != 3 ){ - throw new AAIException("AAI_6128", "Unexpected format for nextStep in model processing = [" - + targetStep + "]. "); - } - else { - targetNodeType = pieces[0]; - pmid = pieces[1]; - pmv = pieces[2]; - } - } - else { - // It's just the nodeType with no other info - targetNodeType = targetStep; - } - - GraphTraversal<Vertex, Vertex> modPipe = null; - if( stepIsJustNT ){ - modPipe = this.engine.asAdmin().getReadOnlyTraversalSource().V(thisLevelElemVtx).both().has(AAIProperties.NODE_TYPE, targetNodeType); - } - else { - modPipe = this.engine.asAdmin().getReadOnlyTraversalSource().V(thisLevelElemVtx).both().has(AAIProperties.NODE_TYPE, targetNodeType).has(addDBAliasedSuffix("model-invariant-id"),pmid).has(addDBAliasedSuffix("model-version-id"),pmv); - } - - if( modPipe == null || !modPipe.hasNext() ){ - //System.out.println("DEBUG - didn't find any [" + targetStep + "] connected to this guy (which is ok)"); - } - else { - while( modPipe.hasNext() ){ - Vertex tmpVert = modPipe.next(); - String tmpVid = tmpVert.id().toString(); - String tmpTrail = thisVertsTrail + "|" + targetStep; - if( !vidsTraversed.contains(tmpVid) ){ - // This is one we would like to use - so we'll include the result set we get for it - ResultSet tmpResSet = collectInstanceData( transId, fromAppId, - tmpVert, tmpTrail, - validNextStepMap, tmpVidsTraversedList, - levelCounter, delKeyHash, namedQueryElementHash, apiVer ); - - rs.getSubResultSet().add(tmpResSet); - } - } - } - } - - return rs; - - } // End of collectInstanceData() - - - /** - * Gen topo map 4 model. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param modelVerVertex the model-ver vertex - * @param modelVerId the model-version-id - * @return MultiMap of valid next steps for each potential model-element - * @throws AAIException the AAI exception - */ - public Multimap<String, String> genTopoMap4ModelVer(String transId, String fromAppId, - Vertex modelVerVertex, String modelVerId) - throws AAIException { - - if( modelVerVertex == null ){ - throw new AAIException("AAI_6114", "null modelVerVertex passed to genTopoMap4ModelVer()"); - } - - Multimap<String, String> initialEmptyMap = ArrayListMultimap.create(); - List<String> vidsTraversed = new ArrayList<>(); - String modelType = getModelTypeFromModelVer( modelVerVertex, "" ); - if( modelType.equals("widget") ){ - // A widget model by itself does not have a topoplogy. That is - it has no "model-elements" which - // define how it is connected to other things. All it has is a name which ties it to - // an aai-node-type - Iterator<Vertex> vertI= this.traverseIncidentEdges(EdgeType.TREE, modelVerVertex, "model-element"); - if( vertI != null && vertI.hasNext() ){ - throw new AAIException("AAI_6132", "Bad Model Definition: Widget Model has a startsWith edge to a model-element. " - + " model-version-id = " + modelVerId); - } - else { - return initialEmptyMap; - } - } - - String firstModelVerId = modelVerVertex.<String>property("model-version-id").orElse(null); - String firstModelVersion = modelVerVertex.<String>property("model-version").orElse(null); - if( firstModelVerId == null || firstModelVerId.equals("") || firstModelVersion == null || firstModelVersion.equals("") ){ - throw new AAIException("AAI_6132", "Bad Model Definition: Bad model-version-id or model-version. model-version-id = " - + modelVerId); - } - - Vertex firstElementVertex = getTopElementForSvcOrResModelVer( modelVerVertex, "" ); - Vertex firstEleModVerVtx = getModelVerThatElementRepresents( firstElementVertex, "" ); - String firstElemModelType = getModelTypeFromModelVer( firstEleModVerVtx, "" ); - if( ! firstElemModelType.equals("widget") ){ - throw new AAIException("AAI_6132", "Bad Model Definition: First element must correspond to a widget type model. Model UUID = " - + modelVerId); - } - - Vertex firstModVtx = getModelGivenModelVer( modelVerVertex, "" ); - String firstModelInvId = firstModVtx.<String>property("model-invariant-id").orElse(null); - if( firstModelInvId == null || firstModelInvId.equals("") ){ - throw new AAIException("AAI_6132", "Bad Model Definition: Could not find model.model-invariant-id given model-ver.model-version-id = " - + modelVerId); - } - - return collectTopology4ModelVer( transId, fromAppId, - firstElementVertex, "", initialEmptyMap, vidsTraversed, 0, null, firstModelInvId, firstModelVersion ); - } // End of genTopoMap4ModelVer() - - - public List<String> makeSureItsAnArrayList( String listStringVal ){ - // We're sometimes getting a String back on db properties that should be ArrayList<String> - // Seems to be how they're defined in OXM - whether they use a "xml-wrapper" or not - // Need to translate them into ArrayLists sometimes... - - List<String> retArrList = new ArrayList<>(); - String listString = listStringVal; - listString = listString.replace(" ", ""); - listString = listString.replace("\"", ""); - listString = listString.replace("[", ""); - listString = listString.replace("]", ""); - String [] pieces = listString.split(","); - if(pieces.length > 0){ - retArrList.addAll(Arrays.asList(pieces)); - } - return retArrList; - } - - - /** - * Gets the mod constraint hash. - * - * @param modelElementVtx the model element vtx - * @param currentHash -- the current ModelConstraint's that this routine will add to if it finds any. - * @return HashMap of model-constraints that will be looked at for this model-element and what's "below" it. - * @throws AAIException the AAI exception - */ - public Map<String, Vertex> getModConstraintHash(Vertex modelElementVtx, Map<String, Vertex> currentHash ) - throws AAIException { - - // For a given model-element vertex, look to see if there are any "model-constraint" elements that is has - // an OUT "uses" edge to. If it does, then get any "constrained-element-set" nodes that are pointed to - // by the "model-constraint". That will be the replacement "constrained-element-set". The UUID of the - // "constrained-element-set" that it is supposed to replace is found in the property: - // model-constraint.constrained-element-set-uuid-to-replace - // - // For now, that is the only type of model-constraint allowed, so that is all we will look for. - // Pass back any of these "constrained-element-set" nodes along with any that were passed in by - // the "currentHash" parameter. - - if( modelElementVtx == null ){ - String msg = " null modelElementVtx passed to getModConstraintHash() "; - throw new AAIException("AAI_6114", msg); - } - - String modelType = modelElementVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( modelType == null || (!modelType.equals("model-element")) ){ - String msg = " getModConstraintHash() called with wrong type model: [" + modelType + "]. "; - throw new AAIException("AAI_6114", msg); - } - - Map<String, Vertex> thisHash = new HashMap<>(); - if( currentHash != null ){ - thisHash.putAll(currentHash); - } - - int count = 0; - List<Vertex> modelConstraintArray = new ArrayList<>(); - Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, modelElementVtx, "model-constraint"); - while( vertI != null && vertI.hasNext() ){ - Vertex tmpVert = vertI.next(); - String connectToType = tmpVert.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( (connectToType != null) && connectToType.equals("model-constraint") ){ - // We need to find the constrained element set pointed to by this and add it to the Hash to return - modelConstraintArray.add(tmpVert); - count++; - } - } - - if( count > 0 ) { - for( int i = 0; i < count; i++ ){ - Vertex vtxOfModelConstraint = modelConstraintArray.get(i); - String uuidOfTheOneToBeReplaced = vtxOfModelConstraint.<String>property("constrained-element-set-uuid-2-replace").orElse(null); - // We have the UUID of the constrained-element-set that will be superseded, now find the - // constrained-element-set to use in its place - Iterator<Vertex> mvertI = this.traverseIncidentEdges(EdgeType.TREE, vtxOfModelConstraint, "constrained-element-set"); - while( mvertI != null && mvertI.hasNext() ){ - // There better only be one... - Vertex tmpVert = mvertI.next(); - String connectToType = tmpVert.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( (connectToType != null) && connectToType.equals("constrained-element-set") ){ - // This is the "constrained-element-set" that we want to use as the Replacement - thisHash.put(uuidOfTheOneToBeReplaced, tmpVert ); - } - } - } - return thisHash; - } - else { - // Didn't find anything to add, so just return what they passed in. - return currentHash; - } - - } // End of getModConstraintHash() - - - /** - * Gets the top element vertex for service or resource model. - * - * @param modelVerVtx the model-ver vertex - * @return first element pointed to by this model-ver - * @throws AAIException the AAI exception - */ - public Vertex getTopElementForSvcOrResModelVer(Vertex modelVerVtx, String trail ) - throws AAIException { - - // For a "resource" or "service" type model, return the "top" element in that model - if( modelVerVtx == null ){ - String msg = " null modelVertex passed to getTopoElementForSvcOrResModelVer() at [" + trail + "]. "; - throw new AAIException("AAI_6114", msg); - } - - String modelVerId = modelVerVtx.<String>property("model-version-id").orElse(null); - if( modelVerId == null ){ - String nt = modelVerVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( nt != null && !nt.equals("model-ver") ){ - String msg = "Illegal model defined: model element pointing to nodeType: [" - + nt + "], should be pointing to: [model-ver] at [" + trail + "]. "; - throw new AAIException("AAI_6132", msg); - } - } - - Vertex firstElementVertex = null; - - Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, modelVerVtx, "model-element"); - int elCount = 0; - while( vertI != null && vertI.hasNext() ){ - elCount++; - firstElementVertex = vertI.next(); - } - - if( elCount > 1 ){ - String msg = "Illegal model defined: More than one first element defined for model-ver-id = " + - modelVerId + " at [" + trail + "]. "; - throw new AAIException("AAI_6132", msg); - } - - if( firstElementVertex == null ){ - String msg = "Could not find first model element for model-ver-id = " - + modelVerId + " at [" + trail + "]. "; - throw new AAIException("AAI_6132", msg); - } - - return firstElementVertex; - - } // End of getTopElementForSvcOrResModelVer() - - - - /** - * Gets the named query prop over ride. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param namedQueryElementVertex the named query element vertex - * @param instanceVertex the instance vertex - * @param apiVer the api ver - * @return HashMap of alternate properties to return for this element - * @throws AAIException the AAI exception - */ - public Map<String,Object> getNamedQueryPropOverRide(String transId, String fromAppId, - Vertex namedQueryElementVertex, Vertex instanceVertex, String apiVer ) - throws AAIException { - - // If this model-element says that they want an alternative set of properties returned, then pull that - // data out of the instance vertex. - - Map<String,Object> altPropHash = new HashMap<>(); - - if( namedQueryElementVertex == null ){ - String msg = " null namedQueryElementVertex passed to getNamedQueryPropOverRide() "; - throw new AAIException("AAI_6114", msg); - } - - List<String> propCollectList = new ArrayList<>(); - Iterator <VertexProperty<Object>> vpI = namedQueryElementVertex.properties("property-collect-list"); - while( vpI.hasNext() ){ - propCollectList.add((String)vpI.next().value()); - } - - for( int i = 0; i < propCollectList.size(); i++ ){ - String thisPropName = propCollectList.get(i); - Object instanceVal = instanceVertex.<Object>property(thisPropName).orElse(null); - altPropHash.put(thisPropName, instanceVal); - } - - return altPropHash; - - } // End of getNamedQueryPropOverRide() - - - /** - * Named query constraint says stop. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param namedQueryElementVertex the named query element vertex - * @param instanceVertex the instance vertex - * @param apiVer the api ver - * @return true - if a constraint was defined that has not been met by the passed instanceVertex - * @throws AAIException the AAI exception - */ - public Boolean namedQueryConstraintSaysStop(String transId, String fromAppId, - Vertex namedQueryElementVertex, Vertex instanceVertex, String apiVer ) - throws AAIException { - - // For each (if any) property-constraint defined for this named-query-element, we will evaluate if - // the constraint is met or not-met. if there are constraints and any are not-met, then - // we return "true". - - if( namedQueryElementVertex == null ){ - String msg = " null namedQueryElementVertex passed to namedQueryConstraintSaysStop() "; - throw new AAIException("AAI_6114", msg); - } - if( instanceVertex == null ){ - String msg = " null instanceVertex passed to namedQueryConstraintSaysStop() "; - throw new AAIException("AAI_6114", msg); - } - - Iterator<Vertex> constrPipe = this.traverseIncidentEdges(EdgeType.TREE, namedQueryElementVertex, "property-constraint"); - if( constrPipe == null || !constrPipe.hasNext() ){ - // There's no "property-constraint" defined for this named-query-element. No problem. - return false; - } - - while( constrPipe.hasNext() ){ - Vertex constrVtx = constrPipe.next(); - // We found a property constraint that we will need to check - String conType = constrVtx.<String>property("constraint-type").orElse(null); - if( (conType == null) || conType.equals("")){ - String msg = " Bad property-constraint (constraint-type) found in Named Query definition. "; - throw new AAIException("AAI_6133", msg); - } - String propName = constrVtx.<String>property("property-name").orElse(null); - if( (propName == null) || propName.equals("")){ - String msg = " Bad property-constraint (property-name) found in Named Query definition. "; - throw new AAIException("AAI_6133", msg); - } - String propVal = constrVtx.<String>property("property-value").orElse(null); - if( (propVal == null) || propVal.equals("")){ - String msg = " Bad property-constraint (propVal) found in Named Query definition. "; - throw new AAIException("AAI_6133", msg); - } - - // See if that constraint is met or not - String val = instanceVertex.<String>property(propName).orElse(null); - if( val == null ){ - val = ""; - } - - if( conType.equals("EQUALS") ){ - if( !val.equals(propVal) ){ - // This constraint was not met - return true; - } - } - else if( conType.equals("NOT-EQUALS") ){ - if( val.equals(propVal) ){ - // This constraint was not met - return true; - } - } - else { - String msg = " Bad property-constraint (constraint-type) found in Named Query definition. "; - throw new AAIException("AAI_6133", msg); - } - } - - return false; - - } // End of namedQueryConstraintSaysStop() - - - /** - * Gets the named query extra data lookup. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param namedQueryElementVertex the named query element vertex - * @param instanceVertex the instance vertex - * @param apiVer the api ver - * @return HashMap of alternate properties to return for this element - * @throws AAIException the AAI exception - */ - public Map<String,Object> getNamedQueryExtraDataLookup(String transId, String fromAppId, - Vertex namedQueryElementVertex, Vertex instanceVertex, String apiVer ) - throws AAIException { - - // For each (if any) related-lookup defined for this named-query-element, we will go and - // and try to find it. All the related-lookup data will get put in a hash and returned. - - if( namedQueryElementVertex == null ){ - String msg = " null namedQueryElementVertex passed to getNamedQueryExtraDataLookup() "; - throw new AAIException("AAI_6114", msg); - } - if( instanceVertex == null ){ - String msg = " null instanceVertex passed to getNamedQueryExtraDataLookup() "; - throw new AAIException("AAI_6114", msg); - } - - Map<String,Object> retHash = new HashMap<>(); - - Iterator<Vertex> lookPipe = this.traverseIncidentEdges(EdgeType.TREE, namedQueryElementVertex, "related-lookup"); - if( lookPipe == null || !lookPipe.hasNext() ){ - // There's no "related-lookup" defined for this named-query-element. No problem. - return retHash; - } - - while( lookPipe.hasNext() ){ - Vertex relLookupVtx = lookPipe.next(); - // We found a related-lookup record to try and use - String srcProp = relLookupVtx.<String>property("source-node-property").orElse(null); - String srcNodeType = relLookupVtx.<String>property("source-node-type").orElse(null); - srcProp = getPropNameWithAliasIfNeeded(srcNodeType, srcProp); - - if( (srcProp == null) || srcProp.equals("")){ - String msg = " Bad related-lookup (source-node-property) found in Named Query definition. "; - throw new AAIException("AAI_6133", msg); - } - String targetNodeType = relLookupVtx.<String>property("target-node-type").orElse(null); - if( (targetNodeType == null) || targetNodeType.equals("")){ - String msg = " Bad related-lookup (targetNodeType) found in Named Query definition. "; - throw new AAIException("AAI_6133", msg); - } - String targetProp = relLookupVtx.<String>property("target-node-property").orElse(null); - targetProp = getPropNameWithAliasIfNeeded(targetNodeType, targetProp); - - if( (targetProp == null) || targetProp.equals("")){ - String msg = " Bad related-lookup (target-node-property) found in Named Query definition. "; - throw new AAIException("AAI_6133", msg); - } - - List<String> propCollectList = new ArrayList<>(); - Iterator <VertexProperty<Object>> vpI = relLookupVtx.properties("property-collect-list"); - while( vpI.hasNext() ){ - propCollectList.add((String)vpI.next().value()); - } - - // Use the value from the source to see if we can find ONE target record using the - // value from the source - String valFromInstance = instanceVertex.<String>property(srcProp).orElse(null); - if( valFromInstance == null ){ - // if there is no key to use to go look up something, we should end it here and just - // note what happened - no need to try to look something up by an empty key - logger.debug("WARNING - the instance data node of type [" + srcNodeType - + "] did not have a value for property [" + srcProp - + "], so related-lookup is being abandoned."); - return retHash; - } - - Map<String,Object> propHash = new HashMap<>(); - propHash.put(targetProp, valFromInstance); - - Optional<Vertex> result = dbMethHelper.locateUniqueVertex(targetNodeType, propHash); - if (!result.isPresent()) { - // If it can't find the lookup node, don't fail, just log that it couldn't be found --- + // NOTE: we're expecting the filter to have a format like this: + // "nodeType.parameterName:parameterValue" + + Vertex vert = resSet.getVert(); + if (vert == null) { + return false; + } else { + String nt = resSet.getVert().<String>property(AAIProperties.NODE_TYPE).orElse(null); + if (nt.equals(filtNodeType)) { + if (filtPropName.equals("vertex-id")) { + // vertex-id can't be gotten the same way as other properties + String thisVtxId = vert.id().toString(); + if (thisVtxId.equals(filtPropVal)) { + return true; + } + } else { + Object thisValObj = vert.property(filtPropName).orElse(null); + if (thisValObj != null) { + String thisVal = thisValObj.toString(); + if (thisVal.equals(filtPropVal)) { + return true; + } + } + } + } + } + + // Didn't find a match at the this level, so check the sets below it meet the criteria + if (resSet.getSubResultSet() != null) { + ListIterator<ResultSet> listItr = resSet.getSubResultSet().listIterator(); + while (listItr.hasNext()) { + if (filterMetByThisSet(listItr.next(), filtNodeType, filtPropName, filtPropVal)) { + return true; + } + } + } + + return false; + + }// end of filterMetByThisSet() + + /** + * Collapse for do not output. + * + * @param resSetVal the res set val + * @return the array list + * @throws AAIException the AAI exception + */ + public List<ResultSet> collapseForDoNotOutput(ResultSet resSetVal) throws AAIException { + + // Given a ResultSet -- if it is tagged to NOT be output, then replace it with + // it's sub-ResultSets if it has any. + List<ResultSet> colResultSet = new ArrayList<>(); + + if (resSetVal.getDoNotOutputFlag().equals("true")) { + // This ResultSet isn't to be displayed, so replace it with it's sub-ResultSets + List<ResultSet> subResList = resSetVal.getSubResultSet(); + for (int k = 0; k < subResList.size(); k++) { + List<ResultSet> newSubResList = collapseForDoNotOutput(subResList.get(k)); + colResultSet.addAll(newSubResList); + } + } else { + // This set will be displayed + colResultSet.add(resSetVal); + } + + // For each result set now at this level, call this same routine to collapse their + // sub-resultSets + for (int i = 0; i < colResultSet.size(); i++) { + List<ResultSet> newSubSet = new ArrayList<>(); + List<ResultSet> subResList = colResultSet.get(i).getSubResultSet(); + for (int n = 0; n < subResList.size(); n++) { + List<ResultSet> newSubResList = collapseForDoNotOutput(subResList.get(n)); + newSubSet.addAll(newSubResList); + } + // Replace the old subResultSet with the collapsed set + colResultSet.get(i).setSubResultSet(newSubSet); + } + + return colResultSet; + + }// End collapseForDoNotOutput() + + /** + * Collect instance data. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param thisLevelElemVtx the element vtx at this level + * @param thisVertsTrail the this verts trail + * @param validNextStepMap the valid next step map -- hash of valid next steps (node types) for + * this model + * @param vidsTraversed the vids traversed -- ArrayList of vertexId's that we traversed to get + * to this point + * @param levelCounter the level counter + * @param delKeyHash -- hashMap of which spots on our topology should be deleted during a + * modelDelete + * @param namedQueryElementHash - hashMap which maps each spot in our widget topology to the + * NamedQueryElemment that it maps to + * @param apiVer the api ver + * @return resultSet + * @throws AAIException the AAI exception + */ + public ResultSet collectInstanceData(String transId, String fromAppId, Vertex thisLevelElemVtx, + String thisVertsTrail, Multimap<String, String> validNextStepMap, + List<String> vidsTraversed, int levelCounter, Map<String, String> delKeyHash, // only + // applies + // when + // collecting + // data using + // the default + // model for + // delete + Map<String, String> namedQueryElementHash, // only applies to named-query data collecting + String apiVer) throws AAIException { + + levelCounter++; + + String thisElemVid = thisLevelElemVtx.id().toString(); + + if (levelCounter > MAX_LEVELS) { + throw new AAIException("AAI_6125", + "collectInstanceData() has looped across more levels than allowed: " + MAX_LEVELS + + ". "); + } + + ResultSet rs = new ResultSet(); + if (namedQueryElementHash.containsKey(thisVertsTrail)) { + // We're collecting data for a named-query, so need to see if we need to do anything + // special + String nqElUuid = namedQueryElementHash.get(thisVertsTrail); + Vertex nqElementVtx = getNodeUsingUniqueId(transId, fromAppId, "named-query-element", + "named-query-element-uuid", nqElUuid); + + String tmpDoNotShow = nqElementVtx.<String>property("do-not-output").orElse(null); + if (tmpDoNotShow != null && tmpDoNotShow.equals("true")) { + rs.setDoNotOutputFlag("true"); + } + + if (namedQueryConstraintSaysStop(transId, fromAppId, nqElementVtx, thisLevelElemVtx, + apiVer)) { + // There was a property constraint which says they do not want to collect this + // vertex or whatever + // might be below it. Just return the empty rs here. + return rs; + } + + String propLimDesc = nqElementVtx.<String>property("property-limit-desc").orElse(null); + if ((propLimDesc != null) && !propLimDesc.equals("")) { + if (propLimDesc.equalsIgnoreCase("show-all")) { + rs.setPropertyLimitDesc(PropertyLimitDesc.SHOW_ALL); + } else if (propLimDesc.equalsIgnoreCase("show-none")) { + rs.setPropertyLimitDesc(PropertyLimitDesc.SHOW_NONE); + } else if (propLimDesc.equalsIgnoreCase("name-and-keys-only")) { + rs.setPropertyLimitDesc(PropertyLimitDesc.SHOW_NAME_AND_KEYS_ONLY); + } + } + + // Look to see if we need to use an Override of the normal properties + Map<String, Object> tmpPropertyOverRideHash = getNamedQueryPropOverRide(transId, + fromAppId, nqElementVtx, thisLevelElemVtx, apiVer); + // System.out.println(" DEBUG --- USING this propertyOverride data set on ResSet [" + + // tmpPropertyOverRideHash.toString() + "]"); + rs.setPropertyOverRideHash(tmpPropertyOverRideHash); + + // See if we need to look up any "unconnected" data that needs to be associated with + // this result set + Map<String, Object> tmpExtraPropHash = getNamedQueryExtraDataLookup(transId, fromAppId, + nqElementVtx, thisLevelElemVtx, apiVer); + // System.out.println(" DEBUG --- ADDING this EXTRA Lookup data to the ResSet [" + + // tmpExtraPropHash.toString() + "]"); + rs.setExtraPropertyHash(tmpExtraPropHash); + } + + rs.setVert(thisLevelElemVtx); + rs.setLocationInModelSubGraph(thisVertsTrail); + if (delKeyHash.containsKey(thisVertsTrail) && delKeyHash.get(thisVertsTrail).equals("T")) { + rs.setNewDataDelFlag("T"); + } else { + rs.setNewDataDelFlag("F"); + } + + // Use Gremlin-pipeline to just look for edges that go to a valid "next-steps" + Collection<String> validNextStepColl = validNextStepMap.get(thisVertsTrail); + + // Because of how we process linkage-points, we may have duplicate node-types in our + // next-stepMap (for one step) + // So, to keep from looking (and bringing back) the same data twice, we need to make sure + // our next-steps are unique + Set<String> validNextStepHashSet = new HashSet<>(); + Iterator<String> ntcItr = validNextStepColl.iterator(); + while (ntcItr.hasNext()) { + String targetStepStr = ntcItr.next(); + validNextStepHashSet.add(targetStepStr); + } + + List<String> tmpVidsTraversedList = new ArrayList<>(); + tmpVidsTraversedList.addAll(vidsTraversed); + tmpVidsTraversedList.add(thisElemVid); + + Iterator<String> ntItr = validNextStepHashSet.iterator(); + while (ntItr.hasNext()) { + String targetStep = ntItr.next(); + // NOTE: NextSteps can either be just a nodeType, or can be a nodeType plus + // model-invariant-id-local and model-version-id-local (the two persona properties) + // if those need to be checked also. + // When the persona stuff is part of the step, it is a comma separated string. + // Ie. "nodeType,model-inv-id-local,model-version-id-local" (the two "persona" props) + // + String targetNodeType = ""; + String pmid = ""; + String pmv = ""; + Boolean stepIsJustNT = true; + if (targetStep.contains(",")) { + stepIsJustNT = false; + String[] pieces = targetStep.split(","); + if (pieces.length != 3) { + throw new AAIException("AAI_6128", + "Unexpected format for nextStep in model processing = [" + targetStep + + "]. "); + } else { + targetNodeType = pieces[0]; + pmid = pieces[1]; + pmv = pieces[2]; + } + } else { + // It's just the nodeType with no other info + targetNodeType = targetStep; + } + + GraphTraversal<Vertex, Vertex> modPipe = null; + if (stepIsJustNT) { + modPipe = this.engine.asAdmin().getReadOnlyTraversalSource().V(thisLevelElemVtx) + .both().has(AAIProperties.NODE_TYPE, targetNodeType); + } else { + modPipe = this.engine.asAdmin().getReadOnlyTraversalSource().V(thisLevelElemVtx) + .both().has(AAIProperties.NODE_TYPE, targetNodeType) + .has(addDBAliasedSuffix("model-invariant-id"), pmid) + .has(addDBAliasedSuffix("model-version-id"), pmv); + } + + if (modPipe == null || !modPipe.hasNext()) { + // System.out.println("DEBUG - didn't find any [" + targetStep + "] connected to + // this guy (which is ok)"); + } else { + while (modPipe.hasNext()) { + Vertex tmpVert = modPipe.next(); + String tmpVid = tmpVert.id().toString(); + String tmpTrail = thisVertsTrail + "|" + targetStep; + if (!vidsTraversed.contains(tmpVid)) { + // This is one we would like to use - so we'll include the result set we get + // for it + ResultSet tmpResSet = collectInstanceData(transId, fromAppId, tmpVert, + tmpTrail, validNextStepMap, tmpVidsTraversedList, levelCounter, + delKeyHash, namedQueryElementHash, apiVer); + + rs.getSubResultSet().add(tmpResSet); + } + } + } + } + + return rs; + + } // End of collectInstanceData() + + /** + * Gen topo map 4 model. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param modelVerVertex the model-ver vertex + * @param modelVerId the model-version-id + * @return MultiMap of valid next steps for each potential model-element + * @throws AAIException the AAI exception + */ + public Multimap<String, String> genTopoMap4ModelVer(String transId, String fromAppId, + Vertex modelVerVertex, String modelVerId) throws AAIException { + + if (modelVerVertex == null) { + throw new AAIException("AAI_6114", + "null modelVerVertex passed to genTopoMap4ModelVer()"); + } + + Multimap<String, String> initialEmptyMap = ArrayListMultimap.create(); + List<String> vidsTraversed = new ArrayList<>(); + String modelType = getModelTypeFromModelVer(modelVerVertex, ""); + if (modelType.equals("widget")) { + // A widget model by itself does not have a topoplogy. That is - it has no + // "model-elements" which + // define how it is connected to other things. All it has is a name which ties it to + // an aai-node-type + Iterator<Vertex> vertI = + this.traverseIncidentEdges(EdgeType.TREE, modelVerVertex, "model-element"); + if (vertI != null && vertI.hasNext()) { + throw new AAIException("AAI_6132", + "Bad Model Definition: Widget Model has a startsWith edge to a model-element. " + + " model-version-id = " + modelVerId); + } else { + return initialEmptyMap; + } + } + + String firstModelVerId = modelVerVertex.<String>property("model-version-id").orElse(null); + String firstModelVersion = modelVerVertex.<String>property("model-version").orElse(null); + if (firstModelVerId == null || firstModelVerId.equals("") || firstModelVersion == null + || firstModelVersion.equals("")) { + throw new AAIException("AAI_6132", + "Bad Model Definition: Bad model-version-id or model-version. model-version-id = " + + modelVerId); + } + + Vertex firstElementVertex = getTopElementForSvcOrResModelVer(modelVerVertex, ""); + Vertex firstEleModVerVtx = getModelVerThatElementRepresents(firstElementVertex, ""); + String firstElemModelType = getModelTypeFromModelVer(firstEleModVerVtx, ""); + if (!firstElemModelType.equals("widget")) { + throw new AAIException("AAI_6132", + "Bad Model Definition: First element must correspond to a widget type model. Model UUID = " + + modelVerId); + } + + Vertex firstModVtx = getModelGivenModelVer(modelVerVertex, ""); + String firstModelInvId = firstModVtx.<String>property("model-invariant-id").orElse(null); + if (firstModelInvId == null || firstModelInvId.equals("")) { + throw new AAIException("AAI_6132", + "Bad Model Definition: Could not find model.model-invariant-id given model-ver.model-version-id = " + + modelVerId); + } + + return collectTopology4ModelVer(transId, fromAppId, firstElementVertex, "", initialEmptyMap, + vidsTraversed, 0, null, firstModelInvId, firstModelVersion); + } // End of genTopoMap4ModelVer() + + public List<String> makeSureItsAnArrayList(String listStringVal) { + // We're sometimes getting a String back on db properties that should be ArrayList<String> + // Seems to be how they're defined in OXM - whether they use a "xml-wrapper" or not + // Need to translate them into ArrayLists sometimes... + + List<String> retArrList = new ArrayList<>(); + String listString = listStringVal; + listString = listString.replace(" ", ""); + listString = listString.replace("\"", ""); + listString = listString.replace("[", ""); + listString = listString.replace("]", ""); + String[] pieces = listString.split(","); + if (pieces.length > 0) { + retArrList.addAll(Arrays.asList(pieces)); + } + return retArrList; + } + + /** + * Gets the mod constraint hash. + * + * @param modelElementVtx the model element vtx + * @param currentHash -- the current ModelConstraint's that this routine will add to if it finds + * any. + * @return HashMap of model-constraints that will be looked at for this model-element and what's + * "below" it. + * @throws AAIException the AAI exception + */ + public Map<String, Vertex> getModConstraintHash(Vertex modelElementVtx, + Map<String, Vertex> currentHash) throws AAIException { + + // For a given model-element vertex, look to see if there are any "model-constraint" + // elements that is has + // an OUT "uses" edge to. If it does, then get any "constrained-element-set" nodes that are + // pointed to + // by the "model-constraint". That will be the replacement "constrained-element-set". The + // UUID of the + // "constrained-element-set" that it is supposed to replace is found in the property: + // model-constraint.constrained-element-set-uuid-to-replace + // + // For now, that is the only type of model-constraint allowed, so that is all we will look + // for. + // Pass back any of these "constrained-element-set" nodes along with any that were passed in + // by + // the "currentHash" parameter. + + if (modelElementVtx == null) { + String msg = " null modelElementVtx passed to getModConstraintHash() "; + throw new AAIException("AAI_6114", msg); + } + + String modelType = modelElementVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if (modelType == null || (!modelType.equals("model-element"))) { + String msg = + " getModConstraintHash() called with wrong type model: [" + modelType + "]. "; + throw new AAIException("AAI_6114", msg); + } + + Map<String, Vertex> thisHash = new HashMap<>(); + if (currentHash != null) { + thisHash.putAll(currentHash); + } + + int count = 0; + List<Vertex> modelConstraintArray = new ArrayList<>(); + Iterator<Vertex> vertI = + this.traverseIncidentEdges(EdgeType.TREE, modelElementVtx, "model-constraint"); + while (vertI != null && vertI.hasNext()) { + Vertex tmpVert = vertI.next(); + String connectToType = tmpVert.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if ((connectToType != null) && connectToType.equals("model-constraint")) { + // We need to find the constrained element set pointed to by this and add it to the + // Hash to return + modelConstraintArray.add(tmpVert); + count++; + } + } + + if (count > 0) { + for (int i = 0; i < count; i++) { + Vertex vtxOfModelConstraint = modelConstraintArray.get(i); + String uuidOfTheOneToBeReplaced = vtxOfModelConstraint + .<String>property("constrained-element-set-uuid-2-replace").orElse(null); + // We have the UUID of the constrained-element-set that will be superseded, now find + // the + // constrained-element-set to use in its place + Iterator<Vertex> mvertI = this.traverseIncidentEdges(EdgeType.TREE, + vtxOfModelConstraint, "constrained-element-set"); + while (mvertI != null && mvertI.hasNext()) { + // There better only be one... + Vertex tmpVert = mvertI.next(); + String connectToType = + tmpVert.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if ((connectToType != null) + && connectToType.equals("constrained-element-set")) { + // This is the "constrained-element-set" that we want to use as the + // Replacement + thisHash.put(uuidOfTheOneToBeReplaced, tmpVert); + } + } + } + return thisHash; + } else { + // Didn't find anything to add, so just return what they passed in. + return currentHash; + } + + } // End of getModConstraintHash() + + /** + * Gets the top element vertex for service or resource model. + * + * @param modelVerVtx the model-ver vertex + * @return first element pointed to by this model-ver + * @throws AAIException the AAI exception + */ + public Vertex getTopElementForSvcOrResModelVer(Vertex modelVerVtx, String trail) + throws AAIException { + + // For a "resource" or "service" type model, return the "top" element in that model + if (modelVerVtx == null) { + String msg = " null modelVertex passed to getTopoElementForSvcOrResModelVer() at [" + + trail + "]. "; + throw new AAIException("AAI_6114", msg); + } + + String modelVerId = modelVerVtx.<String>property("model-version-id").orElse(null); + if (modelVerId == null) { + String nt = modelVerVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if (nt != null && !nt.equals("model-ver")) { + String msg = "Illegal model defined: model element pointing to nodeType: [" + nt + + "], should be pointing to: [model-ver] at [" + trail + "]. "; + throw new AAIException("AAI_6132", msg); + } + } + + Vertex firstElementVertex = null; + + Iterator<Vertex> vertI = + this.traverseIncidentEdges(EdgeType.TREE, modelVerVtx, "model-element"); + int elCount = 0; + while (vertI != null && vertI.hasNext()) { + elCount++; + firstElementVertex = vertI.next(); + } + + if (elCount > 1) { + String msg = + "Illegal model defined: More than one first element defined for model-ver-id = " + + modelVerId + " at [" + trail + "]. "; + throw new AAIException("AAI_6132", msg); + } + + if (firstElementVertex == null) { + String msg = "Could not find first model element for model-ver-id = " + modelVerId + + " at [" + trail + "]. "; + throw new AAIException("AAI_6132", msg); + } + + return firstElementVertex; + + } // End of getTopElementForSvcOrResModelVer() + + /** + * Gets the named query prop over ride. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param namedQueryElementVertex the named query element vertex + * @param instanceVertex the instance vertex + * @param apiVer the api ver + * @return HashMap of alternate properties to return for this element + * @throws AAIException the AAI exception + */ + public Map<String, Object> getNamedQueryPropOverRide(String transId, String fromAppId, + Vertex namedQueryElementVertex, Vertex instanceVertex, String apiVer) throws AAIException { + + // If this model-element says that they want an alternative set of properties returned, then + // pull that + // data out of the instance vertex. + + Map<String, Object> altPropHash = new HashMap<>(); + + if (namedQueryElementVertex == null) { + String msg = " null namedQueryElementVertex passed to getNamedQueryPropOverRide() "; + throw new AAIException("AAI_6114", msg); + } + + List<String> propCollectList = new ArrayList<>(); + Iterator<VertexProperty<Object>> vpI = + namedQueryElementVertex.properties("property-collect-list"); + while (vpI.hasNext()) { + propCollectList.add((String) vpI.next().value()); + } + + for (int i = 0; i < propCollectList.size(); i++) { + String thisPropName = propCollectList.get(i); + Object instanceVal = instanceVertex.<Object>property(thisPropName).orElse(null); + altPropHash.put(thisPropName, instanceVal); + } + + return altPropHash; + + } // End of getNamedQueryPropOverRide() + + /** + * Named query constraint says stop. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param namedQueryElementVertex the named query element vertex + * @param instanceVertex the instance vertex + * @param apiVer the api ver + * @return true - if a constraint was defined that has not been met by the passed instanceVertex + * @throws AAIException the AAI exception + */ + public Boolean namedQueryConstraintSaysStop(String transId, String fromAppId, + Vertex namedQueryElementVertex, Vertex instanceVertex, String apiVer) throws AAIException { + + // For each (if any) property-constraint defined for this named-query-element, we will + // evaluate if + // the constraint is met or not-met. if there are constraints and any are not-met, then + // we return "true". + + if (namedQueryElementVertex == null) { + String msg = " null namedQueryElementVertex passed to namedQueryConstraintSaysStop() "; + throw new AAIException("AAI_6114", msg); + } + if (instanceVertex == null) { + String msg = " null instanceVertex passed to namedQueryConstraintSaysStop() "; + throw new AAIException("AAI_6114", msg); + } + + Iterator<Vertex> constrPipe = this.traverseIncidentEdges(EdgeType.TREE, + namedQueryElementVertex, "property-constraint"); + if (constrPipe == null || !constrPipe.hasNext()) { + // There's no "property-constraint" defined for this named-query-element. No problem. + return false; + } + + while (constrPipe.hasNext()) { + Vertex constrVtx = constrPipe.next(); + // We found a property constraint that we will need to check + String conType = constrVtx.<String>property("constraint-type").orElse(null); + if ((conType == null) || conType.equals("")) { + String msg = + " Bad property-constraint (constraint-type) found in Named Query definition. "; + throw new AAIException("AAI_6133", msg); + } + String propName = constrVtx.<String>property("property-name").orElse(null); + if ((propName == null) || propName.equals("")) { + String msg = + " Bad property-constraint (property-name) found in Named Query definition. "; + throw new AAIException("AAI_6133", msg); + } + String propVal = constrVtx.<String>property("property-value").orElse(null); + if ((propVal == null) || propVal.equals("")) { + String msg = " Bad property-constraint (propVal) found in Named Query definition. "; + throw new AAIException("AAI_6133", msg); + } + + // See if that constraint is met or not + String val = instanceVertex.<String>property(propName).orElse(null); + if (val == null) { + val = ""; + } + + if (conType.equals("EQUALS")) { + if (!val.equals(propVal)) { + // This constraint was not met + return true; + } + } else if (conType.equals("NOT-EQUALS")) { + if (val.equals(propVal)) { + // This constraint was not met + return true; + } + } else { + String msg = + " Bad property-constraint (constraint-type) found in Named Query definition. "; + throw new AAIException("AAI_6133", msg); + } + } + + return false; + + } // End of namedQueryConstraintSaysStop() + + /** + * Gets the named query extra data lookup. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param namedQueryElementVertex the named query element vertex + * @param instanceVertex the instance vertex + * @param apiVer the api ver + * @return HashMap of alternate properties to return for this element + * @throws AAIException the AAI exception + */ + public Map<String, Object> getNamedQueryExtraDataLookup(String transId, String fromAppId, + Vertex namedQueryElementVertex, Vertex instanceVertex, String apiVer) throws AAIException { + + // For each (if any) related-lookup defined for this named-query-element, we will go and + // and try to find it. All the related-lookup data will get put in a hash and returned. + + if (namedQueryElementVertex == null) { + String msg = " null namedQueryElementVertex passed to getNamedQueryExtraDataLookup() "; + throw new AAIException("AAI_6114", msg); + } + if (instanceVertex == null) { + String msg = " null instanceVertex passed to getNamedQueryExtraDataLookup() "; + throw new AAIException("AAI_6114", msg); + } + + Map<String, Object> retHash = new HashMap<>(); + + Iterator<Vertex> lookPipe = + this.traverseIncidentEdges(EdgeType.TREE, namedQueryElementVertex, "related-lookup"); + if (lookPipe == null || !lookPipe.hasNext()) { + // There's no "related-lookup" defined for this named-query-element. No problem. + return retHash; + } + + while (lookPipe.hasNext()) { + Vertex relLookupVtx = lookPipe.next(); + // We found a related-lookup record to try and use + String srcProp = relLookupVtx.<String>property("source-node-property").orElse(null); + String srcNodeType = relLookupVtx.<String>property("source-node-type").orElse(null); + srcProp = getPropNameWithAliasIfNeeded(srcNodeType, srcProp); + + if ((srcProp == null) || srcProp.equals("")) { + String msg = + " Bad related-lookup (source-node-property) found in Named Query definition. "; + throw new AAIException("AAI_6133", msg); + } + String targetNodeType = relLookupVtx.<String>property("target-node-type").orElse(null); + if ((targetNodeType == null) || targetNodeType.equals("")) { + String msg = + " Bad related-lookup (targetNodeType) found in Named Query definition. "; + throw new AAIException("AAI_6133", msg); + } + String targetProp = relLookupVtx.<String>property("target-node-property").orElse(null); + targetProp = getPropNameWithAliasIfNeeded(targetNodeType, targetProp); + + if ((targetProp == null) || targetProp.equals("")) { + String msg = + " Bad related-lookup (target-node-property) found in Named Query definition. "; + throw new AAIException("AAI_6133", msg); + } + + List<String> propCollectList = new ArrayList<>(); + Iterator<VertexProperty<Object>> vpI = relLookupVtx.properties("property-collect-list"); + while (vpI.hasNext()) { + propCollectList.add((String) vpI.next().value()); + } + + // Use the value from the source to see if we can find ONE target record using the + // value from the source + String valFromInstance = instanceVertex.<String>property(srcProp).orElse(null); + if (valFromInstance == null) { + // if there is no key to use to go look up something, we should end it here and just + // note what happened - no need to try to look something up by an empty key + logger.debug("WARNING - the instance data node of type [" + srcNodeType + + "] did not have a value for property [" + srcProp + + "], so related-lookup is being abandoned."); + return retHash; + } + + Map<String, Object> propHash = new HashMap<>(); + propHash.put(targetProp, valFromInstance); + + Optional<Vertex> result = dbMethHelper.locateUniqueVertex(targetNodeType, propHash); + if (!result.isPresent()) { + // If it can't find the lookup node, don't fail, just log that it couldn't be found + // --- logger.debug("WARNING - Could not find lookup node that corresponds to nodeType [" - + targetNodeType + "] propertyName = [" + srcProp - + "], propVal = [" + valFromInstance - + "] so related-lookup is being abandoned."); - return retHash; - } - else { - Vertex tmpVtx = result.get(); - // Pick up the properties from the target vertex that they wanted us to get - for( int j = 0; j < propCollectList.size(); j++ ){ - String tmpPropName = propCollectList.get(j); - tmpPropName = getPropNameWithAliasIfNeeded(targetNodeType, tmpPropName); - Object valObj = tmpVtx.<Object>property(tmpPropName).orElse(null); - String lookupKey = targetNodeType + "." + tmpPropName; - retHash.put(lookupKey, valObj); - - } - } - } - - return retHash; - - } // End of getNamedQueryExtraDataLookup() - - /** - * Collect NQ element hash. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param thisLevelElemVtx the element verrtx for this level - * @param incomingTrail the incoming trail -- trail of nodeTypes that got us here (this nq-element vertex) from the top - * @param currentHash the current hash - * @param vidsTraversed the vids traversed -- ArrayList of vertexId's that we traversed to get to this point - * @param levelCounter the level counter - * @return HashMap of all widget-points on a namedQuery topology with the value being the "named-query-element-uuid" for that spot. - * @throws AAIException the AAI exception - */ - public Map<String, String> collectNQElementHash(String transId, String fromAppId, - Vertex thisLevelElemVtx, String incomingTrail, - Map<String,String> currentHash, List <String> vidsTraversed, - int levelCounter ) throws AAIException { - - levelCounter++; - - Map<String, String> thisHash = new HashMap<>(); - thisHash.putAll(currentHash); - - if( levelCounter > MAX_LEVELS ) { - throw new AAIException("AAI_6125", "collectNQElementHash() has looped across more levels than allowed: " + MAX_LEVELS + ". "); - } - String thisGuysTrail = ""; - String thisElemVid = thisLevelElemVtx.id().toString(); - - // Find out what widget (and thereby what aai-node-type) this element represents. - String thisElementNodeType = getNqElementWidgetType( transId, fromAppId, thisLevelElemVtx, incomingTrail ); - - if( incomingTrail == null || incomingTrail.equals("") ){ - // This is the first one - thisGuysTrail = thisElementNodeType; - } - else { - thisGuysTrail = incomingTrail + "|" + thisElementNodeType; - } - vidsTraversed.add(thisElemVid); - - String nqElementUuid = thisLevelElemVtx.<String>property("named-query-element-uuid").orElse(null); - if( nqElementUuid == null || nqElementUuid.equals("") ){ - String msg = " named-query element UUID not found at trail = [" + incomingTrail + "]."; - throw new AAIException("AAI_6133", msg); - } - thisHash.put(thisGuysTrail, nqElementUuid ); - - // Now go "down" and look at the sub-elements pointed to so we can get their data. - Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, thisLevelElemVtx, "named-query-element"); - while( vertI != null && vertI.hasNext() ){ - Vertex tmpVert = vertI.next(); - String vid = tmpVert.id().toString(); - Map<String,Object> elementHash = new HashMap(); - - String connectToType = tmpVert.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( connectToType != null && connectToType.equals("named-query-element") ){ - // This is what we would expect - elementHash.put(vid, tmpVert); - } - else { - String msg = " named query element has [connectedTo] edge to improper nodeType= [" - + connectToType + "] trail = [" + incomingTrail + "]."; - throw new AAIException("AAI_6133", msg); - } - for( Map.Entry<String, Object> entry : elementHash.entrySet() ){ - Vertex elVert = (Vertex)(entry.getValue()); - String tmpElVid = elVert.id().toString(); - if( !vidsTraversed.contains(tmpElVid) ){ - // This is one we would like to use - so we'll recursively get it's result set to add to ours - Map<String, String> tmpHash = collectNQElementHash( transId, fromAppId, - elVert, thisGuysTrail, currentHash, vidsTraversed, levelCounter); - thisHash.putAll(tmpHash); - } - } - } - return thisHash; - - } // End of collectNQElementHash() - - - /** - * Collect delete key hash. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param thisLevelElemVtx the element vertex at this level - * @param incomingTrail the incoming trail -- trail of nodeTypes that got us here (this vertex) from the top - * @param currentHash the current hash - * @param vidsTraversed the vids traversed ---- ArrayList of vertexId's that we traversed to get to this point - * @param levelCounter the level counter - * @param modConstraintHash the mod constraint hash - * @param overRideModelId the over ride model id - * @param overRideModelVersionId the over ride model version id - * @return HashMap of all widget-points on a model topology with the value being the "newDataDelFlag" for that spot. - * @throws AAIException the AAI exception - */ - public Map<String, String> collectDeleteKeyHash(String transId, String fromAppId, - Vertex thisLevelElemVtx, String incomingTrail, - Map<String,String> currentHash, List <String> vidsTraversed, - int levelCounter, Map<String, Vertex> modConstraintHash, - String overRideModelId, String overRideModelVersionId ) - throws AAIException { - - levelCounter++; - - Map<String, String> thisHash = new HashMap<>(); - thisHash.putAll(currentHash); - - if( levelCounter > MAX_LEVELS ) { - throw new AAIException("AAI_6125", "collectDeleteKeyHash() has looped across more levels than allowed: " + MAX_LEVELS + ". "); - } - String thisGuysTrail = ""; - String thisElemVid = thisLevelElemVtx.id().toString(); - Map<String, Vertex> modConstraintHash2Use = null; - - // If this element represents a resource or service model, then we will replace this element with - // the "top" element of that resource or service model. That model-element already points to its - // topology, so it will graft in that model's topology. - // EXCEPT - if this element has "linkage-points" defined, then we need to do some extra - // processing for how we join to that model and will not try to go any "deeper". - List<String> linkagePtList = new ArrayList<>(); - Iterator <VertexProperty<Object>> vpI = thisLevelElemVtx.properties("linkage-points"); - - // I am not sure why, but since "linkage-points" is an xml-element-wrapper in the OXM definition, - // we get back the whole array of Strings in one String - but still use the "vtx.properties()" to - // get it - but only look at the first thing returned by the iterator. - if( vpI.hasNext() ){ - String tmpLinkageThing = (String)vpI.next().value(); - linkagePtList = makeSureItsAnArrayList( tmpLinkageThing ); - } - - if( linkagePtList != null && !linkagePtList.isEmpty() ){ - // Whatever this element is - we are connecting to it via a linkage-point - // We will figure out what to do and then return without going any deeper - String elemFlag = thisLevelElemVtx.<String>property("new-data-del-flag").orElse(null); - - Set<String> linkageConnectNodeTypes = getLinkageConnectNodeTypes( linkagePtList ); - Iterator <?> linkNtIter = linkageConnectNodeTypes.iterator(); - String incTrail = ""; - if( incomingTrail != null && !incomingTrail.equals("") ){ - incTrail = incomingTrail + "|"; - } - - while( linkNtIter.hasNext() ){ - // The 'trail' (or trails) for this element should just be the to the first-contact on the linkage point - String linkTrail = incTrail + linkNtIter.next(); - Boolean alreadyTaggedFalse = false; - if( thisHash.containsKey(linkTrail) && thisHash.get(linkTrail).equals("F") ){ - // some other path with a matching trail has the deleteFlag set to "F", so we do not want - // to override that since our model code only uses nodeTypes to know where it is - and we - // would rather do less deleting than needed instead of too much deleting. - alreadyTaggedFalse = true; - } - if( elemFlag != null && elemFlag.equals("T") && !alreadyTaggedFalse ){ - // This trail should be marked with an "T" - thisHash.put(linkTrail, "T"); - } - else { - thisHash.put(linkTrail, "F"); - } - } - return thisHash; - } - - // ---------------------------------------------------------------------------- - // If we got to here, then this was not an element that used a linkage-point - // ---------------------------------------------------------------------------- - - // Find out what widget-model (and thereby what aai-node-type) this element represents. - // Even if this element is pointing to a service or resource model, it must have a - // first element which is a single widget-type model. - String thisElementNodeType = getModElementWidgetType( thisLevelElemVtx, incomingTrail ); - String firstElementModelInfo = ""; - - vidsTraversed.add(thisElemVid); - Vertex elementVtxForThisLevel = null; - Vertex thisElementsModelVerVtx = getModelVerThatElementRepresents( thisLevelElemVtx, incomingTrail ); - Vertex thisElementsModelVtx = getModelGivenModelVer( thisElementsModelVerVtx, incomingTrail ); - String modType = getModelTypeFromModel( thisElementsModelVtx, incomingTrail ); - String subModelFirstModInvId = thisElementsModelVtx.<String>property("model-invariant-id").orElse(null); - String subModelFirstVerId = thisElementsModelVerVtx.<String>property("model-version-id").orElse(null); - if( modType.equals("widget") ){ - if( overRideModelId != null && !overRideModelId.equals("") ){ - // Note - this is just to catch the correct model for the TOP node in a model since - // it will have an element which will always be a widget even though the model - // could be a resource or service model. - firstElementModelInfo = "," + overRideModelId + "," + overRideModelVersionId; - } - } - else if( nodeTypeSupportsPersona(thisElementNodeType) ){ - firstElementModelInfo = "," + subModelFirstModInvId + "," + subModelFirstVerId; - } - - if( incomingTrail.equals("") ){ - // This is the first one - thisGuysTrail = thisElementNodeType + firstElementModelInfo; - } - else { - thisGuysTrail = incomingTrail + "|" + thisElementNodeType + firstElementModelInfo; - } - - String tmpFlag = "F"; - Boolean stoppedByASvcOrResourceModelElement = false; - if( modType.equals("widget") ){ - elementVtxForThisLevel = thisLevelElemVtx; - // For the element-model for the widget at this level, record it's delete flag - tmpFlag = elementVtxForThisLevel.<String>property("new-data-del-flag").orElse(null); - } - else { - // For an element that is referring to a resource or service model, we replace - // this element with the "top" element for that resource/service model so that the - // topology of that resource/service model will be included in this topology. - String modelVerId = thisElementsModelVerVtx.<String>property("model-version-id").orElse(null); - if( subModelFirstModInvId == null || subModelFirstModInvId.equals("") - || subModelFirstVerId == null || subModelFirstVerId.equals("") ){ - throw new AAIException("AAI_6132", "Bad Model Definition: Bad model-invariant-id or model-version-id. Model-version-id = " + - modelVerId + ", at [" + incomingTrail + "]"); - } - - // BUT -- if the model-element HERE at the resource/service level does NOT have - // it's new-data-del-flag set to "T", then we do not need to go down into the - // sub-model looking for delete-able things. - - tmpFlag = thisLevelElemVtx.<String>property("new-data-del-flag").orElse(null); - elementVtxForThisLevel = getTopElementForSvcOrResModelVer(thisElementsModelVerVtx, thisGuysTrail); - if( tmpFlag != null && tmpFlag.equals("T") ){ - modConstraintHash2Use = getModConstraintHash( thisLevelElemVtx, modConstraintHash ); - } - else { - stoppedByASvcOrResourceModelElement = true; - } - // For the element-model for the widget at this level, record it's delete flag - tmpFlag = elementVtxForThisLevel.<String>property("new-data-del-flag").orElse(null); - } - - String flag2Use = "F"; // by default we'll use "F" for the delete flag - if( ! stoppedByASvcOrResourceModelElement ){ - // Since we haven't been stopped by a resource/service level "F", we can look at the lower level flag - if( thisHash.containsKey(thisGuysTrail) ){ - // We've seen this spot in the topology before - do not override the delete flag if the older one is "F" - // We will only over-ride it if the old one was "T" and the new one is "F" (anything but "T") - String oldFlag = thisHash.get(thisGuysTrail); - if( oldFlag.equals("T") && (tmpFlag != null) && tmpFlag.equals("T") ){ - // The old flag was "T" and the new flag is also "T" - flag2Use = "T"; - } - else { - // the old flag was not "F" - so don't override it - flag2Use = "F"; - } - } - else if( (tmpFlag != null) && tmpFlag.equals("T") ){ - // We have not seen this one, so we can set it to "T" if that's what it is. - flag2Use = "T"; - } - } - - thisHash.put(thisGuysTrail, flag2Use); - if( ! stoppedByASvcOrResourceModelElement ){ - // Since we haven't been stopped by a resource/service level "F", we will continue to - // go "down" and look at the elements pointed to so we can get their data. - Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, elementVtxForThisLevel, "model-element", "constrained-element-set"); - while( vertI != null && vertI.hasNext() ){ - Vertex tmpVert = vertI.next(); - String vid = tmpVert.id().toString(); - Map<String,Object> elementHash = new HashMap<>(); - - String connectToType = tmpVert.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( connectToType != null && connectToType.equals("model-element") ){ - // A nice, regular old model-element - elementHash.put(vid, tmpVert); - } - else if( (connectToType != null) && connectToType.equals("constrained-element-set") ){ - // translate the constrained-element-set into a hash of model-element Vertex's - String constrainedElementSetUuid = tmpVert.<String>property("constrained-element-set-uuid").orElse(null); - if( (modConstraintHash2Use != null) && modConstraintHash2Use.containsKey(constrainedElementSetUuid) ){ - // This constrained-element-set is being superseded by a different one - Vertex replacementConstraintVert = modConstraintHash.get(constrainedElementSetUuid); - elementHash = getNextStepElementsFromSet( replacementConstraintVert ); - // Now that we've found and used the replacement constraint, we don't need to carry it along any farther - modConstraintHash.remove(constrainedElementSetUuid); - } - else { - elementHash = getNextStepElementsFromSet( tmpVert ); - } - } - else { - String msg = " model-element has [connectedTo] edge to improper nodeType= [" - + connectToType + "] trail = [" + incomingTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - for( Map.Entry<String, Object> entry : elementHash.entrySet() ){ - Vertex elVert = (Vertex)(entry.getValue()); - String tmpElVid = elVert.id().toString(); - String tmpElNT = getModElementWidgetType( elVert, thisGuysTrail ); - check4EdgeRule(tmpElNT, thisElementNodeType); - if( !vidsTraversed.contains(tmpElVid) ){ - // This is one we would like to use - so we'll recursively get it's result set to add to ours - Map<String, String> tmpHash = collectDeleteKeyHash( transId, fromAppId, - elVert, thisGuysTrail, - currentHash, vidsTraversed, levelCounter, modConstraintHash2Use, - "", "" ); - thisHash.putAll(tmpHash); - } - } - } - } - return thisHash; - - } // End of collectDeleteKeyHash() - - - /** - * Gets the linkage connect node types. - * - * @param linkagePtList the linkage pt list - * @return the linkage connect node types - * @throws AAIException the AAI exception - */ - public Set<String> getLinkageConnectNodeTypes(List<String> linkagePtList ) - throws AAIException { - // linkage points are a path from the top of a model to where we link in. - // This method wants to just bring back a list of distinct last items. - // Ie: for the input with these two: "pserver|lag-link|l-interface" and "pserver|p-interface|l-interface" - // it would just return a single item, "l-interface" since both linkage points end in that same node-type. - - Set<String> linkPtSet = new HashSet<>(); - - if( linkagePtList == null ){ - String detail = " Bad (null) linkagePtList passed to getLinkageConnectNodeTypes() "; - throw new AAIException("AAI_6125", detail); - } - - for( int i = 0; i < linkagePtList.size(); i++ ){ - String [] trailSteps = linkagePtList.get(i).split("\\|"); - if( trailSteps == null || trailSteps.length == 0 ){ - String detail = " Bad incomingTrail passed to getLinkageConnectNodeTypes(): [" + linkagePtList + "] "; - throw new AAIException("AAI_6125", detail); - } - String lastStepNT = trailSteps[trailSteps.length - 1]; - linkPtSet.add(lastStepNT); - } - - return linkPtSet; - - }// End getLinkageConnectNodeTypes() - - - /** - * Collect topology for model-ver. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param thisLevelElemVtx vertex to collect for - * @param incomingTrail the incoming trail -- trail of nodeTypes/personaInfo that got us here (this vertex) from the top - * @param currentMap the current map -- map that got us to this point (that we will use as the base of the map we will return) - * @param vidsTraversed the vids traversed -- ArrayList of vertexId's that we traversed to get to this point - * @param levelCounter the level counter - * @param modConstraintHash the mod constraint hash - * @param overRideModelInvId the override model-invariant-id - * @param overRideModelVersionId the override model-version-id - * @return Map of the topology - * @throws AAIException the AAI exception - */ - public Multimap<String, String> collectTopology4ModelVer(String transId, String fromAppId, - Vertex thisLevelElemVtx, String incomingTrail, - Multimap<String,String> currentMap, List<String> vidsTraversed, - int levelCounter, Map<String, Vertex> modConstraintHash, - String overRideModelInvId, String overRideModelVersionId ) - throws AAIException { - - levelCounter++; - - Multimap<String, String> thisMap = ArrayListMultimap.create(); - thisMap.putAll(currentMap); - - if( levelCounter > MAX_LEVELS ) { - throw new AAIException("AAI_6125", "collectTopology4ModelVer() has looped across more levels than allowed: " + MAX_LEVELS + ". "); - } - String thisGuysTrail = ""; - String thisElemVid = thisLevelElemVtx.id().toString(); - Map<String, Vertex> modConstraintHash2Use = null; - - // If this element represents a resource or service model, then we will replace this element with - // the "top" element of that resource or service model. That model-element already points to its - // topology, so it will graft in that model's topology. - // EXCEPT - if this element defines "linkage-points" defined, then we need to do some extra - // processing for how we join to that model. - - // Find out what widget-model (and thereby what aai-node-type) this element represents. - // Even if this element is pointing to a service or resource model, it must have a - // first element which is a single widget-type model. - String firstElementModelInfo = ""; - String thisElementNodeType = getModElementWidgetType( thisLevelElemVtx, incomingTrail ); - if( nodeTypeSupportsPersona(thisElementNodeType) && overRideModelInvId != null && !overRideModelInvId.equals("") ){ - firstElementModelInfo = "," + overRideModelInvId + "," + overRideModelVersionId; - } - - Vertex elementVtxForThisLevel = null; - Vertex thisElementsModelVerVtx = getModelVerThatElementRepresents( thisLevelElemVtx, incomingTrail ); - String subModelFirstModInvId = ""; - String subModelFirstModVerId = ""; - String modInfo4Trail = ""; - String modType = getModelTypeFromModelVer( thisElementsModelVerVtx, incomingTrail ); - if( modType.equals("resource") || modType.equals("service") ){ - // For an element that is referring to a resource or service model, we replace this - // this element with the "top" element for that resource/service model so that the - // topology of that resource/service model gets included in this topology. - // -- Note - since that top element of a service or resource model will point to a widget model, - // we have to track what modelId/version it really maps so we can make our recursive call - Vertex thisElementsModelVtx = getModelGivenModelVer(thisElementsModelVerVtx, incomingTrail); - subModelFirstModInvId = thisElementsModelVtx.<String>property("model-invariant-id").orElse(null); - subModelFirstModVerId = thisElementsModelVerVtx.<String>property("model-version-id").orElse(null); - - if( nodeTypeSupportsPersona(thisElementNodeType) ){ - modInfo4Trail = "," + subModelFirstModInvId + "," + subModelFirstModVerId; - } - String modelVerId = thisElementsModelVerVtx.<String>property("model-version-id").orElse(null); - if( subModelFirstModInvId == null || subModelFirstModInvId.equals("") || subModelFirstModVerId == null || subModelFirstModVerId.equals("") ){ - throw new AAIException("AAI_6132", "Bad Model Definition: Bad model-invariant-id or model-version-id. Model-ver-id = " + modelVerId); - } - - elementVtxForThisLevel = getTopElementForSvcOrResModelVer(thisElementsModelVerVtx, incomingTrail); - modConstraintHash2Use = getModConstraintHash( thisLevelElemVtx, modConstraintHash ); - } - else { - elementVtxForThisLevel = thisLevelElemVtx; - } - - if( incomingTrail.equals("") ){ - // This is the first one - thisGuysTrail = thisElementNodeType + firstElementModelInfo; - } - else { - thisGuysTrail = incomingTrail + "|" + thisElementNodeType + modInfo4Trail; - } - - // We only want to ensure that a particular element does not repeat on a single "branch". - // It could show up on other branches in the case where it is a sub-model which is being - // used in more than one place. - // - List<String> thisTrailsVidsTraversed = new ArrayList<>(vidsTraversed); - thisTrailsVidsTraversed.add(thisElemVid); - - // Look at the elements pointed to at this level and add on their data - Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, elementVtxForThisLevel, "model-element", "constrained-element-set"); - - while( vertI != null && vertI.hasNext() ){ - Vertex tmpVert = vertI.next(); - String vid = tmpVert.id().toString(); - Map<String,Object> elementHash = new HashMap<>(); - String connectToType = tmpVert.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( connectToType != null && connectToType.equals("model-element") ){ - // A nice, regular old model-element - elementHash.put(vid, tmpVert); - } - else if( (connectToType != null) && connectToType.equals("constrained-element-set") ){ - // translate the constrained-element-set into a hash of model-element Vertex's - String constrainedElementSetUuid = tmpVert.<String>property("constrained-element-set-uuid").orElse(null); - if( (modConstraintHash2Use != null) && modConstraintHash2Use.containsKey(constrainedElementSetUuid) ){ - // This constrained-element-set is being superseded by a different one - Vertex replacementConstraintVert = modConstraintHash.get(constrainedElementSetUuid); - elementHash = getNextStepElementsFromSet( replacementConstraintVert ); - // Now that we've found and used the replacement constraint, we don't need to carry it along any farther - modConstraintHash.remove(constrainedElementSetUuid); - } - else { - elementHash = getNextStepElementsFromSet( tmpVert ); - } - } - else { - String msg = " model element has [connectedTo] edge to improper nodeType= [" - + connectToType + "] trail = [" + incomingTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - for( Map.Entry<String, Object> entry : elementHash.entrySet() ){ - Vertex elVert = (Vertex)(entry.getValue()); - String tmpElVid = elVert.id().toString(); - String tmpElNT = getModElementWidgetType( elVert, thisGuysTrail ); - String tmpElStepName = getModelElementStepName( elVert, thisGuysTrail); - - List<String> linkagePtList = new ArrayList <>(); - Iterator <VertexProperty<Object>> vpI = elVert.properties("linkage-points"); - - // I am not sure why, but since "linkage-points" is an xml-element-wrapper in the OXM definition, - // we get back the whole array of Strings in one String - but still use the "vtx.properties()" to - // get it - but only look at the first thing returned by the iterator. - if( vpI.hasNext() ){ - String tmpLinkageThing = (String)vpI.next().value(); - linkagePtList = makeSureItsAnArrayList( tmpLinkageThing ); - } - - if( linkagePtList != null && !linkagePtList.isEmpty() ){ - // This is as far as we can go, we will use the linkage point info to define the - // rest of this "trail" - for( int i = 0; i < linkagePtList.size(); i++ ){ - Multimap<String, String> tmpMap = collectTopology4LinkagePoint( transId, fromAppId, - linkagePtList.get(i), thisGuysTrail, currentMap); - thisMap.putAll(tmpMap); - } - } - else { - check4EdgeRule(tmpElNT, thisElementNodeType); - thisMap.put(thisGuysTrail, tmpElStepName); - if( !thisTrailsVidsTraversed.contains(tmpElVid) ){ - // This is one we would like to use - so we'll recursively get it's result set to add to ours - Multimap<String, String> tmpMap = collectTopology4ModelVer( transId, fromAppId, - elVert, thisGuysTrail, - currentMap, thisTrailsVidsTraversed, levelCounter, - modConstraintHash2Use, subModelFirstModInvId, subModelFirstModVerId ); - thisMap.putAll(tmpMap); - } - else { - String modelElementUuid = elVert.<String>property("model-element-uuid").orElse(null); - String msg = "Bad Model Definition: looping model-element (model-element-uuid = [" + - modelElementUuid + "]) found trying to add step: [" + tmpElStepName + "], " + - " on trail = [" + thisGuysTrail + "]. "; - System.out.println( msg ); - throw new AAIException("AAI_6132", msg); - } - } - } - } - - return thisMap; - - } // End of collectTopology4ModelVer() - - - /** - * Check 4 edge rule. - * - * @param nodeTypeA the node type A - * @param nodeTypeB the node type B - * @throws AAIException the AAI exception - */ - public void check4EdgeRule( String nodeTypeA, String nodeTypeB) throws AAIException { - // Throw an exception if there is no defined edge rule for this combination of nodeTypes in DbEdgeRules. - - final EdgeIngestor edgeRules = SpringContextAware.getApplicationContext().getBean(EdgeIngestor.class); - //final EdgeRules edgeRules = EdgeRules.getInstance(); - - EdgeRuleQuery.Builder baseQ = new EdgeRuleQuery.Builder(nodeTypeA, nodeTypeB); - if (!edgeRules.hasRule(baseQ.build())) { - - - /* if( !edgeRules.hasEdgeRule(nodeTypeA, nodeTypeB) - && !edgeRules.hasEdgeRule(nodeTypeB, nodeTypeA) ){*/ - // There's no EdgeRule for this -- find out if one of the nodeTypes is invalid or if - // they are valid, but there's just no edgeRule for them. - try { - loader.introspectorFromName(nodeTypeA); - } catch (AAIUnknownObjectException e) { - String emsg = " Unrecognized nodeType aa [" + nodeTypeA + "]\n"; - throw new AAIException("AAI_6115", emsg); - } - try { - loader.introspectorFromName(nodeTypeB); - } catch (AAIUnknownObjectException e) { - String emsg = " Unrecognized nodeType bb [" + nodeTypeB + "]\n"; - throw new AAIException("AAI_6115", emsg); - } - - String msg = " No Edge Rule found for this pair of nodeTypes (order does not matter) [" - + nodeTypeA + "], [" + nodeTypeB + "]."; - throw new AAIException("AAI_6120", msg); - } - - - } - - - /** - * Collect topology 4 linkage point. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param linkagePointStrVal -- Note it is in reverse order from where we connect to it. - * @param incomingTrail -- trail of nodeTypes that got us here (this vertex) from the top - * @param currentMap the current map -- that got us to this point (that we will use as the base of the map we will return) - * @return Map of the topology - * @throws AAIException the AAI exception - */ - public Multimap<String, String> collectTopology4LinkagePoint(String transId, String fromAppId, - String linkagePointStrVal, String incomingTrail, Multimap<String,String> currentMap) - throws AAIException { - - Multimap<String, String> thisMap = ArrayListMultimap.create(); - thisMap.putAll(currentMap); - String thisGuysTrail = incomingTrail; - - // NOTE - "trails" can have multiple parts now since we track persona info for some. - // We just want to look at the node type info - which would be the piece - // before any commas (if there are any). - - String [] trailSteps = thisGuysTrail.split("\\|"); - if(trailSteps.length == 0){ - throw new AAIException("AAI_6125", "Bad incomingTrail passed to collectTopology4LinkagePoint(): [" + incomingTrail + "] "); - } - String lastStepString = trailSteps[trailSteps.length - 1]; - String [] stepPieces = lastStepString.split(","); - String lastStepNT = stepPieces[0]; - - // It is assumed that the linkagePoint string will be a pipe-delimited string where each - // piece is an AAIProperties.NODE_TYPE. For now, the first thing to connect to is what is on the farthest right. - // Example: linkagePoint = "pserver|p-interface|l-interface" would mean that we're connecting to the l-interface - // but that after that, we connect to a p-interface followed by a pserver. - // It might have been more clear to define it in the other direction, but for now, that is it. (16-07) - String linkagePointStr = linkagePointStrVal; - - // We are getting these with more than linkage thing in one string. - // Ie. "pserver|lag-interface|l-interface, pserver|p-interface|l-interface, vlan|l-interface" - linkagePointStr = linkagePointStr.replace("[", ""); - linkagePointStr = linkagePointStr.replace("]", ""); - linkagePointStr = linkagePointStr.replace(" ", ""); - - String [] linkage = linkagePointStr.split("\\,"); - for( int x = 0; x < linkage.length; x++ ){ - lastStepNT = stepPieces[0]; - String thisStepNT = ""; - String [] linkageSteps = linkage[x].split("\\|"); - if(linkageSteps.length == 0){ - throw new AAIException("AAI_6125", "Bad linkagePointStr passed to collectTopology4LinkagePoint(): [" + linkagePointStr + "] "); - } - for( int i=(linkageSteps.length - 1); i >= 0; i-- ){ - thisStepNT = linkageSteps[i]; - check4EdgeRule(lastStepNT, thisStepNT); - thisMap.put(thisGuysTrail, thisStepNT); - thisGuysTrail = thisGuysTrail + "|" + thisStepNT; - lastStepNT = thisStepNT; - } - } - return thisMap; - - } // End of collectTopology4LinkagePoint() - - - /** - * Gets the next step elements from set. - * - * @param constrElemSetVtx the constr elem set vtx - * @return Hash of the set of model-elements this set represents - * @throws AAIException the AAI exception - */ - public Map<String,Object> getNextStepElementsFromSet( Vertex constrElemSetVtx ) - throws AAIException { - // Take a constrained-element-set and figure out the total set of all the possible elements that it - // represents and return them as a Hash. - - Map<String,Object> retElementHash = new HashMap<>(); - - if( constrElemSetVtx == null ){ - String msg = " getNextStepElementsFromSet() called with null constrElemSetVtx "; - throw new AAIException("AAI_6125", msg); - } - - String constrNodeType = constrElemSetVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); - String constrElemSetUuid = constrElemSetVtx.<String>property("constrained-element-set-uuid").orElse(null); - if( constrNodeType == null || !constrNodeType.equals("constrained-element-set") ){ - String msg = " getNextStepElementsFromSet() called with wrong type model: [" + constrNodeType + "]. "; - throw new AAIException("AAI_6125", msg); - } - - ArrayList <Vertex> choiceSetVertArray = new ArrayList<>(); - Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, constrElemSetVtx, "element-choice-set"); - int setCount = 0; - while( vertI != null && vertI.hasNext() ){ - Vertex choiceSetVertex = vertI.next(); - String constrSetType = choiceSetVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( constrSetType != null && constrSetType.equals("element-choice-set") ){ - choiceSetVertArray.add(choiceSetVertex); - setCount++; - } - } - - if( setCount == 0 ){ - String msg = "No element-choice-set found under constrained-element-set-uuid = " + constrElemSetUuid; - throw new AAIException("AAI_6132", msg); - } - - // Loop through each choice-set and grab the model-elements - for( int i = 0; i < setCount; i++ ){ - Vertex choiceSetVert = choiceSetVertArray.get(i); - Iterator<Vertex> mVertI = this.traverseIncidentEdges(EdgeType.TREE, choiceSetVert, "model-element"); - int elCount = 0; - while( mVertI != null && mVertI.hasNext() ){ - Vertex tmpElVertex = mVertI.next(); - String elNodeType = tmpElVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( elNodeType != null && elNodeType.equals("model-element") ){ - String tmpVid = tmpElVertex.id().toString(); - retElementHash.put(tmpVid, tmpElVertex); - elCount++; - } - else { - // unsupported node type found for this choice-set - String msg = "Unsupported nodeType (" + elNodeType - + ") found under choice-set under constrained-element-set-uuid = " + constrElemSetUuid; - throw new AAIException("AAI_6132", msg); - } - } - - if( elCount == 0 ){ - String msg = "No model-elements found in choice-set under constrained-element-set-uuid = " + constrElemSetUuid; - throw new AAIException("AAI_6132", msg); - } - - } - return retElementHash; - - } // End of getNextStepElementsFromSet() - - - - /** - * Gen topo map 4 named Q. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param queryVertex the query vertex - * @param namedQueryUuid the named query uuid - * @return MultiMap of valid next steps for each potential query-element - * @throws AAIException the AAI exception - */ - public Multimap<String, String> genTopoMap4NamedQ(String transId, String fromAppId, - Vertex queryVertex, String namedQueryUuid ) - throws AAIException { - - if( queryVertex == null ){ - throw new AAIException("AAI_6125", "null queryVertex passed to genTopoMap4NamedQ()"); - } - - Multimap<String, String> initialEmptyMap = ArrayListMultimap.create(); - List<String> vidsTraversed = new ArrayList<>(); - - Vertex firstElementVertex = null; - Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, queryVertex, "named-query-element"); - int elCount = 0; - while( vertI != null && vertI.hasNext() ){ - elCount++; - firstElementVertex = vertI.next(); - } - - if( elCount > 1 ){ - throw new AAIException("AAI_6133", "Illegal query defined: More than one first element defined for = " + namedQueryUuid); - } - - if( firstElementVertex == null ){ - throw new AAIException("AAI_6114", "Could not find first query element = " + namedQueryUuid); - } - - Vertex modVtx = getModelThatNqElementRepresents( firstElementVertex, "" ); - String modelType = getModelTypeFromModel( modVtx, "" ); - if( ! modelType.equals("widget") ){ - throw new AAIException("AAI_6133", "Bad Named Query Definition: First element must correspond to a widget type model. Named Query UUID = " - + namedQueryUuid); - } - - return collectTopology4NamedQ( transId, fromAppId, - firstElementVertex, "", - initialEmptyMap, vidsTraversed, 0); - } // End of genTopoMap4NamedQ() - - - - /** - * Collect topology 4 named Q. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param thisLevelElemVtx the model element vertex for this level - * @param levelCounter the level counter - * @return resultSet - * @throws AAIException the AAI exception - */ - public Multimap<String, String> collectTopology4NamedQ(String transId, String fromAppId, - Vertex thisLevelElemVtx, String incomingTrail, - Multimap<String,String> currentMap, List<String> vidsTraversed, int levelCounter ) - throws AAIException { - - levelCounter++; - - Multimap<String, String> thisMap = ArrayListMultimap.create(); - thisMap.putAll(currentMap); - - String thisElemVid = thisLevelElemVtx.id().toString(); - if( levelCounter > MAX_LEVELS ) { - throw new AAIException("AAI_6125", "collectModelStructure() has looped across more levels than allowed: " + MAX_LEVELS + ". "); - } - String thisGuysTrail = ""; - - // find out what widget (and thereby what aai-node-type) this element represents - String thisElementNodeType = getNqElementWidgetType( transId, fromAppId, thisLevelElemVtx, incomingTrail ); - - if( incomingTrail.equals("") ){ - // This is the first one - thisGuysTrail = thisElementNodeType; - } - else { - thisGuysTrail = incomingTrail + "|" + thisElementNodeType; - } - - vidsTraversed.add(thisElemVid); - - // Look at the elements pointed to at this level and add on their data - Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, thisLevelElemVtx, "named-query-element"); - while( vertI != null && vertI.hasNext() ){ - Vertex tmpVert = vertI.next(); - String tmpVid = tmpVert.id().toString(); - String tmpElNT = getNqElementWidgetType( transId, fromAppId, tmpVert, thisGuysTrail ); - thisMap.put(thisGuysTrail, tmpElNT); - if( !vidsTraversed.contains(tmpVid) ){ - // This is one we would like to use - so we'll recursively get it's result set to add to ours - Multimap<String, String> tmpMap = collectTopology4NamedQ( transId, fromAppId, - tmpVert, thisGuysTrail, - currentMap, vidsTraversed, levelCounter); - thisMap.putAll(tmpMap); - } - } - - return thisMap; - - } // End of collectTopology4NamedQ() - - - /** - * Gets the model that NamedQuery element represents. - * - * @param elementVtx the NQ element vtx - * @param elementTrail the element trail - * @return the model that element represents - * @throws AAIException the AAI exception - */ - public Vertex getModelThatNqElementRepresents(Vertex elementVtx, String elementTrail ) - throws AAIException { - - // Get the model that a named-query element represents - Vertex modVtx = null; - Iterator<Vertex> mvertI = this.traverseIncidentEdges(EdgeType.COUSIN, elementVtx, "model"); - int modCount = 0; - while( mvertI != null && mvertI.hasNext() ){ - modCount++; - modVtx = mvertI.next(); - } - - if( modCount > 1 ){ - String msg = "Illegal element defined: More than one model pointed to by a single named-query-element at [" + - elementTrail + "]."; - throw new AAIException("AAI_6125", msg); - } - - if( modVtx == null ){ - String msg = "Bad named-query definition: Could not find model for element. "; - if( !elementTrail.equals("") ){ - msg = "Bad named-query definition: Could not find model for named-query-element at [" + elementTrail + "]."; - } - throw new AAIException("AAI_6132", msg); - } - - String nodeType = modVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( (nodeType != null) && nodeType.equals("model") ){ - return modVtx; - } - else { - String msg = "Illegal Named Query element defined: expecting a 'model', but found 'isA' edge pointing to nodeType = " + - nodeType + "] at [" + elementTrail + "]."; - throw new AAIException("AAI_6125", msg); - } - - }// getModelThatNqElementRepresents() - - - /** - * Gets the model-ver that element represents. - * - * @param elementVtx the element vtx - * @param elementTrail the element trail - * @return the model-ver that element represents - * @throws AAIException the AAI exception - */ - public Vertex getModelVerThatElementRepresents(Vertex elementVtx, String elementTrail ) - throws AAIException { - - // Get the model-ver that an element represents - Vertex modVerVtx = null; - Iterator<Vertex> mvertI = this.traverseIncidentEdges(EdgeType.COUSIN, elementVtx, "model-ver"); - int modCount = 0; - while( mvertI != null && mvertI.hasNext() ){ - modCount++; - modVerVtx = mvertI.next(); - } - - if( modCount > 1 ){ - String msg = "Illegal element defined: More than one model pointed to by a single element at [" + - elementTrail + "]."; - throw new AAIException("AAI_6125", msg); - } - - if( modVerVtx == null ){ - String msg = "Bad model definition: Could not find model-ver for model-element. "; - if( !elementTrail.equals("") ){ - msg = "Bad model definition: Could not find model-VER for model-element at [" + elementTrail + "]."; - } - throw new AAIException("AAI_6132", msg); - } - - String nodeType = modVerVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( (nodeType != null) && nodeType.equals("model-ver") ){ - return modVerVtx; - } - else { - String msg = "Illegal model-element defined: expecting a 'model-ver', but found 'isA' edge pointing to nodeType = " + - nodeType + "] at [" + elementTrail + "]."; - throw new AAIException("AAI_6125", msg); - } - - }// getModelVerThatElementRepresents() - - - - /** - * Gets the model that is parent to model-ver node. - * - * @param modVerVtx the model-ver vtx - * @param elementTrail the element trail - * @return the model that element represents - * @throws AAIException the AAI exception - */ - public Vertex getModelGivenModelVer(Vertex modVerVtx, String elementTrail ) - throws AAIException { - - // Get the parent model for this "model-ver" node - Vertex modVtx = null; - Iterator<Vertex> mvertI = this.traverseIncidentEdges(EdgeType.TREE, modVerVtx, "model"); - int modCount = 0; - while( mvertI != null && mvertI.hasNext() ){ - modCount++; - modVtx = mvertI.next(); - } - - if( modCount > 1 ){ - String msg = "Illegal model-ver node defined: More than one model points to it with a 'has' edge [" + - elementTrail + "]."; - throw new AAIException("AAI_6125", msg); - } - - if( modVtx == null ){ - String msg = "Bad model-ver node: Could not find parent model. "; - if( !elementTrail.equals("") ){ - msg = "Bad model-ver node: Could not find parent model. [" + elementTrail + "]."; - } - throw new AAIException("AAI_6132", msg); - } - - String nodeType = modVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); - if( (nodeType != null) && nodeType.equals("model") ){ - // Found what we were looking for. - return modVtx; - } - else { - // Something is amiss - String msg = " Could not find parent model node for model-ver node at [" + - elementTrail + "]."; - throw new AAIException("AAI_6125", msg); - } - - - }// getModelGivenModelVer() - - - - /** - * Gets the model type. - * - * @param modelVtx the model vtx - * @param elementTrail the element trail - * @return the model type - * @throws AAIException the AAI exception - */ - public String getModelTypeFromModel(Vertex modelVtx, String elementTrail ) - throws AAIException { - - // Get the model-type from a model vertex - if( modelVtx == null ){ - String msg = " null modelVtx passed to getModelTypeFromModel() "; - throw new AAIException("AAI_6114", msg); - } - - String modelType = modelVtx.<String>property("model-type").orElse(null); - if( (modelType == null) || modelType.equals("") ){ - String msg = "Could not find model-type for model encountered at [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - if( !modelType.equals("widget") && !modelType.equals("resource") && !modelType.equals("service") ){ - String msg = "Unrecognized model-type, [" + modelType + "] for model pointed to by element at [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - return modelType; - - }// getModelTypeFromModel() - - - - /** - * Gets the model type given model-ver - * - * @param modelVerVtx the model-ver vtx - * @param elementTrail the element trail - * @return the model type - * @throws AAIException the AAI exception - */ - public String getModelTypeFromModelVer(Vertex modelVerVtx, String elementTrail ) - throws AAIException { - - // Get the model-type given a model-ver vertex - if( modelVerVtx == null ){ - String msg = " null modelVerVtx passed to getModelTypeFromModelVer() "; - throw new AAIException("AAI_6114", msg); - } - - Vertex modVtx = getModelGivenModelVer( modelVerVtx, elementTrail ); - String modelType = modVtx.<String>property("model-type").orElse(null); - if( (modelType == null) || modelType.equals("") ){ - String msg = "Could not find model-type for model encountered at [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - if( !modelType.equals("widget") && !modelType.equals("resource") && !modelType.equals("service") ){ - String msg = "Unrecognized model-type, [" + modelType + "] for model pointed to by element at [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - return modelType; - - }// getModelTypeFromModelVer() - - - - /** - * Gets the model-element step name. - * - * @param elementVtx the model-element vtx - * @param elementTrail the element trail - * @return the element step name - * @throws AAIException the AAI exception - */ - public String getModelElementStepName(Vertex elementVtx, String elementTrail) - throws AAIException { - - // Get the "step name" for a model-element - // Step names look like this for widget-models: AAIProperties.NODE_TYPE - // Step names look like this for resource/service models: "aai-node-type,model-invariant-id,model-version-id" - // NOTE -- if the element points to a resource or service model, then we'll return the - // widget-type of the first element (crown widget) for that model. - String thisElementNodeType = "?"; - Vertex modVerVtx = getModelVerThatElementRepresents( elementVtx, elementTrail ); - String modelType = getModelTypeFromModelVer( modVerVtx, elementTrail ); - - if( modelType == null ){ - String msg = " could not determine modelType in getModelElementStepName(). elementTrail = [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - if( modelType.equals("widget") ){ - // NOTE: for models that have model-type = "widget", their "model-name" maps directly to aai-node-type - thisElementNodeType = modVerVtx.<String>property("model-name").orElse(null); - if( (thisElementNodeType == null) || thisElementNodeType.equals("") ){ - String msg = "Could not find model-name for the widget model pointed to by element at [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - return thisElementNodeType; - } - else if( modelType.equals("resource") || modelType.equals("service") ){ - Vertex modVtx = getModelGivenModelVer( modVerVtx, elementTrail ); - String modInvId = modVtx.<String>property("model-invariant-id").orElse(null); - String modVerId = modVerVtx.<String>property("model-version-id").orElse(null); - Vertex relatedTopElementModelVtx = getTopElementForSvcOrResModelVer( modVerVtx, elementTrail ); - Vertex relatedModelVtx = getModelVerThatElementRepresents( relatedTopElementModelVtx, elementTrail ); - thisElementNodeType = relatedModelVtx.<String>property("model-name").orElse(null); - - if( (thisElementNodeType == null) || thisElementNodeType.equals("") ){ - String msg = "Could not find model-name for the widget model pointed to by element at [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - String stepName = ""; - if( nodeTypeSupportsPersona(thisElementNodeType) ){ - // This nodeType that this resource or service model refers to does support persona-related fields, so - // we will use model-invariant-id and model-version-id as part of the step name. - stepName = thisElementNodeType + "," + modInvId + "," + modVerId; - } - else { - stepName = thisElementNodeType; - } - return stepName; - } - else { - String msg = " Unrecognized model-type = [" + modelType + "] pointed to by element at [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - }// getModelElementStepName() - - - - /** - * Node type supports persona. - * - * @param nodeType the node type - * @return the boolean - * @throws AAIException the AAI exception - */ - public Boolean nodeTypeSupportsPersona(String nodeType) - throws AAIException { - - if( nodeType == null || nodeType.equals("") ){ - return false; - } - Introspector introspector = null; - try { - introspector = loader.introspectorFromName(nodeType); - } catch (AAIUnknownObjectException e) { - String emsg = " Unrecognized nodeType [" + nodeType + "]\n"; - throw new AAIException("AAI_6115", emsg); - } - - Collection <String> props4ThisNT = introspector.getProperties(); - return props4ThisNT.contains(addDBAliasedSuffix("model-invariant-id")) && props4ThisNT.contains(addDBAliasedSuffix("model-version-id")); - - }// nodeTypeSupportsPersona() - - - /** - * Gets a Named Query element's widget type. - * - * @param elementVtx the named-query element vtx - * @param elementTrail the element trail - * @return the element widget type - * @throws AAIException the AAI exception - */ - public String getNqElementWidgetType(String transId, String fromAppId, - Vertex elementVtx, String elementTrail ) - throws AAIException { - - String thisNqElementWidgetType = ""; - // Get the associated node-type for the model pointed to by a named-query-element. - // NOTE -- if the element points to a resource or service model, then we'll return the - // widget-type of the first element (crown widget) for that model. - Vertex modVtx = getModelThatNqElementRepresents( elementVtx, elementTrail ); - String modelType = getModelTypeFromModel( modVtx, elementTrail ); - - if( modelType == null || !modelType.equals("widget") ){ - String emsg = " Model Type must be 'widget' for NamedQuery elements. Found [" + modelType + "] at [" + - elementTrail + "]\n"; - throw new AAIException("AAI_6132", emsg); - } - else { - // For a Widget model, the nodeType is just mapped to the model-element.model-name - List<Vertex> modVerVtxArr = getModVersUsingModel(transId, fromAppId, modVtx); - if( modVerVtxArr != null && !modVerVtxArr.isEmpty() ){ - thisNqElementWidgetType = (modVerVtxArr.get(0)).<String>property("model-name").orElse(null); - } - if( thisNqElementWidgetType == null || thisNqElementWidgetType.equals("") ){ - String emsg = " Widget type could not be determined at [" + elementTrail + "]\n"; - throw new AAIException("AAI_6132", emsg); - } - else { - return thisNqElementWidgetType; - } - } - - - }// End getNqElementWidgetType() - - - /** - * Gets a model-element's top widget type. - * - * @param elementVtx the model element vtx - * @param elementTrail the element trail - * @return the element widget type - * @throws AAIException the AAI exception - */ - public String getModElementWidgetType(Vertex elementVtx, String elementTrail ) - throws AAIException { - - // Get the associated node-type for the model-ver pointed to by a model-element. - // NOTE -- if the element points to a resource or service model, then we'll return the - // widget-type of the first element (crown widget) for that model. - Vertex modVerVtx = getModelVerThatElementRepresents( elementVtx, elementTrail ); - return getModelVerTopWidgetType( modVerVtx, elementTrail ); - - }// End getModElementWidgetType() - - - /** - * Gets the node using unique identifier - * - * @param transId the trans id - * @param fromAppId the from app id - * @param nodeType the nodeType - * @param idPropertyName the property name of the unique identifier - * @param uniqueIdVal the UUID value - * @return unique vertex found using UUID - * @throws AAIException the AAI exception - */ - public Vertex getNodeUsingUniqueId(String transId, String fromAppId, - String nodeType, String idPropertyName, String uniqueIdVal ) - throws AAIException { - - // Given a unique identifier, get the Vertex - if( uniqueIdVal == null || uniqueIdVal.equals("") ){ - String emsg = " Bad uniqueIdVal passed to getNodeUsingUniqueId(): [" - + uniqueIdVal + "]\n"; - throw new AAIException("AAI_6118", emsg); - } - - if( idPropertyName == null || idPropertyName.equals("") ){ - String emsg = " Bad idPropertyName passed to getNodeUsingUniqueId(): [" - + idPropertyName + "]\n"; - throw new AAIException("AAI_6118", emsg); - } - - if( nodeType == null || nodeType.equals("") ){ - String emsg = " Bad nodeType passed to getNodeUsingUniqueId(): [" - + nodeType + "]\n"; - throw new AAIException("AAI_6118", emsg); - } - - Vertex uniqVtx = null; - Iterable <?> uniqVerts = null; - uniqVerts = engine.asAdmin().getReadOnlyTraversalSource().V().has(AAIProperties.NODE_TYPE,nodeType).has(idPropertyName,uniqueIdVal).toList(); - if( uniqVerts == null ){ - String emsg = "Node could not be found for nodeType = [" + nodeType - + "], propertyName = [" + idPropertyName - + "], propertyValue = [" + uniqueIdVal + "]\n"; - throw new AAIException("AAI_6114", emsg); - } - else { - int count = 0; - Iterator <?> uniqVertsIter = uniqVerts.iterator(); - if( !uniqVertsIter.hasNext() ){ - String emsg = "Node could not be found for nodeType = [" + nodeType - + "], propertyName = [" + idPropertyName - + "], propertyValue = [" + uniqueIdVal + "]\n"; - throw new AAIException("AAI_6114", emsg); - } - else { - while( uniqVertsIter.hasNext() ){ - count++; - uniqVtx = (Vertex) uniqVertsIter.next(); - if( count > 1 ){ - String emsg = "More than one node found for nodeType = [" + nodeType - + "], propertyName = [" + idPropertyName - + "], propertyValue = [" + uniqueIdVal + "]\n"; - throw new AAIException("AAI_6132", emsg); - } - } - } - } - - return uniqVtx; - }// End getNodeUsingUniqueId() - - - /** - * Gets the model-ver nodes using name. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param modelName the model name - * @return the model-ver's that use this name - * @throws AAIException the AAI exception - */ - public List<Vertex> getModelVersUsingName(String transId, String fromAppId, - String modelName ) - throws AAIException { - - // Given a "model-name", find the model-ver vertices that this maps to - if( modelName == null || modelName.equals("") ){ - String emsg = " Bad modelName passed to getModelVersUsingName(): [" - + modelName + "]\n"; - throw new AAIException("AAI_6118", emsg); - } - - List<Vertex> retVtxArr = new ArrayList<>(); - Iterator<Vertex> modVertsIter = this.engine.asAdmin().getReadOnlyTraversalSource().V().has(AAIProperties.NODE_TYPE,"model-ver").has("model-name",modelName); - if( !modVertsIter.hasNext() ){ - String emsg = "Model-ver record(s) could not be found for model-ver data passed. model-name = [" + - modelName + "]\n"; - throw new AAIException("AAI_6132", emsg); - } - else { - while( modVertsIter.hasNext() ){ - Vertex tmpModelVerVtx = modVertsIter.next(); - retVtxArr.add(tmpModelVerVtx); - } - } - - return retVtxArr; - - }// End getModelVersUsingName() - - - /** - * Gets the model-ver nodes using model-invariant-id. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param modelInvId-invariant-id (uniquely identifies a model) - * @return the model-ver's defined for the corresponding model - * @throws AAIException the AAI exception - */ - public Iterator<Vertex> getModVersUsingModelInvId(String transId, String fromAppId, - String modelInvId ) - throws AAIException { - - // Given a "model-invariant-id", find the model-ver nodes that this maps to - if( modelInvId == null || modelInvId.equals("") ){ - String emsg = " Bad model-invariant-id passed to getModVersUsingModelInvId(): [" - + modelInvId + "]\n"; - throw new AAIException("AAI_6118", emsg); - } - - Vertex modVtx = getNodeUsingUniqueId(transId, fromAppId, "model", "model-invariant-id", modelInvId); - List<Vertex> retVtxArr = getModVersUsingModel(transId, fromAppId, modVtx); - if( retVtxArr == null || retVtxArr.isEmpty() ){ - String emsg = " Model-ver record(s) could not be found attached to model with model-invariant-id = [" + - modelInvId + "]\n"; - throw new AAIException("AAI_6132", emsg); - } - - return retVtxArr.iterator(); - }// End getModVersUsingModelInvId() - - - /** - * Gets the model-ver nodes using a model node. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param modVtx vertex - * @return the model-ver's defined for the corresponding model - * @throws AAIException the AAI exception - */ - public List<Vertex> getModVersUsingModel(String transId, String fromAppId, - Vertex modVtx ) - throws AAIException { - - if( modVtx == null ){ - String emsg = " Null model vertex passed to getModVersUsingModel(): "; - throw new AAIException("AAI_6118", emsg); - } - - List<Vertex> retVtxArr = new ArrayList<>(); - Iterator<Vertex> modVerVertsIter = this.traverseIncidentEdges(EdgeType.TREE, modVtx, "model-ver"); - if(!modVerVertsIter.hasNext()){ - String modelInvId = modVtx.<String>property("model-invariant-id").orElse(null); - String emsg = "Model-ver record(s) could not be found attached to model with model-invariant-id = [" + - modelInvId + "]\n"; - throw new AAIException("AAI_6132", emsg); - } - else { - while( modVerVertsIter.hasNext() ){ - Vertex tmpModelVtx = modVerVertsIter.next(); - retVtxArr.add(tmpModelVtx); - } - } - - return retVtxArr; - - }// End getModVersUsingModel() - - /** - * Gets the model-version-ids using model-name. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param modelName the model name - * @return the model uuids using name - * @throws AAIException the AAI exception - */ - public List<String> getModelVerIdsUsingName( String transId, String fromAppId, - String modelName ) - throws AAIException { - - // Given a model-name find the model-ver nodes that it maps to - if( modelName == null || modelName.equals("") ){ - String emsg = " Bad modelName passed to getModelVerIdsUsingName(): [" - + modelName + "]\n"; - throw new AAIException("AAI_6118", emsg); - } - - List<String> retArr = new ArrayList<>(); - Iterator<Vertex> modVerVertsIter = this.engine.asAdmin().getReadOnlyTraversalSource().V().has(AAIProperties.NODE_TYPE,"model-ver").has("model-name",modelName); - if( !modVerVertsIter.hasNext() ){ - String emsg = " model-ver record(s) could not be found for model data passed. model-name = [" + - modelName + "]\n"; - throw new AAIException("AAI_6114", emsg); - } - else { - while( modVerVertsIter.hasNext() ){ - Vertex modelVerVtx = modVerVertsIter.next(); - String tmpUuid = modelVerVtx.<String>property("model-version-id").orElse(null); - if( (tmpUuid != null) && !tmpUuid.equals("") && !retArr.contains(tmpUuid) ){ - retArr.add(tmpUuid); - } - } - } - - if( retArr.isEmpty() ){ - String emsg = "No model-ver record found for model-name = [" - + modelName + "]\n"; - throw new AAIException("AAI_6132", emsg); - } - - return retArr; - }// End getModelVerIdsUsingName() - - - /** - * Gets the model top widget type. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param modelVersionId the model-version-id - * @param modelInvId the model-invariant-id - * @param modelName the model-name - * @return the model top widget type - * @throws AAIException the AAI exception - */ - public String getModelVerTopWidgetType( String transId, String fromAppId, - String modelVersionId, String modelInvId, String modelName ) - throws AAIException { - - // Could be given a model-ver's key info (model-version-id), OR, just a (non-unique) model-name, - // Or just a model-invariant-id (which could have multiple model-ver records under it). - // In any case, they should only map to one single "top" node-type for the first element. - - String nodeType = "?"; - Iterator<Vertex> modVerVertsIter; - - if( modelVersionId != null && !modelVersionId.equals("") ){ - // this would be the best - we can just look up the model-ver records directly - modVerVertsIter = this.engine.asAdmin().getReadOnlyTraversalSource().V().has(AAIProperties.NODE_TYPE,"model-ver").has("model-version-id",modelVersionId); - } - else if( modelName != null && !modelName.equals("") ){ - modVerVertsIter = this.engine.asAdmin().getReadOnlyTraversalSource().V().has(AAIProperties.NODE_TYPE,"model-ver").has("model-name",modelName); - } - else if( modelInvId != null && !modelInvId.equals("") ){ - modVerVertsIter = getModVersUsingModelInvId(transId, fromAppId, modelInvId); - } - else { - String msg = "Neither modelVersionId, modelInvariantId, nor modelName passed to: getModelVerTopWidgetType() "; - throw new AAIException("AAI_6120", msg); - } - - if( !modVerVertsIter.hasNext() ){ - String emsg = "model-ver record(s) could not be found for model data passed: modelInvariantId = [" + modelInvId + - "], modeVersionId = [" + modelVersionId + "], modelName = [" + modelName + "]\n"; - throw new AAIException("AAI_6114", emsg); - } - else { - String lastNT = ""; - if( !modVerVertsIter.hasNext() ){ - String emsg = "model-ver record(s) could not be found for model data passed: modelInvariantId = [" + modelInvId + - "], modeVersionId = [" + modelVersionId + "], modelName = [" + modelName + "]\n"; - throw new AAIException("AAI_6114", emsg); - } - while( modVerVertsIter.hasNext() ){ - Vertex tmpModVerVtx = modVerVertsIter.next(); - String tmpNT = getModelVerTopWidgetType( tmpModVerVtx, "" ); - if( lastNT != null && !lastNT.equals("") ){ - if( !lastNT.equals(tmpNT) ){ - String emsg = "Different top-node-types (" + tmpNT + ", " + lastNT - + ") found for model data passed. (" + - " modelVersionId = [" + modelVersionId + - "], modelId = [" + modelInvId + - "], modelName = [" + modelName + - "])\n"; - throw new AAIException("AAI_6114", emsg); - } - } - lastNT = tmpNT; - nodeType = tmpNT; - } - } - - return nodeType; - - }// End getModelVerTopWidgetType() - - - /** - * Gets the widget type that this model-ver starts with. - * - * @param modVerVtx the model-version vtx - * @param elementTrail the element trail - * @return the widget type of the starting node of this model - * @throws AAIException the AAI exception - */ - public String getModelVerTopWidgetType(Vertex modVerVtx, String elementTrail ) - throws AAIException { - // Get the associated nodeType (Ie. aai-node-type / widget-type) for a model-ver. - // NOTE -- if the element points to a resource or service model, then we'll return the - // widget-type of the first element (crown widget) for that model. - String modelType = getModelTypeFromModelVer( modVerVtx, elementTrail ); - if( modelType == null ){ - String msg = " Could not determine modelType in getModelVerTopWidgetType(). elementTrail = [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - String thisElementNodeType = "?"; - if( modelType.equals("widget") ){ - // NOTE: for models that have model-type = "widget", their child model-ver nodes will - // have "model-name" which maps directly to aai-node-type (all model-ver's under one - // model should start with the same widget-type, so we only need to look at one). - thisElementNodeType = modVerVtx.<String>property("model-name").orElse(null); - if( (thisElementNodeType == null) || thisElementNodeType.equals("") ){ - String msg = "Could not find model-name for the widget model pointed to by element at [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - } - else if( modelType.equals("resource") || modelType.equals("service") ){ - Vertex relatedTopElementVtx = getTopElementForSvcOrResModelVer( modVerVtx, elementTrail ); - Vertex relatedModVerVtx = getModelVerThatElementRepresents( relatedTopElementVtx, elementTrail ); - thisElementNodeType = relatedModVerVtx.<String>property("model-name").orElse(null); - if( (thisElementNodeType == null) || thisElementNodeType.equals("") ){ - String msg = "Could not find model-name for the widget model pointed to by element at [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - } - else { - String msg = " Unrecognized model-type = [" + modelType + "] pointed to by element at [" + elementTrail + "]."; - throw new AAIException("AAI_6132", msg); - } - - return thisElementNodeType; - - }// getModelVerTopWidgetType() - - - /** - * Validate model. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param modelVersionIdVal the model name version id - * @param apiVersion the api version - * @throws AAIException the AAI exception - */ - public void validateModel(String transId, String fromAppId, String modelVersionIdVal, String apiVersion ) - throws AAIException { - - // Note - this will throw an exception if the model either can't be found, or if - // we can't figure out its topology map. - Vertex modelVerVtx = getNodeUsingUniqueId(transId, fromAppId, "model-ver", - "model-version-id", modelVersionIdVal); - if( modelVerVtx == null ){ - String msg = " Could not find model-ver with modelVersionId = [" + modelVersionIdVal + "]."; - throw new AAIException("AAI_6114", msg); - } - else { - Multimap<String, String> topoMap = genTopoMap4ModelVer( transId, fromAppId, - modelVerVtx, modelVersionIdVal); - String msg = " modelVer [" + modelVersionIdVal + "] topo multiMap looks like: \n[" + topoMap + "]"; - System.out.println("INFO -- " + msg ); - } - }// End validateModel() - - - /** - * Validate named query. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param namedQueryUuid the named query uuid - * @param apiVersion the api version - * @throws AAIException the AAI exception - */ - public void validateNamedQuery(String transId, String fromAppId, String namedQueryUuid, String apiVersion ) - throws AAIException { - - // Note - this will throw an exception if the named query either can't be found, or if - // we can't figure out its topology map. - Vertex nqVtx = getNodeUsingUniqueId(transId, fromAppId, "named-query", - "named-query-uuid", namedQueryUuid); - - if( nqVtx == null ){ - String msg = " Could not find named-query with namedQueryUuid = [" + namedQueryUuid + "]."; - throw new AAIException("AAI_6114", msg); - } - else { - //Multimap<String, String> topoMap = genTopoMap4NamedQ( "junkTransId", "junkFromAppId", - // graph, nqVtx, namedQueryUuid ); - //System.out.println("DEBUG -- for test only : --- "); - //System.out.println("DEBUG -- topomap = [" + topoMap + "]"); - } - - }// End validateNamedQuery() - - - /** - * Show result set. - * - * @param resSet the res set - * @param levelCount the level count - */ - public void showResultSet(ResultSet resSet, int levelCount ) { - - levelCount++; - String propsStr = ""; - for( int i= 1; i <= levelCount; i++ ){ - propsStr = propsStr + "-"; - } - if( resSet.getVert() == null ){ - return; - } - String nt = resSet.getVert().<String>property(AAIProperties.NODE_TYPE).orElse(null); - propsStr = propsStr + "[" + nt + "] "; - - //propsStr = propsStr + " newDataDelFlag = " + resSet.getNewDataDelFlag() + ", trail = " + resSet.getLocationInModelSubGraph(); - //propsStr = propsStr + "limitDesc = [" + resSet.getPropertyLimitDesc() + "]"; - propsStr = propsStr + " trail = " + resSet.getLocationInModelSubGraph(); - - Map<String,Object> overrideHash = resSet.getPropertyOverRideHash(); - if( overrideHash != null && !overrideHash.isEmpty() ){ - for( Map.Entry<String, Object> entry : overrideHash.entrySet() ){ - String propName = entry.getKey(); - Object propVal = entry.getValue(); - propsStr = propsStr + " [" + propName + " = " + propVal + "]"; - } - } - else { - Iterator<VertexProperty<Object>> pI = resSet.getVert().properties(); - while( pI.hasNext() ){ - VertexProperty<Object> tp = pI.next(); - if( ! tp.key().startsWith("aai") - && ! tp.key().equals("source-of-truth") - //&& ! tp.key().equals("resource-version") - && ! tp.key().startsWith("last-mod") - ) - { - propsStr = propsStr + " [" + tp.key() + " = " + tp.value() + "]"; - } - } - } - // Show the "extra" lookup values too - Map<String,Object> extraPropHash = resSet.getExtraPropertyHash(); - if( extraPropHash != null && !extraPropHash.isEmpty() ){ - for( Map.Entry<String, Object> entry : extraPropHash.entrySet() ){ - String propName = entry.getKey(); - Object propVal = entry.getValue(); - propsStr = propsStr + " [" + propName + " = " + propVal.toString() + "]"; - } - } - - System.out.println( propsStr ); - logger.info(propsStr); - - if( !resSet.getSubResultSet().isEmpty() ){ - ListIterator<ResultSet> listItr = resSet.getSubResultSet().listIterator(); - while( listItr.hasNext() ){ - showResultSet( listItr.next(), levelCount ); - } - } - - }// end of showResultSet() - - private Iterator<Vertex> traverseIncidentEdges(EdgeType treeType, Vertex startV, String connectedNodeType) throws AAIException { - return this.engine.getQueryBuilder(startV).createEdgeTraversal(treeType, startV, loader.introspectorFromName(connectedNodeType)); - } - - private Iterator<Vertex> traverseIncidentEdges(EdgeType treeType, Vertex startV, String... connectedNodeType) throws AAIException { - QueryBuilder[] builders = new QueryBuilder[connectedNodeType.length]; - for (int i = 0; i < connectedNodeType.length; i++) { - builders[i] = this.engine.getQueryBuilder(startV).createEdgeTraversal(EdgeType.TREE, startV, loader.introspectorFromName(connectedNodeType[i])); - } - return this.engine.getQueryBuilder(startV).union(builders); - } - - private String addDBAliasedSuffix(String propName) { - return propName + AAIProperties.DB_ALIAS_SUFFIX; - } - - protected String getPropNameWithAliasIfNeeded(String nodeType, String propName) throws AAIUnknownObjectException { - - String retPropName = propName; - if( loader.introspectorFromName(nodeType).getPropertyMetadata(propName, PropertyMetadata.DB_ALIAS).isPresent() ){ - return propName + AAIProperties.DB_ALIAS_SUFFIX; - } - return retPropName; - } - -} + + targetNodeType + "] propertyName = [" + srcProp + "], propVal = [" + + valFromInstance + "] so related-lookup is being abandoned."); + return retHash; + } else { + Vertex tmpVtx = result.get(); + // Pick up the properties from the target vertex that they wanted us to get + for (int j = 0; j < propCollectList.size(); j++) { + String tmpPropName = propCollectList.get(j); + tmpPropName = getPropNameWithAliasIfNeeded(targetNodeType, tmpPropName); + Object valObj = tmpVtx.<Object>property(tmpPropName).orElse(null); + String lookupKey = targetNodeType + "." + tmpPropName; + retHash.put(lookupKey, valObj); + + } + } + } + + return retHash; + + } // End of getNamedQueryExtraDataLookup() + + /** + * Collect NQ element hash. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param thisLevelElemVtx the element verrtx for this level + * @param incomingTrail the incoming trail -- trail of nodeTypes that got us here (this + * nq-element vertex) from the top + * @param currentHash the current hash + * @param vidsTraversed the vids traversed -- ArrayList of vertexId's that we traversed to get + * to this point + * @param levelCounter the level counter + * @return HashMap of all widget-points on a namedQuery topology with the value being the + * "named-query-element-uuid" for that spot. + * @throws AAIException the AAI exception + */ + public Map<String, String> collectNQElementHash(String transId, String fromAppId, + Vertex thisLevelElemVtx, String incomingTrail, Map<String, String> currentHash, + List<String> vidsTraversed, int levelCounter) throws AAIException { + + levelCounter++; + + Map<String, String> thisHash = new HashMap<>(); + thisHash.putAll(currentHash); + + if (levelCounter > MAX_LEVELS) { + throw new AAIException("AAI_6125", + "collectNQElementHash() has looped across more levels than allowed: " + MAX_LEVELS + + ". "); + } + String thisGuysTrail = ""; + String thisElemVid = thisLevelElemVtx.id().toString(); + + // Find out what widget (and thereby what aai-node-type) this element represents. + String thisElementNodeType = + getNqElementWidgetType(transId, fromAppId, thisLevelElemVtx, incomingTrail); + + if (incomingTrail == null || incomingTrail.equals("")) { + // This is the first one + thisGuysTrail = thisElementNodeType; + } else { + thisGuysTrail = incomingTrail + "|" + thisElementNodeType; + } + vidsTraversed.add(thisElemVid); + + String nqElementUuid = + thisLevelElemVtx.<String>property("named-query-element-uuid").orElse(null); + if (nqElementUuid == null || nqElementUuid.equals("")) { + String msg = " named-query element UUID not found at trail = [" + incomingTrail + "]."; + throw new AAIException("AAI_6133", msg); + } + thisHash.put(thisGuysTrail, nqElementUuid); + + // Now go "down" and look at the sub-elements pointed to so we can get their data. + Iterator<Vertex> vertI = + this.traverseIncidentEdges(EdgeType.TREE, thisLevelElemVtx, "named-query-element"); + while (vertI != null && vertI.hasNext()) { + Vertex tmpVert = vertI.next(); + String vid = tmpVert.id().toString(); + Map<String, Object> elementHash = new HashMap(); + + String connectToType = tmpVert.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if (connectToType != null && connectToType.equals("named-query-element")) { + // This is what we would expect + elementHash.put(vid, tmpVert); + } else { + String msg = " named query element has [connectedTo] edge to improper nodeType= [" + + connectToType + "] trail = [" + incomingTrail + "]."; + throw new AAIException("AAI_6133", msg); + } + for (Map.Entry<String, Object> entry : elementHash.entrySet()) { + Vertex elVert = (Vertex) (entry.getValue()); + String tmpElVid = elVert.id().toString(); + if (!vidsTraversed.contains(tmpElVid)) { + // This is one we would like to use - so we'll recursively get it's result set + // to add to ours + Map<String, String> tmpHash = collectNQElementHash(transId, fromAppId, elVert, + thisGuysTrail, currentHash, vidsTraversed, levelCounter); + thisHash.putAll(tmpHash); + } + } + } + return thisHash; + + } // End of collectNQElementHash() + + /** + * Collect delete key hash. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param thisLevelElemVtx the element vertex at this level + * @param incomingTrail the incoming trail -- trail of nodeTypes that got us here (this vertex) + * from the top + * @param currentHash the current hash + * @param vidsTraversed the vids traversed ---- ArrayList of vertexId's that we traversed to get + * to this point + * @param levelCounter the level counter + * @param modConstraintHash the mod constraint hash + * @param overRideModelId the over ride model id + * @param overRideModelVersionId the over ride model version id + * @return HashMap of all widget-points on a model topology with the value being the + * "newDataDelFlag" for that spot. + * @throws AAIException the AAI exception + */ + public Map<String, String> collectDeleteKeyHash(String transId, String fromAppId, + Vertex thisLevelElemVtx, String incomingTrail, Map<String, String> currentHash, + List<String> vidsTraversed, int levelCounter, Map<String, Vertex> modConstraintHash, + String overRideModelId, String overRideModelVersionId) throws AAIException { + + levelCounter++; + + Map<String, String> thisHash = new HashMap<>(); + thisHash.putAll(currentHash); + + if (levelCounter > MAX_LEVELS) { + throw new AAIException("AAI_6125", + "collectDeleteKeyHash() has looped across more levels than allowed: " + MAX_LEVELS + + ". "); + } + String thisGuysTrail = ""; + String thisElemVid = thisLevelElemVtx.id().toString(); + Map<String, Vertex> modConstraintHash2Use = null; + + // If this element represents a resource or service model, then we will replace this element + // with + // the "top" element of that resource or service model. That model-element already points to + // its + // topology, so it will graft in that model's topology. + // EXCEPT - if this element has "linkage-points" defined, then we need to do some extra + // processing for how we join to that model and will not try to go any "deeper". + List<String> linkagePtList = new ArrayList<>(); + Iterator<VertexProperty<Object>> vpI = thisLevelElemVtx.properties("linkage-points"); + + // I am not sure why, but since "linkage-points" is an xml-element-wrapper in the OXM + // definition, + // we get back the whole array of Strings in one String - but still use the + // "vtx.properties()" to + // get it - but only look at the first thing returned by the iterator. + if (vpI.hasNext()) { + String tmpLinkageThing = (String) vpI.next().value(); + linkagePtList = makeSureItsAnArrayList(tmpLinkageThing); + } + + if (linkagePtList != null && !linkagePtList.isEmpty()) { + // Whatever this element is - we are connecting to it via a linkage-point + // We will figure out what to do and then return without going any deeper + String elemFlag = thisLevelElemVtx.<String>property("new-data-del-flag").orElse(null); + + Set<String> linkageConnectNodeTypes = getLinkageConnectNodeTypes(linkagePtList); + Iterator<?> linkNtIter = linkageConnectNodeTypes.iterator(); + String incTrail = ""; + if (incomingTrail != null && !incomingTrail.equals("")) { + incTrail = incomingTrail + "|"; + } + + while (linkNtIter.hasNext()) { + // The 'trail' (or trails) for this element should just be the to the first-contact + // on the linkage point + String linkTrail = incTrail + linkNtIter.next(); + Boolean alreadyTaggedFalse = false; + if (thisHash.containsKey(linkTrail) && thisHash.get(linkTrail).equals("F")) { + // some other path with a matching trail has the deleteFlag set to "F", so we do + // not want + // to override that since our model code only uses nodeTypes to know where it is + // - and we + // would rather do less deleting than needed instead of too much deleting. + alreadyTaggedFalse = true; + } + if (elemFlag != null && elemFlag.equals("T") && !alreadyTaggedFalse) { + // This trail should be marked with an "T" + thisHash.put(linkTrail, "T"); + } else { + thisHash.put(linkTrail, "F"); + } + } + return thisHash; + } + + // ---------------------------------------------------------------------------- + // If we got to here, then this was not an element that used a linkage-point + // ---------------------------------------------------------------------------- + + // Find out what widget-model (and thereby what aai-node-type) this element represents. + // Even if this element is pointing to a service or resource model, it must have a + // first element which is a single widget-type model. + String thisElementNodeType = getModElementWidgetType(thisLevelElemVtx, incomingTrail); + String firstElementModelInfo = ""; + + vidsTraversed.add(thisElemVid); + Vertex elementVtxForThisLevel = null; + Vertex thisElementsModelVerVtx = + getModelVerThatElementRepresents(thisLevelElemVtx, incomingTrail); + Vertex thisElementsModelVtx = getModelGivenModelVer(thisElementsModelVerVtx, incomingTrail); + String modType = getModelTypeFromModel(thisElementsModelVtx, incomingTrail); + String subModelFirstModInvId = + thisElementsModelVtx.<String>property("model-invariant-id").orElse(null); + String subModelFirstVerId = + thisElementsModelVerVtx.<String>property("model-version-id").orElse(null); + if (modType.equals("widget")) { + if (overRideModelId != null && !overRideModelId.equals("")) { + // Note - this is just to catch the correct model for the TOP node in a model since + // it will have an element which will always be a widget even though the model + // could be a resource or service model. + firstElementModelInfo = "," + overRideModelId + "," + overRideModelVersionId; + } + } else if (nodeTypeSupportsPersona(thisElementNodeType)) { + firstElementModelInfo = "," + subModelFirstModInvId + "," + subModelFirstVerId; + } + + if (incomingTrail.equals("")) { + // This is the first one + thisGuysTrail = thisElementNodeType + firstElementModelInfo; + } else { + thisGuysTrail = incomingTrail + "|" + thisElementNodeType + firstElementModelInfo; + } + + String tmpFlag = "F"; + Boolean stoppedByASvcOrResourceModelElement = false; + if (modType.equals("widget")) { + elementVtxForThisLevel = thisLevelElemVtx; + // For the element-model for the widget at this level, record it's delete flag + tmpFlag = elementVtxForThisLevel.<String>property("new-data-del-flag").orElse(null); + } else { + // For an element that is referring to a resource or service model, we replace + // this element with the "top" element for that resource/service model so that the + // topology of that resource/service model will be included in this topology. + String modelVerId = + thisElementsModelVerVtx.<String>property("model-version-id").orElse(null); + if (subModelFirstModInvId == null || subModelFirstModInvId.equals("") + || subModelFirstVerId == null || subModelFirstVerId.equals("")) { + throw new AAIException("AAI_6132", + "Bad Model Definition: Bad model-invariant-id or model-version-id. Model-version-id = " + + modelVerId + ", at [" + incomingTrail + "]"); + } + + // BUT -- if the model-element HERE at the resource/service level does NOT have + // it's new-data-del-flag set to "T", then we do not need to go down into the + // sub-model looking for delete-able things. + + tmpFlag = thisLevelElemVtx.<String>property("new-data-del-flag").orElse(null); + elementVtxForThisLevel = + getTopElementForSvcOrResModelVer(thisElementsModelVerVtx, thisGuysTrail); + if (tmpFlag != null && tmpFlag.equals("T")) { + modConstraintHash2Use = getModConstraintHash(thisLevelElemVtx, modConstraintHash); + } else { + stoppedByASvcOrResourceModelElement = true; + } + // For the element-model for the widget at this level, record it's delete flag + tmpFlag = elementVtxForThisLevel.<String>property("new-data-del-flag").orElse(null); + } + + String flag2Use = "F"; // by default we'll use "F" for the delete flag + if (!stoppedByASvcOrResourceModelElement) { + // Since we haven't been stopped by a resource/service level "F", we can look at the + // lower level flag + if (thisHash.containsKey(thisGuysTrail)) { + // We've seen this spot in the topology before - do not override the delete flag if + // the older one is "F" + // We will only over-ride it if the old one was "T" and the new one is "F" (anything + // but "T") + String oldFlag = thisHash.get(thisGuysTrail); + if (oldFlag.equals("T") && (tmpFlag != null) && tmpFlag.equals("T")) { + // The old flag was "T" and the new flag is also "T" + flag2Use = "T"; + } else { + // the old flag was not "F" - so don't override it + flag2Use = "F"; + } + } else if ((tmpFlag != null) && tmpFlag.equals("T")) { + // We have not seen this one, so we can set it to "T" if that's what it is. + flag2Use = "T"; + } + } + + thisHash.put(thisGuysTrail, flag2Use); + if (!stoppedByASvcOrResourceModelElement) { + // Since we haven't been stopped by a resource/service level "F", we will continue to + // go "down" and look at the elements pointed to so we can get their data. + Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, + elementVtxForThisLevel, "model-element", "constrained-element-set"); + while (vertI != null && vertI.hasNext()) { + Vertex tmpVert = vertI.next(); + String vid = tmpVert.id().toString(); + Map<String, Object> elementHash = new HashMap<>(); + + String connectToType = + tmpVert.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if (connectToType != null && connectToType.equals("model-element")) { + // A nice, regular old model-element + elementHash.put(vid, tmpVert); + } else if ((connectToType != null) + && connectToType.equals("constrained-element-set")) { + // translate the constrained-element-set into a hash of model-element Vertex's + String constrainedElementSetUuid = + tmpVert.<String>property("constrained-element-set-uuid").orElse(null); + if ((modConstraintHash2Use != null) + && modConstraintHash2Use.containsKey(constrainedElementSetUuid)) { + // This constrained-element-set is being superseded by a different one + Vertex replacementConstraintVert = + modConstraintHash.get(constrainedElementSetUuid); + elementHash = getNextStepElementsFromSet(replacementConstraintVert); + // Now that we've found and used the replacement constraint, we don't need + // to carry it along any farther + modConstraintHash.remove(constrainedElementSetUuid); + } else { + elementHash = getNextStepElementsFromSet(tmpVert); + } + } else { + String msg = " model-element has [connectedTo] edge to improper nodeType= [" + + connectToType + "] trail = [" + incomingTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + for (Map.Entry<String, Object> entry : elementHash.entrySet()) { + Vertex elVert = (Vertex) (entry.getValue()); + String tmpElVid = elVert.id().toString(); + String tmpElNT = getModElementWidgetType(elVert, thisGuysTrail); + check4EdgeRule(tmpElNT, thisElementNodeType); + if (!vidsTraversed.contains(tmpElVid)) { + // This is one we would like to use - so we'll recursively get it's result + // set to add to ours + Map<String, String> tmpHash = collectDeleteKeyHash(transId, fromAppId, + elVert, thisGuysTrail, currentHash, vidsTraversed, levelCounter, + modConstraintHash2Use, "", ""); + thisHash.putAll(tmpHash); + } + } + } + } + return thisHash; + + } // End of collectDeleteKeyHash() + + /** + * Gets the linkage connect node types. + * + * @param linkagePtList the linkage pt list + * @return the linkage connect node types + * @throws AAIException the AAI exception + */ + public Set<String> getLinkageConnectNodeTypes(List<String> linkagePtList) throws AAIException { + // linkage points are a path from the top of a model to where we link in. + // This method wants to just bring back a list of distinct last items. + // Ie: for the input with these two: "pserver|lag-link|l-interface" and + // "pserver|p-interface|l-interface" + // it would just return a single item, "l-interface" since both linkage points end in that + // same node-type. + + Set<String> linkPtSet = new HashSet<>(); + + if (linkagePtList == null) { + String detail = " Bad (null) linkagePtList passed to getLinkageConnectNodeTypes() "; + throw new AAIException("AAI_6125", detail); + } + + for (int i = 0; i < linkagePtList.size(); i++) { + String[] trailSteps = linkagePtList.get(i).split("\\|"); + if (trailSteps == null || trailSteps.length == 0) { + String detail = " Bad incomingTrail passed to getLinkageConnectNodeTypes(): [" + + linkagePtList + "] "; + throw new AAIException("AAI_6125", detail); + } + String lastStepNT = trailSteps[trailSteps.length - 1]; + linkPtSet.add(lastStepNT); + } + + return linkPtSet; + + }// End getLinkageConnectNodeTypes() + + /** + * Collect topology for model-ver. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param thisLevelElemVtx vertex to collect for + * @param incomingTrail the incoming trail -- trail of nodeTypes/personaInfo that got us here + * (this vertex) from the top + * @param currentMap the current map -- map that got us to this point (that we will use as the + * base of the map we will return) + * @param vidsTraversed the vids traversed -- ArrayList of vertexId's that we traversed to get + * to this point + * @param levelCounter the level counter + * @param modConstraintHash the mod constraint hash + * @param overRideModelInvId the override model-invariant-id + * @param overRideModelVersionId the override model-version-id + * @return Map of the topology + * @throws AAIException the AAI exception + */ + public Multimap<String, String> collectTopology4ModelVer(String transId, String fromAppId, + Vertex thisLevelElemVtx, String incomingTrail, Multimap<String, String> currentMap, + List<String> vidsTraversed, int levelCounter, Map<String, Vertex> modConstraintHash, + String overRideModelInvId, String overRideModelVersionId) throws AAIException { + + levelCounter++; + + Multimap<String, String> thisMap = ArrayListMultimap.create(); + thisMap.putAll(currentMap); + + if (levelCounter > MAX_LEVELS) { + throw new AAIException("AAI_6125", + "collectTopology4ModelVer() has looped across more levels than allowed: " + + MAX_LEVELS + ". "); + } + String thisGuysTrail = ""; + String thisElemVid = thisLevelElemVtx.id().toString(); + Map<String, Vertex> modConstraintHash2Use = null; + + // If this element represents a resource or service model, then we will replace this element + // with + // the "top" element of that resource or service model. That model-element already points to + // its + // topology, so it will graft in that model's topology. + // EXCEPT - if this element defines "linkage-points" defined, then we need to do some extra + // processing for how we join to that model. + + // Find out what widget-model (and thereby what aai-node-type) this element represents. + // Even if this element is pointing to a service or resource model, it must have a + // first element which is a single widget-type model. + String firstElementModelInfo = ""; + String thisElementNodeType = getModElementWidgetType(thisLevelElemVtx, incomingTrail); + if (nodeTypeSupportsPersona(thisElementNodeType) && overRideModelInvId != null + && !overRideModelInvId.equals("")) { + firstElementModelInfo = "," + overRideModelInvId + "," + overRideModelVersionId; + } + + Vertex elementVtxForThisLevel = null; + Vertex thisElementsModelVerVtx = + getModelVerThatElementRepresents(thisLevelElemVtx, incomingTrail); + String subModelFirstModInvId = ""; + String subModelFirstModVerId = ""; + String modInfo4Trail = ""; + String modType = getModelTypeFromModelVer(thisElementsModelVerVtx, incomingTrail); + if (modType.equals("resource") || modType.equals("service")) { + // For an element that is referring to a resource or service model, we replace this + // this element with the "top" element for that resource/service model so that the + // topology of that resource/service model gets included in this topology. + // -- Note - since that top element of a service or resource model will point to a + // widget model, + // we have to track what modelId/version it really maps so we can make our recursive + // call + Vertex thisElementsModelVtx = + getModelGivenModelVer(thisElementsModelVerVtx, incomingTrail); + subModelFirstModInvId = + thisElementsModelVtx.<String>property("model-invariant-id").orElse(null); + subModelFirstModVerId = + thisElementsModelVerVtx.<String>property("model-version-id").orElse(null); + + if (nodeTypeSupportsPersona(thisElementNodeType)) { + modInfo4Trail = "," + subModelFirstModInvId + "," + subModelFirstModVerId; + } + String modelVerId = + thisElementsModelVerVtx.<String>property("model-version-id").orElse(null); + if (subModelFirstModInvId == null || subModelFirstModInvId.equals("") + || subModelFirstModVerId == null || subModelFirstModVerId.equals("")) { + throw new AAIException("AAI_6132", + "Bad Model Definition: Bad model-invariant-id or model-version-id. Model-ver-id = " + + modelVerId); + } + + elementVtxForThisLevel = + getTopElementForSvcOrResModelVer(thisElementsModelVerVtx, incomingTrail); + modConstraintHash2Use = getModConstraintHash(thisLevelElemVtx, modConstraintHash); + } else { + elementVtxForThisLevel = thisLevelElemVtx; + } + + if (incomingTrail.equals("")) { + // This is the first one + thisGuysTrail = thisElementNodeType + firstElementModelInfo; + } else { + thisGuysTrail = incomingTrail + "|" + thisElementNodeType + modInfo4Trail; + } + + // We only want to ensure that a particular element does not repeat on a single "branch". + // It could show up on other branches in the case where it is a sub-model which is being + // used in more than one place. + // + List<String> thisTrailsVidsTraversed = new ArrayList<>(vidsTraversed); + thisTrailsVidsTraversed.add(thisElemVid); + + // Look at the elements pointed to at this level and add on their data + Iterator<Vertex> vertI = this.traverseIncidentEdges(EdgeType.TREE, elementVtxForThisLevel, + "model-element", "constrained-element-set"); + + while (vertI != null && vertI.hasNext()) { + Vertex tmpVert = vertI.next(); + String vid = tmpVert.id().toString(); + Map<String, Object> elementHash = new HashMap<>(); + String connectToType = tmpVert.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if (connectToType != null && connectToType.equals("model-element")) { + // A nice, regular old model-element + elementHash.put(vid, tmpVert); + } else if ((connectToType != null) && connectToType.equals("constrained-element-set")) { + // translate the constrained-element-set into a hash of model-element Vertex's + String constrainedElementSetUuid = + tmpVert.<String>property("constrained-element-set-uuid").orElse(null); + if ((modConstraintHash2Use != null) + && modConstraintHash2Use.containsKey(constrainedElementSetUuid)) { + // This constrained-element-set is being superseded by a different one + Vertex replacementConstraintVert = + modConstraintHash.get(constrainedElementSetUuid); + elementHash = getNextStepElementsFromSet(replacementConstraintVert); + // Now that we've found and used the replacement constraint, we don't need to + // carry it along any farther + modConstraintHash.remove(constrainedElementSetUuid); + } else { + elementHash = getNextStepElementsFromSet(tmpVert); + } + } else { + String msg = " model element has [connectedTo] edge to improper nodeType= [" + + connectToType + "] trail = [" + incomingTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + for (Map.Entry<String, Object> entry : elementHash.entrySet()) { + Vertex elVert = (Vertex) (entry.getValue()); + String tmpElVid = elVert.id().toString(); + String tmpElNT = getModElementWidgetType(elVert, thisGuysTrail); + String tmpElStepName = getModelElementStepName(elVert, thisGuysTrail); + + List<String> linkagePtList = new ArrayList<>(); + Iterator<VertexProperty<Object>> vpI = elVert.properties("linkage-points"); + + // I am not sure why, but since "linkage-points" is an xml-element-wrapper in the + // OXM definition, + // we get back the whole array of Strings in one String - but still use the + // "vtx.properties()" to + // get it - but only look at the first thing returned by the iterator. + if (vpI.hasNext()) { + String tmpLinkageThing = (String) vpI.next().value(); + linkagePtList = makeSureItsAnArrayList(tmpLinkageThing); + } + + if (linkagePtList != null && !linkagePtList.isEmpty()) { + // This is as far as we can go, we will use the linkage point info to define the + // rest of this "trail" + for (int i = 0; i < linkagePtList.size(); i++) { + Multimap<String, String> tmpMap = collectTopology4LinkagePoint(transId, + fromAppId, linkagePtList.get(i), thisGuysTrail, currentMap); + thisMap.putAll(tmpMap); + } + } else { + check4EdgeRule(tmpElNT, thisElementNodeType); + thisMap.put(thisGuysTrail, tmpElStepName); + if (!thisTrailsVidsTraversed.contains(tmpElVid)) { + // This is one we would like to use - so we'll recursively get it's result + // set to add to ours + Multimap<String, String> tmpMap = collectTopology4ModelVer(transId, + fromAppId, elVert, thisGuysTrail, currentMap, thisTrailsVidsTraversed, + levelCounter, modConstraintHash2Use, subModelFirstModInvId, + subModelFirstModVerId); + thisMap.putAll(tmpMap); + } else { + String modelElementUuid = + elVert.<String>property("model-element-uuid").orElse(null); + String msg = + "Bad Model Definition: looping model-element (model-element-uuid = [" + + modelElementUuid + "]) found trying to add step: [" + + tmpElStepName + "], " + " on trail = [" + thisGuysTrail + "]. "; + System.out.println(msg); + throw new AAIException("AAI_6132", msg); + } + } + } + } + + return thisMap; + + } // End of collectTopology4ModelVer() + + /** + * Check 4 edge rule. + * + * @param nodeTypeA the node type A + * @param nodeTypeB the node type B + * @throws AAIException the AAI exception + */ + public void check4EdgeRule(String nodeTypeA, String nodeTypeB) throws AAIException { + // Throw an exception if there is no defined edge rule for this combination of nodeTypes in + // DbEdgeRules. + + final EdgeIngestor edgeRules = + SpringContextAware.getApplicationContext().getBean(EdgeIngestor.class); + // final EdgeRules edgeRules = EdgeRules.getInstance(); + + EdgeRuleQuery.Builder baseQ = new EdgeRuleQuery.Builder(nodeTypeA, nodeTypeB); + if (!edgeRules.hasRule(baseQ.build())) { + + /* + * if( !edgeRules.hasEdgeRule(nodeTypeA, nodeTypeB) + * && !edgeRules.hasEdgeRule(nodeTypeB, nodeTypeA) ){ + */ + // There's no EdgeRule for this -- find out if one of the nodeTypes is invalid or if + // they are valid, but there's just no edgeRule for them. + try { + loader.introspectorFromName(nodeTypeA); + } catch (AAIUnknownObjectException e) { + String emsg = " Unrecognized nodeType aa [" + nodeTypeA + "]\n"; + throw new AAIException("AAI_6115", emsg); + } + try { + loader.introspectorFromName(nodeTypeB); + } catch (AAIUnknownObjectException e) { + String emsg = " Unrecognized nodeType bb [" + nodeTypeB + "]\n"; + throw new AAIException("AAI_6115", emsg); + } + + String msg = " No Edge Rule found for this pair of nodeTypes (order does not matter) [" + + nodeTypeA + "], [" + nodeTypeB + "]."; + throw new AAIException("AAI_6120", msg); + } + + } + + /** + * Collect topology 4 linkage point. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param linkagePointStrVal -- Note it is in reverse order from where we connect to it. + * @param incomingTrail -- trail of nodeTypes that got us here (this vertex) from the top + * @param currentMap the current map -- that got us to this point (that we will use as the base + * of the map we will return) + * @return Map of the topology + * @throws AAIException the AAI exception + */ + public Multimap<String, String> collectTopology4LinkagePoint(String transId, String fromAppId, + String linkagePointStrVal, String incomingTrail, Multimap<String, String> currentMap) + throws AAIException { + + Multimap<String, String> thisMap = ArrayListMultimap.create(); + thisMap.putAll(currentMap); + String thisGuysTrail = incomingTrail; + + // NOTE - "trails" can have multiple parts now since we track persona info for some. + // We just want to look at the node type info - which would be the piece + // before any commas (if there are any). + + String[] trailSteps = thisGuysTrail.split("\\|"); + if (trailSteps.length == 0) { + throw new AAIException("AAI_6125", + "Bad incomingTrail passed to collectTopology4LinkagePoint(): [" + incomingTrail + + "] "); + } + String lastStepString = trailSteps[trailSteps.length - 1]; + String[] stepPieces = lastStepString.split(","); + String lastStepNT = stepPieces[0]; + + // It is assumed that the linkagePoint string will be a pipe-delimited string where each + // piece is an AAIProperties.NODE_TYPE. For now, the first thing to connect to is what is on + // the farthest right. + // Example: linkagePoint = "pserver|p-interface|l-interface" would mean that we're + // connecting to the l-interface + // but that after that, we connect to a p-interface followed by a pserver. + // It might have been more clear to define it in the other direction, but for now, that is + // it. (16-07) + String linkagePointStr = linkagePointStrVal; + + // We are getting these with more than linkage thing in one string. + // Ie. "pserver|lag-interface|l-interface, pserver|p-interface|l-interface, + // vlan|l-interface" + linkagePointStr = linkagePointStr.replace("[", ""); + linkagePointStr = linkagePointStr.replace("]", ""); + linkagePointStr = linkagePointStr.replace(" ", ""); + + String[] linkage = linkagePointStr.split("\\,"); + for (int x = 0; x < linkage.length; x++) { + lastStepNT = stepPieces[0]; + String thisStepNT = ""; + String[] linkageSteps = linkage[x].split("\\|"); + if (linkageSteps.length == 0) { + throw new AAIException("AAI_6125", + "Bad linkagePointStr passed to collectTopology4LinkagePoint(): [" + + linkagePointStr + "] "); + } + for (int i = (linkageSteps.length - 1); i >= 0; i--) { + thisStepNT = linkageSteps[i]; + check4EdgeRule(lastStepNT, thisStepNT); + thisMap.put(thisGuysTrail, thisStepNT); + thisGuysTrail = thisGuysTrail + "|" + thisStepNT; + lastStepNT = thisStepNT; + } + } + return thisMap; + + } // End of collectTopology4LinkagePoint() + + /** + * Gets the next step elements from set. + * + * @param constrElemSetVtx the constr elem set vtx + * @return Hash of the set of model-elements this set represents + * @throws AAIException the AAI exception + */ + public Map<String, Object> getNextStepElementsFromSet(Vertex constrElemSetVtx) + throws AAIException { + // Take a constrained-element-set and figure out the total set of all the possible elements + // that it + // represents and return them as a Hash. + + Map<String, Object> retElementHash = new HashMap<>(); + + if (constrElemSetVtx == null) { + String msg = " getNextStepElementsFromSet() called with null constrElemSetVtx "; + throw new AAIException("AAI_6125", msg); + } + + String constrNodeType = + constrElemSetVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); + String constrElemSetUuid = + constrElemSetVtx.<String>property("constrained-element-set-uuid").orElse(null); + if (constrNodeType == null || !constrNodeType.equals("constrained-element-set")) { + String msg = " getNextStepElementsFromSet() called with wrong type model: [" + + constrNodeType + "]. "; + throw new AAIException("AAI_6125", msg); + } + + ArrayList<Vertex> choiceSetVertArray = new ArrayList<>(); + Iterator<Vertex> vertI = + this.traverseIncidentEdges(EdgeType.TREE, constrElemSetVtx, "element-choice-set"); + int setCount = 0; + while (vertI != null && vertI.hasNext()) { + Vertex choiceSetVertex = vertI.next(); + String constrSetType = + choiceSetVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if (constrSetType != null && constrSetType.equals("element-choice-set")) { + choiceSetVertArray.add(choiceSetVertex); + setCount++; + } + } + + if (setCount == 0) { + String msg = "No element-choice-set found under constrained-element-set-uuid = " + + constrElemSetUuid; + throw new AAIException("AAI_6132", msg); + } + + // Loop through each choice-set and grab the model-elements + for (int i = 0; i < setCount; i++) { + Vertex choiceSetVert = choiceSetVertArray.get(i); + Iterator<Vertex> mVertI = + this.traverseIncidentEdges(EdgeType.TREE, choiceSetVert, "model-element"); + int elCount = 0; + while (mVertI != null && mVertI.hasNext()) { + Vertex tmpElVertex = mVertI.next(); + String elNodeType = + tmpElVertex.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if (elNodeType != null && elNodeType.equals("model-element")) { + String tmpVid = tmpElVertex.id().toString(); + retElementHash.put(tmpVid, tmpElVertex); + elCount++; + } else { + // unsupported node type found for this choice-set + String msg = "Unsupported nodeType (" + elNodeType + + ") found under choice-set under constrained-element-set-uuid = " + + constrElemSetUuid; + throw new AAIException("AAI_6132", msg); + } + } + + if (elCount == 0) { + String msg = + "No model-elements found in choice-set under constrained-element-set-uuid = " + + constrElemSetUuid; + throw new AAIException("AAI_6132", msg); + } + + } + return retElementHash; + + } // End of getNextStepElementsFromSet() + + /** + * Gen topo map 4 named Q. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param queryVertex the query vertex + * @param namedQueryUuid the named query uuid + * @return MultiMap of valid next steps for each potential query-element + * @throws AAIException the AAI exception + */ + public Multimap<String, String> genTopoMap4NamedQ(String transId, String fromAppId, + Vertex queryVertex, String namedQueryUuid) throws AAIException { + + if (queryVertex == null) { + throw new AAIException("AAI_6125", "null queryVertex passed to genTopoMap4NamedQ()"); + } + + Multimap<String, String> initialEmptyMap = ArrayListMultimap.create(); + List<String> vidsTraversed = new ArrayList<>(); + + Vertex firstElementVertex = null; + Iterator<Vertex> vertI = + this.traverseIncidentEdges(EdgeType.TREE, queryVertex, "named-query-element"); + int elCount = 0; + while (vertI != null && vertI.hasNext()) { + elCount++; + firstElementVertex = vertI.next(); + } + + if (elCount > 1) { + throw new AAIException("AAI_6133", + "Illegal query defined: More than one first element defined for = " + + namedQueryUuid); + } + + if (firstElementVertex == null) { + throw new AAIException("AAI_6114", + "Could not find first query element = " + namedQueryUuid); + } + + Vertex modVtx = getModelThatNqElementRepresents(firstElementVertex, ""); + String modelType = getModelTypeFromModel(modVtx, ""); + if (!modelType.equals("widget")) { + throw new AAIException("AAI_6133", + "Bad Named Query Definition: First element must correspond to a widget type model. Named Query UUID = " + + namedQueryUuid); + } + + return collectTopology4NamedQ(transId, fromAppId, firstElementVertex, "", initialEmptyMap, + vidsTraversed, 0); + } // End of genTopoMap4NamedQ() + + /** + * Collect topology 4 named Q. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param thisLevelElemVtx the model element vertex for this level + * @param levelCounter the level counter + * @return resultSet + * @throws AAIException the AAI exception + */ + public Multimap<String, String> collectTopology4NamedQ(String transId, String fromAppId, + Vertex thisLevelElemVtx, String incomingTrail, Multimap<String, String> currentMap, + List<String> vidsTraversed, int levelCounter) throws AAIException { + + levelCounter++; + + Multimap<String, String> thisMap = ArrayListMultimap.create(); + thisMap.putAll(currentMap); + + String thisElemVid = thisLevelElemVtx.id().toString(); + if (levelCounter > MAX_LEVELS) { + throw new AAIException("AAI_6125", + "collectModelStructure() has looped across more levels than allowed: " + MAX_LEVELS + + ". "); + } + String thisGuysTrail = ""; + + // find out what widget (and thereby what aai-node-type) this element represents + String thisElementNodeType = + getNqElementWidgetType(transId, fromAppId, thisLevelElemVtx, incomingTrail); + + if (incomingTrail.equals("")) { + // This is the first one + thisGuysTrail = thisElementNodeType; + } else { + thisGuysTrail = incomingTrail + "|" + thisElementNodeType; + } + + vidsTraversed.add(thisElemVid); + // Look at the elements pointed to at this level and add on their data + Iterator<Vertex> vertI = + this.traverseIncidentEdges(EdgeType.TREE, thisLevelElemVtx, "named-query-element"); + while (vertI != null && vertI.hasNext()) { + Vertex tmpVert = vertI.next(); + String tmpVid = tmpVert.id().toString(); + String tmpElNT = getNqElementWidgetType(transId, fromAppId, tmpVert, thisGuysTrail); + thisMap.put(thisGuysTrail, tmpElNT); + if (!vidsTraversed.contains(tmpVid)) { + // This is one we would like to use - so we'll recursively get it's result set to + // add to ours + Multimap<String, String> tmpMap = collectTopology4NamedQ(transId, fromAppId, + tmpVert, thisGuysTrail, currentMap, vidsTraversed, levelCounter); + thisMap.putAll(tmpMap); + } + } + + return thisMap; + + } // End of collectTopology4NamedQ() + + /** + * Gets the model that NamedQuery element represents. + * + * @param elementVtx the NQ element vtx + * @param elementTrail the element trail + * @return the model that element represents + * @throws AAIException the AAI exception + */ + public Vertex getModelThatNqElementRepresents(Vertex elementVtx, String elementTrail) + throws AAIException { + + // Get the model that a named-query element represents + Vertex modVtx = null; + Iterator<Vertex> mvertI = this.traverseIncidentEdges(EdgeType.COUSIN, elementVtx, "model"); + int modCount = 0; + while (mvertI != null && mvertI.hasNext()) { + modCount++; + modVtx = mvertI.next(); + } + + if (modCount > 1) { + String msg = + "Illegal element defined: More than one model pointed to by a single named-query-element at [" + + elementTrail + "]."; + throw new AAIException("AAI_6125", msg); + } + + if (modVtx == null) { + String msg = "Bad named-query definition: Could not find model for element. "; + if (!elementTrail.equals("")) { + msg = + "Bad named-query definition: Could not find model for named-query-element at [" + + elementTrail + "]."; + } + throw new AAIException("AAI_6132", msg); + } + + String nodeType = modVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if ((nodeType != null) && nodeType.equals("model")) { + return modVtx; + } else { + String msg = + "Illegal Named Query element defined: expecting a 'model', but found 'isA' edge pointing to nodeType = " + + nodeType + "] at [" + elementTrail + "]."; + throw new AAIException("AAI_6125", msg); + } + + }// getModelThatNqElementRepresents() + + /** + * Gets the model-ver that element represents. + * + * @param elementVtx the element vtx + * @param elementTrail the element trail + * @return the model-ver that element represents + * @throws AAIException the AAI exception + */ + public Vertex getModelVerThatElementRepresents(Vertex elementVtx, String elementTrail) + throws AAIException { + + // Get the model-ver that an element represents + Vertex modVerVtx = null; + Iterator<Vertex> mvertI = + this.traverseIncidentEdges(EdgeType.COUSIN, elementVtx, "model-ver"); + int modCount = 0; + while (mvertI != null && mvertI.hasNext()) { + modCount++; + modVerVtx = mvertI.next(); + } + + if (modCount > 1) { + String msg = + "Illegal element defined: More than one model pointed to by a single element at [" + + elementTrail + "]."; + throw new AAIException("AAI_6125", msg); + } + + if (modVerVtx == null) { + String msg = "Bad model definition: Could not find model-ver for model-element. "; + if (!elementTrail.equals("")) { + msg = "Bad model definition: Could not find model-VER for model-element at [" + + elementTrail + "]."; + } + throw new AAIException("AAI_6132", msg); + } + + String nodeType = modVerVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if ((nodeType != null) && nodeType.equals("model-ver")) { + return modVerVtx; + } else { + String msg = + "Illegal model-element defined: expecting a 'model-ver', but found 'isA' edge pointing to nodeType = " + + nodeType + "] at [" + elementTrail + "]."; + throw new AAIException("AAI_6125", msg); + } + + }// getModelVerThatElementRepresents() + + /** + * Gets the model that is parent to model-ver node. + * + * @param modVerVtx the model-ver vtx + * @param elementTrail the element trail + * @return the model that element represents + * @throws AAIException the AAI exception + */ + public Vertex getModelGivenModelVer(Vertex modVerVtx, String elementTrail) throws AAIException { + + // Get the parent model for this "model-ver" node + Vertex modVtx = null; + Iterator<Vertex> mvertI = this.traverseIncidentEdges(EdgeType.TREE, modVerVtx, "model"); + int modCount = 0; + while (mvertI != null && mvertI.hasNext()) { + modCount++; + modVtx = mvertI.next(); + } + + if (modCount > 1) { + String msg = + "Illegal model-ver node defined: More than one model points to it with a 'has' edge [" + + elementTrail + "]."; + throw new AAIException("AAI_6125", msg); + } + + if (modVtx == null) { + String msg = "Bad model-ver node: Could not find parent model. "; + if (!elementTrail.equals("")) { + msg = "Bad model-ver node: Could not find parent model. [" + elementTrail + "]."; + } + throw new AAIException("AAI_6132", msg); + } + + String nodeType = modVtx.<String>property(AAIProperties.NODE_TYPE).orElse(null); + if ((nodeType != null) && nodeType.equals("model")) { + // Found what we were looking for. + return modVtx; + } else { + // Something is amiss + String msg = + " Could not find parent model node for model-ver node at [" + elementTrail + "]."; + throw new AAIException("AAI_6125", msg); + } + + }// getModelGivenModelVer() + + /** + * Gets the model type. + * + * @param modelVtx the model vtx + * @param elementTrail the element trail + * @return the model type + * @throws AAIException the AAI exception + */ + public String getModelTypeFromModel(Vertex modelVtx, String elementTrail) throws AAIException { + + // Get the model-type from a model vertex + if (modelVtx == null) { + String msg = " null modelVtx passed to getModelTypeFromModel() "; + throw new AAIException("AAI_6114", msg); + } + + String modelType = modelVtx.<String>property("model-type").orElse(null); + if ((modelType == null) || modelType.equals("")) { + String msg = + "Could not find model-type for model encountered at [" + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + if (!modelType.equals("widget") && !modelType.equals("resource") + && !modelType.equals("service")) { + String msg = "Unrecognized model-type, [" + modelType + + "] for model pointed to by element at [" + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + return modelType; + + }// getModelTypeFromModel() + + /** + * Gets the model type given model-ver + * + * @param modelVerVtx the model-ver vtx + * @param elementTrail the element trail + * @return the model type + * @throws AAIException the AAI exception + */ + public String getModelTypeFromModelVer(Vertex modelVerVtx, String elementTrail) + throws AAIException { + + // Get the model-type given a model-ver vertex + if (modelVerVtx == null) { + String msg = " null modelVerVtx passed to getModelTypeFromModelVer() "; + throw new AAIException("AAI_6114", msg); + } + + Vertex modVtx = getModelGivenModelVer(modelVerVtx, elementTrail); + String modelType = modVtx.<String>property("model-type").orElse(null); + if ((modelType == null) || modelType.equals("")) { + String msg = + "Could not find model-type for model encountered at [" + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + if (!modelType.equals("widget") && !modelType.equals("resource") + && !modelType.equals("service")) { + String msg = "Unrecognized model-type, [" + modelType + + "] for model pointed to by element at [" + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + return modelType; + + }// getModelTypeFromModelVer() + + /** + * Gets the model-element step name. + * + * @param elementVtx the model-element vtx + * @param elementTrail the element trail + * @return the element step name + * @throws AAIException the AAI exception + */ + public String getModelElementStepName(Vertex elementVtx, String elementTrail) + throws AAIException { + + // Get the "step name" for a model-element + // Step names look like this for widget-models: AAIProperties.NODE_TYPE + // Step names look like this for resource/service models: + // "aai-node-type,model-invariant-id,model-version-id" + // NOTE -- if the element points to a resource or service model, then we'll return the + // widget-type of the first element (crown widget) for that model. + String thisElementNodeType = "?"; + Vertex modVerVtx = getModelVerThatElementRepresents(elementVtx, elementTrail); + String modelType = getModelTypeFromModelVer(modVerVtx, elementTrail); + + if (modelType == null) { + String msg = + " could not determine modelType in getModelElementStepName(). elementTrail = [" + + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + if (modelType.equals("widget")) { + // NOTE: for models that have model-type = "widget", their "model-name" maps directly to + // aai-node-type + thisElementNodeType = modVerVtx.<String>property("model-name").orElse(null); + if ((thisElementNodeType == null) || thisElementNodeType.equals("")) { + String msg = + "Could not find model-name for the widget model pointed to by element at [" + + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + return thisElementNodeType; + } else if (modelType.equals("resource") || modelType.equals("service")) { + Vertex modVtx = getModelGivenModelVer(modVerVtx, elementTrail); + String modInvId = modVtx.<String>property("model-invariant-id").orElse(null); + String modVerId = modVerVtx.<String>property("model-version-id").orElse(null); + Vertex relatedTopElementModelVtx = + getTopElementForSvcOrResModelVer(modVerVtx, elementTrail); + Vertex relatedModelVtx = + getModelVerThatElementRepresents(relatedTopElementModelVtx, elementTrail); + thisElementNodeType = relatedModelVtx.<String>property("model-name").orElse(null); + + if ((thisElementNodeType == null) || thisElementNodeType.equals("")) { + String msg = + "Could not find model-name for the widget model pointed to by element at [" + + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + String stepName = ""; + if (nodeTypeSupportsPersona(thisElementNodeType)) { + // This nodeType that this resource or service model refers to does support + // persona-related fields, so + // we will use model-invariant-id and model-version-id as part of the step name. + stepName = thisElementNodeType + "," + modInvId + "," + modVerId; + } else { + stepName = thisElementNodeType; + } + return stepName; + } else { + String msg = " Unrecognized model-type = [" + modelType + "] pointed to by element at [" + + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + }// getModelElementStepName() + + /** + * Node type supports persona. + * + * @param nodeType the node type + * @return the boolean + * @throws AAIException the AAI exception + */ + public Boolean nodeTypeSupportsPersona(String nodeType) throws AAIException { + + if (nodeType == null || nodeType.equals("")) { + return false; + } + Introspector introspector = null; + try { + introspector = loader.introspectorFromName(nodeType); + } catch (AAIUnknownObjectException e) { + String emsg = " Unrecognized nodeType [" + nodeType + "]\n"; + throw new AAIException("AAI_6115", emsg); + } + + Collection<String> props4ThisNT = introspector.getProperties(); + return props4ThisNT.contains(addDBAliasedSuffix("model-invariant-id")) + && props4ThisNT.contains(addDBAliasedSuffix("model-version-id")); + + }// nodeTypeSupportsPersona() + + /** + * Gets a Named Query element's widget type. + * + * @param elementVtx the named-query element vtx + * @param elementTrail the element trail + * @return the element widget type + * @throws AAIException the AAI exception + */ + public String getNqElementWidgetType(String transId, String fromAppId, Vertex elementVtx, + String elementTrail) throws AAIException { + + String thisNqElementWidgetType = ""; + // Get the associated node-type for the model pointed to by a named-query-element. + // NOTE -- if the element points to a resource or service model, then we'll return the + // widget-type of the first element (crown widget) for that model. + Vertex modVtx = getModelThatNqElementRepresents(elementVtx, elementTrail); + String modelType = getModelTypeFromModel(modVtx, elementTrail); + + if (modelType == null || !modelType.equals("widget")) { + String emsg = " Model Type must be 'widget' for NamedQuery elements. Found [" + + modelType + "] at [" + elementTrail + "]\n"; + throw new AAIException("AAI_6132", emsg); + } else { + // For a Widget model, the nodeType is just mapped to the model-element.model-name + List<Vertex> modVerVtxArr = getModVersUsingModel(transId, fromAppId, modVtx); + if (modVerVtxArr != null && !modVerVtxArr.isEmpty()) { + thisNqElementWidgetType = + (modVerVtxArr.get(0)).<String>property("model-name").orElse(null); + } + if (thisNqElementWidgetType == null || thisNqElementWidgetType.equals("")) { + String emsg = " Widget type could not be determined at [" + elementTrail + "]\n"; + throw new AAIException("AAI_6132", emsg); + } else { + return thisNqElementWidgetType; + } + } + + }// End getNqElementWidgetType() + + /** + * Gets a model-element's top widget type. + * + * @param elementVtx the model element vtx + * @param elementTrail the element trail + * @return the element widget type + * @throws AAIException the AAI exception + */ + public String getModElementWidgetType(Vertex elementVtx, String elementTrail) + throws AAIException { + + // Get the associated node-type for the model-ver pointed to by a model-element. + // NOTE -- if the element points to a resource or service model, then we'll return the + // widget-type of the first element (crown widget) for that model. + Vertex modVerVtx = getModelVerThatElementRepresents(elementVtx, elementTrail); + return getModelVerTopWidgetType(modVerVtx, elementTrail); + + }// End getModElementWidgetType() + + /** + * Gets the node using unique identifier + * + * @param transId the trans id + * @param fromAppId the from app id + * @param nodeType the nodeType + * @param idPropertyName the property name of the unique identifier + * @param uniqueIdVal the UUID value + * @return unique vertex found using UUID + * @throws AAIException the AAI exception + */ + public Vertex getNodeUsingUniqueId(String transId, String fromAppId, String nodeType, + String idPropertyName, String uniqueIdVal) throws AAIException { + + // Given a unique identifier, get the Vertex + if (uniqueIdVal == null || uniqueIdVal.equals("")) { + String emsg = + " Bad uniqueIdVal passed to getNodeUsingUniqueId(): [" + uniqueIdVal + "]\n"; + throw new AAIException("AAI_6118", emsg); + } + + if (idPropertyName == null || idPropertyName.equals("")) { + String emsg = + " Bad idPropertyName passed to getNodeUsingUniqueId(): [" + idPropertyName + "]\n"; + throw new AAIException("AAI_6118", emsg); + } + + if (nodeType == null || nodeType.equals("")) { + String emsg = " Bad nodeType passed to getNodeUsingUniqueId(): [" + nodeType + "]\n"; + throw new AAIException("AAI_6118", emsg); + } + + Vertex uniqVtx = null; + Iterable<?> uniqVerts = null; + uniqVerts = engine.asAdmin().getReadOnlyTraversalSource().V() + .has(AAIProperties.NODE_TYPE, nodeType).has(idPropertyName, uniqueIdVal).toList(); + if (uniqVerts == null) { + String emsg = + "Node could not be found for nodeType = [" + nodeType + "], propertyName = [" + + idPropertyName + "], propertyValue = [" + uniqueIdVal + "]\n"; + throw new AAIException("AAI_6114", emsg); + } else { + int count = 0; + Iterator<?> uniqVertsIter = uniqVerts.iterator(); + if (!uniqVertsIter.hasNext()) { + String emsg = + "Node could not be found for nodeType = [" + nodeType + "], propertyName = [" + + idPropertyName + "], propertyValue = [" + uniqueIdVal + "]\n"; + throw new AAIException("AAI_6114", emsg); + } else { + while (uniqVertsIter.hasNext()) { + count++; + uniqVtx = (Vertex) uniqVertsIter.next(); + if (count > 1) { + String emsg = "More than one node found for nodeType = [" + nodeType + + "], propertyName = [" + idPropertyName + "], propertyValue = [" + + uniqueIdVal + "]\n"; + throw new AAIException("AAI_6132", emsg); + } + } + } + } + + return uniqVtx; + }// End getNodeUsingUniqueId() + + /** + * Gets the model-ver nodes using name. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param modelName the model name + * @return the model-ver's that use this name + * @throws AAIException the AAI exception + */ + public List<Vertex> getModelVersUsingName(String transId, String fromAppId, String modelName) + throws AAIException { + + // Given a "model-name", find the model-ver vertices that this maps to + if (modelName == null || modelName.equals("")) { + String emsg = " Bad modelName passed to getModelVersUsingName(): [" + modelName + "]\n"; + throw new AAIException("AAI_6118", emsg); + } + + List<Vertex> retVtxArr = new ArrayList<>(); + Iterator<Vertex> modVertsIter = this.engine.asAdmin().getReadOnlyTraversalSource().V() + .has(AAIProperties.NODE_TYPE, "model-ver").has("model-name", modelName); + if (!modVertsIter.hasNext()) { + String emsg = + "Model-ver record(s) could not be found for model-ver data passed. model-name = [" + + modelName + "]\n"; + throw new AAIException("AAI_6132", emsg); + } else { + while (modVertsIter.hasNext()) { + Vertex tmpModelVerVtx = modVertsIter.next(); + retVtxArr.add(tmpModelVerVtx); + } + } + + return retVtxArr; + + }// End getModelVersUsingName() + + /** + * Gets the model-ver nodes using model-invariant-id. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param modelInvId-invariant-id (uniquely identifies a model) + * @return the model-ver's defined for the corresponding model + * @throws AAIException the AAI exception + */ + public Iterator<Vertex> getModVersUsingModelInvId(String transId, String fromAppId, + String modelInvId) throws AAIException { + + // Given a "model-invariant-id", find the model-ver nodes that this maps to + if (modelInvId == null || modelInvId.equals("")) { + String emsg = " Bad model-invariant-id passed to getModVersUsingModelInvId(): [" + + modelInvId + "]\n"; + throw new AAIException("AAI_6118", emsg); + } + + Vertex modVtx = + getNodeUsingUniqueId(transId, fromAppId, "model", "model-invariant-id", modelInvId); + List<Vertex> retVtxArr = getModVersUsingModel(transId, fromAppId, modVtx); + if (retVtxArr == null || retVtxArr.isEmpty()) { + String emsg = + " Model-ver record(s) could not be found attached to model with model-invariant-id = [" + + modelInvId + "]\n"; + throw new AAIException("AAI_6132", emsg); + } + + return retVtxArr.iterator(); + }// End getModVersUsingModelInvId() + + /** + * Gets the model-ver nodes using a model node. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param modVtx vertex + * @return the model-ver's defined for the corresponding model + * @throws AAIException the AAI exception + */ + public List<Vertex> getModVersUsingModel(String transId, String fromAppId, Vertex modVtx) + throws AAIException { + + if (modVtx == null) { + String emsg = " Null model vertex passed to getModVersUsingModel(): "; + throw new AAIException("AAI_6118", emsg); + } + + List<Vertex> retVtxArr = new ArrayList<>(); + Iterator<Vertex> modVerVertsIter = + this.traverseIncidentEdges(EdgeType.TREE, modVtx, "model-ver"); + if (!modVerVertsIter.hasNext()) { + String modelInvId = modVtx.<String>property("model-invariant-id").orElse(null); + String emsg = + "Model-ver record(s) could not be found attached to model with model-invariant-id = [" + + modelInvId + "]\n"; + throw new AAIException("AAI_6132", emsg); + } else { + while (modVerVertsIter.hasNext()) { + Vertex tmpModelVtx = modVerVertsIter.next(); + retVtxArr.add(tmpModelVtx); + } + } + + return retVtxArr; + + }// End getModVersUsingModel() + + /** + * Gets the model-version-ids using model-name. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param modelName the model name + * @return the model uuids using name + * @throws AAIException the AAI exception + */ + public List<String> getModelVerIdsUsingName(String transId, String fromAppId, String modelName) + throws AAIException { + + // Given a model-name find the model-ver nodes that it maps to + if (modelName == null || modelName.equals("")) { + String emsg = + " Bad modelName passed to getModelVerIdsUsingName(): [" + modelName + "]\n"; + throw new AAIException("AAI_6118", emsg); + } + + List<String> retArr = new ArrayList<>(); + Iterator<Vertex> modVerVertsIter = this.engine.asAdmin().getReadOnlyTraversalSource().V() + .has(AAIProperties.NODE_TYPE, "model-ver").has("model-name", modelName); + if (!modVerVertsIter.hasNext()) { + String emsg = + " model-ver record(s) could not be found for model data passed. model-name = [" + + modelName + "]\n"; + throw new AAIException("AAI_6114", emsg); + } else { + while (modVerVertsIter.hasNext()) { + Vertex modelVerVtx = modVerVertsIter.next(); + String tmpUuid = modelVerVtx.<String>property("model-version-id").orElse(null); + if ((tmpUuid != null) && !tmpUuid.equals("") && !retArr.contains(tmpUuid)) { + retArr.add(tmpUuid); + } + } + } + + if (retArr.isEmpty()) { + String emsg = "No model-ver record found for model-name = [" + modelName + "]\n"; + throw new AAIException("AAI_6132", emsg); + } + + return retArr; + }// End getModelVerIdsUsingName() + + /** + * Gets the model top widget type. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param modelVersionId the model-version-id + * @param modelInvId the model-invariant-id + * @param modelName the model-name + * @return the model top widget type + * @throws AAIException the AAI exception + */ + public String getModelVerTopWidgetType(String transId, String fromAppId, String modelVersionId, + String modelInvId, String modelName) throws AAIException { + + // Could be given a model-ver's key info (model-version-id), OR, just a (non-unique) + // model-name, + // Or just a model-invariant-id (which could have multiple model-ver records under it). + // In any case, they should only map to one single "top" node-type for the first element. + + String nodeType = "?"; + Iterator<Vertex> modVerVertsIter; + + if (modelVersionId != null && !modelVersionId.equals("")) { + // this would be the best - we can just look up the model-ver records directly + modVerVertsIter = this.engine.asAdmin().getReadOnlyTraversalSource().V() + .has(AAIProperties.NODE_TYPE, "model-ver").has("model-version-id", modelVersionId); + } else if (modelName != null && !modelName.equals("")) { + modVerVertsIter = this.engine.asAdmin().getReadOnlyTraversalSource().V() + .has(AAIProperties.NODE_TYPE, "model-ver").has("model-name", modelName); + } else if (modelInvId != null && !modelInvId.equals("")) { + modVerVertsIter = getModVersUsingModelInvId(transId, fromAppId, modelInvId); + } else { + String msg = + "Neither modelVersionId, modelInvariantId, nor modelName passed to: getModelVerTopWidgetType() "; + throw new AAIException("AAI_6120", msg); + } + + if (!modVerVertsIter.hasNext()) { + String emsg = + "model-ver record(s) could not be found for model data passed: modelInvariantId = [" + + modelInvId + "], modeVersionId = [" + modelVersionId + "], modelName = [" + + modelName + "]\n"; + throw new AAIException("AAI_6114", emsg); + } else { + String lastNT = ""; + if (!modVerVertsIter.hasNext()) { + String emsg = + "model-ver record(s) could not be found for model data passed: modelInvariantId = [" + + modelInvId + "], modeVersionId = [" + modelVersionId + "], modelName = [" + + modelName + "]\n"; + throw new AAIException("AAI_6114", emsg); + } + while (modVerVertsIter.hasNext()) { + Vertex tmpModVerVtx = modVerVertsIter.next(); + String tmpNT = getModelVerTopWidgetType(tmpModVerVtx, ""); + if (lastNT != null && !lastNT.equals("")) { + if (!lastNT.equals(tmpNT)) { + String emsg = "Different top-node-types (" + tmpNT + ", " + lastNT + + ") found for model data passed. (" + " modelVersionId = [" + + modelVersionId + "], modelId = [" + modelInvId + "], modelName = [" + + modelName + "])\n"; + throw new AAIException("AAI_6114", emsg); + } + } + lastNT = tmpNT; + nodeType = tmpNT; + } + } + + return nodeType; + + }// End getModelVerTopWidgetType() + + /** + * Gets the widget type that this model-ver starts with. + * + * @param modVerVtx the model-version vtx + * @param elementTrail the element trail + * @return the widget type of the starting node of this model + * @throws AAIException the AAI exception + */ + public String getModelVerTopWidgetType(Vertex modVerVtx, String elementTrail) + throws AAIException { + // Get the associated nodeType (Ie. aai-node-type / widget-type) for a model-ver. + // NOTE -- if the element points to a resource or service model, then we'll return the + // widget-type of the first element (crown widget) for that model. + String modelType = getModelTypeFromModelVer(modVerVtx, elementTrail); + if (modelType == null) { + String msg = + " Could not determine modelType in getModelVerTopWidgetType(). elementTrail = [" + + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + String thisElementNodeType = "?"; + if (modelType.equals("widget")) { + // NOTE: for models that have model-type = "widget", their child model-ver nodes will + // have "model-name" which maps directly to aai-node-type (all model-ver's under one + // model should start with the same widget-type, so we only need to look at one). + thisElementNodeType = modVerVtx.<String>property("model-name").orElse(null); + if ((thisElementNodeType == null) || thisElementNodeType.equals("")) { + String msg = + "Could not find model-name for the widget model pointed to by element at [" + + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + } else if (modelType.equals("resource") || modelType.equals("service")) { + Vertex relatedTopElementVtx = getTopElementForSvcOrResModelVer(modVerVtx, elementTrail); + Vertex relatedModVerVtx = + getModelVerThatElementRepresents(relatedTopElementVtx, elementTrail); + thisElementNodeType = relatedModVerVtx.<String>property("model-name").orElse(null); + if ((thisElementNodeType == null) || thisElementNodeType.equals("")) { + String msg = + "Could not find model-name for the widget model pointed to by element at [" + + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + } else { + String msg = " Unrecognized model-type = [" + modelType + "] pointed to by element at [" + + elementTrail + "]."; + throw new AAIException("AAI_6132", msg); + } + + return thisElementNodeType; + + }// getModelVerTopWidgetType() + + /** + * Validate model. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param modelVersionIdVal the model name version id + * @param apiVersion the api version + * @throws AAIException the AAI exception + */ + public void validateModel(String transId, String fromAppId, String modelVersionIdVal, + String apiVersion) throws AAIException { + + // Note - this will throw an exception if the model either can't be found, or if + // we can't figure out its topology map. + Vertex modelVerVtx = getNodeUsingUniqueId(transId, fromAppId, "model-ver", + "model-version-id", modelVersionIdVal); + if (modelVerVtx == null) { + String msg = + " Could not find model-ver with modelVersionId = [" + modelVersionIdVal + "]."; + throw new AAIException("AAI_6114", msg); + } else { + Multimap<String, String> topoMap = + genTopoMap4ModelVer(transId, fromAppId, modelVerVtx, modelVersionIdVal); + String msg = " modelVer [" + modelVersionIdVal + "] topo multiMap looks like: \n[" + + topoMap + "]"; + System.out.println("INFO -- " + msg); + } + }// End validateModel() + + /** + * Validate named query. + * + * @param transId the trans id + * @param fromAppId the from app id + * @param namedQueryUuid the named query uuid + * @param apiVersion the api version + * @throws AAIException the AAI exception + */ + public void validateNamedQuery(String transId, String fromAppId, String namedQueryUuid, + String apiVersion) throws AAIException { + + // Note - this will throw an exception if the named query either can't be found, or if + // we can't figure out its topology map. + Vertex nqVtx = getNodeUsingUniqueId(transId, fromAppId, "named-query", "named-query-uuid", + namedQueryUuid); + + if (nqVtx == null) { + String msg = + " Could not find named-query with namedQueryUuid = [" + namedQueryUuid + "]."; + throw new AAIException("AAI_6114", msg); + } else { + // Multimap<String, String> topoMap = genTopoMap4NamedQ( "junkTransId", "junkFromAppId", + // graph, nqVtx, namedQueryUuid ); + // System.out.println("DEBUG -- for test only : --- "); + // System.out.println("DEBUG -- topomap = [" + topoMap + "]"); + } + + }// End validateNamedQuery() + + /** + * Show result set. + * + * @param resSet the res set + * @param levelCount the level count + */ + public void showResultSet(ResultSet resSet, int levelCount) { + + levelCount++; + String propsStr = ""; + for (int i = 1; i <= levelCount; i++) { + propsStr = propsStr + "-"; + } + if (resSet.getVert() == null) { + return; + } + String nt = resSet.getVert().<String>property(AAIProperties.NODE_TYPE).orElse(null); + propsStr = propsStr + "[" + nt + "] "; + + // propsStr = propsStr + " newDataDelFlag = " + resSet.getNewDataDelFlag() + ", trail = " + + // resSet.getLocationInModelSubGraph(); + // propsStr = propsStr + "limitDesc = [" + resSet.getPropertyLimitDesc() + "]"; + propsStr = propsStr + " trail = " + resSet.getLocationInModelSubGraph(); + + Map<String, Object> overrideHash = resSet.getPropertyOverRideHash(); + if (overrideHash != null && !overrideHash.isEmpty()) { + for (Map.Entry<String, Object> entry : overrideHash.entrySet()) { + String propName = entry.getKey(); + Object propVal = entry.getValue(); + propsStr = propsStr + " [" + propName + " = " + propVal + "]"; + } + } else { + Iterator<VertexProperty<Object>> pI = resSet.getVert().properties(); + while (pI.hasNext()) { + VertexProperty<Object> tp = pI.next(); + if (!tp.key().startsWith("aai") && !tp.key().equals("source-of-truth") + // && ! tp.key().equals("resource-version") + && !tp.key().startsWith("last-mod")) { + propsStr = propsStr + " [" + tp.key() + " = " + tp.value() + "]"; + } + } + } + // Show the "extra" lookup values too + Map<String, Object> extraPropHash = resSet.getExtraPropertyHash(); + if (extraPropHash != null && !extraPropHash.isEmpty()) { + for (Map.Entry<String, Object> entry : extraPropHash.entrySet()) { + String propName = entry.getKey(); + Object propVal = entry.getValue(); + propsStr = propsStr + " [" + propName + " = " + propVal.toString() + "]"; + } + } + + System.out.println(propsStr); + logger.info(propsStr); + + if (!resSet.getSubResultSet().isEmpty()) { + ListIterator<ResultSet> listItr = resSet.getSubResultSet().listIterator(); + while (listItr.hasNext()) { + showResultSet(listItr.next(), levelCount); + } + } + + }// end of showResultSet() + + private Iterator<Vertex> traverseIncidentEdges(EdgeType treeType, Vertex startV, + String connectedNodeType) throws AAIException { + return this.engine.getQueryBuilder(startV).createEdgeTraversal(treeType, startV, + loader.introspectorFromName(connectedNodeType)); + } + + private Iterator<Vertex> traverseIncidentEdges(EdgeType treeType, Vertex startV, + String... connectedNodeType) throws AAIException { + QueryBuilder[] builders = new QueryBuilder[connectedNodeType.length]; + for (int i = 0; i < connectedNodeType.length; i++) { + builders[i] = this.engine.getQueryBuilder(startV).createEdgeTraversal(EdgeType.TREE, + startV, loader.introspectorFromName(connectedNodeType[i])); + } + return this.engine.getQueryBuilder(startV).union(builders); + } + + private String addDBAliasedSuffix(String propName) { + return propName + AAIProperties.DB_ALIAS_SUFFIX; + } + + protected String getPropNameWithAliasIfNeeded(String nodeType, String propName) + throws AAIUnknownObjectException { + + String retPropName = propName; + if (loader.introspectorFromName(nodeType) + .getPropertyMetadata(propName, PropertyMetadata.DB_ALIAS).isPresent()) { + return propName + AAIProperties.DB_ALIAS_SUFFIX; + } + return retPropName; + } + +} diff --git a/aai-traversal/src/main/java/org/onap/aai/dbgraphgen/ResultSet.java b/aai-traversal/src/main/java/org/onap/aai/dbgraphgen/ResultSet.java index 2da0e0b..d50b978 100644 --- a/aai-traversal/src/main/java/org/onap/aai/dbgraphgen/ResultSet.java +++ b/aai-traversal/src/main/java/org/onap/aai/dbgraphgen/ResultSet.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -28,140 +28,131 @@ import org.apache.tinkerpop.gremlin.structure.Vertex; import org.onap.aai.dbgen.PropertyLimitDesc; public class ResultSet { - private Vertex vert; - private String newDataDelFlag; - private String doNotOutputFlag; - private String locationInModelSubGraph; - private List<ResultSet> subResultSet; - private PropertyLimitDesc propertyLimitDesc; - private Map<String,Object> propertyOverRideHash; - private Map<String,Object> extraPropertyHash; - - /** - * Instantiates a new result set. - */ - public ResultSet(){ - this.vert = null; - this.newDataDelFlag = ""; - this.doNotOutputFlag = ""; - this.locationInModelSubGraph = ""; - this.subResultSet = new ArrayList<>(); - this.propertyLimitDesc = null; - this.propertyOverRideHash = new HashMap<>(); - this.extraPropertyHash = new HashMap<>(); - } - - - public void setPropertyLimitDesc(PropertyLimitDesc pld) { - this.propertyLimitDesc = pld; - } - - /** - * Gets the vert. - * - * @return the vert - */ - public Vertex getVert(){ - return this.vert; - } - - /** - * Gets the sub result set. - * - * @return the sub result set - */ - public List<ResultSet> getSubResultSet(){ - return this.subResultSet; - } - - /** - * Gets the new data del flag. - * - * @return the new data del flag - */ - public String getNewDataDelFlag(){ - return this.newDataDelFlag; - } - - /** - * Gets the do not output flag. - * - * @return the do not output flag - */ - public String getDoNotOutputFlag(){ - return this.doNotOutputFlag; - } - - /** - * Gets the location in model sub graph. - * - * @return the location in model sub graph - */ - public String getLocationInModelSubGraph(){ - return this.locationInModelSubGraph; - } - - /** - * Gets the property limit desc. - * - * @return the property limit desc - */ - public PropertyLimitDesc getPropertyLimitDesc(){ - return this.propertyLimitDesc; - } - - /** - * Gets the property over ride hash. - * - * @return the property over ride hash - */ - public Map<String,Object> getPropertyOverRideHash(){ - return this.propertyOverRideHash; - } - - /** - * Gets the extra property hash. - * - * @return the extra property hash - */ - public Map<String,Object> getExtraPropertyHash(){ - return this.extraPropertyHash; - } - - - public void setVert(Vertex vert) { - this.vert = vert; - } - - - public void setNewDataDelFlag(String newDataDelFlag) { - this.newDataDelFlag = newDataDelFlag; - } - - - public void setDoNotOutputFlag(String doNotOutputFlag) { - this.doNotOutputFlag = doNotOutputFlag; - } - - - public void setLocationInModelSubGraph(String locationInModelSubGraph) { - this.locationInModelSubGraph = locationInModelSubGraph; - } - - - public void setSubResultSet(List<ResultSet> subResultSet) { - this.subResultSet = subResultSet; - } - - - public void setPropertyOverRideHash(Map<String, Object> propertyOverRideHash) { - this.propertyOverRideHash = propertyOverRideHash; - } - - - public void setExtraPropertyHash(Map<String, Object> extraPropertyHash) { - this.extraPropertyHash = extraPropertyHash; - } - + private Vertex vert; + private String newDataDelFlag; + private String doNotOutputFlag; + private String locationInModelSubGraph; + private List<ResultSet> subResultSet; + private PropertyLimitDesc propertyLimitDesc; + private Map<String, Object> propertyOverRideHash; + private Map<String, Object> extraPropertyHash; + + /** + * Instantiates a new result set. + */ + public ResultSet() { + this.vert = null; + this.newDataDelFlag = ""; + this.doNotOutputFlag = ""; + this.locationInModelSubGraph = ""; + this.subResultSet = new ArrayList<>(); + this.propertyLimitDesc = null; + this.propertyOverRideHash = new HashMap<>(); + this.extraPropertyHash = new HashMap<>(); + } + + public void setPropertyLimitDesc(PropertyLimitDesc pld) { + this.propertyLimitDesc = pld; + } + + /** + * Gets the vert. + * + * @return the vert + */ + public Vertex getVert() { + return this.vert; + } + + /** + * Gets the sub result set. + * + * @return the sub result set + */ + public List<ResultSet> getSubResultSet() { + return this.subResultSet; + } + + /** + * Gets the new data del flag. + * + * @return the new data del flag + */ + public String getNewDataDelFlag() { + return this.newDataDelFlag; + } + + /** + * Gets the do not output flag. + * + * @return the do not output flag + */ + public String getDoNotOutputFlag() { + return this.doNotOutputFlag; + } + + /** + * Gets the location in model sub graph. + * + * @return the location in model sub graph + */ + public String getLocationInModelSubGraph() { + return this.locationInModelSubGraph; + } + + /** + * Gets the property limit desc. + * + * @return the property limit desc + */ + public PropertyLimitDesc getPropertyLimitDesc() { + return this.propertyLimitDesc; + } + + /** + * Gets the property over ride hash. + * + * @return the property over ride hash + */ + public Map<String, Object> getPropertyOverRideHash() { + return this.propertyOverRideHash; + } + + /** + * Gets the extra property hash. + * + * @return the extra property hash + */ + public Map<String, Object> getExtraPropertyHash() { + return this.extraPropertyHash; + } + + public void setVert(Vertex vert) { + this.vert = vert; + } + + public void setNewDataDelFlag(String newDataDelFlag) { + this.newDataDelFlag = newDataDelFlag; + } + + public void setDoNotOutputFlag(String doNotOutputFlag) { + this.doNotOutputFlag = doNotOutputFlag; + } + + public void setLocationInModelSubGraph(String locationInModelSubGraph) { + this.locationInModelSubGraph = locationInModelSubGraph; + } + + public void setSubResultSet(List<ResultSet> subResultSet) { + this.subResultSet = subResultSet; + } + + public void setPropertyOverRideHash(Map<String, Object> propertyOverRideHash) { + this.propertyOverRideHash = propertyOverRideHash; + } + + public void setExtraPropertyHash(Map<String, Object> extraPropertyHash) { + this.extraPropertyHash = extraPropertyHash; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/dbgraphmap/SearchGraph.java b/aai-traversal/src/main/java/org/onap/aai/dbgraphmap/SearchGraph.java index 1ca7c82..1dc8ac1 100644 --- a/aai-traversal/src/main/java/org/onap/aai/dbgraphmap/SearchGraph.java +++ b/aai-traversal/src/main/java/org/onap/aai/dbgraphmap/SearchGraph.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -21,7 +21,19 @@ package org.onap.aai.dbgraphmap; import com.google.common.base.CaseFormat; import com.google.common.collect.Multimap; + import edu.emory.mathcs.backport.java.util.Collections; + +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.util.*; +import java.util.stream.Stream; + +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBException; + import org.apache.commons.lang3.StringUtils; import org.apache.tinkerpop.gremlin.process.traversal.P; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -63,17 +75,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.xml.bind.JAXBException; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.util.*; -import java.util.stream.Stream; - - - /** * Database Mapping class which acts as the middle man between the REST interface objects for the * Search namespace @@ -90,7 +91,8 @@ public class SearchGraph { private SchemaVersions schemaVersions; @Autowired - public SearchGraph(LoaderFactory loaderFactory, EdgeIngestor edgeIngestor, SchemaVersions schemaVersions) { + public SearchGraph(LoaderFactory loaderFactory, EdgeIngestor edgeIngestor, + SchemaVersions schemaVersions) { this.loaderFactory = loaderFactory; this.edgeIngestor = edgeIngestor; this.schemaVersions = schemaVersions; @@ -109,7 +111,8 @@ public class SearchGraph { genericQueryBuilder.getDbEngine().startTransaction(); if (genericQueryBuilder.getStartNodeType() == null) { - throw new AAIException("AAI_6120", "null start-node-type passed to the generic query"); + throw new AAIException("AAI_6120", + "null start-node-type passed to the generic query"); } if (genericQueryBuilder.getStartNodeKeyParams() == null) { @@ -121,25 +124,28 @@ public class SearchGraph { } if (genericQueryBuilder.getDepth() > 6) { - throw new AAIException("AAI_6120", "The maximum depth supported by the generic query is 6"); + throw new AAIException("AAI_6120", + "The maximum depth supported by the generic query is 6"); } final QueryBuilder queryBuilder; // there is an issue with service-instance - it is a unique node but still dependent // for now query it directly without attempting to craft a valid URI if (genericQueryBuilder.getStartNodeType().equalsIgnoreCase("service-instance") - && genericQueryBuilder.getStartNodeKeyParams().size() == 1) { - genericQueryBuilder.getLoader().introspectorFromName(genericQueryBuilder.getStartNodeType()); + && genericQueryBuilder.getStartNodeKeyParams().size() == 1) { + genericQueryBuilder.getLoader() + .introspectorFromName(genericQueryBuilder.getStartNodeType()); // Build a hash with keys to uniquely identify the start Node String keyName; String keyValue; QueryBuilder builder = genericQueryBuilder.getDbEngine().getQueryBuilder() - .getVerticesByIndexedProperty(AAIProperties.NODE_TYPE, "service-instance"); + .getVerticesByIndexedProperty(AAIProperties.NODE_TYPE, "service-instance"); for (String keyData : genericQueryBuilder.getStartNodeKeyParams()) { int colonIndex = keyData.indexOf(':'); if (colonIndex <= 0) { - throw new AAIException("AAI_6120", "Bad key param passed in: [" + keyData + "]"); + throw new AAIException("AAI_6120", + "Bad key param passed in: [" + keyData + "]"); } else { keyName = keyData.substring(0, colonIndex).split("\\.")[1]; keyValue = keyData.substring(colonIndex + 1); @@ -150,18 +156,20 @@ public class SearchGraph { queryBuilder = builder; } else { URI uri = craftUriFromQueryParams(genericQueryBuilder.getLoader(), - genericQueryBuilder.getStartNodeType(), genericQueryBuilder.getStartNodeKeyParams()); - queryBuilder = - genericQueryBuilder.getDbEngine().getQueryBuilder().createQueryFromURI(uri).getQueryBuilder(); + genericQueryBuilder.getStartNodeType(), + genericQueryBuilder.getStartNodeKeyParams()); + queryBuilder = genericQueryBuilder.getDbEngine().getQueryBuilder() + .createQueryFromURI(uri).getQueryBuilder(); } List<Vertex> results = queryBuilder.toList(); if (results.isEmpty()) { - String errorMessage = String.format("No Node of type %s ", genericQueryBuilder.getStartNodeType(), - " found for properties: %s", genericQueryBuilder.getStartNodeKeyParams().toString()); + String errorMessage = String.format("No Node of type %s ", + genericQueryBuilder.getStartNodeType(), " found for properties: %s", + genericQueryBuilder.getStartNodeKeyParams().toString()); throw new AAIException("AAI_6114", errorMessage); } else if (results.size() > 1) { String detail = "More than one Node found by getUniqueNode for params: " - + genericQueryBuilder.getStartNodeKeyParams().toString() + "\n"; + + genericQueryBuilder.getStartNodeKeyParams().toString() + "\n"; throw new AAIException("AAI_6112", detail); } @@ -170,34 +178,39 @@ public class SearchGraph { Collection<Vertex> ver = new HashSet<>(); List<Vertex> queryResults; GraphTraversalSource traversalSource = - genericQueryBuilder.getDbEngine().asAdmin().getReadOnlyTraversalSource(); + genericQueryBuilder.getDbEngine().asAdmin().getReadOnlyTraversalSource(); GraphTraversal<Vertex, Vertex> traversal; - if (genericQueryBuilder.getIncludeNodeTypes().contains(genericQueryBuilder.getStartNodeType()) - || genericQueryBuilder.getDepth() == 0 || genericQueryBuilder.getIncludeNodeTypes().contains("all")) + if (genericQueryBuilder.getIncludeNodeTypes() + .contains(genericQueryBuilder.getStartNodeType()) + || genericQueryBuilder.getDepth() == 0 + || genericQueryBuilder.getIncludeNodeTypes().contains("all")) ver.add(startNode); // Now look for a node of includeNodeType within a given depth - traversal = traversalSource.withSideEffect("x", ver).V(startNode).times(genericQueryBuilder.getDepth()) - .repeat(__.both().store("x")).cap("x").unfold(); + traversal = traversalSource.withSideEffect("x", ver).V(startNode) + .times(genericQueryBuilder.getDepth()).repeat(__.both().store("x")).cap("x") + .unfold(); if (!genericQueryBuilder.getIncludeNodeTypes().contains("all")) { - traversal.where(__.has(AAIProperties.NODE_TYPE, P.within(genericQueryBuilder.getIncludeNodeTypes()))); + traversal.where(__.has(AAIProperties.NODE_TYPE, + P.within(genericQueryBuilder.getIncludeNodeTypes()))); } queryResults = traversal.toList(); - if (queryResults.isEmpty()) { - AAIException aaiException = new AAIException("AAI_6114", "No nodes found - apipe was null/empty"); + AAIException aaiException = + new AAIException("AAI_6114", "No nodes found - apipe was null/empty"); ErrorLogHelper.logException(aaiException); } else { Introspector searchResults = createSearchResults(genericQueryBuilder.getLoader(), - genericQueryBuilder.getUrlBuilder(), queryResults); + genericQueryBuilder.getUrlBuilder(), queryResults); - String outputMediaType = getMediaType(genericQueryBuilder.getHeaders().getAcceptableMediaTypes()); + String outputMediaType = + getMediaType(genericQueryBuilder.getHeaders().getAcceptableMediaTypes()); org.onap.aai.introspection.MarshallerProperties properties = - new org.onap.aai.introspection.MarshallerProperties.Builder( - org.onap.aai.restcore.MediaType.getEnum(outputMediaType)).build(); + new org.onap.aai.introspection.MarshallerProperties.Builder( + org.onap.aai.restcore.MediaType.getEnum(outputMediaType)).build(); result = searchResults.marshal(properties); response = Response.ok().entity(result).build(); @@ -225,8 +238,8 @@ public class SearchGraph { return response; } - private URI craftUriFromQueryParams(Loader loader, String startNodeType, List<String> startNodeKeyParams) - throws UnsupportedEncodingException, AAIException { + private URI craftUriFromQueryParams(Loader loader, String startNodeType, + List<String> startNodeKeyParams) throws UnsupportedEncodingException, AAIException { Introspector relationship = loader.introspectorFromName("relationship"); relationship.setValue("related-to", startNodeType); @@ -271,40 +284,48 @@ public class SearchGraph { Introspector target; if (StringUtils.isBlank(nodesQuery.getTargetNodeType())) { - throw new AAIException("AAI_6120", "null or empty target-node-type passed to the node query"); + throw new AAIException("AAI_6120", + "null or empty target-node-type passed to the node query"); } try { - target = nodesQuery.getLoader().introspectorFromName(nodesQuery.getTargetNodeType()); + target = + nodesQuery.getLoader().introspectorFromName(nodesQuery.getTargetNodeType()); } catch (AAIUnknownObjectException e) { - throw new AAIException("AAI_6115", - "Unrecognized nodeType [" + nodesQuery.getTargetNodeType() + "] passed to node query."); + throw new AAIException("AAI_6115", "Unrecognized nodeType [" + + nodesQuery.getTargetNodeType() + "] passed to node query."); } - if (nodesQuery.getFilterParams().isEmpty() && nodesQuery.getEdgeFilterParams().isEmpty()) { - // For now, it's ok to pass no filter params. We'll just return ALL the nodes of the requested type. + if (nodesQuery.getFilterParams().isEmpty() + && nodesQuery.getEdgeFilterParams().isEmpty()) { + // For now, it's ok to pass no filter params. We'll just return ALL the nodes of the + // requested type. LOGGER.debug("No filters passed to the node query"); } - GraphTraversal<Vertex, Vertex> traversal = nodesQuery.getDbEngine().asAdmin().getReadOnlyTraversalSource() - .V().has(AAIProperties.NODE_TYPE, nodesQuery.getTargetNodeType()); + GraphTraversal<Vertex, Vertex> traversal = + nodesQuery.getDbEngine().asAdmin().getReadOnlyTraversalSource().V() + .has(AAIProperties.NODE_TYPE, nodesQuery.getTargetNodeType()); for (String filter : nodesQuery.getFilterParams()) { String[] pieces = filter.split(":"); if (pieces.length < 2) { - throw new AAIException("AAI_6120", "bad filter passed to node query: [" + filter + "]"); + throw new AAIException("AAI_6120", + "bad filter passed to node query: [" + filter + "]"); } else { String propName = this.findDbPropName(target, pieces[0]); String filterType = pieces[1]; if (filterType.equals(EQUALS)) { if (pieces.length < 3) { - throw new AAIException("AAI_6120", "No value passed for filter: [" + filter + "]"); + throw new AAIException("AAI_6120", + "No value passed for filter: [" + filter + "]"); } String value = "?"; if (pieces.length == 3) { value = pieces[2]; } else { // length > 3 - // When a ipv6 address comes in as a value, it has colons in it which require us to + // When a ipv6 address comes in as a value, it has colons in it which + // require us to // pull the "value" off the end of the filter differently int startPos4Value = propName.length() + filterType.length() + 3; value = filter.substring(startPos4Value); @@ -312,13 +333,15 @@ public class SearchGraph { traversal.has(propName, value); } else if (filterType.equals(DOES_NOT_EQUAL)) { if (pieces.length < 3) { - throw new AAIException("AAI_6120", "No value passed for filter: [" + filter + "]"); + throw new AAIException("AAI_6120", + "No value passed for filter: [" + filter + "]"); } String value = "?"; if (pieces.length == 3) { value = pieces[2]; } else { // length > 3 - // When a ipv6 address comes in as a value, it has colons in it which require us to + // When a ipv6 address comes in as a value, it has colons in it which + // require us to // pull the "value" off the end of the filter differently int startPos4Value = propName.length() + filterType.length() + 3; value = filter.substring(startPos4Value); @@ -329,7 +352,8 @@ public class SearchGraph { } else if (filterType.equals(DOES_NOT_EXIST)) { traversal.hasNot(propName); } else { - throw new AAIException("AAI_6120", "bad filterType passed: [" + filterType + "]"); + throw new AAIException("AAI_6120", + "bad filterType passed: [" + filterType + "]"); } } } @@ -337,7 +361,8 @@ public class SearchGraph { if (!nodesQuery.getEdgeFilterParams().isEmpty()) { // edge-filter=pserver:EXISTS: OR pserver:EXISTS:hostname:XXX // edge-filter=pserver:DOES-NOT-EXIST: OR pserver:DOES-NOT-EXIST:hostname:XXX - String filter = nodesQuery.getEdgeFilterParams().get(0); // we process and allow only one edge filter + String filter = nodesQuery.getEdgeFilterParams().get(0); // we process and allow + // only one edge filter // for now String[] pieces = filter.split(":"); if (pieces.length < 2 || pieces.length == 3 || pieces.length > 4) { @@ -347,13 +372,14 @@ public class SearchGraph { String filterType = pieces[1].toUpperCase(); Introspector otherNode; if (!filterType.equals(EXISTS) && !filterType.equals(DOES_NOT_EXIST)) { - throw new AAIException("AAI_6120", "bad filterType passed: [" + filterType + "]"); + throw new AAIException("AAI_6120", + "bad filterType passed: [" + filterType + "]"); } try { otherNode = nodesQuery.getLoader().introspectorFromName(nodeType); } catch (AAIUnknownObjectException e) { throw new AAIException("AAI_6115", - "Unrecognized nodeType [" + nodeType + "] passed to node query."); + "Unrecognized nodeType [" + nodeType + "] passed to node query."); } String propName = null; String propValue = null; @@ -385,12 +411,13 @@ public class SearchGraph { List<Vertex> results = traversal.toList(); Introspector searchResults = - createSearchResults(nodesQuery.getLoader(), nodesQuery.getUrlBuilder(), results); + createSearchResults(nodesQuery.getLoader(), nodesQuery.getUrlBuilder(), results); - String outputMediaType = getMediaType(nodesQuery.getHeaders().getAcceptableMediaTypes()); + String outputMediaType = + getMediaType(nodesQuery.getHeaders().getAcceptableMediaTypes()); org.onap.aai.introspection.MarshallerProperties properties = - new org.onap.aai.introspection.MarshallerProperties.Builder( - org.onap.aai.restcore.MediaType.getEnum(outputMediaType)).build(); + new org.onap.aai.introspection.MarshallerProperties.Builder( + org.onap.aai.restcore.MediaType.getEnum(outputMediaType)).build(); result = searchResults.marshal(properties); response = Response.ok().entity(result).build(); @@ -415,8 +442,8 @@ public class SearchGraph { return response; } - protected Introspector createSearchResults(Loader loader, UrlBuilder urlBuilder, List<Vertex> results) - throws AAIUnknownObjectException { + protected Introspector createSearchResults(Loader loader, UrlBuilder urlBuilder, + List<Vertex> results) throws AAIUnknownObjectException { Introspector searchResults = loader.introspectorFromName("search-results"); List<Object> resultDataList = searchResults.getValue("result-data"); Stream<Vertex> stream; @@ -461,7 +488,6 @@ public class SearchGraph { } } - /** * Gets the edge label. * @@ -471,8 +497,7 @@ public class SearchGraph { * @throws EdgeRuleNotFoundException The Edge Rule Not Found Exception */ public String[] getEdgeLabel(String targetNodeType, String nodeType) - throws EdgeRuleNotFoundException { - + throws EdgeRuleNotFoundException { EdgeRuleQuery query = new EdgeRuleQuery.Builder(targetNodeType, nodeType).build(); Multimap<String, EdgeRule> edgeRules = edgeIngestor.getRules(query); @@ -480,7 +505,6 @@ public class SearchGraph { return edgeRules.values().stream().map(EdgeRule::getLabel).toArray(String[]::new); } - /** * Run named query. * @@ -493,7 +517,7 @@ public class SearchGraph { * @throws AAIException the AAI exception */ public Response runNamedQuery(String fromAppId, String transId, String queryParameters, - AAIExtensionMap aaiExtMap) throws AAIException { + AAIExtensionMap aaiExtMap) throws AAIException { Introspector inventoryItems; boolean success = true; @@ -501,15 +525,16 @@ public class SearchGraph { try { MoxyLoader loader = (MoxyLoader) loaderFactory.createLoaderForVersion(ModelType.MOXY, - schemaVersions.getDefaultVersion()); + schemaVersions.getDefaultVersion()); DynamicJAXBContext jaxbContext = loader.getJAXBContext(); dbEngine = new JanusGraphDBEngine(QueryStyle.TRAVERSAL, loader); - DBSerializer serializer = - new DBSerializer(schemaVersions.getDefaultVersion(), dbEngine, ModelType.MOXY, fromAppId); + DBSerializer serializer = new DBSerializer(schemaVersions.getDefaultVersion(), dbEngine, + ModelType.MOXY, fromAppId); ModelBasedProcessing processor = new ModelBasedProcessing(loader, dbEngine, serializer); dbEngine.startTransaction(); - org.onap.aai.restcore.MediaType mediaType = org.onap.aai.restcore.MediaType.APPLICATION_JSON_TYPE; + org.onap.aai.restcore.MediaType mediaType = + org.onap.aai.restcore.MediaType.APPLICATION_JSON_TYPE; String contentType = aaiExtMap.getHttpServletRequest().getContentType(); if (contentType != null && contentType.contains("application/xml")) { mediaType = org.onap.aai.restcore.MediaType.APPLICATION_XML_TYPE; @@ -520,7 +545,8 @@ public class SearchGraph { } DynamicEntity modelAndNamedQuerySearch = (DynamicEntity) loader - .unmarshal("ModelAndNamedQuerySearch", queryParameters, mediaType).getUnderlyingObject(); + .unmarshal("ModelAndNamedQuerySearch", queryParameters, mediaType) + .getUnderlyingObject(); if (modelAndNamedQuerySearch == null) { throw new AAIException("AAI_5105"); } @@ -538,7 +564,8 @@ public class SearchGraph { namedQueryLookupHash.put("named-query-name", namedQuery.get("namedQueryName")); } if (namedQuery.isSet("namedQueryVersion")) { - namedQueryLookupHash.put("named-query-version", namedQuery.get("namedQueryVersion")); + namedQueryLookupHash.put("named-query-version", + namedQuery.get("namedQueryVersion")); } } @@ -546,7 +573,7 @@ public class SearchGraph { DbMethHelper dbMethHelper = new DbMethHelper(loader, dbEngine); List<Vertex> namedQueryVertices = - dbMethHelper.locateUniqueVertices("named-query", namedQueryLookupHash); + dbMethHelper.locateUniqueVertices("named-query", namedQueryLookupHash); for (Vertex vert : namedQueryVertices) { namedQueryUuid = vert.<String>property("named-query-uuid").orElse(null); // there should only be one, we'll pick the first if not @@ -563,15 +590,16 @@ public class SearchGraph { List<Map<String, Object>> startNodeFilterHash = new ArrayList<>(); mapInstanceFilters(modelAndNamedQuerySearch.get("instanceFilters"), startNodeFilterHash, - jaxbContext); + jaxbContext); Map<String, Object> secondaryFilterHash = new HashMap<>(); mapSecondaryFilters(modelAndNamedQuerySearch.get("secondaryFilts"), secondaryFilterHash, - jaxbContext); + jaxbContext); - List<ResultSet> resultSet = processor.queryByNamedQuery(transId, fromAppId, namedQueryUuid, - startNodeFilterHash, aaiExtMap.getApiVersion(), secondaryFilterCutPoint, secondaryFilterHash); + List<ResultSet> resultSet = + processor.queryByNamedQuery(transId, fromAppId, namedQueryUuid, startNodeFilterHash, + aaiExtMap.getApiVersion(), secondaryFilterCutPoint, secondaryFilterHash); inventoryItems = loader.introspectorFromName("inventory-response-items"); @@ -613,24 +641,23 @@ public class SearchGraph { * @throws UnsupportedEncodingException the unsupported encoding exception */ public Response executeModelOperation(String fromAppId, String transId, String queryParameters, - boolean isDelete, AAIExtensionMap aaiExtMap) - throws AAIException { + boolean isDelete, AAIExtensionMap aaiExtMap) throws AAIException { Response response; boolean success = true; TransactionalGraphEngine dbEngine = null; try { MoxyLoader loader = (MoxyLoader) loaderFactory.createLoaderForVersion(ModelType.MOXY, - schemaVersions.getDefaultVersion()); + schemaVersions.getDefaultVersion()); DynamicJAXBContext jaxbContext = loader.getJAXBContext(); dbEngine = new JanusGraphDBEngine(QueryStyle.TRAVERSAL, loader); - DBSerializer serializer = - new DBSerializer(schemaVersions.getDefaultVersion(), dbEngine, ModelType.MOXY, fromAppId); + DBSerializer serializer = new DBSerializer(schemaVersions.getDefaultVersion(), dbEngine, + ModelType.MOXY, fromAppId); ModelBasedProcessing processor = new ModelBasedProcessing(loader, dbEngine, serializer); dbEngine.startTransaction(); - - org.onap.aai.restcore.MediaType mediaType = org.onap.aai.restcore.MediaType.APPLICATION_JSON_TYPE; + org.onap.aai.restcore.MediaType mediaType = + org.onap.aai.restcore.MediaType.APPLICATION_JSON_TYPE; String contentType = aaiExtMap.getHttpServletRequest().getContentType(); if (contentType != null && contentType.contains("application/xml")) { mediaType = org.onap.aai.restcore.MediaType.APPLICATION_XML_TYPE; @@ -641,12 +668,12 @@ public class SearchGraph { } DynamicEntity modelAndNamedQuerySearch = (DynamicEntity) loader - .unmarshal("ModelAndNamedQuerySearch", queryParameters, mediaType).getUnderlyingObject(); + .unmarshal("ModelAndNamedQuerySearch", queryParameters, mediaType) + .getUnderlyingObject(); if (modelAndNamedQuerySearch == null) { throw new AAIException("AAI_5105"); } - String modelVersionId = null; String modelName = null; String modelInvariantId = null; @@ -663,7 +690,8 @@ public class SearchGraph { // 2. model-invariant-id (previously model-id) + model-version // 3. model-name + model-version - // we will support both using the OverloadedModel object in the v9 oxm. This allows us to unmarshal + // we will support both using the OverloadedModel object in the v9 oxm. This allows us + // to unmarshal // either an old-style model or new-style model + model-ver object if (modelAndNamedQuerySearch.isSet("queryParameters")) { DynamicEntity qp = modelAndNamedQuerySearch.get("queryParameters"); @@ -715,12 +743,13 @@ public class SearchGraph { List<Map<String, Object>> startNodeFilterHash = new ArrayList<>(); - String resourceVersion = mapInstanceFilters( modelAndNamedQuerySearch.get("instanceFilters"), - startNodeFilterHash, jaxbContext); + String resourceVersion = mapInstanceFilters( + modelAndNamedQuerySearch.get("instanceFilters"), startNodeFilterHash, jaxbContext); if (isDelete) { - List<ResultSet> resultSet = processor.queryByModel(transId, fromAppId, modelVersionId, modelInvariantId, + List<ResultSet> resultSet = + processor.queryByModel(transId, fromAppId, modelVersionId, modelInvariantId, modelName, topNodeType, startNodeFilterHash, aaiExtMap.getApiVersion()); unpackResultSet(resultSet, dbEngine, loader, serializer); @@ -730,8 +759,9 @@ public class SearchGraph { Vertex firstVert = rs.getVert(); String restURI = serializer.getURIForVertex(firstVert).toString(); String notificationVersion = schemaVersions.getDefaultVersion().toString(); - Map<String, String> delResult = processor.runDeleteByModel(transId, fromAppId, modelVersionId, - topNodeType, startNodeFilterHash.get(0), aaiExtMap.getApiVersion(), resourceVersion); + Map<String, String> delResult = + processor.runDeleteByModel(transId, fromAppId, modelVersionId, topNodeType, + startNodeFilterHash.get(0), aaiExtMap.getApiVersion(), resourceVersion); String resultStr = ""; for (Map.Entry<String, String> ent : delResult.entrySet()) { @@ -744,10 +774,12 @@ public class SearchGraph { response = Response.ok(resultStr.trim()).build(); } else { - List<ResultSet> resultSet = processor.queryByModel(transId, fromAppId, modelVersionId, modelInvariantId, + List<ResultSet> resultSet = + processor.queryByModel(transId, fromAppId, modelVersionId, modelInvariantId, modelName, topNodeType, startNodeFilterHash, aaiExtMap.getApiVersion()); - Introspector inventoryItems = loader.introspectorFromName("inventory-response-items"); + Introspector inventoryItems = + loader.introspectorFromName("inventory-response-items"); List<Object> invItemList = unpackResultSet(resultSet, dbEngine, loader, serializer); @@ -786,10 +818,10 @@ public class SearchGraph { org.onap.aai.introspection.MarshallerProperties properties; if (isJson) { properties = new org.onap.aai.introspection.MarshallerProperties.Builder( - org.onap.aai.restcore.MediaType.APPLICATION_JSON_TYPE).build(); + org.onap.aai.restcore.MediaType.APPLICATION_JSON_TYPE).build(); } else { properties = new org.onap.aai.introspection.MarshallerProperties.Builder( - org.onap.aai.restcore.MediaType.APPLICATION_XML_TYPE).build(); + org.onap.aai.restcore.MediaType.APPLICATION_XML_TYPE).build(); } String marshalledObj = obj.marshal(properties); @@ -804,14 +836,15 @@ public class SearchGraph { * @param jaxbContext the jaxb context * @return the string */ - private String mapInstanceFilters(DynamicEntity instanceFilters, List<Map<String, Object>> startNodeFilterHash, - DynamicJAXBContext jaxbContext) { + private String mapInstanceFilters(DynamicEntity instanceFilters, + List<Map<String, Object>> startNodeFilterHash, DynamicJAXBContext jaxbContext) { if (instanceFilters == null || !instanceFilters.isSet("instanceFilter")) { return null; } @SuppressWarnings("unchecked") - List<DynamicEntity> instanceFilter = (ArrayList<DynamicEntity>) instanceFilters.get("instanceFilter"); + List<DynamicEntity> instanceFilter = + (ArrayList<DynamicEntity>) instanceFilters.get("instanceFilter"); String resourceVersion = null; for (DynamicEntity instFilt : instanceFilter) { @@ -829,8 +862,9 @@ public class SearchGraph { // hyphencase the prop and throw it on the hash if (anyEnt.isSet(propName)) { thisNodeFilterHash.put( - nodeType + "." + CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, propName), - anyEnt.get(propName)); + nodeType + "." + + CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, propName), + anyEnt.get(propName)); if (propName.equals("resourceVersion") && resourceVersion == null) { resourceVersion = (String) anyEnt.get(propName); } @@ -850,14 +884,15 @@ public class SearchGraph { * @param jaxbContext the jaxb context * @return the string */ - private void mapSecondaryFilters(DynamicEntity secondaryFilts, Map<String, Object> secondaryFilterHash, - DynamicJAXBContext jaxbContext) { + private void mapSecondaryFilters(DynamicEntity secondaryFilts, + Map<String, Object> secondaryFilterHash, DynamicJAXBContext jaxbContext) { if (secondaryFilts == null || !secondaryFilts.isSet("secondaryFilt")) { return; } @SuppressWarnings("unchecked") - List<DynamicEntity> secondaryFilter = (ArrayList<DynamicEntity>) secondaryFilts.get("secondaryFilt"); + List<DynamicEntity> secondaryFilter = + (ArrayList<DynamicEntity>) secondaryFilts.get("secondaryFilt"); for (DynamicEntity secondaryFilt : secondaryFilter) { List<DynamicEntity> any = secondaryFilt.get("any"); @@ -874,8 +909,9 @@ public class SearchGraph { // hyphencase the prop and throw it on the hash if (anyEnt.isSet(propName)) { secondaryFilterHash.put( - nodeType + "." + CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, propName), - anyEnt.get(propName)); + nodeType + "." + + CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, propName), + anyEnt.get(propName)); } } } @@ -892,12 +928,12 @@ public class SearchGraph { * @param aaiExtMap the aai ext map * @return the dynamic entity */ - private DynamicEntity remapInventoryItems(DynamicEntity invResultItem, DynamicJAXBContext jaxbContext, - Map<String, String> includeTheseVertices, Map<Object, String> objectToVertMap, AAIExtensionMap aaiExtMap) { - + private DynamicEntity remapInventoryItems(DynamicEntity invResultItem, + DynamicJAXBContext jaxbContext, Map<String, String> includeTheseVertices, + Map<Object, String> objectToVertMap, AAIExtensionMap aaiExtMap) { - DynamicEntity inventoryItem = jaxbContext - .newDynamicEntity("inventory.aai.onap.org." + aaiExtMap.getApiVersion() + ".InventoryResponseItem"); + DynamicEntity inventoryItem = jaxbContext.newDynamicEntity( + "inventory.aai.onap.org." + aaiExtMap.getApiVersion() + ".InventoryResponseItem"); Object item = invResultItem.get("item"); inventoryItem.set("modelName", invResultItem.get("modelName")); inventoryItem.set("item", item); @@ -909,16 +945,17 @@ public class SearchGraph { vertexId = objectToVertMap.get(item); } - if (includeTheseVertices.containsKey(vertexId) && invResultItem.isSet("inventoryResponseItems")) { + if (includeTheseVertices.containsKey(vertexId) + && invResultItem.isSet("inventoryResponseItems")) { List<DynamicEntity> invItemList = new ArrayList<>(); DynamicEntity inventoryItems = jaxbContext.newDynamicEntity( - "inventory.aai.att.com." + aaiExtMap.getApiVersion() + ".InventoryResponseItems"); + "inventory.aai.att.com." + aaiExtMap.getApiVersion() + ".InventoryResponseItems"); DynamicEntity subInventoryResponseItems = invResultItem.get("inventoryResponseItems"); List<DynamicEntity> subInventoryResponseItemList = - subInventoryResponseItems.get("inventoryResponseItem"); + subInventoryResponseItems.get("inventoryResponseItem"); for (DynamicEntity ent : subInventoryResponseItemList) { - DynamicEntity invItem = - remapInventoryItems(ent, jaxbContext, includeTheseVertices, objectToVertMap, aaiExtMap); + DynamicEntity invItem = remapInventoryItems(ent, jaxbContext, includeTheseVertices, + objectToVertMap, aaiExtMap); if (invItem != null) { invItemList.add(invItem); } @@ -939,8 +976,9 @@ public class SearchGraph { * @return the array list - should return list of inventoryItems * @throws AAIException The AAI Exception */ - private List<Object> unpackResultSet(List<ResultSet> resultSetList, TransactionalGraphEngine engine, Loader loader, - DBSerializer serializer) throws AAIException { + private List<Object> unpackResultSet(List<ResultSet> resultSetList, + TransactionalGraphEngine engine, Loader loader, DBSerializer serializer) + throws AAIException { List<Object> resultList = new ArrayList<>(); @@ -965,7 +1003,8 @@ public class SearchGraph { if (resultSet.getExtraPropertyHash() != null) { Map<String, Object> extraProperties = resultSet.getExtraPropertyHash(); - Introspector extraPropertiesEntity = loader.introspectorFromName("extra-properties"); + Introspector extraPropertiesEntity = + loader.introspectorFromName("extra-properties"); List<Object> extraPropsList = extraPropertiesEntity.getValue("extra-property"); @@ -973,7 +1012,8 @@ public class SearchGraph { String propName = ent.getKey(); Object propVal = ent.getValue(); - Introspector extraPropEntity = loader.introspectorFromName("extra-property"); + Introspector extraPropEntity = + loader.introspectorFromName("extra-property"); extraPropEntity.setValue("property-name", propName); extraPropEntity.setValue("property-value", propVal); @@ -981,11 +1021,13 @@ public class SearchGraph { extraPropsList.add(extraPropEntity.getUnderlyingObject()); } - inventoryItem.setValue("extra-properties", extraPropertiesEntity.getUnderlyingObject()); + inventoryItem.setValue("extra-properties", + extraPropertiesEntity.getUnderlyingObject()); } try { - serializer.dbToObject(Collections.singletonList(vert), thisObj, 0, true, "false"); + serializer.dbToObject(Collections.singletonList(vert), thisObj, 0, true, + "false"); } catch (UnsupportedEncodingException e1) { throw new AAIException("AAI_5105"); } @@ -1001,7 +1043,8 @@ public class SearchGraph { filterProperties(thisObj, emptyPropertyOverRideHash); } else if (PropertyLimitDesc.SHOW_ALL.equals(propertyLimitDesc)) { // keep everything - } else if (PropertyLimitDesc.SHOW_NAME_AND_KEYS_ONLY.equals(propertyLimitDesc)) { + } else if (PropertyLimitDesc.SHOW_NAME_AND_KEYS_ONLY + .equals(propertyLimitDesc)) { HashMap<String, Object> keysAndNamesPropHash = new HashMap<>(); for (String key : thisObj.getAllKeys()) { @@ -1017,8 +1060,10 @@ public class SearchGraph { filterProperties(thisObj, keysAndNamesPropHash); } } else { - if (resultSet.getPropertyOverRideHash() != null && resultSet.getPropertyOverRideHash().size() > 0) { - Map<String, Object> propertyOverRideHash = resultSet.getPropertyOverRideHash(); + if (resultSet.getPropertyOverRideHash() != null + && resultSet.getPropertyOverRideHash().size() > 0) { + Map<String, Object> propertyOverRideHash = + resultSet.getPropertyOverRideHash(); if (propertyOverRideHash.containsKey("persona-model-id")) { propertyOverRideHash.remove("persona-model-id"); propertyOverRideHash.put("model-invariant-id", null); @@ -1037,25 +1082,32 @@ public class SearchGraph { String modelName = null; try { - // Try to get the modelName if we can. Otherwise, do not fail, just return what we have already. + // Try to get the modelName if we can. Otherwise, do not fail, just return + // what we have already. String modelInvariantIdLocal = - vert.<String>property("model-invariant-id-local").orElse(null); // this one - // points at a - // model + vert.<String>property("model-invariant-id-local").orElse(null); // this + // one + // points + // at a + // model String modelVersionIdLocal = - vert.<String>property("model-version-id-local").orElse(null); // this one - // points at a - // model-ver + vert.<String>property("model-version-id-local").orElse(null); // this + // one + // points + // at a + // model-ver if ((modelInvariantIdLocal != null && modelVersionIdLocal != null) - && (modelInvariantIdLocal.length() > 0 && modelVersionIdLocal.length() > 0)) { + && (modelInvariantIdLocal.length() > 0 + && modelVersionIdLocal.length() > 0)) { Introspector modelVer = loader.introspectorFromName("model-ver"); modelVer.setValue("model-version-id", modelVersionIdLocal); QueryBuilder builder = engine.getQueryBuilder().createDBQuery(modelVer); List<Vertex> modelVerVerts = builder.toList(); if ((modelVerVerts != null) && (modelVerVerts.size() == 1)) { Vertex modelVerVert = modelVerVerts.get(0); - modelName = modelVerVert.<String>property("model-name").orElse(null); + modelName = + modelVerVert.<String>property("model-name").orElse(null); if (modelName != null && modelName.length() > 0) { inventoryItem.setValue("model-name", modelName); } @@ -1069,11 +1121,12 @@ public class SearchGraph { if (resultSet.getSubResultSet() != null) { List<ResultSet> subResultSet = resultSet.getSubResultSet(); if (subResultSet != null && !subResultSet.isEmpty()) { - List<Object> res = unpackResultSet(subResultSet, engine, loader, serializer); + List<Object> res = + unpackResultSet(subResultSet, engine, loader, serializer); if (!res.isEmpty()) { inventoryItems.setValue("inventory-response-item", res); inventoryItem.setValue("inventory-response-items", - inventoryItems.getUnderlyingObject()); + inventoryItems.getUnderlyingObject()); } } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/AAIContainerFilter.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/AAIContainerFilter.java index f70febf..92c12b5 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/AAIContainerFilter.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/AAIContainerFilter.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -23,19 +23,19 @@ import java.util.UUID; import org.onap.aai.util.FormatDate; -public abstract class AAIContainerFilter { - - protected String genDate() { - FormatDate fd = new FormatDate("YYMMdd-HH:mm:ss:SSS"); - return fd.getDateTime(); - } - - protected boolean isValidUUID(String transId) { - try { - UUID.fromString(transId); - } catch (IllegalArgumentException e) { - return false; - } - return true; - } +public abstract class AAIContainerFilter { + + protected String genDate() { + FormatDate fd = new FormatDate("YYMMdd-HH:mm:ss:SSS"); + return fd.getDateTime(); + } + + protected boolean isValidUUID(String transId) { + try { + UUID.fromString(transId); + } catch (IllegalArgumentException e) { + return false; + } + return true; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/AAIHeaderProperties.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/AAIHeaderProperties.java index f27e4f2..22c8234 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/AAIHeaderProperties.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/AAIHeaderProperties.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -21,20 +21,21 @@ package org.onap.aai.interceptors; public final class AAIHeaderProperties { - public static final String REQUEST_CONTEXT = "aai-request-context"; + public static final String REQUEST_CONTEXT = "aai-request-context"; - public static final String HTTP_METHOD_OVERRIDE = "X-HTTP-Method-Override"; + public static final String HTTP_METHOD_OVERRIDE = "X-HTTP-Method-Override"; - public static final String TRANSACTION_ID = "X-TransactionId"; + public static final String TRANSACTION_ID = "X-TransactionId"; - public static final String FROM_APP_ID = "X-FromAppId"; + public static final String FROM_APP_ID = "X-FromAppId"; - public static final String AAI_TX_ID = "X-AAI-TXID"; + public static final String AAI_TX_ID = "X-AAI-TXID"; - public static final String AAI_REQUEST = "X-REQUEST"; + public static final String AAI_REQUEST = "X-REQUEST"; - public static final String AAI_REQUEST_TS = "X-REQUEST-TS"; + public static final String AAI_REQUEST_TS = "X-REQUEST-TS"; - private AAIHeaderProperties(){} + private AAIHeaderProperties() { + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/package-info.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/package-info.java index ee9c334..15a997a 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/package-info.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/package-info.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,11 +26,11 @@ * * <pre> * <code> - * @Priority(AAIRequestFilterPriority.YOUR_PRIORITY) + * @Priority(AAIRequestFilterPriority.YOUR_PRIORITY) * public class YourInterceptor extends AAIContainerFilter implements ContainerRequestFilter { * * } * </code> * </pre> */ -package org.onap.aai.interceptors;
\ No newline at end of file +package org.onap.aai.interceptors; diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/post/AAIResponseFilterPriority.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/post/AAIResponseFilterPriority.java index ccf89fc..cf899c1 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/post/AAIResponseFilterPriority.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/post/AAIResponseFilterPriority.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,13 +26,14 @@ package org.onap.aai.interceptors.post; * and INVALID_RESPONSE_STATUS */ public final class AAIResponseFilterPriority { - - private AAIResponseFilterPriority() {} - public static final int INVALID_RESPONSE_STATUS = 1000; + private AAIResponseFilterPriority() { + } - public static final int RESPONSE_TRANS_LOGGING = 3000; + public static final int INVALID_RESPONSE_STATUS = 1000; - public static final int HEADER_MANIPULATION = 4000; + public static final int RESPONSE_TRANS_LOGGING = 3000; + + public static final int HEADER_MANIPULATION = 4000; } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/post/InvalidResponseStatus.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/post/InvalidResponseStatus.java index 7fd0b9c..b28f0dd 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/post/InvalidResponseStatus.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/post/InvalidResponseStatus.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,47 +19,48 @@ */ package org.onap.aai.interceptors.post; -import org.onap.aai.exceptions.AAIException; -import org.onap.aai.interceptors.AAIContainerFilter; -import org.onap.aai.logging.ErrorLogHelper; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import javax.annotation.Priority; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.core.MediaType; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; + +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.interceptors.AAIContainerFilter; +import org.onap.aai.logging.ErrorLogHelper; @Priority(AAIResponseFilterPriority.INVALID_RESPONSE_STATUS) public class InvalidResponseStatus extends AAIContainerFilter implements ContainerResponseFilter { - @Override - public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) - throws IOException { + @Override + public void filter(ContainerRequestContext requestContext, + ContainerResponseContext responseContext) throws IOException { - if(responseContext.getStatus() == 405){ + if (responseContext.getStatus() == 405) { - responseContext.setStatus(400); - AAIException e = new AAIException("AAI_3012"); - ArrayList<String> templateVars = new ArrayList<>(); + responseContext.setStatus(400); + AAIException e = new AAIException("AAI_3012"); + ArrayList<String> templateVars = new ArrayList<>(); - List<MediaType> mediaTypeList = new ArrayList<>(); + List<MediaType> mediaTypeList = new ArrayList<>(); - String contentType = responseContext.getHeaderString("Content-Type"); + String contentType = responseContext.getHeaderString("Content-Type"); - if (contentType == null) { - mediaTypeList.add(MediaType.APPLICATION_XML_TYPE); - } else { - mediaTypeList.add(MediaType.valueOf(contentType)); - } + if (contentType == null) { + mediaTypeList.add(MediaType.APPLICATION_XML_TYPE); + } else { + mediaTypeList.add(MediaType.valueOf(contentType)); + } - String message = ErrorLogHelper.getRESTAPIErrorResponse(mediaTypeList, e, templateVars); + String message = ErrorLogHelper.getRESTAPIErrorResponse(mediaTypeList, e, templateVars); - responseContext.setEntity(message); - } + responseContext.setEntity(message); + } - } + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/post/ResponseHeaderManipulation.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/post/ResponseHeaderManipulation.java index 9d4efe7..d13b122 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/post/ResponseHeaderManipulation.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/post/ResponseHeaderManipulation.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,46 +19,49 @@ */ package org.onap.aai.interceptors.post; -import org.onap.aai.interceptors.AAIContainerFilter; -import org.onap.aai.interceptors.AAIHeaderProperties; +import java.io.IOException; import javax.annotation.Priority; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.core.MediaType; -import java.io.IOException; + +import org.onap.aai.interceptors.AAIContainerFilter; +import org.onap.aai.interceptors.AAIHeaderProperties; @Priority(AAIResponseFilterPriority.HEADER_MANIPULATION) -public class ResponseHeaderManipulation extends AAIContainerFilter implements ContainerResponseFilter { +public class ResponseHeaderManipulation extends AAIContainerFilter + implements ContainerResponseFilter { - private static final String DEFAULT_XML_TYPE = MediaType.APPLICATION_XML; + private static final String DEFAULT_XML_TYPE = MediaType.APPLICATION_XML; - @Override - public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) - throws IOException { + @Override + public void filter(ContainerRequestContext requestContext, + ContainerResponseContext responseContext) throws IOException { - updateResponseHeaders(requestContext, responseContext); + updateResponseHeaders(requestContext, responseContext); - } + } - private void updateResponseHeaders(ContainerRequestContext requestContext, - ContainerResponseContext responseContext) { + private void updateResponseHeaders(ContainerRequestContext requestContext, + ContainerResponseContext responseContext) { - responseContext.getHeaders().add(AAIHeaderProperties.AAI_TX_ID, requestContext.getProperty(AAIHeaderProperties.AAI_TX_ID)); + responseContext.getHeaders().add(AAIHeaderProperties.AAI_TX_ID, + requestContext.getProperty(AAIHeaderProperties.AAI_TX_ID)); - String responseContentType = responseContext.getHeaderString("Content-Type"); + String responseContentType = responseContext.getHeaderString("Content-Type"); - if(responseContentType == null){ - String acceptType = requestContext.getHeaderString("Accept"); + if (responseContentType == null) { + String acceptType = requestContext.getHeaderString("Accept"); - if(acceptType == null || "*/*".equals(acceptType)){ - responseContext.getHeaders().putSingle("Content-Type", DEFAULT_XML_TYPE); - } else { - responseContext.getHeaders().putSingle("Content-Type", acceptType); - } - } + if (acceptType == null || "*/*".equals(acceptType)) { + responseContext.getHeaders().putSingle("Content-Type", DEFAULT_XML_TYPE); + } else { + responseContext.getHeaders().putSingle("Content-Type", acceptType); + } + } - } + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/post/ResponseTransactionLogging.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/post/ResponseTransactionLogging.java index 51fe871..854eeed 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/post/ResponseTransactionLogging.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/post/ResponseTransactionLogging.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,6 +20,17 @@ package org.onap.aai.interceptors.post; import com.google.gson.JsonObject; + +import java.io.IOException; +import java.util.*; + +import javax.annotation.Priority; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerResponseContext; +import javax.ws.rs.container.ContainerResponseFilter; +import javax.ws.rs.core.PathSegment; + import org.onap.aai.exceptions.AAIException; import org.onap.aai.interceptors.AAIContainerFilter; import org.onap.aai.interceptors.AAIHeaderProperties; @@ -29,133 +40,127 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import javax.annotation.Priority; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.core.PathSegment; -import java.io.IOException; -import java.util.*; - @Priority(AAIResponseFilterPriority.RESPONSE_TRANS_LOGGING) -public class ResponseTransactionLogging extends AAIContainerFilter implements ContainerResponseFilter { - - private static final Logger TRANSACTION_LOGGER = LoggerFactory.getLogger(ResponseTransactionLogging.class); - - private final static String QUERY_API_PATH_SEGMENT = "query"; - private final static String NODES_QUERY_API_PATH_SEGMENT = "nodes-query"; - private final static String GENERIC_QUERY_API_PATH_SEGMENT = "generic-query"; - private final static String DSL_API_PATH_SEGMENT = "dsl"; - private final static String RECENTS_API_PATH_SEGMENT = "recents"; - private final static Set<String> READ_ONLY_QUERIES = getReadOnlyQueries(); - - @Autowired - private HttpServletResponse httpServletResponse; - - @Override - public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) - throws IOException { - - this.transLogging(requestContext, responseContext); - - } - - private void transLogging(ContainerRequestContext requestContext, ContainerResponseContext responseContext) { - - String logValue; - String isGetTransactionResponseLoggingEnabled; - String postValue; - - try { - - logValue = AAIConfig.get("aai.transaction.logging"); - isGetTransactionResponseLoggingEnabled = AAIConfig.get("aai.transaction.logging.get"); - postValue = AAIConfig.get("aai.transaction.logging.post"); - } catch (AAIException e) { - return; - } - - String transId = requestContext.getHeaderString(AAIHeaderProperties.TRANSACTION_ID); - String fromAppId = requestContext.getHeaderString(AAIHeaderProperties.FROM_APP_ID); - String fullUri = requestContext.getUriInfo().getRequestUri().toString(); - String requestTs = (String)requestContext.getProperty(AAIHeaderProperties.AAI_REQUEST_TS); - - String httpMethod = requestContext.getMethod(); - - String status = Integer.toString(responseContext.getStatus()); - - String request = (String)requestContext.getProperty(AAIHeaderProperties.AAI_REQUEST); - String response = this.getResponseString(responseContext); - - if (!Boolean.parseBoolean(logValue)) { - } else if (!Boolean.parseBoolean(postValue) && "POST".equals(httpMethod)) { - } else { - - JsonObject logEntry = new JsonObject(); - logEntry.addProperty("transactionId", transId); - logEntry.addProperty("status", status); - logEntry.addProperty("rqstDate", requestTs); - logEntry.addProperty("respDate", this.genDate()); - logEntry.addProperty("sourceId", fromAppId + ":" + transId); - logEntry.addProperty("resourceId", fullUri); - logEntry.addProperty("resourceType", httpMethod); - logEntry.addProperty("rqstBuf", Objects.toString(request, "")); - - boolean recordResponse = true; - if (!Boolean.parseBoolean(isGetTransactionResponseLoggingEnabled) && "GET".equals(httpMethod)) { - recordResponse = false; - } - else { - /** - * Parse the uri path and see if it is a read-only query - * If it is, do not record the response in the logs - */ - - List<PathSegment> pathSegmentList = requestContext.getUriInfo().getPathSegments(); - for (PathSegment queryType : pathSegmentList) { - if (READ_ONLY_QUERIES.contains(queryType.toString())) { - recordResponse = false; - } - } - - if (recordResponse) { - logEntry.addProperty("respBuf", Objects.toString(response, "")); - } - - try { - TRANSACTION_LOGGER.debug(logEntry.toString()); - } catch (Exception e) { - ErrorLogHelper.logError("AAI_4000", "Exception writing transaction log."); - } - } - } - - } - - private String getResponseString(ContainerResponseContext responseContext) { - JsonObject response = new JsonObject(); - response.addProperty("ID", responseContext.getHeaderString(AAIHeaderProperties.AAI_TX_ID)); - response.addProperty("Content-Type", this.httpServletResponse.getContentType()); - response.addProperty("Response-Code", responseContext.getStatus()); - response.addProperty("Headers", responseContext.getHeaders().toString()); - Optional<Object> entityOptional = Optional.ofNullable(responseContext.getEntity()); - if(entityOptional.isPresent()){ - response.addProperty("Entity", entityOptional.get().toString()); - } else { - response.addProperty("Entity", ""); - } - return response.toString(); - } - - private static Set<String> getReadOnlyQueries() { - Set<String> readOnlyQueries = new HashSet<String>(); - readOnlyQueries.add(NODES_QUERY_API_PATH_SEGMENT); - readOnlyQueries.add(GENERIC_QUERY_API_PATH_SEGMENT); - readOnlyQueries.add(RECENTS_API_PATH_SEGMENT); - readOnlyQueries.add(QUERY_API_PATH_SEGMENT); - readOnlyQueries.add(DSL_API_PATH_SEGMENT); - return readOnlyQueries; - } +public class ResponseTransactionLogging extends AAIContainerFilter + implements ContainerResponseFilter { + + private static final Logger TRANSACTION_LOGGER = + LoggerFactory.getLogger(ResponseTransactionLogging.class); + + private final static String QUERY_API_PATH_SEGMENT = "query"; + private final static String NODES_QUERY_API_PATH_SEGMENT = "nodes-query"; + private final static String GENERIC_QUERY_API_PATH_SEGMENT = "generic-query"; + private final static String DSL_API_PATH_SEGMENT = "dsl"; + private final static String RECENTS_API_PATH_SEGMENT = "recents"; + private final static Set<String> READ_ONLY_QUERIES = getReadOnlyQueries(); + + @Autowired + private HttpServletResponse httpServletResponse; + + @Override + public void filter(ContainerRequestContext requestContext, + ContainerResponseContext responseContext) throws IOException { + + this.transLogging(requestContext, responseContext); + + } + + private void transLogging(ContainerRequestContext requestContext, + ContainerResponseContext responseContext) { + + String logValue; + String isGetTransactionResponseLoggingEnabled; + String postValue; + + try { + + logValue = AAIConfig.get("aai.transaction.logging"); + isGetTransactionResponseLoggingEnabled = AAIConfig.get("aai.transaction.logging.get"); + postValue = AAIConfig.get("aai.transaction.logging.post"); + } catch (AAIException e) { + return; + } + + String transId = requestContext.getHeaderString(AAIHeaderProperties.TRANSACTION_ID); + String fromAppId = requestContext.getHeaderString(AAIHeaderProperties.FROM_APP_ID); + String fullUri = requestContext.getUriInfo().getRequestUri().toString(); + String requestTs = (String) requestContext.getProperty(AAIHeaderProperties.AAI_REQUEST_TS); + + String httpMethod = requestContext.getMethod(); + + String status = Integer.toString(responseContext.getStatus()); + + String request = (String) requestContext.getProperty(AAIHeaderProperties.AAI_REQUEST); + String response = this.getResponseString(responseContext); + + if (!Boolean.parseBoolean(logValue)) { + } else if (!Boolean.parseBoolean(postValue) && "POST".equals(httpMethod)) { + } else { + + JsonObject logEntry = new JsonObject(); + logEntry.addProperty("transactionId", transId); + logEntry.addProperty("status", status); + logEntry.addProperty("rqstDate", requestTs); + logEntry.addProperty("respDate", this.genDate()); + logEntry.addProperty("sourceId", fromAppId + ":" + transId); + logEntry.addProperty("resourceId", fullUri); + logEntry.addProperty("resourceType", httpMethod); + logEntry.addProperty("rqstBuf", Objects.toString(request, "")); + + boolean recordResponse = true; + if (!Boolean.parseBoolean(isGetTransactionResponseLoggingEnabled) + && "GET".equals(httpMethod)) { + recordResponse = false; + } else { + /** + * Parse the uri path and see if it is a read-only query + * If it is, do not record the response in the logs + */ + + List<PathSegment> pathSegmentList = requestContext.getUriInfo().getPathSegments(); + for (PathSegment queryType : pathSegmentList) { + if (READ_ONLY_QUERIES.contains(queryType.toString())) { + recordResponse = false; + } + } + + if (recordResponse) { + logEntry.addProperty("respBuf", Objects.toString(response, "")); + } + + try { + TRANSACTION_LOGGER.debug(logEntry.toString()); + } catch (Exception e) { + ErrorLogHelper.logError("AAI_4000", "Exception writing transaction log."); + } + } + } + + } + + private String getResponseString(ContainerResponseContext responseContext) { + JsonObject response = new JsonObject(); + response.addProperty("ID", responseContext.getHeaderString(AAIHeaderProperties.AAI_TX_ID)); + response.addProperty("Content-Type", this.httpServletResponse.getContentType()); + response.addProperty("Response-Code", responseContext.getStatus()); + response.addProperty("Headers", responseContext.getHeaders().toString()); + Optional<Object> entityOptional = Optional.ofNullable(responseContext.getEntity()); + if (entityOptional.isPresent()) { + response.addProperty("Entity", entityOptional.get().toString()); + } else { + response.addProperty("Entity", ""); + } + return response.toString(); + } + + private static Set<String> getReadOnlyQueries() { + Set<String> readOnlyQueries = new HashSet<String>(); + readOnlyQueries.add(NODES_QUERY_API_PATH_SEGMENT); + readOnlyQueries.add(GENERIC_QUERY_API_PATH_SEGMENT); + readOnlyQueries.add(RECENTS_API_PATH_SEGMENT); + readOnlyQueries.add(QUERY_API_PATH_SEGMENT); + readOnlyQueries.add(DSL_API_PATH_SEGMENT); + return readOnlyQueries; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/AAIRequestFilterPriority.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/AAIRequestFilterPriority.java index 4af96c5..ee6374c 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/AAIRequestFilterPriority.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/AAIRequestFilterPriority.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,25 +20,26 @@ package org.onap.aai.interceptors.pre; public final class AAIRequestFilterPriority { - - private AAIRequestFilterPriority() {} - - public static final int REQUEST_TRANS_LOGGING = 1000; - - public static final int HEADER_VALIDATION = 2000; - public static final int HTTP_HEADER = 4000; + private AAIRequestFilterPriority() { + } - public static final int LATEST = 4250; + public static final int REQUEST_TRANS_LOGGING = 1000; - public static final int AUTHORIZATION = 4500; + public static final int HEADER_VALIDATION = 2000; - public static final int RETIRED_SERVICE = 5000; + public static final int HTTP_HEADER = 4000; - public static final int VERSION = 5500; + public static final int LATEST = 4250; - public static final int HEADER_MANIPULATION = 6000; + public static final int AUTHORIZATION = 4500; - public static final int REQUEST_MODIFICATION = 7000; + public static final int RETIRED_SERVICE = 5000; + + public static final int VERSION = 5500; + + public static final int HEADER_MANIPULATION = 6000; + + public static final int REQUEST_MODIFICATION = 7000; } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/HeaderValidation.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/HeaderValidation.java index d70cb01..ed13863 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/HeaderValidation.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/HeaderValidation.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,12 +19,10 @@ */ package org.onap.aai.interceptors.pre; -import org.onap.aai.exceptions.AAIException; -import org.onap.aai.interceptors.AAIContainerFilter; -import org.onap.aai.interceptors.AAIHeaderProperties; -import org.onap.aai.logging.ErrorLogHelper; -import org.onap.logging.filter.base.Constants; -import org.onap.logging.ref.slf4j.ONAPLogConstants; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; import javax.annotation.Priority; import javax.ws.rs.container.ContainerRequestContext; @@ -32,95 +30,102 @@ import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.PreMatching; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; + +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.interceptors.AAIContainerFilter; +import org.onap.aai.interceptors.AAIHeaderProperties; +import org.onap.aai.logging.ErrorLogHelper; +import org.onap.logging.filter.base.Constants; +import org.onap.logging.ref.slf4j.ONAPLogConstants; @PreMatching @Priority(AAIRequestFilterPriority.HEADER_VALIDATION) public class HeaderValidation extends AAIContainerFilter implements ContainerRequestFilter { - @Override - public void filter(ContainerRequestContext requestContext) throws IOException { + @Override + public void filter(ContainerRequestContext requestContext) throws IOException { + + Optional<Response> oResp; + + List<MediaType> acceptHeaderValues = requestContext.getAcceptableMediaTypes(); - Optional<Response> oResp; + String fromAppId = getPartnerName(requestContext); + oResp = this.validateHeaderValuePresence(fromAppId, "AAI_4009", acceptHeaderValues); + if (oResp.isPresent()) { + requestContext.abortWith(oResp.get()); + return; + } + String transId = getRequestId(requestContext); + oResp = this.validateHeaderValuePresence(transId, "AAI_4010", acceptHeaderValues); + if (oResp.isPresent()) { + requestContext.abortWith(oResp.get()); + return; + } + } - List<MediaType> acceptHeaderValues = requestContext.getAcceptableMediaTypes(); + private Optional<Response> validateHeaderValuePresence(String value, String errorCode, + List<MediaType> acceptHeaderValues) { + Response response = null; + AAIException aaie; + if (value == null || value.isEmpty()) { + aaie = new AAIException(errorCode); + return Optional + .of(Response + .status(aaie.getErrorObject().getHTTPResponseCode()).entity(ErrorLogHelper + .getRESTAPIErrorResponse(acceptHeaderValues, aaie, new ArrayList<>())) + .build()); + } - String fromAppId = getPartnerName(requestContext); - oResp = this.validateHeaderValuePresence(fromAppId, "AAI_4009", acceptHeaderValues); - if (oResp.isPresent()) { - requestContext.abortWith(oResp.get()); - return; - } - String transId = getRequestId(requestContext); - oResp = this.validateHeaderValuePresence(transId, "AAI_4010", acceptHeaderValues); - if (oResp.isPresent()) { - requestContext.abortWith(oResp.get()); - return; - } - } - - private Optional<Response> validateHeaderValuePresence(String value, String errorCode, - List<MediaType> acceptHeaderValues) { - Response response = null; - AAIException aaie; - if (value == null || value.isEmpty()) { - aaie = new AAIException(errorCode); - return Optional.of(Response.status(aaie.getErrorObject().getHTTPResponseCode()) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(acceptHeaderValues, aaie, new ArrayList<>())) - .build()); - } + return Optional.ofNullable(response); + } - return Optional.ofNullable(response); - } - public String getRequestId(ContainerRequestContext requestContext) { - String requestId = requestContext.getHeaderString(ONAPLogConstants.Headers.REQUEST_ID); - if (requestId == null || requestId.isEmpty()) { - requestId = requestContext.getHeaderString(Constants.HttpHeaders.HEADER_REQUEST_ID); - if (requestId == null || requestId.isEmpty()) { - requestId = requestContext.getHeaderString(Constants.HttpHeaders.TRANSACTION_ID); - if (requestId == null || requestId.isEmpty()) { - requestId = requestContext.getHeaderString(Constants.HttpHeaders.ECOMP_REQUEST_ID); - if (requestId == null || requestId.isEmpty()) { - return requestId; - } - } - } - } - if (requestContext.getHeaders().get(ONAPLogConstants.Headers.REQUEST_ID) != null) { - requestContext.getHeaders().get(ONAPLogConstants.Headers.REQUEST_ID).clear(); - } - if (requestContext.getHeaders().get(Constants.HttpHeaders.TRANSACTION_ID) != null) { - requestContext.getHeaders().get(Constants.HttpHeaders.TRANSACTION_ID).clear(); - } - if (requestContext.getHeaders().get(Constants.HttpHeaders.HEADER_REQUEST_ID) != null) { - requestContext.getHeaders().get(Constants.HttpHeaders.HEADER_REQUEST_ID).clear(); - } - if (requestContext.getHeaders().get(Constants.HttpHeaders.ECOMP_REQUEST_ID) != null) { - requestContext.getHeaders().get(Constants.HttpHeaders.ECOMP_REQUEST_ID).clear(); - } - requestContext.getHeaders().add(Constants.HttpHeaders.TRANSACTION_ID, requestId); + public String getRequestId(ContainerRequestContext requestContext) { + String requestId = requestContext.getHeaderString(ONAPLogConstants.Headers.REQUEST_ID); + if (requestId == null || requestId.isEmpty()) { + requestId = requestContext.getHeaderString(Constants.HttpHeaders.HEADER_REQUEST_ID); + if (requestId == null || requestId.isEmpty()) { + requestId = requestContext.getHeaderString(Constants.HttpHeaders.TRANSACTION_ID); + if (requestId == null || requestId.isEmpty()) { + requestId = + requestContext.getHeaderString(Constants.HttpHeaders.ECOMP_REQUEST_ID); + if (requestId == null || requestId.isEmpty()) { + return requestId; + } + } + } + } + if (requestContext.getHeaders().get(ONAPLogConstants.Headers.REQUEST_ID) != null) { + requestContext.getHeaders().get(ONAPLogConstants.Headers.REQUEST_ID).clear(); + } + if (requestContext.getHeaders().get(Constants.HttpHeaders.TRANSACTION_ID) != null) { + requestContext.getHeaders().get(Constants.HttpHeaders.TRANSACTION_ID).clear(); + } + if (requestContext.getHeaders().get(Constants.HttpHeaders.HEADER_REQUEST_ID) != null) { + requestContext.getHeaders().get(Constants.HttpHeaders.HEADER_REQUEST_ID).clear(); + } + if (requestContext.getHeaders().get(Constants.HttpHeaders.ECOMP_REQUEST_ID) != null) { + requestContext.getHeaders().get(Constants.HttpHeaders.ECOMP_REQUEST_ID).clear(); + } + requestContext.getHeaders().add(Constants.HttpHeaders.TRANSACTION_ID, requestId); - return requestId; - } + return requestId; + } - public String getPartnerName(ContainerRequestContext requestContext) { - String partnerName = requestContext.getHeaderString(ONAPLogConstants.Headers.PARTNER_NAME); - if (partnerName == null || (partnerName.isEmpty())) { - partnerName = requestContext.getHeaderString(AAIHeaderProperties.FROM_APP_ID); - if (partnerName == null || (partnerName.isEmpty())) { - return partnerName; - } - } - if (requestContext.getHeaders().get(ONAPLogConstants.Headers.PARTNER_NAME) != null) { - requestContext.getHeaders().get(ONAPLogConstants.Headers.PARTNER_NAME).clear(); - } - if (requestContext.getHeaders().get(AAIHeaderProperties.FROM_APP_ID) != null) { - requestContext.getHeaders().get(AAIHeaderProperties.FROM_APP_ID).clear(); - } - requestContext.getHeaders().add(AAIHeaderProperties.FROM_APP_ID, partnerName); - return partnerName; - } + public String getPartnerName(ContainerRequestContext requestContext) { + String partnerName = requestContext.getHeaderString(ONAPLogConstants.Headers.PARTNER_NAME); + if (partnerName == null || (partnerName.isEmpty())) { + partnerName = requestContext.getHeaderString(AAIHeaderProperties.FROM_APP_ID); + if (partnerName == null || (partnerName.isEmpty())) { + return partnerName; + } + } + if (requestContext.getHeaders().get(ONAPLogConstants.Headers.PARTNER_NAME) != null) { + requestContext.getHeaders().get(ONAPLogConstants.Headers.PARTNER_NAME).clear(); + } + if (requestContext.getHeaders().get(AAIHeaderProperties.FROM_APP_ID) != null) { + requestContext.getHeaders().get(AAIHeaderProperties.FROM_APP_ID).clear(); + } + requestContext.getHeaders().add(AAIHeaderProperties.FROM_APP_ID, partnerName); + return partnerName; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/HttpHeaderInterceptor.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/HttpHeaderInterceptor.java index ee04453..5d9c1ff 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/HttpHeaderInterceptor.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/HttpHeaderInterceptor.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,15 +19,16 @@ */ package org.onap.aai.interceptors.pre; -import org.onap.aai.interceptors.AAIContainerFilter; -import org.onap.aai.interceptors.AAIHeaderProperties; +import java.io.IOException; import javax.annotation.Priority; import javax.ws.rs.HttpMethod; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.PreMatching; -import java.io.IOException; + +import org.onap.aai.interceptors.AAIContainerFilter; +import org.onap.aai.interceptors.AAIHeaderProperties; /** * The Class HttpHeaderInterceptor @@ -35,16 +36,18 @@ import java.io.IOException; @PreMatching @Priority(AAIRequestFilterPriority.HTTP_HEADER) public class HttpHeaderInterceptor extends AAIContainerFilter implements ContainerRequestFilter { - public static final String patchMethod = "PATCH"; - + public static final String patchMethod = "PATCH"; + @Override public void filter(ContainerRequestContext containerRequestContext) throws IOException { - String overrideMethod = containerRequestContext.getHeaderString(AAIHeaderProperties.HTTP_METHOD_OVERRIDE); - String httpMethod = containerRequestContext.getMethod(); - - if (HttpMethod.POST.equalsIgnoreCase(httpMethod) && patchMethod.equalsIgnoreCase(overrideMethod)) { - containerRequestContext.setMethod(patchMethod); - } + String overrideMethod = + containerRequestContext.getHeaderString(AAIHeaderProperties.HTTP_METHOD_OVERRIDE); + String httpMethod = containerRequestContext.getMethod(); + + if (HttpMethod.POST.equalsIgnoreCase(httpMethod) + && patchMethod.equalsIgnoreCase(overrideMethod)) { + containerRequestContext.setMethod(patchMethod); + } } - + } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/OneWaySslAuthorization.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/OneWaySslAuthorization.java index a6c5ed9..78ab1a9 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/OneWaySslAuthorization.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/OneWaySslAuthorization.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,13 +19,10 @@ */ package org.onap.aai.interceptors.pre; -import org.onap.aai.Profiles; -import org.onap.aai.exceptions.AAIException; -import org.onap.aai.interceptors.AAIContainerFilter; -import org.onap.aai.logging.ErrorLogHelper; -import org.onap.aai.service.AuthorizationService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Profile; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; import javax.annotation.Priority; import javax.ws.rs.container.ContainerRequestContext; @@ -33,10 +30,14 @@ import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.PreMatching; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; + +import org.onap.aai.Profiles; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.interceptors.AAIContainerFilter; +import org.onap.aai.logging.ErrorLogHelper; +import org.onap.aai.service.AuthorizationService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; @Profile(Profiles.ONE_WAY_SSL) @PreMatching @@ -47,17 +48,17 @@ public class OneWaySslAuthorization extends AAIContainerFilter implements Contai private AuthorizationService authorizationService; @Override - public void filter(ContainerRequestContext containerRequestContext) throws IOException - { + public void filter(ContainerRequestContext containerRequestContext) throws IOException { - if(containerRequestContext.getUriInfo().getRequestUri().getPath().matches("^.*/util/echo$")){ + if (containerRequestContext.getUriInfo().getRequestUri().getPath() + .matches("^.*/util/echo$")) { return; } String basicAuth = containerRequestContext.getHeaderString("Authorization"); List<MediaType> acceptHeaderValues = containerRequestContext.getAcceptableMediaTypes(); - if(basicAuth == null || !basicAuth.startsWith("Basic ")){ + if (basicAuth == null || !basicAuth.startsWith("Basic ")) { Optional<Response> responseOptional = errorResponse("AAI_3300", acceptHeaderValues); containerRequestContext.abortWith(responseOptional.get()); return; @@ -65,7 +66,7 @@ public class OneWaySslAuthorization extends AAIContainerFilter implements Contai basicAuth = basicAuth.replaceAll("Basic ", ""); - if(!authorizationService.checkIfUserAuthorized(basicAuth)){ + if (!authorizationService.checkIfUserAuthorized(basicAuth)) { Optional<Response> responseOptional = errorResponse("AAI_3300", acceptHeaderValues); containerRequestContext.abortWith(responseOptional.get()); return; @@ -76,8 +77,9 @@ public class OneWaySslAuthorization extends AAIContainerFilter implements Contai private Optional<Response> errorResponse(String errorCode, List<MediaType> acceptHeaderValues) { AAIException aaie = new AAIException(errorCode); return Optional.of(Response.status(aaie.getErrorObject().getHTTPResponseCode()) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(acceptHeaderValues, aaie, new ArrayList<>())) - .build()); + .entity( + ErrorLogHelper.getRESTAPIErrorResponse(acceptHeaderValues, aaie, new ArrayList<>())) + .build()); } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestHeaderManipulation.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestHeaderManipulation.java index d2dcc0b..4946e7d 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestHeaderManipulation.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestHeaderManipulation.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,42 +19,44 @@ */ package org.onap.aai.interceptors.pre; -import org.onap.aai.interceptors.AAIContainerFilter; -import org.onap.aai.interceptors.AAIHeaderProperties; +import java.util.Collections; +import java.util.regex.Matcher; import javax.annotation.Priority; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.PreMatching; import javax.ws.rs.core.MultivaluedMap; -import java.util.Collections; -import java.util.regex.Matcher; + +import org.onap.aai.interceptors.AAIContainerFilter; +import org.onap.aai.interceptors.AAIHeaderProperties; @PreMatching @Priority(AAIRequestFilterPriority.HEADER_MANIPULATION) -public class RequestHeaderManipulation extends AAIContainerFilter implements ContainerRequestFilter { +public class RequestHeaderManipulation extends AAIContainerFilter + implements ContainerRequestFilter { - @Override - public void filter(ContainerRequestContext requestContext) { + @Override + public void filter(ContainerRequestContext requestContext) { - String uri = requestContext.getUriInfo().getPath(); - this.addRequestContext(uri, requestContext.getHeaders()); + String uri = requestContext.getUriInfo().getPath(); + this.addRequestContext(uri, requestContext.getHeaders()); - } - - private void addRequestContext(String uri, MultivaluedMap<String, String> requestHeaders) { + } - String rc = ""; + private void addRequestContext(String uri, MultivaluedMap<String, String> requestHeaders) { + + String rc = ""; Matcher match = VersionInterceptor.EXTRACT_VERSION_PATTERN.matcher(uri); if (match.find()) { rc = match.group(1); } - if (requestHeaders.containsKey(AAIHeaderProperties.REQUEST_CONTEXT)) { - requestHeaders.remove(AAIHeaderProperties.REQUEST_CONTEXT); - } - requestHeaders.put(AAIHeaderProperties.REQUEST_CONTEXT, Collections.singletonList(rc)); - } + if (requestHeaders.containsKey(AAIHeaderProperties.REQUEST_CONTEXT)) { + requestHeaders.remove(AAIHeaderProperties.REQUEST_CONTEXT); + } + requestHeaders.put(AAIHeaderProperties.REQUEST_CONTEXT, Collections.singletonList(rc)); + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestModification.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestModification.java index acd1305..f7d863d 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestModification.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestModification.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,12 @@ */ package org.onap.aai.interceptors.pre; -import org.onap.aai.interceptors.AAIContainerFilter; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.Priority; import javax.ws.rs.container.ContainerRequestContext; @@ -27,49 +32,45 @@ import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.PreMatching; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriBuilder; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; + +import org.onap.aai.interceptors.AAIContainerFilter; @PreMatching @Priority(AAIRequestFilterPriority.REQUEST_MODIFICATION) public class RequestModification extends AAIContainerFilter implements ContainerRequestFilter { - @Override - public void filter(ContainerRequestContext requestContext) throws IOException { + @Override + public void filter(ContainerRequestContext requestContext) throws IOException { + + this.cleanDME2QueryParams(requestContext); - this.cleanDME2QueryParams(requestContext); + } - } - - private void cleanDME2QueryParams(ContainerRequestContext request) { - UriBuilder builder = request.getUriInfo().getRequestUriBuilder(); - MultivaluedMap<String, String> queries = request.getUriInfo().getQueryParameters(); + private void cleanDME2QueryParams(ContainerRequestContext request) { + UriBuilder builder = request.getUriInfo().getRequestUriBuilder(); + MultivaluedMap<String, String> queries = request.getUriInfo().getQueryParameters(); - String[] blacklist = { "version", "envContext", "routeOffer" }; - Set<String> blacklistSet = Arrays.stream(blacklist).collect(Collectors.toSet()); + String[] blacklist = {"version", "envContext", "routeOffer"}; + Set<String> blacklistSet = Arrays.stream(blacklist).collect(Collectors.toSet()); - boolean remove = true; + boolean remove = true; - for (String param : blacklistSet) { - if (!queries.containsKey(param)) { - remove = false; - break; - } - } + for (String param : blacklistSet) { + if (!queries.containsKey(param)) { + remove = false; + break; + } + } - if (remove) { - for (Map.Entry<String, List<String>> query : queries.entrySet()) { - String key = query.getKey(); - if (blacklistSet.contains(key)) { - builder.replaceQueryParam(key); - } - } - } - request.setRequestUri(builder.build()); - } + if (remove) { + for (Map.Entry<String, List<String>> query : queries.entrySet()) { + String key = query.getKey(); + if (blacklistSet.contains(key)) { + builder.replaceQueryParam(key); + } + } + } + request.setRequestUri(builder.build()); + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestTransactionLogging.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestTransactionLogging.java index 03cac8d..b37a804 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestTransactionLogging.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestTransactionLogging.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,6 +20,24 @@ package org.onap.aai.interceptors.pre; import com.google.gson.JsonObject; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.SecureRandom; +import java.util.Random; +import java.util.UUID; + +import javax.annotation.Priority; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerRequestFilter; +import javax.ws.rs.container.PreMatching; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.UriInfo; + import org.glassfish.jersey.message.internal.ReaderWriter; import org.glassfish.jersey.server.ContainerException; import org.onap.aai.exceptions.AAIException; @@ -31,113 +49,104 @@ import org.onap.aai.util.HbaseSaltPrefixer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; -import javax.annotation.Priority; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.PreMatching; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriInfo; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.security.SecureRandom; -import java.util.Random; -import java.util.UUID; - @PreMatching @Priority(AAIRequestFilterPriority.REQUEST_TRANS_LOGGING) -public class RequestTransactionLogging extends AAIContainerFilter implements ContainerRequestFilter { - - @Autowired - private HttpServletRequest httpServletRequest; - - private static final String DEFAULT_CONTENT_TYPE = MediaType.APPLICATION_JSON; - private static final String DEFAULT_RESPONSE_TYPE = MediaType.APPLICATION_XML; - - private static final String CONTENT_TYPE = "Content-Type"; - private static final String ACCEPT = "Accept"; - private static final String TEXT_PLAIN = "text/plain"; - private static final String WILDCARD = "*/*"; - private static final String APPLICATION_JSON = "application/json"; - - @Override - public void filter(ContainerRequestContext requestContext) throws IOException { - - String currentTimeStamp = genDate(); - String fullId = this.getAAITxIdToHeader(currentTimeStamp); - this.addToRequestContext(requestContext, AAIHeaderProperties.AAI_TX_ID, fullId); - this.addToRequestContext(requestContext, AAIHeaderProperties.AAI_REQUEST, this.getRequest(requestContext, fullId)); - this.addToRequestContext(requestContext, AAIHeaderProperties.AAI_REQUEST_TS, currentTimeStamp); - this.addDefaultContentType(requestContext); - } - - private void addToRequestContext(ContainerRequestContext requestContext, String name, String aaiTxIdToHeader) { - requestContext.setProperty(name, aaiTxIdToHeader); - } - - private void addDefaultContentType(ContainerRequestContext requestContext) { - - String contentType = requestContext.getHeaderString(CONTENT_TYPE); - String acceptType = requestContext.getHeaderString(ACCEPT); - - if(contentType == null || contentType.contains(TEXT_PLAIN)){ - requestContext.getHeaders().putSingle(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); - } - - if(WILDCARD.equals(acceptType) || StringUtils.isEmpty(acceptType) || acceptType.contains(TEXT_PLAIN)){ - UriInfo uriInfo = requestContext.getUriInfo(); - if(uriInfo != null){ - String path = uriInfo.getPath(); - if(path.endsWith("/dsl") || path.endsWith("/query") || path.contains("/recents/")){ - requestContext.getHeaders().putSingle(ACCEPT, APPLICATION_JSON); - } else { - requestContext.getHeaders().putSingle(ACCEPT, DEFAULT_RESPONSE_TYPE); - } - } else { - requestContext.getHeaders().putSingle(ACCEPT, DEFAULT_RESPONSE_TYPE); - } - } - } - - private String getAAITxIdToHeader(String currentTimeStamp) { - String txId = UUID.randomUUID().toString(); - try { - Random rand = new SecureRandom(); - int number = rand.nextInt(99999); - txId = HbaseSaltPrefixer.getInstance().prependSalt(AAIConfig.get(AAIConstants.AAI_NODENAME) + "-" - + currentTimeStamp + "-" + number ); //new Random(System.currentTimeMillis()).nextInt(99999) - } catch (AAIException e) { - } - - return txId; - } - - private String getRequest(ContainerRequestContext requestContext, String fullId) { - - JsonObject request = new JsonObject(); - request.addProperty("ID", fullId); - request.addProperty("Http-Method", requestContext.getMethod()); - request.addProperty(CONTENT_TYPE, httpServletRequest.getContentType()); - request.addProperty("Headers", requestContext.getHeaders().toString()); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - InputStream in = requestContext.getEntityStream(); - - try { - if (in.available() > 0) { - ReaderWriter.writeTo(in, out); - byte[] requestEntity = out.toByteArray(); - request.addProperty("Payload", new String(requestEntity, "UTF-8")); - requestContext.setEntityStream(new ByteArrayInputStream(requestEntity)); - } - } catch (IOException ex) { - throw new ContainerException(ex); - } - - return request.toString(); - } +public class RequestTransactionLogging extends AAIContainerFilter + implements ContainerRequestFilter { + + @Autowired + private HttpServletRequest httpServletRequest; + + private static final String DEFAULT_CONTENT_TYPE = MediaType.APPLICATION_JSON; + private static final String DEFAULT_RESPONSE_TYPE = MediaType.APPLICATION_XML; + + private static final String CONTENT_TYPE = "Content-Type"; + private static final String ACCEPT = "Accept"; + private static final String TEXT_PLAIN = "text/plain"; + private static final String WILDCARD = "*/*"; + private static final String APPLICATION_JSON = "application/json"; + + @Override + public void filter(ContainerRequestContext requestContext) throws IOException { + + String currentTimeStamp = genDate(); + String fullId = this.getAAITxIdToHeader(currentTimeStamp); + this.addToRequestContext(requestContext, AAIHeaderProperties.AAI_TX_ID, fullId); + this.addToRequestContext(requestContext, AAIHeaderProperties.AAI_REQUEST, + this.getRequest(requestContext, fullId)); + this.addToRequestContext(requestContext, AAIHeaderProperties.AAI_REQUEST_TS, + currentTimeStamp); + this.addDefaultContentType(requestContext); + } + + private void addToRequestContext(ContainerRequestContext requestContext, String name, + String aaiTxIdToHeader) { + requestContext.setProperty(name, aaiTxIdToHeader); + } + + private void addDefaultContentType(ContainerRequestContext requestContext) { + + String contentType = requestContext.getHeaderString(CONTENT_TYPE); + String acceptType = requestContext.getHeaderString(ACCEPT); + + if (contentType == null || contentType.contains(TEXT_PLAIN)) { + requestContext.getHeaders().putSingle(CONTENT_TYPE, DEFAULT_CONTENT_TYPE); + } + + if (WILDCARD.equals(acceptType) || StringUtils.isEmpty(acceptType) + || acceptType.contains(TEXT_PLAIN)) { + UriInfo uriInfo = requestContext.getUriInfo(); + if (uriInfo != null) { + String path = uriInfo.getPath(); + if (path.endsWith("/dsl") || path.endsWith("/query") + || path.contains("/recents/")) { + requestContext.getHeaders().putSingle(ACCEPT, APPLICATION_JSON); + } else { + requestContext.getHeaders().putSingle(ACCEPT, DEFAULT_RESPONSE_TYPE); + } + } else { + requestContext.getHeaders().putSingle(ACCEPT, DEFAULT_RESPONSE_TYPE); + } + } + } + + private String getAAITxIdToHeader(String currentTimeStamp) { + String txId = UUID.randomUUID().toString(); + try { + Random rand = new SecureRandom(); + int number = rand.nextInt(99999); + txId = HbaseSaltPrefixer.getInstance().prependSalt( + AAIConfig.get(AAIConstants.AAI_NODENAME) + "-" + currentTimeStamp + "-" + number); // new + // Random(System.currentTimeMillis()).nextInt(99999) + } catch (AAIException e) { + } + + return txId; + } + + private String getRequest(ContainerRequestContext requestContext, String fullId) { + + JsonObject request = new JsonObject(); + request.addProperty("ID", fullId); + request.addProperty("Http-Method", requestContext.getMethod()); + request.addProperty(CONTENT_TYPE, httpServletRequest.getContentType()); + request.addProperty("Headers", requestContext.getHeaders().toString()); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + InputStream in = requestContext.getEntityStream(); + + try { + if (in.available() > 0) { + ReaderWriter.writeTo(in, out); + byte[] requestEntity = out.toByteArray(); + request.addProperty("Payload", new String(requestEntity, "UTF-8")); + requestContext.setEntityStream(new ByteArrayInputStream(requestEntity)); + } + } catch (IOException ex) { + throw new ContainerException(ex); + } + + return request.toString(); + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RetiredInterceptor.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RetiredInterceptor.java index 643793d..d1aa2e9 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RetiredInterceptor.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RetiredInterceptor.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,18 @@ */ package org.onap.aai.interceptors.pre; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.annotation.Priority; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerRequestFilter; +import javax.ws.rs.container.PreMatching; +import javax.ws.rs.core.Response; + import org.onap.aai.exceptions.AAIException; import org.onap.aai.interceptors.AAIContainerFilter; import org.onap.aai.logging.ErrorLogHelper; @@ -27,17 +39,6 @@ import org.onap.aai.util.AAIConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import javax.annotation.Priority; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.PreMatching; -import javax.ws.rs.core.Response; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - // Can cache this so if the uri was already cached then it won't run the string // matching each time but only does it for the first time @@ -52,13 +53,15 @@ public class RetiredInterceptor extends AAIContainerFilter implements ContainerR private String basePath; @Autowired - public RetiredInterceptor(RetiredService retiredService, @Value("${schema.uri.base.path}") String basePath){ + public RetiredInterceptor(RetiredService retiredService, + @Value("${schema.uri.base.path}") String basePath) { this.retiredService = retiredService; this.basePath = basePath; - if(!basePath.endsWith("/")){ + if (!basePath.endsWith("/")) { this.basePath = basePath + "/"; } } + @Override public void filter(ContainerRequestContext containerRequestContext) throws IOException { @@ -68,8 +71,8 @@ public class RetiredInterceptor extends AAIContainerFilter implements ContainerR List<Pattern> retiredAllVersionList = retiredService.getRetiredAllVersionList(); - - if(checkIfUriRetired(containerRequestContext, retiredAllVersionList, version, requestURI, "")){ + if (checkIfUriRetired(containerRequestContext, retiredAllVersionList, version, requestURI, + "")) { return; } @@ -79,17 +82,13 @@ public class RetiredInterceptor extends AAIContainerFilter implements ContainerR } public boolean checkIfUriRetired(ContainerRequestContext containerRequestContext, - List<Pattern> retiredPatterns, - String version, - String requestURI, - String message){ - + List<Pattern> retiredPatterns, String version, String requestURI, String message) { - for(Pattern retiredPattern : retiredPatterns){ - if(retiredPattern.matcher(requestURI).matches()){ + for (Pattern retiredPattern : retiredPatterns) { + if (retiredPattern.matcher(requestURI).matches()) { AAIException e; - if(message == null){ + if (message == null) { e = new AAIException("AAI_3007"); } else { e = new AAIException("AAI_3015"); @@ -99,25 +98,20 @@ public class RetiredInterceptor extends AAIContainerFilter implements ContainerR if (templateVars.isEmpty()) { templateVars.add("PUT"); - if(requestURI != null){ + if (requestURI != null) { requestURI = requestURI.replaceAll(basePath, ""); } templateVars.add(requestURI); - if(message == null){ + if (message == null) { templateVars.add(version); templateVars.add(AAIConfig.get("aai.default.api.version", "")); } } - Response response = Response - .status(e.getErrorObject().getHTTPResponseCode()) - .entity( - ErrorLogHelper - .getRESTAPIErrorResponse( - containerRequestContext.getAcceptableMediaTypes(), e, templateVars - ) - ) - .build(); + Response response = Response.status(e.getErrorObject().getHTTPResponseCode()) + .entity(ErrorLogHelper.getRESTAPIErrorResponse( + containerRequestContext.getAcceptableMediaTypes(), e, templateVars)) + .build(); containerRequestContext.abortWith(response); @@ -129,17 +123,16 @@ public class RetiredInterceptor extends AAIContainerFilter implements ContainerR } public boolean checkIfUriRetired(ContainerRequestContext containerRequestContext, - List<Pattern> retiredPatterns, - String version, - String requestURI){ - return checkIfUriRetired(containerRequestContext, retiredPatterns, version, requestURI, null); + List<Pattern> retiredPatterns, String version, String requestURI) { + return checkIfUriRetired(containerRequestContext, retiredPatterns, version, requestURI, + null); } protected String extractVersionFromPath(String requestURI) { Matcher versionMatcher = VERSION_PATTERN.matcher(requestURI); String version = null; - if(versionMatcher.find()){ + if (versionMatcher.find()) { version = versionMatcher.group(0); } return version; diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/VersionInterceptor.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/VersionInterceptor.java index 902d6f0..944d999 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/VersionInterceptor.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/VersionInterceptor.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,23 +19,24 @@ */ package org.onap.aai.interceptors.pre; -import org.onap.aai.exceptions.AAIException; -import org.onap.aai.interceptors.AAIContainerFilter; -import org.onap.aai.logging.ErrorLogHelper; -import org.onap.aai.setup.SchemaVersion; -import org.onap.aai.setup.SchemaVersions; -import org.springframework.beans.factory.annotation.Autowired; +import java.util.ArrayList; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; import javax.annotation.Priority; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.PreMatching; import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; + +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.interceptors.AAIContainerFilter; +import org.onap.aai.logging.ErrorLogHelper; +import org.onap.aai.setup.SchemaVersion; +import org.onap.aai.setup.SchemaVersions; +import org.springframework.beans.factory.annotation.Autowired; @PreMatching @Priority(AAIRequestFilterPriority.VERSION) @@ -48,11 +49,9 @@ public class VersionInterceptor extends AAIContainerFilter implements ContainerR private final SchemaVersions schemaVersions; @Autowired - public VersionInterceptor(SchemaVersions schemaVersions){ + public VersionInterceptor(SchemaVersions schemaVersions) { this.schemaVersions = schemaVersions; - allowedVersions = schemaVersions.getVersions() - .stream() - .map(SchemaVersion::toString) + allowedVersions = schemaVersions.getVersions().stream().map(SchemaVersion::toString) .collect(Collectors.toSet()); } @@ -62,26 +61,31 @@ public class VersionInterceptor extends AAIContainerFilter implements ContainerR String uri = requestContext.getUriInfo().getPath(); - if (uri.startsWith("search") || uri.startsWith("util/echo") || uri.startsWith("tools") || uri.startsWith("recents")|| uri.startsWith("cq2gremlin")|| uri.startsWith("cq2gremlintest")) { + if (uri.startsWith("search") || uri.startsWith("util/echo") || uri.startsWith("tools") + || uri.startsWith("recents") || uri.startsWith("cq2gremlin") + || uri.startsWith("cq2gremlintest")) { return; - } + } Matcher matcher = EXTRACT_VERSION_PATTERN.matcher(uri); String version = null; - if(matcher.matches()){ + if (matcher.matches()) { version = matcher.group(1); } else { - requestContext.abortWith(createInvalidVersionResponse("AAI_3017", requestContext, version)); + requestContext + .abortWith(createInvalidVersionResponse("AAI_3017", requestContext, version)); return; } - if(!allowedVersions.contains(version)){ - requestContext.abortWith(createInvalidVersionResponse("AAI_3016", requestContext, version)); + if (!allowedVersions.contains(version)) { + requestContext + .abortWith(createInvalidVersionResponse("AAI_3016", requestContext, version)); } } - private Response createInvalidVersionResponse(String errorCode, ContainerRequestContext context, String version) { + private Response createInvalidVersionResponse(String errorCode, ContainerRequestContext context, + String version) { AAIException e = new AAIException(errorCode); ArrayList<String> templateVars = new ArrayList<>(); @@ -91,11 +95,9 @@ public class VersionInterceptor extends AAIContainerFilter implements ContainerR templateVars.add(version); } - String entity = ErrorLogHelper.getRESTAPIErrorResponse(context.getAcceptableMediaTypes(), e, templateVars); + String entity = ErrorLogHelper.getRESTAPIErrorResponse(context.getAcceptableMediaTypes(), e, + templateVars); - return Response - .status(e.getErrorObject().getHTTPResponseCode()) - .entity(entity) - .build(); + return Response.status(e.getErrorObject().getHTTPResponseCode()).entity(entity).build(); } } diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/VersionLatestInterceptor.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/VersionLatestInterceptor.java index 124bc1a..22f923d 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/VersionLatestInterceptor.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/VersionLatestInterceptor.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,15 +19,16 @@ */ package org.onap.aai.interceptors.pre; -import org.onap.aai.interceptors.AAIContainerFilter; -import org.onap.aai.setup.SchemaVersions; -import org.springframework.beans.factory.annotation.Autowired; +import java.net.URI; import javax.annotation.Priority; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.PreMatching; -import java.net.URI; + +import org.onap.aai.interceptors.AAIContainerFilter; +import org.onap.aai.setup.SchemaVersions; +import org.springframework.beans.factory.annotation.Autowired; @PreMatching @Priority(AAIRequestFilterPriority.LATEST) @@ -36,7 +37,7 @@ public class VersionLatestInterceptor extends AAIContainerFilter implements Cont private final SchemaVersions schemaVersions; @Autowired - public VersionLatestInterceptor(SchemaVersions schemaVersions){ + public VersionLatestInterceptor(SchemaVersions schemaVersions) { this.schemaVersions = schemaVersions; } @@ -45,10 +46,12 @@ public class VersionLatestInterceptor extends AAIContainerFilter implements Cont String uri = requestContext.getUriInfo().getPath(); - if(uri.startsWith("latest")){ - String rawPath = requestContext.getUriInfo().getRequestUri().getRawPath(); - String updatedPath = rawPath.replaceFirst("latest",schemaVersions.getDefaultVersion().toString()); - URI latest = requestContext.getUriInfo().getRequestUriBuilder().replacePath(updatedPath).build(); + if (uri.startsWith("latest")) { + String rawPath = requestContext.getUriInfo().getRequestUri().getRawPath(); + String updatedPath = + rawPath.replaceFirst("latest", schemaVersions.getDefaultVersion().toString()); + URI latest = + requestContext.getUriInfo().getRequestUriBuilder().replacePath(updatedPath).build(); requestContext.setRequestUri(latest); return; } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/CQ2Gremlin.java b/aai-traversal/src/main/java/org/onap/aai/rest/CQ2Gremlin.java index d075f70..6e76c29 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/CQ2Gremlin.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/CQ2Gremlin.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,16 @@ */ package org.onap.aai.rest; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.Consumes; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.*; + import org.onap.aai.config.SpringContextAware; import org.onap.aai.introspection.LoaderFactory; import org.onap.aai.rest.db.HttpEntry; @@ -34,83 +44,72 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.RequestBody; -import javax.ws.rs.Consumes; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.*; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - - @Path("/cq2gremlin") public class CQ2Gremlin extends RESTAPI { - private HttpEntry traversalUriHttpEntry; - - - @Autowired - protected LoaderFactory loaderFactory; - - @Autowired - protected EdgeSerializer rules; - - - @Autowired - public CQ2Gremlin( - HttpEntry traversalUriHttpEntry, - @Value("${schema.uri.base.path}") String basePath - ){ - this.traversalUriHttpEntry = traversalUriHttpEntry; - } - - @PUT - @Path("") - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) - public Response getC2Qgremlin(@RequestBody Map<String, CustomQueryConfigDTO> content,@Context HttpHeaders headers, @Context UriInfo info) { - if(content.size() == 0){ - return Response.status(HttpStatus.BAD_REQUEST.value()).entity("At least one custom query should be passed").build(); - } - return processGremlinQuery(content.values().toArray(new CustomQueryConfigDTO[0])[0], info, headers); - } - - protected Response processGremlinQuery(CustomQueryConfigDTO content, UriInfo info, - HttpHeaders headers) { - try{ - LinkedHashMap <String, Object> params; - CustomQueryDTO queryDTO = content.getQueryDTO(); - String query = queryDTO.getQuery(); - params = new LinkedHashMap <>(); - - List<String> optionalParameters = queryDTO.getQueryOptionalProperties(); - if (!optionalParameters.isEmpty()){ - for ( String key : optionalParameters ) { - params.put(key, key); - } - } - - List<String> requiredParameters = queryDTO.getQueryRequiredProperties(); - if (!requiredParameters.isEmpty()){ - for ( String key : requiredParameters ) { - params.put(key, key); - } - } - - SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); - traversalUriHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion()); - traversalUriHttpEntry.setPaginationParameters("-1", "-1"); - - TransactionalGraphEngine dbEngine = traversalUriHttpEntry.getDbEngine(); - - query = new GroovyQueryBuilder().executeTraversal(dbEngine,query, params); - query = "g" + query; - return Response.ok(query).build(); - } - catch(Exception ex){ - return Response.status(500).entity("Query conversion failed with following reason: " + ex.toString()).build(); - } - - } + private HttpEntry traversalUriHttpEntry; + + @Autowired + protected LoaderFactory loaderFactory; + + @Autowired + protected EdgeSerializer rules; + + @Autowired + public CQ2Gremlin(HttpEntry traversalUriHttpEntry, + @Value("${schema.uri.base.path}") String basePath) { + this.traversalUriHttpEntry = traversalUriHttpEntry; + } + + @PUT + @Path("") + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + public Response getC2Qgremlin(@RequestBody Map<String, CustomQueryConfigDTO> content, + @Context HttpHeaders headers, @Context UriInfo info) { + if (content.size() == 0) { + return Response.status(HttpStatus.BAD_REQUEST.value()) + .entity("At least one custom query should be passed").build(); + } + return processGremlinQuery(content.values().toArray(new CustomQueryConfigDTO[0])[0], info, + headers); + } + + protected Response processGremlinQuery(CustomQueryConfigDTO content, UriInfo info, + HttpHeaders headers) { + try { + LinkedHashMap<String, Object> params; + CustomQueryDTO queryDTO = content.getQueryDTO(); + String query = queryDTO.getQuery(); + params = new LinkedHashMap<>(); + + List<String> optionalParameters = queryDTO.getQueryOptionalProperties(); + if (!optionalParameters.isEmpty()) { + for (String key : optionalParameters) { + params.put(key, key); + } + } + + List<String> requiredParameters = queryDTO.getQueryRequiredProperties(); + if (!requiredParameters.isEmpty()) { + for (String key : requiredParameters) { + params.put(key, key); + } + } + + SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + traversalUriHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion()); + traversalUriHttpEntry.setPaginationParameters("-1", "-1"); + + TransactionalGraphEngine dbEngine = traversalUriHttpEntry.getDbEngine(); + + query = new GroovyQueryBuilder().executeTraversal(dbEngine, query, params); + query = "g" + query; + return Response.ok(query).build(); + } catch (Exception ex) { + return Response.status(500) + .entity("Query conversion failed with following reason: " + ex.toString()).build(); + } + + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/CQ2GremlinTest.java b/aai-traversal/src/main/java/org/onap/aai/rest/CQ2GremlinTest.java index e3cfaca..626c5f3 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/CQ2GremlinTest.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/CQ2GremlinTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,9 +19,19 @@ */ package org.onap.aai.rest; - import com.beust.jcommander.internal.Lists; import com.beust.jcommander.internal.Maps; + +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +import javax.ws.rs.Consumes; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.*; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Graph; @@ -49,171 +59,156 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.RequestBody; -import javax.ws.rs.Consumes; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.*; -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - - @Path("/cq2gremlintest") public class CQ2GremlinTest extends RESTAPI { - private static final Logger LOGGER = LoggerFactory.getLogger(CQ2GremlinTest.class); - - private HttpEntry traversalUriHttpEntry; - - - @Autowired - protected LoaderFactory loaderFactory; - - @Autowired - protected EdgeSerializer rules; - - protected Loader loader; - protected GraphTraversalSource gts; - - - @Autowired - public CQ2GremlinTest( - HttpEntry traversalUriHttpEntry, - @Value("${schema.uri.base.path}") String basePath - ){ - this.traversalUriHttpEntry = traversalUriHttpEntry; - - } - - @PUT - @Path("") - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON }) - public Response getC2Qgremlin(@RequestBody CustomQueryTestDTO content,@Context HttpHeaders headers, @Context UriInfo info) throws AAIException { - if(content == null){ - return Response.status(HttpStatus.BAD_REQUEST.value()).entity("At least one Json payload should be passed").build(); - } - String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId"); - String realTime = headers.getRequestHeaders().getFirst("Real-Time"); - SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); - traversalUriHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion()); - traversalUriHttpEntry.setPaginationParameters("-1", "-1"); - return processC2UnitTest(content); - } - - private Response processC2UnitTest(CustomQueryTestDTO content) { - - TransactionalGraphEngine dbEngine = traversalUriHttpEntry.getDbEngine(); - Graph graph = TinkerGraph.open(); - gts = graph.traversal(); - List<Vertex> expectedVertices = createGraph(content, graph); - GremlinGroovyShell shell = new GremlinGroovyShell(); - loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, new SchemaVersion("v19")); - LinkedHashMap <String, Object> params = new LinkedHashMap<>(); - - //Adding parameters - content.getQueryRequiredProperties().forEach(params::put); - content.getQueryOptionalProperties().forEach(params::put); - - String query = new GroovyQueryBuilder().executeTraversal(dbEngine, content.getStoredQuery(), params); - query = "g" + query; - GraphTraversal<Vertex, Vertex> g = graph.traversal().V(); - addStartNode(g, content); - params.put("g", g); - - //Assertion - GraphTraversal<Vertex, Vertex> result = (GraphTraversal<Vertex, Vertex>)shell.executeTraversal(query, params); - - List<Vertex> vertices = result.toList(); - - LOGGER.info("Expected result set of vertexes [{}]", convert(expectedVertices)); - LOGGER.info("Actual Result set of vertexes [{}]", convert(vertices)); - - List<Vertex> nonDuplicateExpectedResult = new ArrayList<>(new HashSet<>(expectedVertices)); - vertices = new ArrayList<>(new HashSet<>(vertices)); - - nonDuplicateExpectedResult.sort(Comparator.comparing(vertex -> vertex.id().toString())); - vertices.sort(Comparator.comparing(vertex -> vertex.id().toString())); - - - // Use this instead of the assertTrue as this provides more useful - // debugging information such as this when expected and actual differ: - // java.lang.AssertionError: Expected all the vertices to be found - // Expected :[v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] - // Actual :[v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] - if(nonDuplicateExpectedResult.equals(vertices)){ - return Response.ok("Sucessfully executed Junit").build(); - } - return Response.status(400).build(); - - } - - private List<Vertex> createGraph(CustomQueryTestDTO content, Graph graph) { - Map<String, Vertex> verticesMap = Maps.newLinkedHashMap(); - //Creating all the Vertices - content.getVerticesDtos().forEach(vertex -> { - StringBuilder vertexIdentifier = new StringBuilder(); - List<String> keyValues = Lists.newArrayList(); - keyValues.add(T.id.toString()); - keyValues.add(String.format("%02d", verticesMap.size() * 10)); - AtomicInteger index = new AtomicInteger(0); - vertex.forEach((k, v) -> { - if(index.get() == 1) - vertexIdentifier.append(k); - keyValues.add(k); - keyValues.add(v); - index.incrementAndGet(); - }); - Vertex graphVertex = graph.addVertex(keyValues.toArray()); - verticesMap.put(vertexIdentifier.toString(), graphVertex); - }); - - GraphTraversalSource g = graph.traversal(); - - //Creating all the Edges - content.getEdgesDtos().forEach(edge -> { - String fromId = edge.get("from-id"); - String toId = edge.get("to-id"); - boolean treeEdgeIdentifier = !"NONE".equalsIgnoreCase(edge.get("contains-other-v")); - Vertex fromVertex = verticesMap.get(fromId); - Vertex toVertex = verticesMap.get(toId); - try{ - if(treeEdgeIdentifier){ - rules.addTreeEdge(g, fromVertex, toVertex); - } - else{ - rules.addEdge(g, fromVertex, toVertex); - } - } catch(AAIException ex){ - LOGGER.warn(ex.toString(), ex); - } - - }); - - - List<Vertex> expectedVertices = Lists.newArrayList(); - content.getExpectedResultsDtos().getIds().forEach(vertexId -> expectedVertices.add(verticesMap.get(vertexId))); - return expectedVertices; - } - - protected void addStartNode(GraphTraversal<Vertex, Vertex> g, CustomQueryTestDTO content) { - Optional<LinkedHashMap<String, String>> startNodeVertex = content.getVerticesDtos().stream().filter(map -> map.containsKey("start-node")).findFirst(); - if(!startNodeVertex.isPresent()){ - throw new IllegalArgumentException("start-node was not specified"); - } - startNodeVertex.get().forEach((k, v) -> { - g.has(k, v); - }); - } - - protected String convert(List<Vertex> vertices){ - return vertices - .stream() - .map(vertex -> vertex.property("aai-node-type").value().toString()) - .collect(Collectors.joining(",")); - } - - + private static final Logger LOGGER = LoggerFactory.getLogger(CQ2GremlinTest.class); + + private HttpEntry traversalUriHttpEntry; + + @Autowired + protected LoaderFactory loaderFactory; + + @Autowired + protected EdgeSerializer rules; + + protected Loader loader; + protected GraphTraversalSource gts; + + @Autowired + public CQ2GremlinTest(HttpEntry traversalUriHttpEntry, + @Value("${schema.uri.base.path}") String basePath) { + this.traversalUriHttpEntry = traversalUriHttpEntry; + + } + + @PUT + @Path("") + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + public Response getC2Qgremlin(@RequestBody CustomQueryTestDTO content, + @Context HttpHeaders headers, @Context UriInfo info) throws AAIException { + if (content == null) { + return Response.status(HttpStatus.BAD_REQUEST.value()) + .entity("At least one Json payload should be passed").build(); + } + String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId"); + String realTime = headers.getRequestHeaders().getFirst("Real-Time"); + SchemaVersions schemaVersions = SpringContextAware.getBean(SchemaVersions.class); + traversalUriHttpEntry.setHttpEntryProperties(schemaVersions.getDefaultVersion()); + traversalUriHttpEntry.setPaginationParameters("-1", "-1"); + return processC2UnitTest(content); + } + + private Response processC2UnitTest(CustomQueryTestDTO content) { + + TransactionalGraphEngine dbEngine = traversalUriHttpEntry.getDbEngine(); + Graph graph = TinkerGraph.open(); + gts = graph.traversal(); + List<Vertex> expectedVertices = createGraph(content, graph); + GremlinGroovyShell shell = new GremlinGroovyShell(); + loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, new SchemaVersion("v19")); + LinkedHashMap<String, Object> params = new LinkedHashMap<>(); + + // Adding parameters + content.getQueryRequiredProperties().forEach(params::put); + content.getQueryOptionalProperties().forEach(params::put); + + String query = + new GroovyQueryBuilder().executeTraversal(dbEngine, content.getStoredQuery(), params); + query = "g" + query; + GraphTraversal<Vertex, Vertex> g = graph.traversal().V(); + addStartNode(g, content); + params.put("g", g); + + // Assertion + GraphTraversal<Vertex, Vertex> result = + (GraphTraversal<Vertex, Vertex>) shell.executeTraversal(query, params); + + List<Vertex> vertices = result.toList(); + + LOGGER.info("Expected result set of vertexes [{}]", convert(expectedVertices)); + LOGGER.info("Actual Result set of vertexes [{}]", convert(vertices)); + + List<Vertex> nonDuplicateExpectedResult = new ArrayList<>(new HashSet<>(expectedVertices)); + vertices = new ArrayList<>(new HashSet<>(vertices)); + + nonDuplicateExpectedResult.sort(Comparator.comparing(vertex -> vertex.id().toString())); + vertices.sort(Comparator.comparing(vertex -> vertex.id().toString())); + + // Use this instead of the assertTrue as this provides more useful + // debugging information such as this when expected and actual differ: + // java.lang.AssertionError: Expected all the vertices to be found + // Expected :[v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] + // Actual :[v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] + if (nonDuplicateExpectedResult.equals(vertices)) { + return Response.ok("Sucessfully executed Junit").build(); + } + return Response.status(400).build(); + + } + + private List<Vertex> createGraph(CustomQueryTestDTO content, Graph graph) { + Map<String, Vertex> verticesMap = Maps.newLinkedHashMap(); + // Creating all the Vertices + content.getVerticesDtos().forEach(vertex -> { + StringBuilder vertexIdentifier = new StringBuilder(); + List<String> keyValues = Lists.newArrayList(); + keyValues.add(T.id.toString()); + keyValues.add(String.format("%02d", verticesMap.size() * 10)); + AtomicInteger index = new AtomicInteger(0); + vertex.forEach((k, v) -> { + if (index.get() == 1) + vertexIdentifier.append(k); + keyValues.add(k); + keyValues.add(v); + index.incrementAndGet(); + }); + Vertex graphVertex = graph.addVertex(keyValues.toArray()); + verticesMap.put(vertexIdentifier.toString(), graphVertex); + }); + + GraphTraversalSource g = graph.traversal(); + + // Creating all the Edges + content.getEdgesDtos().forEach(edge -> { + String fromId = edge.get("from-id"); + String toId = edge.get("to-id"); + boolean treeEdgeIdentifier = !"NONE".equalsIgnoreCase(edge.get("contains-other-v")); + Vertex fromVertex = verticesMap.get(fromId); + Vertex toVertex = verticesMap.get(toId); + try { + if (treeEdgeIdentifier) { + rules.addTreeEdge(g, fromVertex, toVertex); + } else { + rules.addEdge(g, fromVertex, toVertex); + } + } catch (AAIException ex) { + LOGGER.warn(ex.toString(), ex); + } + + }); + + List<Vertex> expectedVertices = Lists.newArrayList(); + content.getExpectedResultsDtos().getIds() + .forEach(vertexId -> expectedVertices.add(verticesMap.get(vertexId))); + return expectedVertices; + } + + protected void addStartNode(GraphTraversal<Vertex, Vertex> g, CustomQueryTestDTO content) { + Optional<LinkedHashMap<String, String>> startNodeVertex = content.getVerticesDtos().stream() + .filter(map -> map.containsKey("start-node")).findFirst(); + if (!startNodeVertex.isPresent()) { + throw new IllegalArgumentException("start-node was not specified"); + } + startNodeVertex.get().forEach((k, v) -> { + g.has(k, v); + }); + } + + protected String convert(List<Vertex> vertices) { + return vertices.stream().map(vertex -> vertex.property("aai-node-type").value().toString()) + .collect(Collectors.joining(",")); + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java b/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java index fefd2dc..2b6bbb9 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -22,7 +22,17 @@ package org.onap.aai.rest; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; + import io.micrometer.core.annotation.Timed; + +import java.util.*; +import java.util.stream.Collectors; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import javax.ws.rs.core.Response.Status; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.janusgraph.core.SchemaViolationException; import org.onap.aai.concurrent.AaiCallable; @@ -51,222 +61,211 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.*; -import javax.ws.rs.core.*; -import javax.ws.rs.core.Response.Status; -import java.util.*; -import java.util.stream.Collectors; - @Path("{version: v[1-9][0-9]*|latest}/dsl") @Timed public class DslConsumer extends TraversalConsumer { - private HttpEntry traversalUriHttpEntry; - - private QueryProcessorType processorType = QueryProcessorType.LOCAL_GROOVY; - - private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumer.class); - - private DslQueryProcessor dslQueryProcessor; - - private SchemaVersions schemaVersions; - - private String basePath; - - private GremlinServerSingleton gremlinServerSingleton; - private final QueryVersion DEFAULT_VERSION = QueryVersion.V1; - private QueryVersion dslApiVersion = DEFAULT_VERSION; - - private XmlFormatTransformer xmlFormatTransformer; - - @Autowired - public DslConsumer(HttpEntry traversalUriHttpEntry, DslQueryProcessor dslQueryProcessor, - SchemaVersions schemaVersions, GremlinServerSingleton gremlinServerSingleton, - XmlFormatTransformer xmlFormatTransformer, - @Value("${schema.uri.base.path}") String basePath) { - this.traversalUriHttpEntry = traversalUriHttpEntry; - this.dslQueryProcessor = dslQueryProcessor; - this.schemaVersions = schemaVersions; - this.gremlinServerSingleton = gremlinServerSingleton; - this.xmlFormatTransformer = xmlFormatTransformer; - this.basePath = basePath; - } - - @PUT - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public Response executeQuery(String content, - @PathParam("version") String versionParam, - @DefaultValue("graphson") @QueryParam("format") String queryFormat, - @DefaultValue("no_op") @QueryParam("subgraph") String subgraph, - @DefaultValue("all") @QueryParam("validate") String validate, - @Context HttpHeaders headers, - @Context HttpServletRequest req, - @Context UriInfo info, - @DefaultValue("-1") @QueryParam("resultIndex") String resultIndex, - @DefaultValue("-1") @QueryParam("resultSize") String resultSize) { - Set<String> roles = this.getRoles(req.getUserPrincipal()); - - return runner(TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_ENABLED, - TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_APP, - TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_LIMIT, - headers, - info, - HttpMethod.PUT, - new AaiCallable() { - @Override - public Response process() throws Exception { - return (processExecuteQuery(content, req, versionParam, queryFormat, subgraph, validate, headers, info, - resultIndex, resultSize, roles)); - } - } - ); - } - - public Response processExecuteQuery(String content, HttpServletRequest req, String versionParam, String queryFormat, String subgraph, - String validate, HttpHeaders headers, UriInfo info, String resultIndex, - String resultSize, Set<String> roles) { - - String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId"); - String dslOverride = headers.getRequestHeaders().getFirst("X-DslOverride"); - - Optional<String> dslApiVersionHeader = Optional.ofNullable(headers.getRequestHeaders().getFirst("X-DslApiVersion")); - if (dslApiVersionHeader.isPresent()) { - try { - dslApiVersion = QueryVersion.valueOf(dslApiVersionHeader.get()); - } catch (IllegalArgumentException e) { - LOGGER.debug("Defaulting DSL Api Version to "+DEFAULT_VERSION); - } - } - - Response response; - SchemaVersion version = new SchemaVersion(versionParam); - - TransactionalGraphEngine dbEngine = null; - try { - String serverBase = req.getRequestURL().toString().replaceAll("/(v[0-9]+|latest)/.*", "/"); - traversalUriHttpEntry.setHttpEntryProperties(version, serverBase); - traversalUriHttpEntry.setPaginationParameters(resultIndex, resultSize); - dbEngine = traversalUriHttpEntry.getDbEngine(); - JsonObject input = new JsonParser().parse(content).getAsJsonObject(); - JsonElement dslElement = input.get("dsl"); - String dsl = ""; - if (dslElement != null) { - dsl = dslElement.getAsString(); - } - - - boolean isDslOverride = dslOverride != null && !AAIConfig.get(TraversalConstants.DSL_OVERRIDE).equals("false") - && dslOverride.equals(AAIConfig.get(TraversalConstants.DSL_OVERRIDE)); - - if(isDslOverride) { - dslQueryProcessor.setStartNodeValidationFlag(false); - } - - dslQueryProcessor.setValidationRules(validate); - - Format format = Format.getFormat(queryFormat); - - if(isAggregate(format)){ - dslQueryProcessor.setAggregate(true); - } - - if(isHistory(format)){ - validateHistoryParams(format, info.getQueryParameters()); - } - - GraphTraversalSource traversalSource = getTraversalSource(dbEngine, format, info, roles); - - GenericQueryProcessor processor = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton) - .queryFrom(dsl, "dsl").queryProcessor(dslQueryProcessor).version(dslApiVersion).processWith(processorType) - .format(format).uriParams(info.getQueryParameters()).traversalSource(isHistory(format), traversalSource).create(); - - SubGraphStyle subGraphStyle = SubGraphStyle.valueOf(subgraph); - List<Object> vertTemp = processor.execute(subGraphStyle); - - - // Dedup if duplicate objects are returned in each array in the aggregate format scenario. - List<Object> vertTempDedupedObjectList = dedupObjectInAggregateFormatResult(vertTemp); - - List <Object> vertices; - if (isAggregate(format)){ - vertices = traversalUriHttpEntry.getPaginatedVertexListForAggregateFormat(vertTempDedupedObjectList); - } else { - vertices = traversalUriHttpEntry.getPaginatedVertexList(vertTemp); - } - - DBSerializer serializer = new DBSerializer(version, dbEngine, ModelType.MOXY, sourceOfTruth); - FormatFactory ff = new FormatFactory(traversalUriHttpEntry.getLoader(), serializer, schemaVersions, - this.basePath, serverBase); - - MultivaluedMap<String, String> mvm = new MultivaluedHashMap<>(); - mvm.putAll(info.getQueryParameters()); - if (isHistory(format)) { - mvm.putSingle("startTs", Long.toString(getStartTime(format, mvm))); - mvm.putSingle("endTs", Long.toString(getEndTime(mvm))); - } - Formatter formatter = ff.get(format, mvm); - - final Map<String, List<String>> propertiesMap = processor.getPropertiesMap(); - String result = ""; - if (propertiesMap != null && !propertiesMap.isEmpty()){ - result = formatter.output(vertices, propertiesMap).toString(); - } - else { - result = formatter.output(vertices).toString(); - } - - String acceptType = headers.getHeaderString("Accept"); - - if(acceptType == null){ - acceptType = MediaType.APPLICATION_JSON; - } - - if(MediaType.APPLICATION_XML_TYPE.isCompatible(MediaType.valueOf(acceptType))){ - result = xmlFormatTransformer.transform(result); - } - - if(traversalUriHttpEntry.isPaginated()){ - response = Response.status(Status.OK) - .type(acceptType) - .header("total-results", traversalUriHttpEntry.getTotalVertices()) - .header("total-pages", traversalUriHttpEntry.getTotalPaginationBuckets()) - .entity(result) - .build(); - }else { - response = Response.status(Status.OK) - .type(acceptType) - .entity(result).build(); - } - - } catch (AAIException e) { - response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, e); - } catch (SchemaViolationException sve) { - AAIException ex = new AAIException("AAI_4020", sve); - response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, ex); - } catch (Exception e) { - AAIException ex = new AAIException("AAI_4000", e); - response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, ex); - } finally { - if (dbEngine != null) { - dbEngine.rollback(); - } - - } - - return response; - } - - private List<Object> dedupObjectInAggregateFormatResult(List<Object> vertTemp) { - List<Object> vertTempDedupedObjectList = new ArrayList<Object>(); - Iterator<Object> itr = vertTemp.listIterator(); - while (itr.hasNext()){ - Object o = itr.next(); - if (o instanceof ArrayList) { - vertTempDedupedObjectList.add(((ArrayList) o).stream().distinct().collect(Collectors.toList())); - } - } - return vertTempDedupedObjectList; - } + private HttpEntry traversalUriHttpEntry; + + private QueryProcessorType processorType = QueryProcessorType.LOCAL_GROOVY; + + private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumer.class); + + private DslQueryProcessor dslQueryProcessor; + + private SchemaVersions schemaVersions; + + private String basePath; + + private GremlinServerSingleton gremlinServerSingleton; + private final QueryVersion DEFAULT_VERSION = QueryVersion.V1; + private QueryVersion dslApiVersion = DEFAULT_VERSION; + + private XmlFormatTransformer xmlFormatTransformer; + + @Autowired + public DslConsumer(HttpEntry traversalUriHttpEntry, DslQueryProcessor dslQueryProcessor, + SchemaVersions schemaVersions, GremlinServerSingleton gremlinServerSingleton, + XmlFormatTransformer xmlFormatTransformer, + @Value("${schema.uri.base.path}") String basePath) { + this.traversalUriHttpEntry = traversalUriHttpEntry; + this.dslQueryProcessor = dslQueryProcessor; + this.schemaVersions = schemaVersions; + this.gremlinServerSingleton = gremlinServerSingleton; + this.xmlFormatTransformer = xmlFormatTransformer; + this.basePath = basePath; + } + + @PUT + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) + public Response executeQuery(String content, @PathParam("version") String versionParam, + @DefaultValue("graphson") @QueryParam("format") String queryFormat, + @DefaultValue("no_op") @QueryParam("subgraph") String subgraph, + @DefaultValue("all") @QueryParam("validate") String validate, @Context HttpHeaders headers, + @Context HttpServletRequest req, @Context UriInfo info, + @DefaultValue("-1") @QueryParam("resultIndex") String resultIndex, + @DefaultValue("-1") @QueryParam("resultSize") String resultSize) { + Set<String> roles = this.getRoles(req.getUserPrincipal()); + + return runner(TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_ENABLED, + TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_APP, + TraversalConstants.AAI_TRAVERSAL_DSL_TIMEOUT_LIMIT, headers, info, HttpMethod.PUT, + new AaiCallable() { + @Override + public Response process() throws Exception { + return (processExecuteQuery(content, req, versionParam, queryFormat, subgraph, + validate, headers, info, resultIndex, resultSize, roles)); + } + }); + } + + public Response processExecuteQuery(String content, HttpServletRequest req, String versionParam, + String queryFormat, String subgraph, String validate, HttpHeaders headers, UriInfo info, + String resultIndex, String resultSize, Set<String> roles) { + + String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId"); + String dslOverride = headers.getRequestHeaders().getFirst("X-DslOverride"); + + Optional<String> dslApiVersionHeader = + Optional.ofNullable(headers.getRequestHeaders().getFirst("X-DslApiVersion")); + if (dslApiVersionHeader.isPresent()) { + try { + dslApiVersion = QueryVersion.valueOf(dslApiVersionHeader.get()); + } catch (IllegalArgumentException e) { + LOGGER.debug("Defaulting DSL Api Version to " + DEFAULT_VERSION); + } + } + + Response response; + SchemaVersion version = new SchemaVersion(versionParam); + + TransactionalGraphEngine dbEngine = null; + try { + String serverBase = + req.getRequestURL().toString().replaceAll("/(v[0-9]+|latest)/.*", "/"); + traversalUriHttpEntry.setHttpEntryProperties(version, serverBase); + traversalUriHttpEntry.setPaginationParameters(resultIndex, resultSize); + dbEngine = traversalUriHttpEntry.getDbEngine(); + JsonObject input = new JsonParser().parse(content).getAsJsonObject(); + JsonElement dslElement = input.get("dsl"); + String dsl = ""; + if (dslElement != null) { + dsl = dslElement.getAsString(); + } + + boolean isDslOverride = dslOverride != null + && !AAIConfig.get(TraversalConstants.DSL_OVERRIDE).equals("false") + && dslOverride.equals(AAIConfig.get(TraversalConstants.DSL_OVERRIDE)); + + if (isDslOverride) { + dslQueryProcessor.setStartNodeValidationFlag(false); + } + + dslQueryProcessor.setValidationRules(validate); + + Format format = Format.getFormat(queryFormat); + + if (isAggregate(format)) { + dslQueryProcessor.setAggregate(true); + } + + if (isHistory(format)) { + validateHistoryParams(format, info.getQueryParameters()); + } + + GraphTraversalSource traversalSource = + getTraversalSource(dbEngine, format, info, roles); + + GenericQueryProcessor processor = + new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton) + .queryFrom(dsl, "dsl").queryProcessor(dslQueryProcessor).version(dslApiVersion) + .processWith(processorType).format(format).uriParams(info.getQueryParameters()) + .traversalSource(isHistory(format), traversalSource).create(); + + SubGraphStyle subGraphStyle = SubGraphStyle.valueOf(subgraph); + List<Object> vertTemp = processor.execute(subGraphStyle); + + // Dedup if duplicate objects are returned in each array in the aggregate format + // scenario. + List<Object> vertTempDedupedObjectList = dedupObjectInAggregateFormatResult(vertTemp); + + List<Object> vertices; + if (isAggregate(format)) { + vertices = traversalUriHttpEntry + .getPaginatedVertexListForAggregateFormat(vertTempDedupedObjectList); + } else { + vertices = traversalUriHttpEntry.getPaginatedVertexList(vertTemp); + } + + DBSerializer serializer = + new DBSerializer(version, dbEngine, ModelType.MOXY, sourceOfTruth); + FormatFactory ff = new FormatFactory(traversalUriHttpEntry.getLoader(), serializer, + schemaVersions, this.basePath, serverBase); + + MultivaluedMap<String, String> mvm = new MultivaluedHashMap<>(); + mvm.putAll(info.getQueryParameters()); + if (isHistory(format)) { + mvm.putSingle("startTs", Long.toString(getStartTime(format, mvm))); + mvm.putSingle("endTs", Long.toString(getEndTime(mvm))); + } + Formatter formatter = ff.get(format, mvm); + + final Map<String, List<String>> propertiesMap = processor.getPropertiesMap(); + String result = ""; + if (propertiesMap != null && !propertiesMap.isEmpty()) { + result = formatter.output(vertices, propertiesMap).toString(); + } else { + result = formatter.output(vertices).toString(); + } + + String acceptType = headers.getHeaderString("Accept"); + + if (acceptType == null) { + acceptType = MediaType.APPLICATION_JSON; + } + + if (MediaType.APPLICATION_XML_TYPE.isCompatible(MediaType.valueOf(acceptType))) { + result = xmlFormatTransformer.transform(result); + } + + if (traversalUriHttpEntry.isPaginated()) { + response = Response.status(Status.OK).type(acceptType) + .header("total-results", traversalUriHttpEntry.getTotalVertices()) + .header("total-pages", traversalUriHttpEntry.getTotalPaginationBuckets()) + .entity(result).build(); + } else { + response = Response.status(Status.OK).type(acceptType).entity(result).build(); + } + + } catch (AAIException e) { + response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, e); + } catch (SchemaViolationException sve) { + AAIException ex = new AAIException("AAI_4020", sve); + response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, ex); + } catch (Exception e) { + AAIException ex = new AAIException("AAI_4000", e); + response = consumerExceptionResponseGenerator(headers, info, HttpMethod.PUT, ex); + } finally { + if (dbEngine != null) { + dbEngine.rollback(); + } + + } + + return response; + } + + private List<Object> dedupObjectInAggregateFormatResult(List<Object> vertTemp) { + List<Object> vertTempDedupedObjectList = new ArrayList<Object>(); + Iterator<Object> itr = vertTemp.listIterator(); + while (itr.hasNext()) { + Object o = itr.next(); + if (o instanceof ArrayList) { + vertTempDedupedObjectList + .add(((ArrayList) o).stream().distinct().collect(Collectors.toList())); + } + } + return vertTempDedupedObjectList; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/ExceptionHandler.java b/aai-traversal/src/main/java/org/onap/aai/rest/ExceptionHandler.java index 452815e..d6d2f5e 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/ExceptionHandler.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/ExceptionHandler.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,10 @@ */ package org.onap.aai.rest; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.sun.istack.SAXParseException2; + import java.util.ArrayList; import java.util.List; @@ -33,9 +37,6 @@ import javax.ws.rs.ext.Provider; import org.onap.aai.exceptions.AAIException; import org.onap.aai.logging.ErrorLogHelper; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.sun.istack.SAXParseException2; /** * The Class ExceptionHandler. @@ -43,84 +44,81 @@ import com.sun.istack.SAXParseException2; @Provider public class ExceptionHandler implements ExceptionMapper<Exception> { - private static final String AAI_4007 = "AAI_4007"; + private static final String AAI_4007 = "AAI_4007"; @Context private HttpServletRequest request; - + @Context private HttpHeaders headers; - + @Override public Response toResponse(Exception exception) { - Response response = null; - ArrayList<String> templateVars = new ArrayList<>(); + Response response = null; + ArrayList<String> templateVars = new ArrayList<>(); - //the general case is that cxf will give us a WebApplicationException - //with a linked exception - if (exception instanceof WebApplicationException) { - WebApplicationException e = (WebApplicationException) exception; - if (e.getCause() instanceof SAXParseException2) { - templateVars.add("UnmarshalException"); - AAIException ex = new AAIException(AAI_4007, exception); - response = Response - .status(400) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) - .build(); + // the general case is that cxf will give us a WebApplicationException + // with a linked exception + if (exception instanceof WebApplicationException) { + WebApplicationException e = (WebApplicationException) exception; + if (e.getCause() instanceof SAXParseException2) { + templateVars.add("UnmarshalException"); + AAIException ex = new AAIException(AAI_4007, exception); + response = Response.status(400).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) + .build(); - } - } else if (exception instanceof JsonParseException) { - //jackson does it differently so we get the direct JsonParseException - templateVars.add("JsonParseException"); - AAIException ex = new AAIException(AAI_4007, exception); - response = Response - .status(400) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) - .build(); + } + } else if (exception instanceof JsonParseException) { + // jackson does it differently so we get the direct JsonParseException + templateVars.add("JsonParseException"); + AAIException ex = new AAIException(AAI_4007, exception); + response = Response + .status(400).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) + .build(); } else if (exception instanceof JsonMappingException) { - //jackson does it differently so we get the direct JsonParseException - templateVars.add("JsonMappingException"); - AAIException ex = new AAIException(AAI_4007, exception); - response = Response - .status(400) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) - .build(); - } - - // it didn't get set above, we wrap a general fault here - if (response == null) { - - Exception actual_e = exception; - if (exception instanceof WebApplicationException) { - WebApplicationException e = (WebApplicationException) exception; - response = e.getResponse(); - } else { - templateVars.add(request.getMethod()); - templateVars.add("unknown"); - AAIException ex = new AAIException("AAI_4000", actual_e); - List<MediaType> mediaTypes = headers.getAcceptableMediaTypes(); - int setError = 0; + // jackson does it differently so we get the direct JsonParseException + templateVars.add("JsonMappingException"); + AAIException ex = new AAIException(AAI_4007, exception); + response = Response + .status(400).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) + .build(); + } + + // it didn't get set above, we wrap a general fault here + if (response == null) { + + Exception actual_e = exception; + if (exception instanceof WebApplicationException) { + WebApplicationException e = (WebApplicationException) exception; + response = e.getResponse(); + } else { + templateVars.add(request.getMethod()); + templateVars.add("unknown"); + AAIException ex = new AAIException("AAI_4000", actual_e); + List<MediaType> mediaTypes = headers.getAcceptableMediaTypes(); + int setError = 0; - for (MediaType mediaType : mediaTypes) { - if (MediaType.APPLICATION_XML_TYPE.isCompatible(mediaType)) { - response = Response - .status(400) - .type(MediaType.APPLICATION_XML_TYPE) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) - .build(); - setError = 1; - } - } - if (setError == 0) { - response = Response - .status(400) - .type(MediaType.APPLICATION_JSON_TYPE) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) - .build(); - } - } - } - return response; + for (MediaType mediaType : mediaTypes) { + if (MediaType.APPLICATION_XML_TYPE.isCompatible(mediaType)) { + response = Response.status(400).type(MediaType.APPLICATION_XML_TYPE) + .entity(ErrorLogHelper.getRESTAPIErrorResponse( + headers.getAcceptableMediaTypes(), ex, templateVars)) + .build(); + setError = 1; + } + } + if (setError == 0) { + response = Response.status(400).type(MediaType.APPLICATION_JSON_TYPE) + .entity(ErrorLogHelper.getRESTAPIErrorResponse( + headers.getAcceptableMediaTypes(), ex, templateVars)) + .build(); + } + } + } + return response; } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java b/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java index e015ec3..460065e 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -22,14 +22,24 @@ package org.onap.aai.rest; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; + import io.micrometer.core.annotation.Timed; + +import java.net.URI; +import java.util.*; +import java.util.stream.Collectors; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import javax.ws.rs.core.Response.Status; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.onap.aai.concurrent.AaiCallable; import org.onap.aai.exceptions.AAIException; import org.onap.aai.introspection.ModelType; import org.onap.aai.logging.ErrorLogHelper; - import org.onap.aai.parsers.query.QueryParser; import org.onap.aai.rest.db.HttpEntry; import org.onap.aai.rest.search.CustomQueryConfig; @@ -54,181 +64,178 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.*; -import javax.ws.rs.core.*; -import javax.ws.rs.core.Response.Status; -import java.net.URI; -import java.util.*; -import java.util.stream.Collectors; - @Path("{version: v[1-9][0-9]*|latest}/query") @Timed public class QueryConsumer extends TraversalConsumer { - private QueryProcessorType processorType = QueryProcessorType.LOCAL_GROOVY; - - private static final Logger LOGGER = LoggerFactory.getLogger(QueryConsumer.class); - - private HttpEntry traversalUriHttpEntry; - - - private SchemaVersions schemaVersions; - - private String basePath; - - private GremlinServerSingleton gremlinServerSingleton; - - private XmlFormatTransformer xmlFormatTransformer; - - @Autowired - public QueryConsumer(HttpEntry traversalUriHttpEntry, SchemaVersions schemaVersions, - GremlinServerSingleton gremlinServerSingleton, XmlFormatTransformer xmlFormatTransformer, @Value("${schema.uri.base.path}") String basePath) { - this.traversalUriHttpEntry = traversalUriHttpEntry; - this.schemaVersions = schemaVersions; - this.gremlinServerSingleton = gremlinServerSingleton; - this.basePath = basePath; - this.xmlFormatTransformer = xmlFormatTransformer; - } - - @PUT - @Consumes({ MediaType.APPLICATION_JSON}) - @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public Response executeQuery(String content, - @PathParam("version") String versionParam, - @DefaultValue("graphson") @QueryParam("format") String queryFormat, - @DefaultValue("no_op") @QueryParam("subgraph") String subgraph, - @Context HttpHeaders headers, - @Context HttpServletRequest req, - @Context UriInfo info, - @DefaultValue("-1") @QueryParam("resultIndex") String resultIndex, - @DefaultValue("-1") @QueryParam("resultSize") String resultSize) { - Set<String> roles = this.getRoles(req.getUserPrincipal()); - - return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, - TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, - TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, - headers, - info, - HttpMethod.GET, - new AaiCallable<Response>() { - @Override - public Response process() { - return processExecuteQuery(content, req, versionParam, queryFormat, subgraph, headers, info, resultIndex, resultSize, roles); - } - }); - } - - public Response processExecuteQuery(String content, HttpServletRequest req, String versionParam, String queryFormat, String subgraph, - HttpHeaders headers, UriInfo info, String resultIndex, - String resultSize, Set<String> roles) { - - String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId"); - String queryProcessor = headers.getRequestHeaders().getFirst("QueryProcessor"); - QueryProcessorType processorType = this.processorType; - Response response; - TransactionalGraphEngine dbEngine = null; - - try { - this.checkQueryParams(info.getQueryParameters()); - Format format = Format.getFormat(queryFormat); - if (queryProcessor != null) { - processorType = QueryProcessorType.valueOf(queryProcessor); - } - SubGraphStyle subGraphStyle = SubGraphStyle.valueOf(subgraph); - - JsonParser parser = new JsonParser(); - JsonObject input = parser.parse(content).getAsJsonObject(); - JsonElement startElement = input.get("start"); - JsonElement queryElement = input.get("query"); - JsonElement gremlinElement = input.get("gremlin"); - List<URI> startURIs = new ArrayList<>(); - String queryURI = ""; - String gremlin = ""; - - SchemaVersion version = new SchemaVersion(versionParam); - String serverBase = req.getRequestURL().toString().replaceAll("/(v[0-9]+|latest)/.*", "/"); - traversalUriHttpEntry.setHttpEntryProperties(version, serverBase); - /* - * Changes for Pagination - */ - - traversalUriHttpEntry.setPaginationParameters(resultIndex, resultSize); - dbEngine = traversalUriHttpEntry.getDbEngine(); - - if (startElement != null) { - - if (startElement.isJsonArray()) { - for (JsonElement element : startElement.getAsJsonArray()) { - startURIs.add(new URI(element.getAsString())); - } - } else { - startURIs.add(new URI(startElement.getAsString())); - } - } - if (queryElement != null) { - queryURI = queryElement.getAsString(); - } - if (gremlinElement != null) { - gremlin = gremlinElement.getAsString(); - } - URI queryURIObj = new URI(queryURI); - - CustomQueryConfig customQueryConfig = getCustomQueryConfig(queryURIObj); - if ( customQueryConfig != null ) { - List<String> missingRequiredQueryParameters = checkForMissingQueryParameters( customQueryConfig.getQueryRequiredProperties(), URITools.getQueryMap(queryURIObj)); - - if ( !missingRequiredQueryParameters.isEmpty() ) { - return( createMessageMissingQueryRequiredParameters( missingRequiredQueryParameters, headers)); - } - - List<String> invalidQueryParameters = checkForInvalidQueryParameters( customQueryConfig, URITools.getQueryMap(queryURIObj)); - - if ( !invalidQueryParameters.isEmpty() ) { - return( createMessageInvalidQueryParameters( invalidQueryParameters, headers)); - } - - } else if ( queryElement != null ) { - return (createMessageInvalidQuerySection(queryURI, headers)); - } - - GenericQueryProcessor processor; - - if(isHistory(format)){ - validateHistoryParams(format, info.getQueryParameters()); - } - GraphTraversalSource traversalSource = getTraversalSource(dbEngine, format, info, roles); - QueryStyle queryStyle = getQueryStyle(format, traversalUriHttpEntry); - - if (!startURIs.isEmpty()) { - Set<Vertex> vertexSet = new LinkedHashSet<>(); - QueryParser uriQuery; - List<Vertex> vertices; - for (URI startUri : startURIs) { - uriQuery = dbEngine.getQueryBuilder(queryStyle, traversalSource).createQueryFromURI(startUri, URITools.getQueryMap(startUri)); - vertices = uriQuery.getQueryBuilder().toList(); - vertexSet.addAll(vertices); - } - - processor = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton) - .startFrom(vertexSet).queryFrom(queryURIObj).format(format) - .processWith(processorType).traversalSource(isHistory(format), traversalSource).create(); - } else if (!queryURI.equals("")){ - processor = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton) - .queryFrom(queryURIObj) - .processWith(processorType).traversalSource(isHistory(format), traversalSource).create(); - } else { - processor = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton) - .queryFrom(gremlin, "gremlin") - .processWith(processorType).traversalSource(isHistory(format), traversalSource).create(); - } - List<Object> vertTemp = processor.execute(subGraphStyle); - List<Object> vertices = traversalUriHttpEntry.getPaginatedVertexList(vertTemp); - - DBSerializer serializer = new DBSerializer(version, dbEngine, ModelType.MOXY, sourceOfTruth); - FormatFactory ff = new FormatFactory(traversalUriHttpEntry.getLoader(), serializer, schemaVersions, this.basePath, serverBase); - - MultivaluedMap<String, String> mvm = new MultivaluedHashMap<>(); + private QueryProcessorType processorType = QueryProcessorType.LOCAL_GROOVY; + + private static final Logger LOGGER = LoggerFactory.getLogger(QueryConsumer.class); + + private HttpEntry traversalUriHttpEntry; + + private SchemaVersions schemaVersions; + + private String basePath; + + private GremlinServerSingleton gremlinServerSingleton; + + private XmlFormatTransformer xmlFormatTransformer; + + @Autowired + public QueryConsumer(HttpEntry traversalUriHttpEntry, SchemaVersions schemaVersions, + GremlinServerSingleton gremlinServerSingleton, XmlFormatTransformer xmlFormatTransformer, + @Value("${schema.uri.base.path}") String basePath) { + this.traversalUriHttpEntry = traversalUriHttpEntry; + this.schemaVersions = schemaVersions; + this.gremlinServerSingleton = gremlinServerSingleton; + this.basePath = basePath; + this.xmlFormatTransformer = xmlFormatTransformer; + } + + @PUT + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) + public Response executeQuery(String content, @PathParam("version") String versionParam, + @DefaultValue("graphson") @QueryParam("format") String queryFormat, + @DefaultValue("no_op") @QueryParam("subgraph") String subgraph, + @Context HttpHeaders headers, @Context HttpServletRequest req, @Context UriInfo info, + @DefaultValue("-1") @QueryParam("resultIndex") String resultIndex, + @DefaultValue("-1") @QueryParam("resultSize") String resultSize) { + Set<String> roles = this.getRoles(req.getUserPrincipal()); + + return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET, + new AaiCallable<Response>() { + @Override + public Response process() { + return processExecuteQuery(content, req, versionParam, queryFormat, subgraph, + headers, info, resultIndex, resultSize, roles); + } + }); + } + + public Response processExecuteQuery(String content, HttpServletRequest req, String versionParam, + String queryFormat, String subgraph, HttpHeaders headers, UriInfo info, String resultIndex, + String resultSize, Set<String> roles) { + + String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId"); + String queryProcessor = headers.getRequestHeaders().getFirst("QueryProcessor"); + QueryProcessorType processorType = this.processorType; + Response response; + TransactionalGraphEngine dbEngine = null; + + try { + this.checkQueryParams(info.getQueryParameters()); + Format format = Format.getFormat(queryFormat); + if (queryProcessor != null) { + processorType = QueryProcessorType.valueOf(queryProcessor); + } + SubGraphStyle subGraphStyle = SubGraphStyle.valueOf(subgraph); + + JsonParser parser = new JsonParser(); + JsonObject input = parser.parse(content).getAsJsonObject(); + JsonElement startElement = input.get("start"); + JsonElement queryElement = input.get("query"); + JsonElement gremlinElement = input.get("gremlin"); + List<URI> startURIs = new ArrayList<>(); + String queryURI = ""; + String gremlin = ""; + + SchemaVersion version = new SchemaVersion(versionParam); + String serverBase = + req.getRequestURL().toString().replaceAll("/(v[0-9]+|latest)/.*", "/"); + traversalUriHttpEntry.setHttpEntryProperties(version, serverBase); + /* + * Changes for Pagination + */ + + traversalUriHttpEntry.setPaginationParameters(resultIndex, resultSize); + dbEngine = traversalUriHttpEntry.getDbEngine(); + + if (startElement != null) { + + if (startElement.isJsonArray()) { + for (JsonElement element : startElement.getAsJsonArray()) { + startURIs.add(new URI(element.getAsString())); + } + } else { + startURIs.add(new URI(startElement.getAsString())); + } + } + if (queryElement != null) { + queryURI = queryElement.getAsString(); + } + if (gremlinElement != null) { + gremlin = gremlinElement.getAsString(); + } + URI queryURIObj = new URI(queryURI); + + CustomQueryConfig customQueryConfig = getCustomQueryConfig(queryURIObj); + if (customQueryConfig != null) { + List<String> missingRequiredQueryParameters = + checkForMissingQueryParameters(customQueryConfig.getQueryRequiredProperties(), + URITools.getQueryMap(queryURIObj)); + + if (!missingRequiredQueryParameters.isEmpty()) { + return (createMessageMissingQueryRequiredParameters( + missingRequiredQueryParameters, headers)); + } + + List<String> invalidQueryParameters = checkForInvalidQueryParameters( + customQueryConfig, URITools.getQueryMap(queryURIObj)); + + if (!invalidQueryParameters.isEmpty()) { + return (createMessageInvalidQueryParameters(invalidQueryParameters, headers)); + } + + } else if (queryElement != null) { + return (createMessageInvalidQuerySection(queryURI, headers)); + } + + GenericQueryProcessor processor; + + if (isHistory(format)) { + validateHistoryParams(format, info.getQueryParameters()); + } + GraphTraversalSource traversalSource = + getTraversalSource(dbEngine, format, info, roles); + QueryStyle queryStyle = getQueryStyle(format, traversalUriHttpEntry); + + if (!startURIs.isEmpty()) { + Set<Vertex> vertexSet = new LinkedHashSet<>(); + QueryParser uriQuery; + List<Vertex> vertices; + for (URI startUri : startURIs) { + uriQuery = dbEngine.getQueryBuilder(queryStyle, traversalSource) + .createQueryFromURI(startUri, URITools.getQueryMap(startUri)); + vertices = uriQuery.getQueryBuilder().toList(); + vertexSet.addAll(vertices); + } + + processor = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton) + .startFrom(vertexSet).queryFrom(queryURIObj).format(format) + .processWith(processorType).traversalSource(isHistory(format), traversalSource) + .create(); + } else if (!queryURI.equals("")) { + processor = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton) + .queryFrom(queryURIObj).processWith(processorType) + .traversalSource(isHistory(format), traversalSource).create(); + } else { + processor = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton) + .queryFrom(gremlin, "gremlin").processWith(processorType) + .traversalSource(isHistory(format), traversalSource).create(); + } + List<Object> vertTemp = processor.execute(subGraphStyle); + List<Object> vertices = traversalUriHttpEntry.getPaginatedVertexList(vertTemp); + + DBSerializer serializer = + new DBSerializer(version, dbEngine, ModelType.MOXY, sourceOfTruth); + FormatFactory ff = new FormatFactory(traversalUriHttpEntry.getLoader(), serializer, + schemaVersions, this.basePath, serverBase); + + MultivaluedMap<String, String> mvm = new MultivaluedHashMap<>(); mvm.putAll(info.getQueryParameters()); if (isHistory(format)) { mvm.putSingle("startTs", Long.toString(getStartTime(format, mvm))); @@ -236,142 +243,139 @@ public class QueryConsumer extends TraversalConsumer { } Formatter formatter = ff.get(format, mvm); - String result = formatter.output(vertices).toString(); - - String acceptType = headers.getHeaderString("Accept"); - - if(acceptType == null){ - acceptType = MediaType.APPLICATION_JSON; - } - - if(MediaType.APPLICATION_XML_TYPE.isCompatible(MediaType.valueOf(acceptType))){ - result = xmlFormatTransformer.transform(result); - } - - if(traversalUriHttpEntry.isPaginated()){ - response = Response.status(Status.OK) - .type(acceptType) - .header("total-results", traversalUriHttpEntry.getTotalVertices()) - .header("total-pages", traversalUriHttpEntry.getTotalPaginationBuckets()) - .entity(result) - .build(); - }else { - response = Response.status(Status.OK) - .type(acceptType) - .entity(result).build(); - } - } catch (AAIException e) { - response = consumerExceptionResponseGenerator(headers, info, HttpMethod.GET, e); - } catch (Exception e ) { - AAIException ex = new AAIException("AAI_4000", e); - response = consumerExceptionResponseGenerator(headers, info, HttpMethod.GET, ex); - } finally { - if (dbEngine != null) { - dbEngine.rollback(); - } - - } - - return response; - } - - public void checkQueryParams(MultivaluedMap<String, String> params) throws AAIException { - - if (params.containsKey("depth") && params.getFirst("depth").matches("\\d+")) { - String depth = params.getFirst("depth"); - int i = Integer.parseInt(depth); - if (i > 1) { - throw new AAIException("AAI_3303"); - } - } - - - } - - private List<String> checkForMissingQueryParameters( List<String> requiredParameters, MultivaluedMap<String, String> queryParams ) { - List<String> result = new ArrayList<>(); - - for ( String param : requiredParameters ) { - if ( !queryParams.containsKey(param)) { - result.add(param); - } - } - return result; - } - - private CustomQueryConfig getCustomQueryConfig(URI uriObj ) { - String path = uriObj.getPath(); - - String[] parts = path.split("/"); - boolean hasQuery = false; - for ( String part:parts ) { - if ( hasQuery) { - return gremlinServerSingleton.getCustomQueryConfig(part); - } - if ( "query".equals(part)) { - hasQuery = true; - } - } - - return null; - - } - - private Response createMessageMissingQueryRequiredParameters(List<String> missingRequiredQueryParams, HttpHeaders headers) { - AAIException e = new AAIException("AAI_3013"); - - ArrayList<String> templateVars = new ArrayList<>(); - templateVars.add(missingRequiredQueryParams.toString()); - - return Response - .status(e.getErrorObject().getHTTPResponseCode()) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, - templateVars)).build(); - } - - private Response createMessageInvalidQuerySection(String invalidQuery, HttpHeaders headers) { - AAIException e = new AAIException("AAI_3014"); - - ArrayList<String> templateVars = new ArrayList<>(); - templateVars.add(invalidQuery); - - return Response - .status(e.getErrorObject().getHTTPResponseCode()) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, - templateVars)).build(); - } - - - private List<String> checkForInvalidQueryParameters( CustomQueryConfig customQueryConfig, MultivaluedMap<String, String> queryParams) { - - List<String> allParameters = new ArrayList<>(); - /* - * Add potential Required and Optional to allParameters - */ - Optional.ofNullable(customQueryConfig.getQueryOptionalProperties()).ifPresent(allParameters::addAll); - Optional.ofNullable(customQueryConfig.getQueryRequiredProperties()).ifPresent(allParameters::addAll); - - if(queryParams.isEmpty()) { - return new ArrayList<>(); - } - return queryParams.keySet().stream() - .filter(param -> !allParameters.contains(param)) - .collect(Collectors.toList()); - } - - private Response createMessageInvalidQueryParameters(List<String> invalidQueryParams, HttpHeaders headers) { - AAIException e = new AAIException("AAI_3022"); - - ArrayList<String> templateVars = new ArrayList<>(); - templateVars.add(invalidQueryParams.toString()); - - return Response - .status(e.getErrorObject().getHTTPResponseCode()) - .entity(ErrorLogHelper.getRESTAPIErrorResponse( - headers.getAcceptableMediaTypes(), - e, - templateVars)).build(); - - } + String result = formatter.output(vertices).toString(); + + String acceptType = headers.getHeaderString("Accept"); + + if (acceptType == null) { + acceptType = MediaType.APPLICATION_JSON; + } + + if (MediaType.APPLICATION_XML_TYPE.isCompatible(MediaType.valueOf(acceptType))) { + result = xmlFormatTransformer.transform(result); + } + + if (traversalUriHttpEntry.isPaginated()) { + response = Response.status(Status.OK).type(acceptType) + .header("total-results", traversalUriHttpEntry.getTotalVertices()) + .header("total-pages", traversalUriHttpEntry.getTotalPaginationBuckets()) + .entity(result).build(); + } else { + response = Response.status(Status.OK).type(acceptType).entity(result).build(); + } + } catch (AAIException e) { + response = consumerExceptionResponseGenerator(headers, info, HttpMethod.GET, e); + } catch (Exception e) { + AAIException ex = new AAIException("AAI_4000", e); + response = consumerExceptionResponseGenerator(headers, info, HttpMethod.GET, ex); + } finally { + if (dbEngine != null) { + dbEngine.rollback(); + } + + } + + return response; + } + + public void checkQueryParams(MultivaluedMap<String, String> params) throws AAIException { + + if (params.containsKey("depth") && params.getFirst("depth").matches("\\d+")) { + String depth = params.getFirst("depth"); + int i = Integer.parseInt(depth); + if (i > 1) { + throw new AAIException("AAI_3303"); + } + } + + } + + private List<String> checkForMissingQueryParameters(List<String> requiredParameters, + MultivaluedMap<String, String> queryParams) { + List<String> result = new ArrayList<>(); + + for (String param : requiredParameters) { + if (!queryParams.containsKey(param)) { + result.add(param); + } + } + return result; + } + + private CustomQueryConfig getCustomQueryConfig(URI uriObj) { + String path = uriObj.getPath(); + + String[] parts = path.split("/"); + boolean hasQuery = false; + for (String part : parts) { + if (hasQuery) { + return gremlinServerSingleton.getCustomQueryConfig(part); + } + if ("query".equals(part)) { + hasQuery = true; + } + } + + return null; + + } + + private Response createMessageMissingQueryRequiredParameters( + List<String> missingRequiredQueryParams, HttpHeaders headers) { + AAIException e = new AAIException("AAI_3013"); + + ArrayList<String> templateVars = new ArrayList<>(); + templateVars.add(missingRequiredQueryParams.toString()); + + return Response + .status(e.getErrorObject().getHTTPResponseCode()).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) + .build(); + } + + private Response createMessageInvalidQuerySection(String invalidQuery, HttpHeaders headers) { + AAIException e = new AAIException("AAI_3014"); + + ArrayList<String> templateVars = new ArrayList<>(); + templateVars.add(invalidQuery); + + return Response + .status(e.getErrorObject().getHTTPResponseCode()).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) + .build(); + } + + private List<String> checkForInvalidQueryParameters(CustomQueryConfig customQueryConfig, + MultivaluedMap<String, String> queryParams) { + + List<String> allParameters = new ArrayList<>(); + /* + * Add potential Required and Optional to allParameters + */ + Optional.ofNullable(customQueryConfig.getQueryOptionalProperties()) + .ifPresent(allParameters::addAll); + Optional.ofNullable(customQueryConfig.getQueryRequiredProperties()) + .ifPresent(allParameters::addAll); + + if (queryParams.isEmpty()) { + return new ArrayList<>(); + } + return queryParams.keySet().stream().filter(param -> !allParameters.contains(param)) + .collect(Collectors.toList()); + } + + private Response createMessageInvalidQueryParameters(List<String> invalidQueryParams, + HttpHeaders headers) { + AAIException e = new AAIException("AAI_3022"); + + ArrayList<String> templateVars = new ArrayList<>(); + templateVars.add(invalidQueryParams.toString()); + + return Response + .status(e.getErrorObject().getHTTPResponseCode()).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) + .build(); + + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/RecentAPIConsumer.java b/aai-traversal/src/main/java/org/onap/aai/rest/RecentAPIConsumer.java index 7ec20bc..7f40979 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/RecentAPIConsumer.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/RecentAPIConsumer.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,11 +20,19 @@ package org.onap.aai.rest; import io.micrometer.core.annotation.Timed; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import javax.ws.rs.core.Response.Status; + import org.onap.aai.concurrent.AaiCallable; import org.onap.aai.exceptions.AAIException; import org.onap.aai.introspection.ModelType; import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; - import org.onap.aai.rest.db.HttpEntry; import org.onap.aai.rest.search.GenericQueryProcessor; import org.onap.aai.rest.search.GremlinServerSingleton; @@ -47,209 +55,205 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.*; -import javax.ws.rs.core.*; -import javax.ws.rs.core.Response.Status; -import java.util.List; -import java.util.concurrent.TimeUnit; - @Path("/recents/{version: v[1-9][0-9]*|latest}") @Timed public class RecentAPIConsumer extends RESTAPI { private static final String AAI_3021 = "AAI_3021"; - - /** The introspector factory type. */ - private ModelType introspectorFactoryType = ModelType.MOXY; - - private QueryProcessorType processorType = QueryProcessorType.LOCAL_GROOVY; - /** The query style. */ - - private static final Logger LOGGER = LoggerFactory.getLogger(RecentAPIConsumer.class); - - private HttpEntry traversalUriHttpEntry; - - private SchemaVersions schemaVersions; - - private String basePath; - - private GremlinServerSingleton gremlinServerSingleton; - - private XmlFormatTransformer xmlFormatTransformer; - - - @Autowired - public RecentAPIConsumer( - HttpEntry traversalUriHttpEntry, - SchemaVersions schemaVersions, - GremlinServerSingleton gremlinServerSingleton, - XmlFormatTransformer xmlFormatTransformer, - @Value("${schema.uri.base.path}") String basePath - ){ - this.traversalUriHttpEntry = traversalUriHttpEntry; - this.schemaVersions = schemaVersions; - this.gremlinServerSingleton = gremlinServerSingleton; - this.xmlFormatTransformer = xmlFormatTransformer; - this.basePath = basePath; - } - - @GET - @Path("/{nodeType: .+}") - @Consumes({ MediaType.APPLICATION_JSON }) - @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public Response getRecentData(String content, - @PathParam("version") String versionParam, - @PathParam("nodeType") String nodeType, - @Context HttpHeaders headers, - @Context HttpServletRequest req, - @Context UriInfo info) { - - return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, - TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET, new AaiCallable<Response>() { - @Override - public Response process() { - return processRecentData(content, req, versionParam, nodeType, info, headers); - } - }); - - } - - public Response processRecentData(String content, HttpServletRequest req, @PathParam("version") String versionParam, - @PathParam("nodeType") String nodeType, @Context UriInfo info, @Context HttpHeaders headers) { - - String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId"); - String queryProcessor = headers.getRequestHeaders().getFirst("QueryProcessor"); - QueryProcessorType processorType = this.processorType; - Response response; - TransactionalGraphEngine dbEngine = null; - try { - - if (queryProcessor != null) { - processorType = QueryProcessorType.valueOf(queryProcessor); - } - - SchemaVersion version = new SchemaVersion(versionParam); - this.checkVersion(version); - - String serverBase = req.getRequestURL().toString().replaceAll("/(v[0-9]+|latest)/.*", "/"); - traversalUriHttpEntry.setHttpEntryProperties(version, serverBase); - dbEngine = traversalUriHttpEntry.getDbEngine(); - - /* - * Check for mandatory parameters here - */ - - this.checkNodeType(nodeType); - this.checkQueryParams(info.getQueryParameters()); - - GenericQueryProcessor processor = null; - - - - processor = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton).queryFrom(nodeType, "nodeQuery") - .uriParams(info.getQueryParameters()) - .processWith(processorType).create(); - - - - String result = ""; - SubGraphStyle subGraphStyle = null; - List<Object> vertices = processor.execute(subGraphStyle); - - DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, sourceOfTruth); - FormatFactory ff = new FormatFactory(traversalUriHttpEntry.getLoader(), serializer, schemaVersions, this.basePath, serverBase); + + /** The introspector factory type. */ + private ModelType introspectorFactoryType = ModelType.MOXY; + + private QueryProcessorType processorType = QueryProcessorType.LOCAL_GROOVY; + /** The query style. */ + + private static final Logger LOGGER = LoggerFactory.getLogger(RecentAPIConsumer.class); + + private HttpEntry traversalUriHttpEntry; + + private SchemaVersions schemaVersions; + + private String basePath; + + private GremlinServerSingleton gremlinServerSingleton; + + private XmlFormatTransformer xmlFormatTransformer; + + @Autowired + public RecentAPIConsumer(HttpEntry traversalUriHttpEntry, SchemaVersions schemaVersions, + GremlinServerSingleton gremlinServerSingleton, XmlFormatTransformer xmlFormatTransformer, + @Value("${schema.uri.base.path}") String basePath) { + this.traversalUriHttpEntry = traversalUriHttpEntry; + this.schemaVersions = schemaVersions; + this.gremlinServerSingleton = gremlinServerSingleton; + this.xmlFormatTransformer = xmlFormatTransformer; + this.basePath = basePath; + } + + @GET + @Path("/{nodeType: .+}") + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) + public Response getRecentData(String content, @PathParam("version") String versionParam, + @PathParam("nodeType") String nodeType, @Context HttpHeaders headers, + @Context HttpServletRequest req, @Context UriInfo info) { + + return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET, + new AaiCallable<Response>() { + @Override + public Response process() { + return processRecentData(content, req, versionParam, nodeType, info, headers); + } + }); + + } + + public Response processRecentData(String content, HttpServletRequest req, + @PathParam("version") String versionParam, @PathParam("nodeType") String nodeType, + @Context UriInfo info, @Context HttpHeaders headers) { + + String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId"); + String queryProcessor = headers.getRequestHeaders().getFirst("QueryProcessor"); + QueryProcessorType processorType = this.processorType; + Response response; + TransactionalGraphEngine dbEngine = null; + try { + + if (queryProcessor != null) { + processorType = QueryProcessorType.valueOf(queryProcessor); + } + + SchemaVersion version = new SchemaVersion(versionParam); + this.checkVersion(version); + + String serverBase = + req.getRequestURL().toString().replaceAll("/(v[0-9]+|latest)/.*", "/"); + traversalUriHttpEntry.setHttpEntryProperties(version, serverBase); + dbEngine = traversalUriHttpEntry.getDbEngine(); + + /* + * Check for mandatory parameters here + */ + + this.checkNodeType(nodeType); + this.checkQueryParams(info.getQueryParameters()); + + GenericQueryProcessor processor = null; + + processor = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton) + .queryFrom(nodeType, "nodeQuery").uriParams(info.getQueryParameters()) + .processWith(processorType).create(); + + String result = ""; + SubGraphStyle subGraphStyle = null; + List<Object> vertices = processor.execute(subGraphStyle); + + DBSerializer serializer = + new DBSerializer(version, dbEngine, introspectorFactoryType, sourceOfTruth); + FormatFactory ff = new FormatFactory(traversalUriHttpEntry.getLoader(), serializer, + schemaVersions, this.basePath, serverBase); Format format = Format.pathed_resourceversion; - - Formatter formater = ff.get(format, info.getQueryParameters()); - - result = formater.output(vertices).toString(); - - //LOGGER.info("Completed"); - - String acceptType = headers.getHeaderString("Accept"); - - if(acceptType == null){ - acceptType = MediaType.APPLICATION_JSON; - } - - if(MediaType.APPLICATION_XML_TYPE.isCompatible(MediaType.valueOf(acceptType))){ - result = xmlFormatTransformer.transform(result); - } - - response = Response.status(Status.OK).type(acceptType).entity(result).build(); - - } catch (AAIException e) { - response = consumerExceptionResponseGenerator(headers, info, HttpMethod.GET, e); - } catch (Exception e) { - AAIException ex = new AAIException("AAI_4000", e); - response = consumerExceptionResponseGenerator(headers, info, HttpMethod.GET, ex); - } finally { - - if (dbEngine != null) { - dbEngine.rollback(); - } - - } - - return response; - } - - private void checkVersion(SchemaVersion version) throws AAIException { - if(!schemaVersions.getVersions().contains(version)){ - throw new AAIException(AAI_3021, "Schema Version is not valid"); - } - } - - public void checkNodeType(String nodeType) throws AAIException { - try { - traversalUriHttpEntry.getLoader().introspectorFromName(nodeType); - } catch (AAIUnknownObjectException e) { - throw new AAIException("AAI_6115", "Unrecognized nodeType [" + nodeType + "] passed to recents query."); - } - } - public void checkQueryParams(MultivaluedMap<String, String> params) throws AAIException { - - boolean isHoursParameter = false; - boolean isDateTimeParameter = false; - - if (params != null && params.containsKey("hours") && params.getFirst("hours").matches("-?\\d+")) { - isHoursParameter = true; - long hours; - try{ - hours = Long.parseLong(params.getFirst("hours")); - } - catch(NumberFormatException ex){ - throw new AAIException(AAI_3021, " Invalid Hours. Valid values for hours are 1 to " + AAIConstants.HISTORY_MAX_HOURS); - } - if (hours < 1 || hours > AAIConstants.HISTORY_MAX_HOURS) { - throw new AAIException(AAI_3021, " Valid values for hours are 1 to " + AAIConstants.HISTORY_MAX_HOURS); - } - } - if (params != null && params.containsKey("date-time") && params.getFirst("date-time").matches("-?\\d+")) { - isDateTimeParameter = true; - Long minStartTime = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(AAIConstants.HISTORY_MAX_HOURS); - Long startTime; - try{ - startTime = Long.parseLong(params.getFirst("date-time")); - } - catch(NumberFormatException ex){ - throw new AAIException(AAI_3021, " Invalid Data-time. Valid values for date-time are "+minStartTime+" to " + System.currentTimeMillis() ); - } - if (startTime < minStartTime) { - throw new AAIException(AAI_3021, " Valid values for date-time are "+minStartTime+" to " + System.currentTimeMillis() ); - } - } - - if(!isHoursParameter && !isDateTimeParameter){ - throw new AAIException(AAI_3021, "Send valid hours or date-time to specify the timebounds"); - } - - if(isHoursParameter && isDateTimeParameter){ - throw new AAIException(AAI_3021, "Send either hours or date-time and not both to specify the timebounds"); - } - - - } + + Formatter formater = ff.get(format, info.getQueryParameters()); + + result = formater.output(vertices).toString(); + + // LOGGER.info("Completed"); + + String acceptType = headers.getHeaderString("Accept"); + + if (acceptType == null) { + acceptType = MediaType.APPLICATION_JSON; + } + + if (MediaType.APPLICATION_XML_TYPE.isCompatible(MediaType.valueOf(acceptType))) { + result = xmlFormatTransformer.transform(result); + } + + response = Response.status(Status.OK).type(acceptType).entity(result).build(); + + } catch (AAIException e) { + response = consumerExceptionResponseGenerator(headers, info, HttpMethod.GET, e); + } catch (Exception e) { + AAIException ex = new AAIException("AAI_4000", e); + response = consumerExceptionResponseGenerator(headers, info, HttpMethod.GET, ex); + } finally { + + if (dbEngine != null) { + dbEngine.rollback(); + } + + } + + return response; + } + + private void checkVersion(SchemaVersion version) throws AAIException { + if (!schemaVersions.getVersions().contains(version)) { + throw new AAIException(AAI_3021, "Schema Version is not valid"); + } + } + + public void checkNodeType(String nodeType) throws AAIException { + try { + traversalUriHttpEntry.getLoader().introspectorFromName(nodeType); + } catch (AAIUnknownObjectException e) { + throw new AAIException("AAI_6115", + "Unrecognized nodeType [" + nodeType + "] passed to recents query."); + } + } + + public void checkQueryParams(MultivaluedMap<String, String> params) throws AAIException { + + boolean isHoursParameter = false; + boolean isDateTimeParameter = false; + + if (params != null && params.containsKey("hours") + && params.getFirst("hours").matches("-?\\d+")) { + isHoursParameter = true; + long hours; + try { + hours = Long.parseLong(params.getFirst("hours")); + } catch (NumberFormatException ex) { + throw new AAIException(AAI_3021, " Invalid Hours. Valid values for hours are 1 to " + + AAIConstants.HISTORY_MAX_HOURS); + } + if (hours < 1 || hours > AAIConstants.HISTORY_MAX_HOURS) { + throw new AAIException(AAI_3021, + " Valid values for hours are 1 to " + AAIConstants.HISTORY_MAX_HOURS); + } + } + if (params != null && params.containsKey("date-time") + && params.getFirst("date-time").matches("-?\\d+")) { + isDateTimeParameter = true; + Long minStartTime = System.currentTimeMillis() + - TimeUnit.HOURS.toMillis(AAIConstants.HISTORY_MAX_HOURS); + Long startTime; + try { + startTime = Long.parseLong(params.getFirst("date-time")); + } catch (NumberFormatException ex) { + throw new AAIException(AAI_3021, + " Invalid Data-time. Valid values for date-time are " + minStartTime + " to " + + System.currentTimeMillis()); + } + if (startTime < minStartTime) { + throw new AAIException(AAI_3021, " Valid values for date-time are " + minStartTime + + " to " + System.currentTimeMillis()); + } + } + + if (!isHoursParameter && !isDateTimeParameter) { + throw new AAIException(AAI_3021, + "Send valid hours or date-time to specify the timebounds"); + } + + if (isHoursParameter && isDateTimeParameter) { + throw new AAIException(AAI_3021, + "Send either hours or date-time and not both to specify the timebounds"); + } + + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/TraversalConsumer.java b/aai-traversal/src/main/java/org/onap/aai/rest/TraversalConsumer.java index a8f88ec..2980f28 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/TraversalConsumer.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/TraversalConsumer.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,15 @@ */ package org.onap.aai.rest; +import java.security.Principal; +import java.util.Collections; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.UriInfo; + import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.tinkerpop.gremlin.process.traversal.P; @@ -37,14 +46,6 @@ import org.onap.aai.serialization.engines.QueryStyle; import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.serialization.queryformats.Format; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriInfo; -import java.security.Principal; -import java.util.Collections; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - public abstract class TraversalConsumer extends RESTAPI { private static final String HISTORICAL_FORMAT = "state,lifecycle"; @@ -57,12 +58,12 @@ public abstract class TraversalConsumer extends RESTAPI { private Long furthestInThePast = null; public TraversalConsumer() { - this.historyTruncateWindow = Integer.parseInt( - SpringContextAware.getApplicationContext().getEnvironment().getProperty("history.truncate.window.days", "365")); - this.historyEnabled = Boolean.parseBoolean( - SpringContextAware.getApplicationContext().getEnvironment().getProperty("history.enabled", "false")); - this.multiTenancyEnabled = Boolean.parseBoolean( - SpringContextAware.getApplicationContext().getEnvironment().getProperty("multi.tenancy.enabled", "false")); + this.historyTruncateWindow = Integer.parseInt(SpringContextAware.getApplicationContext() + .getEnvironment().getProperty("history.truncate.window.days", "365")); + this.historyEnabled = Boolean.parseBoolean(SpringContextAware.getApplicationContext() + .getEnvironment().getProperty("history.enabled", "false")); + this.multiTenancyEnabled = Boolean.parseBoolean(SpringContextAware.getApplicationContext() + .getEnvironment().getProperty("multi.tenancy.enabled", "false")); } public boolean isHistory(Format queryFormat) { @@ -84,85 +85,60 @@ public abstract class TraversalConsumer extends RESTAPI { } else if (Format.lifecycle.equals(format)) { return getLifeCycleSubgraphStrategy(startTs, endTs); } else { - return SubgraphStrategy.build() - .vertices(__.has(AAIProperties.START_TS, P.gte(startTs))) - .vertexProperties(__.has(AAIProperties.START_TS, P.gte(startTs))) - .edges(__.has(AAIProperties.START_TS, P.gte(startTs))).create(); + return SubgraphStrategy.build().vertices(__.has(AAIProperties.START_TS, P.gte(startTs))) + .vertexProperties(__.has(AAIProperties.START_TS, P.gte(startTs))) + .edges(__.has(AAIProperties.START_TS, P.gte(startTs))).create(); } } private SubgraphStrategy getLifeCycleSubgraphStrategy(long startTs, long endTs) { return SubgraphStrategy.build() - .vertices( - __.not( - __.or( - __.and( - __.has(AAIProperties.START_TS, P.gt(startTs)), - __.has(AAIProperties.START_TS, P.gt(endTs)) - ), - __.and( - __.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(startTs)), - __.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(endTs)) - ) - ) - ) - ).vertexProperties( - __.not( - __.or( - __.and( - __.has(AAIProperties.START_TS, P.gt(startTs)), - __.has(AAIProperties.START_TS, P.gt(endTs)) - ), - __.and( - __.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(startTs)), - __.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(endTs)) - ) - ) - ) - ).edges( - __.not( - __.or( - __.and( - __.has(AAIProperties.START_TS, P.gt(startTs)), - __.has(AAIProperties.START_TS, P.gt(endTs)) - ), - __.and( - __.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(startTs)), - __.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(endTs)) - ) - ) - ) - ).create(); + .vertices(__.not(__.or( + __.and(__.has(AAIProperties.START_TS, P.gt(startTs)), + __.has(AAIProperties.START_TS, P.gt(endTs))), + __.and(__.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(startTs)), + __.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(endTs)))))) + .vertexProperties(__.not(__.or( + __.and(__.has(AAIProperties.START_TS, P.gt(startTs)), + __.has(AAIProperties.START_TS, P.gt(endTs))), + __.and(__.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(startTs)), + __.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(endTs)))))) + .edges(__.not(__.or( + __.and(__.has(AAIProperties.START_TS, P.gt(startTs)), + __.has(AAIProperties.START_TS, P.gt(endTs))), + __.and(__.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(startTs)), + __.has(AAIProperties.END_TS).has(AAIProperties.END_TS, P.lt(endTs)))))) + .create(); } private SubgraphStrategy getStateSubgraphStrategy(long startTs) { return SubgraphStrategy.build() - .vertices( - __.and(__.has(AAIProperties.START_TS, P.lte(startTs)), - __.or(__.hasNot(AAIProperties.END_TS), __.has(AAIProperties.END_TS, P.gt(startTs)))) - ).vertexProperties( - __.and(__.has(AAIProperties.START_TS, P.lte(startTs)), - __.or(__.hasNot(AAIProperties.END_TS), __.has(AAIProperties.END_TS, P.gt(startTs)))) - ).edges( - __.and(__.has(AAIProperties.START_TS, P.lte(startTs)), - __.or(__.hasNot(AAIProperties.END_TS), __.has(AAIProperties.END_TS, P.gt(startTs)))) - ).create(); + .vertices(__.and(__.has(AAIProperties.START_TS, P.lte(startTs)), + __.or(__.hasNot(AAIProperties.END_TS), + __.has(AAIProperties.END_TS, P.gt(startTs))))) + .vertexProperties(__.and(__.has(AAIProperties.START_TS, P.lte(startTs)), + __.or(__.hasNot(AAIProperties.END_TS), + __.has(AAIProperties.END_TS, P.gt(startTs))))) + .edges(__.and(__.has(AAIProperties.START_TS, P.lte(startTs)), __ + .or(__.hasNot(AAIProperties.END_TS), __.has(AAIProperties.END_TS, P.gt(startTs))))) + .create(); } private SubgraphStrategy getDataOwnerSubgraphStrategy(Set<String> roles) { return SubgraphStrategy.build() - .vertices( - __.or(__.has("data-owner", P.within(roles)), __.hasNot("data-owner")) - ).create(); + .vertices(__.or(__.has("data-owner", P.within(roles)), __.hasNot("data-owner"))) + .create(); } - protected GraphTraversalSource getTraversalSource(TransactionalGraphEngine dbEngine, Format format, UriInfo info, Set<String> roles) throws AAIException { + protected GraphTraversalSource getTraversalSource(TransactionalGraphEngine dbEngine, + Format format, UriInfo info, Set<String> roles) throws AAIException { GraphTraversalSource traversalSource; if (isHistory(format)) { long localStartTime = this.getStartTime(format, info.getQueryParameters()); long localEndTime = this.getEndTime(info.getQueryParameters()); - traversalSource = dbEngine.asAdmin().getTraversalSource().withStrategies(getSubgraphStrategy(localStartTime, localEndTime, format)); + traversalSource = dbEngine.asAdmin().getTraversalSource() + .withStrategies(getSubgraphStrategy(localStartTime, localEndTime, format)); } else { traversalSource = dbEngine.asAdmin().getTraversalSource(); @@ -185,13 +161,13 @@ public abstract class TraversalConsumer extends RESTAPI { return Collections.EMPTY_SET; } - return account.getRoles() - .stream() - .map(role -> StringUtils.removeEnd(role, OwnerCheck.READ_ONLY_SUFFIX)) - .collect(Collectors.toSet()); + return account.getRoles().stream() + .map(role -> StringUtils.removeEnd(role, OwnerCheck.READ_ONLY_SUFFIX)) + .collect(Collectors.toSet()); } - protected void validateHistoryParams(Format format, MultivaluedMap<String, String> params) throws AAIException { + protected void validateHistoryParams(Format format, MultivaluedMap<String, String> params) + throws AAIException { getStartTime(format, params); getEndTime(params); } @@ -199,31 +175,37 @@ public abstract class TraversalConsumer extends RESTAPI { /** * If a request comes in for information prior to our truncation timeframe, throw an error. * In the changes api, we never return change timestamps prior to the truncation timeframe. - * In the lifecycle api, we should treat a call with no timestamp as a lifecycle since call with a timestamp of the truncation time - * in the lifecycle api, we should return an error if the timestamp provided is prior to the truncation time - * In the state api, we should return an error if the timestamp provided is prior to the truncation time + * In the lifecycle api, we should treat a call with no timestamp as a lifecycle since call with + * a timestamp of the truncation time + * in the lifecycle api, we should return an error if the timestamp provided is prior to the + * truncation time + * In the state api, we should return an error if the timestamp provided is prior to the + * truncation time + * * @param params * @return */ - protected long getStartTime(Format format, MultivaluedMap<String, String> params) throws AAIException { + protected long getStartTime(Format format, MultivaluedMap<String, String> params) + throws AAIException { if (startTime != null) { return startTime; } - String startTs = params.getFirst("startTs") ; + String startTs = params.getFirst("startTs"); if (Format.state.equals(format)) { - if (startTs == null || startTs.isEmpty() || "-1".equals(startTs) || "now".equals(startTs)) { + if (startTs == null || startTs.isEmpty() || "-1".equals(startTs) + || "now".equals(startTs)) { startTime = currentTime; } else { startTime = Long.valueOf(startTs); verifyTimeAgainstTruncationTime(startTime); } } else if (Format.lifecycle.equals(format)) { - if("now".equals(startTs)) { + if ("now".equals(startTs)) { startTime = currentTime; - } else if (startTs == null || startTs.isEmpty()|| "-1".equals(startTs)) { + } else if (startTs == null || startTs.isEmpty() || "-1".equals(startTs)) { startTime = getFurthestInThePast(); } else { startTime = Long.valueOf(startTs); @@ -246,7 +228,7 @@ public abstract class TraversalConsumer extends RESTAPI { return endTime; } - String endTs = params.getFirst("endTs") ; + String endTs = params.getFirst("endTs"); if (endTs == null || endTs.isEmpty() || "-1".equals(endTs) || "now".equals(endTs)) { endTime = currentTime; diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/AAIDslErrorListener.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/AAIDslErrorListener.java index 26a625a..33629f0 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/AAIDslErrorListener.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/AAIDslErrorListener.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,8 +27,9 @@ import org.antlr.v4.runtime.misc.ParseCancellationException; public class AAIDslErrorListener extends BaseErrorListener { @Override - public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) - throws ParseCancellationException { + public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, + int charPositionInLine, String msg, RecognitionException e) + throws ParseCancellationException { throw new ParseCancellationException("line " + line + ":" + charPositionInLine + " " + msg); } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslContext.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslContext.java index cf7f51d..6088561 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslContext.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslContext.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,146 +19,146 @@ */ package org.onap.aai.rest.dsl; -import org.antlr.v4.runtime.ParserRuleContext; - import java.util.ArrayList; import java.util.Deque; import java.util.LinkedList; import java.util.List; +import org.antlr.v4.runtime.ParserRuleContext; + public class DslContext { - private ParserRuleContext ctx; - - private boolean validationFlag = true; - private boolean isStartNode = false; - private String startNode = ""; - private List<String> startNodeKeys = new ArrayList<>(); - - private String currentNode; - private String previousNode; - - private boolean isTraversal = false; - private boolean isWhereQuery = false; - private boolean isUnionQuery = false; - private boolean isUnionStart = false; - - private String whereStartNode = ""; - - private Deque<String> unionStartNodes = new LinkedList<>(); - - /* - * Limit Queries have to be applied in the end - so i have to set this in - * context - */ - public StringBuilder limitQuery = new StringBuilder(); - - public ParserRuleContext getCtx() { - return ctx; - } - - public void setCtx(ParserRuleContext ctx) { - this.ctx = ctx; - } - - public boolean isStartNode() { - return isStartNode; - } - - public void setStartNodeFlag(boolean isStartNode) { - this.isStartNode = isStartNode; - } - - public String getStartNode() { - return startNode; - } - - public void setStartNode(String startNode) { - this.startNode = startNode; - } - - public List<String> getStartNodeKeys() { - return startNodeKeys; - } - - public String getCurrentNode() { - return currentNode; - } - - public void setCurrentNode(String currentNode) { - this.currentNode = currentNode; - } - - public String getPreviousNode() { - return previousNode; - } - - public void setPreviousNode(String previousNode) { - this.previousNode = previousNode; - } - - public boolean isTraversal() { - return isTraversal; - } - - public void setTraversal(boolean isTraversal) { - this.isTraversal = isTraversal; - } - - public boolean isWhereQuery() { - return isWhereQuery; - } - - public void setWhereQuery(boolean isWhereQuery) { - this.isWhereQuery = isWhereQuery; - } - - public boolean isUnionQuery() { - return isUnionQuery; - } - - public void setUnionQuery(boolean isUnionQuery) { - this.isUnionQuery = isUnionQuery; - } - - public String getWhereStartNode() { - return whereStartNode; - } - - public void setWhereStartNode(String whereStartNode) { - this.whereStartNode = whereStartNode; - } - - public Deque<String> getUnionStartNodes() { - return unionStartNodes; - } - - public void setUnionStartNodes(Deque<String> unionStartNodes) { - this.unionStartNodes = unionStartNodes; - } - - public boolean isUnionStart() { - return isUnionStart; - } - - public void setUnionStart(boolean isUnionStart) { - this.isUnionStart = isUnionStart; - } - - public StringBuilder getLimitQuery() { - return limitQuery; - } - - public void setLimitQuery(StringBuilder limitQuery) { - this.limitQuery = limitQuery; - } - - public boolean isValidationFlag() { - return validationFlag; - } - - public void setValidationFlag(boolean validationFlag) { - this.validationFlag = validationFlag; - } + private ParserRuleContext ctx; + + private boolean validationFlag = true; + private boolean isStartNode = false; + private String startNode = ""; + private List<String> startNodeKeys = new ArrayList<>(); + + private String currentNode; + private String previousNode; + + private boolean isTraversal = false; + private boolean isWhereQuery = false; + private boolean isUnionQuery = false; + private boolean isUnionStart = false; + + private String whereStartNode = ""; + + private Deque<String> unionStartNodes = new LinkedList<>(); + + /* + * Limit Queries have to be applied in the end - so i have to set this in + * context + */ + public StringBuilder limitQuery = new StringBuilder(); + + public ParserRuleContext getCtx() { + return ctx; + } + + public void setCtx(ParserRuleContext ctx) { + this.ctx = ctx; + } + + public boolean isStartNode() { + return isStartNode; + } + + public void setStartNodeFlag(boolean isStartNode) { + this.isStartNode = isStartNode; + } + + public String getStartNode() { + return startNode; + } + + public void setStartNode(String startNode) { + this.startNode = startNode; + } + + public List<String> getStartNodeKeys() { + return startNodeKeys; + } + + public String getCurrentNode() { + return currentNode; + } + + public void setCurrentNode(String currentNode) { + this.currentNode = currentNode; + } + + public String getPreviousNode() { + return previousNode; + } + + public void setPreviousNode(String previousNode) { + this.previousNode = previousNode; + } + + public boolean isTraversal() { + return isTraversal; + } + + public void setTraversal(boolean isTraversal) { + this.isTraversal = isTraversal; + } + + public boolean isWhereQuery() { + return isWhereQuery; + } + + public void setWhereQuery(boolean isWhereQuery) { + this.isWhereQuery = isWhereQuery; + } + + public boolean isUnionQuery() { + return isUnionQuery; + } + + public void setUnionQuery(boolean isUnionQuery) { + this.isUnionQuery = isUnionQuery; + } + + public String getWhereStartNode() { + return whereStartNode; + } + + public void setWhereStartNode(String whereStartNode) { + this.whereStartNode = whereStartNode; + } + + public Deque<String> getUnionStartNodes() { + return unionStartNodes; + } + + public void setUnionStartNodes(Deque<String> unionStartNodes) { + this.unionStartNodes = unionStartNodes; + } + + public boolean isUnionStart() { + return isUnionStart; + } + + public void setUnionStart(boolean isUnionStart) { + this.isUnionStart = isUnionStart; + } + + public StringBuilder getLimitQuery() { + return limitQuery; + } + + public void setLimitQuery(StringBuilder limitQuery) { + this.limitQuery = limitQuery; + } + + public boolean isValidationFlag() { + return validationFlag; + } + + public void setValidationFlag(boolean validationFlag) { + this.validationFlag = validationFlag; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslQueryBuilder.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslQueryBuilder.java index d5b365e..a953fcb 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslQueryBuilder.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslQueryBuilder.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -21,6 +21,13 @@ package org.onap.aai.rest.dsl; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; + +import java.util.List; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.edges.EdgeRule; import org.onap.aai.edges.EdgeRuleQuery; @@ -35,12 +42,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; -import java.util.List; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - public class DslQueryBuilder { private final EdgeIngestor edgeRules; @@ -84,7 +85,7 @@ public class DslQueryBuilder { */ public DslQueryBuilder end(long selectCounter) { selectCount = selectCounter; - if(selectCounter <= 0) { + if (selectCounter <= 0) { return this.end(); } else { query.append(".select('stepMain').fold().dedup()"); @@ -108,26 +109,28 @@ public class DslQueryBuilder { } public DslQueryBuilder edgeQuery(Edge edge, String aNode, String bNode) { - List<String> edgeLabels = edge.getLabels().stream().map(edgeLabel -> StringUtils.quote(edgeLabel.getLabel())).collect(Collectors.toList()); + List<String> edgeLabels = edge.getLabels().stream() + .map(edgeLabel -> StringUtils.quote(edgeLabel.getLabel())).collect(Collectors.toList()); EdgeRuleQuery.Builder baseQ = new EdgeRuleQuery.Builder(aNode, bNode); - if((AAIDirection.valueOf(edge.getDirection().name())) != AAIDirection.BOTH) { - baseQ = baseQ.direction(AAIDirection.valueOf(edge.getDirection().name())); + if ((AAIDirection.valueOf(edge.getDirection().name())) != AAIDirection.BOTH) { + baseQ = baseQ.direction(AAIDirection.valueOf(edge.getDirection().name())); } return edgeQueryWithBuilder(edgeLabels, aNode, bNode, baseQ); } - private DslQueryBuilder edgeQueryWithBuilder(List<String> edgeLabels, String aNode, String bNode, EdgeRuleQuery.Builder edgeBuilder) { - //TODO : change this for fuzzy search. + private DslQueryBuilder edgeQueryWithBuilder(List<String> edgeLabels, String aNode, + String bNode, EdgeRuleQuery.Builder edgeBuilder) { + // TODO : change this for fuzzy search. String edgeType = ""; String edgeLabelsClause = ""; String edgeTraversalClause = ".createEdgeTraversal("; - if (!edgeLabels.isEmpty()) { edgeTraversalClause = ".createEdgeTraversalWithLabels("; - edgeLabelsClause = String.join("", ", new ArrayList<>(Arrays.asList(", String.join(",", edgeLabels), "))"); + edgeLabelsClause = String.join("", ", new ArrayList<>(Arrays.asList(", + String.join(",", edgeLabels), "))"); } LOGGER.debug("EdgeLabels Clause: {}", edgeLabelsClause); @@ -140,23 +143,27 @@ public class DslQueryBuilder { try { rules.putAll(edgeRules.getRules(edgeBuilder.label(label).build())); } catch (EdgeRuleNotFoundException e) { - queryException.append("Exception while finding the edge rule between the nodeTypes: ").append(aNode).append(", ").append(bNode).append(label); + queryException + .append("Exception while finding the edge rule between the nodeTypes: ") + .append(aNode).append(", ").append(bNode).append(label); } }); } } catch (EdgeRuleNotFoundException e) { if (!edgeLabels.isEmpty()) { - queryException.append("- No EdgeRule found for passed nodeTypes: ").append(aNode).append(", ").append(bNode).append(edgeLabels.stream().toString()); - } - else { - queryException.append("- No EdgeRule found for passed nodeTypes: ").append(aNode).append(", ").append(bNode); + queryException.append("- No EdgeRule found for passed nodeTypes: ").append(aNode) + .append(", ").append(bNode).append(edgeLabels.stream().toString()); + } else { + queryException.append("- No EdgeRule found for passed nodeTypes: ").append(aNode) + .append(", ").append(bNode); } return this; } if (rules.isEmpty() || rules.keys().isEmpty()) { - queryException.append("- No EdgeRule found for passed nodeTypes: ").append(aNode).append(", ").append(bNode); + queryException.append("- No EdgeRule found for passed nodeTypes: ").append(aNode) + .append(", ").append(bNode); } else { if (edgeLabels.isEmpty()) { if (edgeRules.hasRule(edgeBuilder.edgeType(EdgeType.TREE).build())) { @@ -172,16 +179,15 @@ public class DslQueryBuilder { } } - query.append(edgeTraversalClause).append(edgeType).append(" '").append(aNode) - .append("','").append(bNode).append("'").append(edgeLabelsClause).append(")"); + query.append(edgeTraversalClause).append(edgeType).append(" '").append(aNode).append("','") + .append(bNode).append("'").append(edgeLabelsClause).append(")"); return this; } - public DslQueryBuilder where(boolean isNot) { query.append(".where("); - if(isNot){ + if (isNot) { query.append("builder.newInstance().not("); } return this; @@ -189,7 +195,7 @@ public class DslQueryBuilder { public DslQueryBuilder endWhere(boolean isNot) { query.append(")"); - if(isNot){ + if (isNot) { query.append(")"); } return this; @@ -201,13 +207,14 @@ public class DslQueryBuilder { } public DslQueryBuilder filter(boolean isNot, String node, String key, List<String> values) { - return this.filterPropertyStart(isNot,values).filterPropertyKeys(node, key, values).filterPropertyEnd(); + return this.filterPropertyStart(isNot, values).filterPropertyKeys(node, key, values) + .filterPropertyEnd(); } public DslQueryBuilder filterPropertyStart(boolean isNot, List<String> values) { if (isNot) { query.append(".getVerticesExcludeByProperty("); - } else if(values!= null && !values.isEmpty() && Boolean.parseBoolean(values.get(0))) { + } else if (values != null && !values.isEmpty() && Boolean.parseBoolean(values.get(0))) { query.append(".getVerticesByBooleanProperty("); } else { query.append(".getVerticesByProperty("); @@ -225,10 +232,8 @@ public class DslQueryBuilder { Introspector obj = loader.introspectorFromName(node); if (keys.isEmpty()) { - queryException.append("No keys sent. Valid keys for ") - .append(node) - .append(" are ") - .append(String.join(",", obj.getIndexedProperties())); + queryException.append("No keys sent. Valid keys for ").append(node).append(" are ") + .append(String.join(",", obj.getIndexedProperties())); return this; } @@ -241,21 +246,22 @@ public class DslQueryBuilder { public DslQueryBuilder select(long selectCounter, List<String> keys) { /* - * TODO : isNot should look at the vertex properties and include everything except the notKeys + * TODO : isNot should look at the vertex properties and include everything except the + * notKeys */ Pattern p = Pattern.compile("aai-node-type"); Matcher m = p.matcher(query); int count = 0; - while (m.find()){ + while (m.find()) { count++; } if (selectCounter == count || keys == null) { String selectStep = "step" + selectCounter; -// String keysArray = String.join(",", keys); - query.append(".as('").append(selectStep).append("')") - .append(".as('stepMain').select('").append(selectStep).append("')"); + // String keysArray = String.join(",", keys); + query.append(".as('").append(selectStep).append("')").append(".as('stepMain').select('") + .append(selectStep).append("')"); } return this; } @@ -263,7 +269,8 @@ public class DslQueryBuilder { public DslQueryBuilder filterPropertyKeys(String node, String key, List<String> values) { try { Introspector obj = loader.introspectorFromName(node); - Optional<String> alias = obj.getPropertyMetadata(key.replace("'",""), PropertyMetadata.DB_ALIAS); + Optional<String> alias = + obj.getPropertyMetadata(key.replace("'", ""), PropertyMetadata.DB_ALIAS); if (alias.isPresent()) { key = StringUtils.quote(alias.get()); } @@ -271,14 +278,15 @@ public class DslQueryBuilder { query.append(key); if (values != null && !values.isEmpty()) { - if (values.size() > 1) { // values.size() > 1 indicates possibility of a list + if (values.size() > 1) { // values.size() > 1 indicates possibility of a list // eliminate quotes from each element for (int i = 0; i < values.size(); i++) { values.set(i, getConvertedValue(classType, key, values.get(i))); } String valuesArray = String.join(",", values); - query.append(",").append(" new ArrayList<>(Arrays.asList(").append(valuesArray).append("))"); - } else { // otherwise values should only contain one value + query.append(",").append(" new ArrayList<>(Arrays.asList(").append(valuesArray) + .append("))"); + } else { // otherwise values should only contain one value query.append(",").append(getConvertedValue(classType, key, values.get(0))); } } @@ -297,30 +305,29 @@ public class DslQueryBuilder { if (classType.equals(Integer.class.getName())) { int castInt = Integer.parseInt(convertedValue); convertedValue = String.valueOf(castInt); - } - else if (classType.equals(Long.class.getName())) { + } else if (classType.equals(Long.class.getName())) { long castLong = Long.parseLong(convertedValue); convertedValue = String.valueOf(castLong); - } - else if (classType.equals(Boolean.class.getName())) { - if ("1".equals(convertedValue)) { // checking for integer true value + } else if (classType.equals(Boolean.class.getName())) { + if ("1".equals(convertedValue)) { // checking for integer true value convertedValue = "true"; } boolean castBoolean = Boolean.parseBoolean(convertedValue); convertedValue = String.valueOf(castBoolean); } } catch (Exception e) { - queryException.append("AAI_4020 ").append(String.format("Value [%s] is not an instance of the expected data type for property key [%s] and cannot be converted. " + - "Expected: class %s, found: class %s", value, key, classType, String.class.getName())); + queryException.append("AAI_4020 ").append(String.format( + "Value [%s] is not an instance of the expected data type for property key [%s] and cannot be converted. " + + "Expected: class %s, found: class %s", + value, key, classType, String.class.getName())); } } return convertedValue; } private boolean isTypeSensitive(String classType) { - if (classType.equals(Integer.class.getName()) || - classType.equals(Boolean.class.getName()) || - classType.equals(Long.class.getName())) { + if (classType.equals(Integer.class.getName()) || classType.equals(Boolean.class.getName()) + || classType.equals(Long.class.getName())) { return true; } return false; @@ -368,5 +375,4 @@ public class DslQueryBuilder { return this; } - } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslQueryProcessor.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslQueryProcessor.java index 14663e1..a21ca04 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslQueryProcessor.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/DslQueryProcessor.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,15 @@ */ package org.onap.aai.rest.dsl; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.InvocationTargetException; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.antlr.v4.runtime.*; import org.antlr.v4.runtime.misc.ParseCancellationException; import org.antlr.v4.runtime.tree.ParseTree; @@ -32,138 +41,144 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.lang.reflect.InvocationTargetException; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - /** * The Class DslQueryProcessor. */ public class DslQueryProcessor { - private static final Logger LOGGER = LoggerFactory.getLogger(DslQueryProcessor.class); - - private Map<QueryVersion, ParseTreeListener> dslListeners; - private boolean startNodeValidationFlag = true; - private String validationRules = ""; - private String packageName = "org.onap.aai.dsl."; - private static final String LEXER = "AAIDslLexer"; - private static final String PARSER = "AAIDslParser"; - private static final String EOF_TOKEN = "<EOF>"; - - private boolean isAggregate = false; - - @Autowired - public DslQueryProcessor(Map<QueryVersion, ParseTreeListener> dslListeners) { - this.dslListeners = dslListeners; - } - - public Map<String, Object> parseAaiQuery(QueryVersion version, String aaiQuery) throws AAIException { - Map<String, Object> resultMap = new HashMap<>(); - try { - // Create a input stream that reads our string - InputStream stream = new ByteArrayInputStream(aaiQuery.getBytes(StandardCharsets.UTF_8)); - - packageName = packageName + version.toString().toLowerCase() + "."; - - Class<?> lexerClass = Class.forName(packageName + LEXER); - Class<?> parserClass = Class.forName(packageName + PARSER); - - Lexer lexer = (Lexer)lexerClass.getConstructor(CharStream.class).newInstance(CharStreams.fromStream(stream, StandardCharsets.UTF_8)); - lexer.removeErrorListeners(); - lexer.addErrorListener(new AAIDslErrorListener()); - CommonTokenStream tokens = new CommonTokenStream(lexer); - - // Parser that feeds off of the tokens buffer - Parser parser = (Parser)parserClass.getConstructor(TokenStream.class).newInstance(tokens); - parser.removeErrorListeners(); - parser.addErrorListener(new AAIDslErrorListener()); - ParseTreeListener dslListener = dslListeners.get(version); - dslListener.getClass().getMethod("setValidationFlag", boolean.class).invoke(dslListener, isStartNodeValidationFlag()); - dslListener.getClass().getMethod("setAggregateFlag", boolean.class).invoke(dslListener,isAggregate()); - - if(!getValidationRules().isEmpty() && !"none".equals(getValidationRules())) { - DslValidator validator = new DslValidator.Builder() - .create(); - dslListener.getClass().getMethod("setQueryValidator", DslValidator.class, String.class).invoke(dslListener, validator, getValidationRules()); - } - - // Specify our entry point - ParseTree ptree = (ParseTree)parserClass.getMethod("aaiquery").invoke(parser); - - // Check if there is no EOF token at the end of the parsed aaiQuery - // If none, DSL query may have not been parsed correctly and omitted part of the query out. If so error out. - // If it wasn't expecting a opening parens after a closing bracket for union, it will drop the proceeding part of the query. - Token eofToken = tokens.get(tokens.size() - 1); + private static final Logger LOGGER = LoggerFactory.getLogger(DslQueryProcessor.class); + + private Map<QueryVersion, ParseTreeListener> dslListeners; + private boolean startNodeValidationFlag = true; + private String validationRules = ""; + private String packageName = "org.onap.aai.dsl."; + private static final String LEXER = "AAIDslLexer"; + private static final String PARSER = "AAIDslParser"; + private static final String EOF_TOKEN = "<EOF>"; + + private boolean isAggregate = false; + + @Autowired + public DslQueryProcessor(Map<QueryVersion, ParseTreeListener> dslListeners) { + this.dslListeners = dslListeners; + } + + public Map<String, Object> parseAaiQuery(QueryVersion version, String aaiQuery) + throws AAIException { + Map<String, Object> resultMap = new HashMap<>(); + try { + // Create a input stream that reads our string + InputStream stream = + new ByteArrayInputStream(aaiQuery.getBytes(StandardCharsets.UTF_8)); + + packageName = packageName + version.toString().toLowerCase() + "."; + + Class<?> lexerClass = Class.forName(packageName + LEXER); + Class<?> parserClass = Class.forName(packageName + PARSER); + + Lexer lexer = (Lexer) lexerClass.getConstructor(CharStream.class) + .newInstance(CharStreams.fromStream(stream, StandardCharsets.UTF_8)); + lexer.removeErrorListeners(); + lexer.addErrorListener(new AAIDslErrorListener()); + CommonTokenStream tokens = new CommonTokenStream(lexer); + + // Parser that feeds off of the tokens buffer + Parser parser = + (Parser) parserClass.getConstructor(TokenStream.class).newInstance(tokens); + parser.removeErrorListeners(); + parser.addErrorListener(new AAIDslErrorListener()); + ParseTreeListener dslListener = dslListeners.get(version); + dslListener.getClass().getMethod("setValidationFlag", boolean.class).invoke(dslListener, + isStartNodeValidationFlag()); + dslListener.getClass().getMethod("setAggregateFlag", boolean.class).invoke(dslListener, + isAggregate()); + + if (!getValidationRules().isEmpty() && !"none".equals(getValidationRules())) { + DslValidator validator = new DslValidator.Builder().create(); + dslListener.getClass() + .getMethod("setQueryValidator", DslValidator.class, String.class) + .invoke(dslListener, validator, getValidationRules()); + } + + // Specify our entry point + ParseTree ptree = (ParseTree) parserClass.getMethod("aaiquery").invoke(parser); + + // Check if there is no EOF token at the end of the parsed aaiQuery + // If none, DSL query may have not been parsed correctly and omitted part of the query + // out. If so error out. + // If it wasn't expecting a opening parens after a closing bracket for union, it will + // drop the proceeding part of the query. + Token eofToken = tokens.get(tokens.size() - 1); if (eofToken != null && !eofToken.getText().equals(EOF_TOKEN)) { - if (eofToken.getText().equals("(")) { - throw new AAIException("AAI_6153", "DSL Syntax Error while processing the query: DSL Query could not be parsed correctly. Please check your syntax."); - } - } - - if (LOGGER.isInfoEnabled()) { - LOGGER.info("QUERY-interim {}", ptree.toStringTree(parser)); - } - - // Walk it and attach our listener - ParseTreeWalker walker = new ParseTreeWalker(); - - walker.walk(dslListener, ptree); - String query = (String) dslListener.getClass().getMethod("getQuery").invoke(dslListener); - resultMap.put("query", query); - if (version.equals(QueryVersion.V2)){ - Map<String, List<String>> selectKeys= ((DslListener)dslListener).getSelectKeys(); - if (selectKeys != null && !selectKeys.isEmpty()){ - resultMap.put("propertiesMap", selectKeys); - } - } - LOGGER.info("Final QUERY {}", query); - return resultMap; - }catch(InvocationTargetException e){ - if (e.getTargetException() instanceof ParseCancellationException) { - throw new AAIException("AAI_6153", "DSL Syntax Error while processing the query :" + e.getTargetException().getMessage()); - } else if (e.getTargetException() instanceof AAIException) { - AAIException ex = (AAIException)e.getTargetException(); - throw new AAIException((ex.getCode().isEmpty() ? "AAI_6149":ex.getCode()), "DSL Error while processing the query :" + ex.getMessage()); - } else { - throw new AAIException("AAI_6152","Exception while processing DSL query"); - } - - } catch(ParseCancellationException e) { - throw new AAIException("AAI_6153", "DSL Syntax Error while processing the query: " + e.getMessage()); - - } catch (Exception e) { - throw new AAIException("AAI_6152","Error while processing the query: " + e.getMessage()); - - } - } - - public boolean isStartNodeValidationFlag() { - return startNodeValidationFlag; - } - - public void setStartNodeValidationFlag(boolean startNodeValidationFlag) { - this.startNodeValidationFlag = startNodeValidationFlag; - } - - public boolean isAggregate() { - return isAggregate; - } - - public void setAggregate(boolean aggregate) { - this.isAggregate = aggregate; - } - - public String getValidationRules() { - return validationRules; - } - - public void setValidationRules(String validationRules) { - this.validationRules = validationRules; - } + if (eofToken.getText().equals("(")) { + throw new AAIException("AAI_6153", + "DSL Syntax Error while processing the query: DSL Query could not be parsed correctly. Please check your syntax."); + } + } + + if (LOGGER.isInfoEnabled()) { + LOGGER.info("QUERY-interim {}", ptree.toStringTree(parser)); + } + + // Walk it and attach our listener + ParseTreeWalker walker = new ParseTreeWalker(); + + walker.walk(dslListener, ptree); + String query = + (String) dslListener.getClass().getMethod("getQuery").invoke(dslListener); + resultMap.put("query", query); + if (version.equals(QueryVersion.V2)) { + Map<String, List<String>> selectKeys = ((DslListener) dslListener).getSelectKeys(); + if (selectKeys != null && !selectKeys.isEmpty()) { + resultMap.put("propertiesMap", selectKeys); + } + } + LOGGER.info("Final QUERY {}", query); + return resultMap; + } catch (InvocationTargetException e) { + if (e.getTargetException() instanceof ParseCancellationException) { + throw new AAIException("AAI_6153", "DSL Syntax Error while processing the query :" + + e.getTargetException().getMessage()); + } else if (e.getTargetException() instanceof AAIException) { + AAIException ex = (AAIException) e.getTargetException(); + throw new AAIException((ex.getCode().isEmpty() ? "AAI_6149" : ex.getCode()), + "DSL Error while processing the query :" + ex.getMessage()); + } else { + throw new AAIException("AAI_6152", "Exception while processing DSL query"); + } + + } catch (ParseCancellationException e) { + throw new AAIException("AAI_6153", + "DSL Syntax Error while processing the query: " + e.getMessage()); + + } catch (Exception e) { + throw new AAIException("AAI_6152", + "Error while processing the query: " + e.getMessage()); + + } + } + + public boolean isStartNodeValidationFlag() { + return startNodeValidationFlag; + } + + public void setStartNodeValidationFlag(boolean startNodeValidationFlag) { + this.startNodeValidationFlag = startNodeValidationFlag; + } + + public boolean isAggregate() { + return isAggregate; + } + + public void setAggregate(boolean aggregate) { + this.isAggregate = aggregate; + } + + public String getValidationRules() { + return validationRules; + } + + public void setValidationRules(String validationRules) { + this.validationRules = validationRules; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/Edge.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/Edge.java index c3be5dc..111c188 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/Edge.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/Edge.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,17 +19,17 @@ */ package org.onap.aai.rest.dsl; -import org.onap.aai.rest.enums.EdgeDirection; - import java.util.List; import java.util.stream.Collectors; +import org.onap.aai.rest.enums.EdgeDirection; + public class Edge { private List<EdgeLabel> labels; private EdgeDirection direction; - public Edge (EdgeDirection direction, List<EdgeLabel> labels) { + public Edge(EdgeDirection direction, List<EdgeLabel> labels) { this.labels = labels; this.direction = direction; } @@ -53,7 +53,7 @@ public class Edge { @Override public String toString() { return String.format("labels: %s, direction: %s ", - labels.stream().map(EdgeLabel::getLabel).collect(Collectors.joining(",")), - this.getDirection().name()); + labels.stream().map(EdgeLabel::getLabel).collect(Collectors.joining(",")), + this.getDirection().name()); } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/EdgeLabel.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/EdgeLabel.java index 703adaf..6acf758 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/EdgeLabel.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/EdgeLabel.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -24,7 +24,7 @@ public class EdgeLabel { private String label; private boolean isExactMatch; - public EdgeLabel (String label, boolean isExactMatch) { + public EdgeLabel(String label, boolean isExactMatch) { this.isExactMatch = isExactMatch; this.label = label; } @@ -45,4 +45,4 @@ public class EdgeLabel { this.isExactMatch = isExactMatch; } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v1/DslListener.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v1/DslListener.java index 4bb093e..ad2899c 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v1/DslListener.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v1/DslListener.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,6 +20,11 @@ package org.onap.aai.rest.dsl.v1; import com.google.common.collect.Lists; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import org.onap.aai.dsl.v1.AAIDslBaseListener; import org.onap.aai.dsl.v1.AAIDslParser; import org.onap.aai.edges.EdgeIngestor; @@ -36,271 +41,274 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - /** * The Class DslListener. */ public class DslListener extends AAIDslBaseListener { - private static final Logger LOGGER = LoggerFactory.getLogger(DslListener.class); - - private boolean validationFlag = false; - private EdgeIngestor edgeIngestor; - private Loader loader; - private Optional<DslValidator> queryValidator = Optional.empty(); - private boolean hasReturnValue = false; - - private String validationRules = "none"; - - private Deque<DslQueryBuilder> dslQueryBuilders = new LinkedList<>(); - private Deque<String> traversedNodes = new LinkedList<>(); - private Deque<List<String>> returnedNodes = new LinkedList<>(); - - private List<String> traversedEdgeLabels = new LinkedList<>(); - - private boolean isAggregate = false; - - /* - * Additional datastructures to store all nodeCount & looped edges - */ - private int nodeCount = 0; - private List<String> traversedEdges = new LinkedList<>(); - - /** - * Instantiates a new DslListener. - */ - @Autowired - public DslListener(EdgeIngestor edgeIngestor, SchemaVersions schemaVersions, LoaderFactory loaderFactory) { - this.loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion()); - this.edgeIngestor = edgeIngestor; - } - - public DslQueryBuilder builder() { - return dslQueryBuilders.peekFirst(); - } - - public String getQuery() throws AAIException { - if (!getException().isEmpty()) { - AAIException aaiException = new AAIException("AAI_6149", getException()); - ErrorLogHelper.logException(aaiException); - throw aaiException; - } - - DslValidatorRule ruleValidator = new DslValidatorRule.Builder() - .loop(getValidationRules() , traversedEdges) - .nodeCount(getValidationRules(), nodeCount).build(); - if(queryValidator.isPresent() && !queryValidator.get().validate(ruleValidator)){ - AAIException aaiException = new AAIException("AAI_6151", "Validation error " + queryValidator.get().getErrorMessage() ); - ErrorLogHelper.logException(aaiException); - throw aaiException; - } - return this.compile(); - } - - public String compile() { - List<String> queries = dslQueryBuilders.stream().map(dslQb -> dslQb.getQuery().toString()).collect(Collectors.toList()); - return String.join("", Lists.reverse(queries)); - } - - public String getException() { - List<String> exceptions = dslQueryBuilders.stream().map(dslQb -> dslQb.getQueryException().toString()).collect(Collectors.toList()); - return String.join("", Lists.reverse(exceptions)); - } - - @Override - public void enterAaiquery(AAIDslParser.AaiqueryContext ctx) { - dslQueryBuilders.push(new DslQueryBuilder(edgeIngestor, loader)); - } - - @Override - public void exitAaiquery(AAIDslParser.AaiqueryContext ctx) { - if (!hasReturnValue) { - throw new RuntimeException(new AAIException("AAI_6149", "No nodes marked for output")); - } - } - - @Override - public void enterStartStatement(AAIDslParser.StartStatementContext ctx) { - builder().start(); - } - - @Override - public void exitStartStatement(AAIDslParser.StartStatementContext ctx) { - builder().end(); - if (!traversedNodes.isEmpty()) { - traversedNodes.removeFirst(); - } - - } - - @Override - public void exitLimit(AAIDslParser.LimitContext ctx) { - builder().limit(ctx.num().getText()); - } - - @Override - public void enterNestedStatement(AAIDslParser.NestedStatementContext ctx) { - dslQueryBuilders.addFirst(new DslQueryBuilder(edgeIngestor, loader)); - builder().startInstance(); - } - - @Override - public void exitNestedStatement(AAIDslParser.NestedStatementContext ctx) { - int count = 1; - if(!ctx.traversal().isEmpty()) { - count += ctx.traversal().size() ; - } - String resultNode = traversedNodes.peekFirst(); - - if (!traversedNodes.isEmpty()) { - Stream<Integer> integers = Stream.iterate(0, i -> i + 1); - integers.limit(count) - .forEach(i -> traversedNodes.removeFirst()); - } - List<String> resultNodes = returnedNodes.pop(); - resultNodes.add(resultNode); - returnedNodes.addFirst(resultNodes); - } - - @Override - public void enterComma(AAIDslParser.CommaContext ctx) { - builder().comma(); - } - - @Override - public void enterVertex(AAIDslParser.VertexContext ctx) { - - if (!traversedNodes.isEmpty()) { - builder().edgeQuery(traversedEdgeLabels, traversedNodes.peekFirst(), ctx.label().getText()); - traversedEdges.add(traversedNodes.peekFirst() + ctx.label().getText()); - } else { - builder().nodeQuery(ctx.label().getText()); - } - - traversedNodes.addFirst(ctx.label().getText()); - } - - @Override - public void exitVertex(AAIDslParser.VertexContext ctx) { - - /*TODO dont use context */ - if (ctx.getParent() instanceof AAIDslParser.StartStatementContext && isValidationFlag()) { - List<String> allKeys = new ArrayList<>(); - - if (ctx.filter() != null) { - allKeys = ctx.filter().propertyFilter().stream().flatMap( - pf -> pf.key().stream()).map( - e -> e.getText().replaceFirst("\'", "").substring(0, e.getText().length() - 2)).collect(Collectors.toList()); - - } - builder().validateFilter(ctx.label().getText(), allKeys); - } - if (ctx.store() != null) { - builder().store(); - hasReturnValue = true; - } - traversedEdgeLabels = new ArrayList<>(); - nodeCount++; - } - - - @Override - public void enterUnionVertex(AAIDslParser.UnionVertexContext ctx) { - returnedNodes.addFirst(new ArrayList<>()); - builder().union(); - } - - @Override - public void exitUnionVertex(AAIDslParser.UnionVertexContext ctx) { - String resultNode = returnedNodes.pop().get(0); - traversedNodes.addFirst(resultNode); - builder().endUnion(); - if (ctx.store() != null) { - builder().store(); - hasReturnValue = true; - } - } - - @Override - public void enterWhereFilter(AAIDslParser.WhereFilterContext ctx) { - boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); - returnedNodes.addFirst(new ArrayList<>()); - builder().where(isNot); - } - - @Override - public void exitWhereFilter(AAIDslParser.WhereFilterContext ctx) { - if(!returnedNodes.isEmpty()) { - returnedNodes.pop(); - } - boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); - builder().endWhere(isNot); - } - - @Override - public void enterEdgeFilter(AAIDslParser.EdgeFilterContext ctx) { - traversedEdgeLabels = ctx.key().stream().map(value -> value.getText()).collect(Collectors.toList()); - - } - - @Override - public void enterPropertyFilter(AAIDslParser.PropertyFilterContext ctx) { - - List<AAIDslParser.KeyContext> valueList = ctx.key(); - String filterKey = valueList.get(0).getText(); - - boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); - List<AAIDslParser.NumContext> numberValues = ctx.num(); - - List<AAIDslParser.BoolContext> booleanValues = ctx.bool(); - - /* - * Add all String values - */ - List<String> values = valueList.stream().filter(value -> !filterKey.equals(value.getText())) - .map(value -> value.getText()).collect(Collectors.toList()); - - /* - * Add all numeric values - */ - values.addAll(numberValues.stream().filter(value -> !filterKey.equals(value.getText())) - .map(value -> value.getText()).collect(Collectors.toList())); - - /* - * Add all boolean values - */ - values.addAll(booleanValues.stream().filter(value -> !filterKey.equals(value.getText())) - .map(value -> value.getText().toLowerCase()).collect(Collectors.toList())); - - builder().filter(isNot, traversedNodes.peekFirst(), filterKey, values); - - } - - public boolean isValidationFlag() { - return validationFlag; - } - - public void setValidationFlag(boolean validationFlag) { - this.validationFlag = validationFlag; - } - - public void setQueryValidator(DslValidator queryValidator, String validationRules) { - this.queryValidator = Optional.of(queryValidator); - this.validationRules = validationRules; - } - public String getValidationRules() { - return validationRules; - } - - public void setAggregateFlag(boolean isAggregate) { - this.isAggregate = isAggregate; - } - - public boolean isAggregate(){ - return this.isAggregate; - } + private static final Logger LOGGER = LoggerFactory.getLogger(DslListener.class); + + private boolean validationFlag = false; + private EdgeIngestor edgeIngestor; + private Loader loader; + private Optional<DslValidator> queryValidator = Optional.empty(); + private boolean hasReturnValue = false; + + private String validationRules = "none"; + + private Deque<DslQueryBuilder> dslQueryBuilders = new LinkedList<>(); + private Deque<String> traversedNodes = new LinkedList<>(); + private Deque<List<String>> returnedNodes = new LinkedList<>(); + + private List<String> traversedEdgeLabels = new LinkedList<>(); + + private boolean isAggregate = false; + + /* + * Additional datastructures to store all nodeCount & looped edges + */ + private int nodeCount = 0; + private List<String> traversedEdges = new LinkedList<>(); + + /** + * Instantiates a new DslListener. + */ + @Autowired + public DslListener(EdgeIngestor edgeIngestor, SchemaVersions schemaVersions, + LoaderFactory loaderFactory) { + this.loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, + schemaVersions.getDefaultVersion()); + this.edgeIngestor = edgeIngestor; + } + + public DslQueryBuilder builder() { + return dslQueryBuilders.peekFirst(); + } + + public String getQuery() throws AAIException { + if (!getException().isEmpty()) { + AAIException aaiException = new AAIException("AAI_6149", getException()); + ErrorLogHelper.logException(aaiException); + throw aaiException; + } + + DslValidatorRule ruleValidator = + new DslValidatorRule.Builder().loop(getValidationRules(), traversedEdges) + .nodeCount(getValidationRules(), nodeCount).build(); + if (queryValidator.isPresent() && !queryValidator.get().validate(ruleValidator)) { + AAIException aaiException = new AAIException("AAI_6151", + "Validation error " + queryValidator.get().getErrorMessage()); + ErrorLogHelper.logException(aaiException); + throw aaiException; + } + return this.compile(); + } + + public String compile() { + List<String> queries = dslQueryBuilders.stream().map(dslQb -> dslQb.getQuery().toString()) + .collect(Collectors.toList()); + return String.join("", Lists.reverse(queries)); + } + + public String getException() { + List<String> exceptions = dslQueryBuilders.stream() + .map(dslQb -> dslQb.getQueryException().toString()).collect(Collectors.toList()); + return String.join("", Lists.reverse(exceptions)); + } + + @Override + public void enterAaiquery(AAIDslParser.AaiqueryContext ctx) { + dslQueryBuilders.push(new DslQueryBuilder(edgeIngestor, loader)); + } + + @Override + public void exitAaiquery(AAIDslParser.AaiqueryContext ctx) { + if (!hasReturnValue) { + throw new RuntimeException(new AAIException("AAI_6149", "No nodes marked for output")); + } + } + + @Override + public void enterStartStatement(AAIDslParser.StartStatementContext ctx) { + builder().start(); + } + + @Override + public void exitStartStatement(AAIDslParser.StartStatementContext ctx) { + builder().end(); + if (!traversedNodes.isEmpty()) { + traversedNodes.removeFirst(); + } + + } + + @Override + public void exitLimit(AAIDslParser.LimitContext ctx) { + builder().limit(ctx.num().getText()); + } + + @Override + public void enterNestedStatement(AAIDslParser.NestedStatementContext ctx) { + dslQueryBuilders.addFirst(new DslQueryBuilder(edgeIngestor, loader)); + builder().startInstance(); + } + + @Override + public void exitNestedStatement(AAIDslParser.NestedStatementContext ctx) { + int count = 1; + if (!ctx.traversal().isEmpty()) { + count += ctx.traversal().size(); + } + String resultNode = traversedNodes.peekFirst(); + + if (!traversedNodes.isEmpty()) { + Stream<Integer> integers = Stream.iterate(0, i -> i + 1); + integers.limit(count).forEach(i -> traversedNodes.removeFirst()); + } + List<String> resultNodes = returnedNodes.pop(); + resultNodes.add(resultNode); + returnedNodes.addFirst(resultNodes); + } + + @Override + public void enterComma(AAIDslParser.CommaContext ctx) { + builder().comma(); + } + + @Override + public void enterVertex(AAIDslParser.VertexContext ctx) { + + if (!traversedNodes.isEmpty()) { + builder().edgeQuery(traversedEdgeLabels, traversedNodes.peekFirst(), + ctx.label().getText()); + traversedEdges.add(traversedNodes.peekFirst() + ctx.label().getText()); + } else { + builder().nodeQuery(ctx.label().getText()); + } + + traversedNodes.addFirst(ctx.label().getText()); + } + + @Override + public void exitVertex(AAIDslParser.VertexContext ctx) { + + /* TODO dont use context */ + if (ctx.getParent() instanceof AAIDslParser.StartStatementContext && isValidationFlag()) { + List<String> allKeys = new ArrayList<>(); + + if (ctx.filter() != null) { + allKeys = ctx + .filter().propertyFilter().stream().flatMap(pf -> pf.key().stream()).map(e -> e + .getText().replaceFirst("\'", "").substring(0, e.getText().length() - 2)) + .collect(Collectors.toList()); + + } + builder().validateFilter(ctx.label().getText(), allKeys); + } + if (ctx.store() != null) { + builder().store(); + hasReturnValue = true; + } + traversedEdgeLabels = new ArrayList<>(); + nodeCount++; + } + + @Override + public void enterUnionVertex(AAIDslParser.UnionVertexContext ctx) { + returnedNodes.addFirst(new ArrayList<>()); + builder().union(); + } + + @Override + public void exitUnionVertex(AAIDslParser.UnionVertexContext ctx) { + String resultNode = returnedNodes.pop().get(0); + traversedNodes.addFirst(resultNode); + builder().endUnion(); + if (ctx.store() != null) { + builder().store(); + hasReturnValue = true; + } + } + + @Override + public void enterWhereFilter(AAIDslParser.WhereFilterContext ctx) { + boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); + returnedNodes.addFirst(new ArrayList<>()); + builder().where(isNot); + } + + @Override + public void exitWhereFilter(AAIDslParser.WhereFilterContext ctx) { + if (!returnedNodes.isEmpty()) { + returnedNodes.pop(); + } + boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); + builder().endWhere(isNot); + } + + @Override + public void enterEdgeFilter(AAIDslParser.EdgeFilterContext ctx) { + traversedEdgeLabels = + ctx.key().stream().map(value -> value.getText()).collect(Collectors.toList()); + + } + + @Override + public void enterPropertyFilter(AAIDslParser.PropertyFilterContext ctx) { + + List<AAIDslParser.KeyContext> valueList = ctx.key(); + String filterKey = valueList.get(0).getText(); + + boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); + List<AAIDslParser.NumContext> numberValues = ctx.num(); + + List<AAIDslParser.BoolContext> booleanValues = ctx.bool(); + + /* + * Add all String values + */ + List<String> values = valueList.stream().filter(value -> !filterKey.equals(value.getText())) + .map(value -> value.getText()).collect(Collectors.toList()); + + /* + * Add all numeric values + */ + values.addAll(numberValues.stream().filter(value -> !filterKey.equals(value.getText())) + .map(value -> value.getText()).collect(Collectors.toList())); + + /* + * Add all boolean values + */ + values.addAll(booleanValues.stream().filter(value -> !filterKey.equals(value.getText())) + .map(value -> value.getText().toLowerCase()).collect(Collectors.toList())); + + builder().filter(isNot, traversedNodes.peekFirst(), filterKey, values); + + } + + public boolean isValidationFlag() { + return validationFlag; + } + + public void setValidationFlag(boolean validationFlag) { + this.validationFlag = validationFlag; + } + + public void setQueryValidator(DslValidator queryValidator, String validationRules) { + this.queryValidator = Optional.of(queryValidator); + this.validationRules = validationRules; + } + + public String getValidationRules() { + return validationRules; + } + + public void setAggregateFlag(boolean isAggregate) { + this.isAggregate = isAggregate; + } + + public boolean isAggregate() { + return this.isAggregate; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v2/DslListener.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v2/DslListener.java index 66ca8a1..7e46c0b 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v2/DslListener.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v2/DslListener.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,6 +20,11 @@ package org.onap.aai.rest.dsl.v2; import com.google.common.collect.Lists; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import org.onap.aai.dsl.v2.AAIDslBaseListener; import org.onap.aai.dsl.v2.AAIDslParser; import org.onap.aai.edges.EdgeIngestor; @@ -39,273 +44,274 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - /** * The Class DslListener. */ public class DslListener extends AAIDslBaseListener { - private static final Logger LOGGER = LoggerFactory.getLogger(DslListener.class.getName()); - - private boolean validationFlag = false; - private EdgeIngestor edgeIngestor; - private Loader loader; - private Optional<DslValidator> queryValidator = Optional.empty(); - private boolean hasReturnValue = false; - - private String validationRules = "none"; - - private Deque<DslQueryBuilder> dslQueryBuilders = new LinkedList<>(); - private Deque<String> traversedNodes = new LinkedList<>(); - private Deque<List<String>> returnedNodes = new LinkedList<>(); - - private Deque<Edge> traversedEdges = new ArrayDeque<>(); - private long selectCounter = 0; - - /* - * Additional datastructures to store all nodeCount & looped edges - */ - int nodeCount = 0; - private List<String> traversedEdgesOld = new LinkedList<>(); - - private Map<String, List<String>> selectKeys = new HashMap<String, List<String>>(); - private boolean isAggregate; - - public Map<String, List<String>> getSelectKeys() { - return selectKeys; - } - - public void setSelectKeys(String nodeType, List<String> properties) { - this.selectKeys.put(nodeType, properties); - } - - /** - * Instantiates a new DslListener. - */ - @Autowired - public DslListener(EdgeIngestor edgeIngestor, SchemaVersions schemaVersions, LoaderFactory loaderFactory) { - this.loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion()); - this.edgeIngestor = edgeIngestor; - } - - public DslQueryBuilder builder() { - return dslQueryBuilders.peekFirst(); - } - - public String getQuery() throws AAIException { - //TODO Change the exception reporting - if (!getException().isEmpty()) { - AAIException aaiException = new AAIException("AAI_6149", getException()); - ErrorLogHelper.logException(aaiException); - throw aaiException; - } - - DslValidatorRule ruleValidator = new DslValidatorRule.Builder() - .loop(getValidationRules() , traversedEdgesOld) - .nodeCount(getValidationRules(), nodeCount).build(); - if(queryValidator.isPresent() && !queryValidator.get().validate(ruleValidator)){ - AAIException aaiException = new AAIException("AAI_6151", "Validation error " + queryValidator.get().getErrorMessage() ); - ErrorLogHelper.logException(aaiException); - throw aaiException; - } - return this.compile(); - } - - public String compile() { - List<String> queries = dslQueryBuilders.stream().map(dslQb -> dslQb.getQuery().toString()).collect(Collectors.toList()); - return String.join("", Lists.reverse(queries)); - } - - public String getException() { - List<String> exceptions = dslQueryBuilders.stream().map(dslQb -> dslQb.getQueryException().toString()).collect(Collectors.toList()); - return String.join("", Lists.reverse(exceptions)); - } - - @Override - public void enterAaiquery(AAIDslParser.AaiqueryContext ctx) { - dslQueryBuilders.push(new DslQueryBuilder(edgeIngestor, loader)); - } - - @Override - public void exitAaiquery(AAIDslParser.AaiqueryContext ctx) { - if (!hasReturnValue) { - throw new RuntimeException(new AAIException("AAI_6149", "No nodes marked for output")); - } - } - - @Override - public void enterStartStatement(AAIDslParser.StartStatementContext ctx) { - builder().start(); - } - - @Override - public void exitStartStatement(AAIDslParser.StartStatementContext ctx) { - builder().end(selectCounter); - if (!traversedNodes.isEmpty()) { - traversedNodes.removeFirst(); - } - - } - - @Override - public void exitLimit(AAIDslParser.LimitContext ctx) { - builder().limit(ctx.num().getText()); - } - - @Override - public void enterNestedStatement(AAIDslParser.NestedStatementContext ctx) { - dslQueryBuilders.addFirst(new DslQueryBuilder(edgeIngestor, loader)); - builder().startInstance(); - } - - @Override - public void exitNestedStatement(AAIDslParser.NestedStatementContext ctx) { - int count = 1; - if(!ctx.traversal().isEmpty()) { - count = ctx.traversal().size() ; - } - String resultNode = traversedNodes.peekFirst(); - - if (!traversedNodes.isEmpty()) { - Stream<Integer> integers = Stream.iterate(0, i -> i + 1); - integers.limit(count) - .forEach(i -> traversedNodes.removeFirst()); - } - List<String> resultNodes = returnedNodes.pop(); - resultNodes.add(resultNode); - returnedNodes.addFirst(resultNodes); - } - - @Override - public void enterComma(AAIDslParser.CommaContext ctx) { - builder().comma(); - } - - @Override - public void enterVertex(AAIDslParser.VertexContext ctx) { - - if (!traversedEdges.isEmpty() && !traversedNodes.isEmpty()) { - builder().edgeQuery(traversedEdges.peekFirst(), traversedNodes.peekFirst(), ctx.label().getText()); - traversedEdgesOld.add(traversedNodes.peekFirst() + ctx.label().getText()); - } else { - builder().nodeQuery(ctx.label().getText()); - } - - traversedNodes.addFirst(ctx.label().getText()); - } - - @Override - public void exitVertex(AAIDslParser.VertexContext ctx) { - - /*TODO dont use context */ - if (ctx.getParent() instanceof AAIDslParser.StartStatementContext && isValidationFlag()) { - List<String> allKeys = new ArrayList<>(); - - if (ctx.filter() != null) { - allKeys = ctx.filter().propertyFilter().stream().flatMap( - pf -> pf.key().stream()).map( - e -> e.getText().replaceFirst("\'", "").substring(0, e.getText().length() - 2)).collect(Collectors.toList()); - } - builder().validateFilter(ctx.label().getText(), allKeys); - } - if (ctx.store() != null) { - if (isAggregate()) { - builder().select(selectCounter++, null); - } - builder().store(); - hasReturnValue = true; - } - nodeCount++; - } - - - @Override - public void enterUnionVertex(AAIDslParser.UnionVertexContext ctx) { - returnedNodes.addFirst(new ArrayList<>()); - builder().union(); - } - - @Override - public void exitUnionVertex(AAIDslParser.UnionVertexContext ctx) { - String resultNode = returnedNodes.pop().get(0); - traversedNodes.addFirst(resultNode); - builder().endUnion(); - if (ctx.store() != null) { - builder().store(); - hasReturnValue = true; - } - } - - @Override - public void enterWhereFilter(AAIDslParser.WhereFilterContext ctx) { - boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); - returnedNodes.addFirst(new ArrayList<>()); - builder().where(isNot); - } - - @Override - public void exitWhereFilter(AAIDslParser.WhereFilterContext ctx) { - if(!returnedNodes.isEmpty()) { - returnedNodes.pop(); - } - boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); - builder().endWhere(isNot); - } - - @Override - public void enterEdge(AAIDslParser.EdgeContext ctx) { - List<EdgeLabel> labels = new ArrayList<>(); - - if(ctx.edgeFilter() != null) { - labels.addAll(ctx.edgeFilter().key().stream().map( - e -> new EdgeLabel(removeSingleQuotes(e.getText()), true)) - .collect(Collectors.toList())); - } - EdgeDirection direction = EdgeDirection.BOTH; - if(ctx.DIRTRAVERSE() != null){ - direction = EdgeDirection.fromValue(ctx.DIRTRAVERSE().getText()); - } - traversedEdges.addFirst(new Edge(direction, labels)); - } - - protected String removeSingleQuotes(String value) { - return value.replaceFirst("^'(.*)'$", "$1"); - } - - @Override - public void enterPropertyFilter(AAIDslParser.PropertyFilterContext ctx) { - - List<AAIDslParser.KeyContext> valueList = ctx.key(); - String filterKey = valueList.get(0).getText(); - - boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); - List<AAIDslParser.NumContext> numberValues = ctx.num(); - - List<AAIDslParser.BoolContext> booleanValues = ctx.bool(); - - /* - * Add all String values - */ - List<String> values = valueList.stream().filter(value -> !filterKey.equals(value.getText())) - .map(value -> value.getText()).collect(Collectors.toList()); - /* - * Add all numeric values - */ - values.addAll(numberValues.stream().filter(value -> !filterKey.equals(value.getText())) - .map(value -> value.getText()).collect(Collectors.toList())); - - /* - * Add all boolean values - */ - values.addAll(booleanValues.stream().filter(value -> !filterKey.equals(value.getText())) - .map(value -> value.getText().toLowerCase()).collect(Collectors.toList())); - - builder().filter(isNot, traversedNodes.peekFirst(), filterKey, values); - - } + private static final Logger LOGGER = LoggerFactory.getLogger(DslListener.class.getName()); + + private boolean validationFlag = false; + private EdgeIngestor edgeIngestor; + private Loader loader; + private Optional<DslValidator> queryValidator = Optional.empty(); + private boolean hasReturnValue = false; + + private String validationRules = "none"; + + private Deque<DslQueryBuilder> dslQueryBuilders = new LinkedList<>(); + private Deque<String> traversedNodes = new LinkedList<>(); + private Deque<List<String>> returnedNodes = new LinkedList<>(); + + private Deque<Edge> traversedEdges = new ArrayDeque<>(); + private long selectCounter = 0; + + /* + * Additional datastructures to store all nodeCount & looped edges + */ + int nodeCount = 0; + private List<String> traversedEdgesOld = new LinkedList<>(); + + private Map<String, List<String>> selectKeys = new HashMap<String, List<String>>(); + private boolean isAggregate; + + public Map<String, List<String>> getSelectKeys() { + return selectKeys; + } + + public void setSelectKeys(String nodeType, List<String> properties) { + this.selectKeys.put(nodeType, properties); + } + + /** + * Instantiates a new DslListener. + */ + @Autowired + public DslListener(EdgeIngestor edgeIngestor, SchemaVersions schemaVersions, + LoaderFactory loaderFactory) { + this.loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, + schemaVersions.getDefaultVersion()); + this.edgeIngestor = edgeIngestor; + } + + public DslQueryBuilder builder() { + return dslQueryBuilders.peekFirst(); + } + + public String getQuery() throws AAIException { + // TODO Change the exception reporting + if (!getException().isEmpty()) { + AAIException aaiException = new AAIException("AAI_6149", getException()); + ErrorLogHelper.logException(aaiException); + throw aaiException; + } + + DslValidatorRule ruleValidator = + new DslValidatorRule.Builder().loop(getValidationRules(), traversedEdgesOld) + .nodeCount(getValidationRules(), nodeCount).build(); + if (queryValidator.isPresent() && !queryValidator.get().validate(ruleValidator)) { + AAIException aaiException = new AAIException("AAI_6151", + "Validation error " + queryValidator.get().getErrorMessage()); + ErrorLogHelper.logException(aaiException); + throw aaiException; + } + return this.compile(); + } + + public String compile() { + List<String> queries = dslQueryBuilders.stream().map(dslQb -> dslQb.getQuery().toString()) + .collect(Collectors.toList()); + return String.join("", Lists.reverse(queries)); + } + + public String getException() { + List<String> exceptions = dslQueryBuilders.stream() + .map(dslQb -> dslQb.getQueryException().toString()).collect(Collectors.toList()); + return String.join("", Lists.reverse(exceptions)); + } + + @Override + public void enterAaiquery(AAIDslParser.AaiqueryContext ctx) { + dslQueryBuilders.push(new DslQueryBuilder(edgeIngestor, loader)); + } + + @Override + public void exitAaiquery(AAIDslParser.AaiqueryContext ctx) { + if (!hasReturnValue) { + throw new RuntimeException(new AAIException("AAI_6149", "No nodes marked for output")); + } + } + + @Override + public void enterStartStatement(AAIDslParser.StartStatementContext ctx) { + builder().start(); + } + + @Override + public void exitStartStatement(AAIDslParser.StartStatementContext ctx) { + builder().end(selectCounter); + if (!traversedNodes.isEmpty()) { + traversedNodes.removeFirst(); + } + + } + + @Override + public void exitLimit(AAIDslParser.LimitContext ctx) { + builder().limit(ctx.num().getText()); + } + + @Override + public void enterNestedStatement(AAIDslParser.NestedStatementContext ctx) { + dslQueryBuilders.addFirst(new DslQueryBuilder(edgeIngestor, loader)); + builder().startInstance(); + } + + @Override + public void exitNestedStatement(AAIDslParser.NestedStatementContext ctx) { + int count = 1; + if (!ctx.traversal().isEmpty()) { + count = ctx.traversal().size(); + } + String resultNode = traversedNodes.peekFirst(); + + if (!traversedNodes.isEmpty()) { + Stream<Integer> integers = Stream.iterate(0, i -> i + 1); + integers.limit(count).forEach(i -> traversedNodes.removeFirst()); + } + List<String> resultNodes = returnedNodes.pop(); + resultNodes.add(resultNode); + returnedNodes.addFirst(resultNodes); + } + + @Override + public void enterComma(AAIDslParser.CommaContext ctx) { + builder().comma(); + } + + @Override + public void enterVertex(AAIDslParser.VertexContext ctx) { + + if (!traversedEdges.isEmpty() && !traversedNodes.isEmpty()) { + builder().edgeQuery(traversedEdges.peekFirst(), traversedNodes.peekFirst(), + ctx.label().getText()); + traversedEdgesOld.add(traversedNodes.peekFirst() + ctx.label().getText()); + } else { + builder().nodeQuery(ctx.label().getText()); + } + + traversedNodes.addFirst(ctx.label().getText()); + } + + @Override + public void exitVertex(AAIDslParser.VertexContext ctx) { + + /* TODO dont use context */ + if (ctx.getParent() instanceof AAIDslParser.StartStatementContext && isValidationFlag()) { + List<String> allKeys = new ArrayList<>(); + + if (ctx.filter() != null) { + allKeys = ctx + .filter().propertyFilter().stream().flatMap(pf -> pf.key().stream()).map(e -> e + .getText().replaceFirst("\'", "").substring(0, e.getText().length() - 2)) + .collect(Collectors.toList()); + } + builder().validateFilter(ctx.label().getText(), allKeys); + } + if (ctx.store() != null) { + if (isAggregate()) { + builder().select(selectCounter++, null); + } + builder().store(); + hasReturnValue = true; + } + nodeCount++; + } + + @Override + public void enterUnionVertex(AAIDslParser.UnionVertexContext ctx) { + returnedNodes.addFirst(new ArrayList<>()); + builder().union(); + } + + @Override + public void exitUnionVertex(AAIDslParser.UnionVertexContext ctx) { + String resultNode = returnedNodes.pop().get(0); + traversedNodes.addFirst(resultNode); + builder().endUnion(); + if (ctx.store() != null) { + builder().store(); + hasReturnValue = true; + } + } + + @Override + public void enterWhereFilter(AAIDslParser.WhereFilterContext ctx) { + boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); + returnedNodes.addFirst(new ArrayList<>()); + builder().where(isNot); + } + + @Override + public void exitWhereFilter(AAIDslParser.WhereFilterContext ctx) { + if (!returnedNodes.isEmpty()) { + returnedNodes.pop(); + } + boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); + builder().endWhere(isNot); + } + + @Override + public void enterEdge(AAIDslParser.EdgeContext ctx) { + List<EdgeLabel> labels = new ArrayList<>(); + + if (ctx.edgeFilter() != null) { + labels.addAll(ctx.edgeFilter().key().stream() + .map(e -> new EdgeLabel(removeSingleQuotes(e.getText()), true)) + .collect(Collectors.toList())); + } + EdgeDirection direction = EdgeDirection.BOTH; + if (ctx.DIRTRAVERSE() != null) { + direction = EdgeDirection.fromValue(ctx.DIRTRAVERSE().getText()); + } + traversedEdges.addFirst(new Edge(direction, labels)); + } + + protected String removeSingleQuotes(String value) { + return value.replaceFirst("^'(.*)'$", "$1"); + } + + @Override + public void enterPropertyFilter(AAIDslParser.PropertyFilterContext ctx) { + + List<AAIDslParser.KeyContext> valueList = ctx.key(); + String filterKey = valueList.get(0).getText(); + + boolean isNot = ctx.not() != null && !ctx.not().isEmpty(); + List<AAIDslParser.NumContext> numberValues = ctx.num(); + + List<AAIDslParser.BoolContext> booleanValues = ctx.bool(); + + /* + * Add all String values + */ + List<String> values = valueList.stream().filter(value -> !filterKey.equals(value.getText())) + .map(value -> value.getText()).collect(Collectors.toList()); + /* + * Add all numeric values + */ + values.addAll(numberValues.stream().filter(value -> !filterKey.equals(value.getText())) + .map(value -> value.getText()).collect(Collectors.toList())); + + /* + * Add all boolean values + */ + values.addAll(booleanValues.stream().filter(value -> !filterKey.equals(value.getText())) + .map(value -> value.getText().toLowerCase()).collect(Collectors.toList())); + + builder().filter(isNot, traversedNodes.peekFirst(), filterKey, values); + + } @Override public void enterSelectFilter(AAIDslParser.SelectFilterContext ctx) { @@ -315,37 +321,40 @@ public class DslListener extends AAIDslBaseListener { /* * Add all String values */ - List<String> allKeys = keyList.stream().map(keyValue -> "'" + keyValue.getText().replace("'", "") + "'").collect(Collectors.toList()); - if (allKeys != null && !allKeys.isEmpty()){ - setSelectKeys(traversedNodes.getFirst(), allKeys); - } - if (isAggregate() && (traversedNodes.size() == nodeCount)) { - builder().select(selectCounter++, allKeys); - } + List<String> allKeys = + keyList.stream().map(keyValue -> "'" + keyValue.getText().replace("'", "") + "'") + .collect(Collectors.toList()); + if (allKeys != null && !allKeys.isEmpty()) { + setSelectKeys(traversedNodes.getFirst(), allKeys); + } + if (isAggregate() && (traversedNodes.size() == nodeCount)) { + builder().select(selectCounter++, allKeys); + } + } + + public boolean isValidationFlag() { + return validationFlag; } - public boolean isValidationFlag() { - return validationFlag; - } - - public void setValidationFlag(boolean validationFlag) { - this.validationFlag = validationFlag; - } - - public void setAggregateFlag(boolean isAggregate) { - this.isAggregate = isAggregate; - } - - public boolean isAggregate(){ - return this.isAggregate; - } - - public void setQueryValidator(DslValidator queryValidator, String validationRules) { - this.queryValidator = Optional.of(queryValidator); - this.validationRules = validationRules; - } - public String getValidationRules() { - return validationRules; - } + public void setValidationFlag(boolean validationFlag) { + this.validationFlag = validationFlag; + } + + public void setAggregateFlag(boolean isAggregate) { + this.isAggregate = isAggregate; + } + + public boolean isAggregate() { + return this.isAggregate; + } + + public void setQueryValidator(DslValidator queryValidator, String validationRules) { + this.queryValidator = Optional.of(queryValidator); + this.validationRules = validationRules; + } + + public String getValidationRules() { + return validationRules; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslQueryValidator.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslQueryValidator.java index 53f2c72..e82cfc2 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslQueryValidator.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslQueryValidator.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,13 +19,13 @@ */ package org.onap.aai.rest.dsl.validation; -import org.onap.aai.util.AAIConfig; -import org.onap.aai.util.TraversalConstants; - import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import org.onap.aai.util.AAIConfig; +import org.onap.aai.util.TraversalConstants; + public class DslQueryValidator extends DslValidator { protected DslQueryValidator(Builder builder) { @@ -34,7 +34,9 @@ public class DslQueryValidator extends DslValidator { public boolean validate(DslValidatorRule dslValidatorRule) { - return validateLoop(dslValidatorRule.isValidateLoop(), dslValidatorRule.getEdges()) && validateNodeCount(dslValidatorRule.isValidateNodeCount(), dslValidatorRule.getNodeCount()); + return validateLoop(dslValidatorRule.isValidateLoop(), dslValidatorRule.getEdges()) + && validateNodeCount(dslValidatorRule.isValidateNodeCount(), + dslValidatorRule.getNodeCount()); } private boolean validateLoop(boolean isValidateLoop, List<String> edges) { @@ -50,7 +52,8 @@ public class DslQueryValidator extends DslValidator { } private boolean validateNodeCount(boolean isValidateNodeCount, int nodeCount) { - String maxNodeString = AAIConfig.get("aai.dsl.max.nodecount", TraversalConstants.DSL_MAX_NODE_COUNT); + String maxNodeString = + AAIConfig.get("aai.dsl.max.nodecount", TraversalConstants.DSL_MAX_NODE_COUNT); int maxNodeCount = Integer.parseInt(maxNodeString); if (isValidateNodeCount && nodeCount > maxNodeCount) { this.errorMessage.append("NodeCount Validation failed"); diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslSchemaValidator.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslSchemaValidator.java index 54a2feb..15d8cca 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslSchemaValidator.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslSchemaValidator.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslValidator.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslValidator.java index 128f8a8..7f14458 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslValidator.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslValidator.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -24,7 +24,6 @@ import org.onap.aai.exceptions.AAIException; public abstract class DslValidator { protected StringBuilder errorMessage = new StringBuilder(""); - protected DslValidator(DslValidator.Builder builder) { } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslValidatorRule.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslValidatorRule.java index 54d45bd..117c9a5 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslValidatorRule.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/validation/DslValidatorRule.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -84,7 +84,7 @@ public class DslValidatorRule { public static class Builder { - //todo optional + // todo optional String query = ""; boolean validateLoop = false; boolean validateNodeCount = false; @@ -114,7 +114,8 @@ public class DslValidatorRule { } public Builder nodeCount(String validateNodeCount, int nodeCount) { - if (validateNodeCount.contains(NODECOUNT_RULE) || validateNodeCount.contains(ALL_RULE)) { + if (validateNodeCount.contains(NODECOUNT_RULE) + || validateNodeCount.contains(ALL_RULE)) { this.setValidateNodeCount(true); this.nodeCount = nodeCount; } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/enums/EdgeDirection.java b/aai-traversal/src/main/java/org/onap/aai/rest/enums/EdgeDirection.java index 61f35ac..8aa7a69 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/enums/EdgeDirection.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/enums/EdgeDirection.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,10 +20,7 @@ package org.onap.aai.rest.enums; public enum EdgeDirection { - OUT(">>"), - IN("<<"), - BOTH(">"); - + OUT(">>"), IN("<<"), BOTH(">"); private final String value; @@ -31,7 +28,6 @@ public enum EdgeDirection { this.value = value; } - public static EdgeDirection fromValue(String value) { for (EdgeDirection d : values()) { @@ -41,8 +37,9 @@ public enum EdgeDirection { } return BOTH; } + @Override public String toString() { return value; } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/enums/QueryVersion.java b/aai-traversal/src/main/java/org/onap/aai/rest/enums/QueryVersion.java index 0e30f28..8ba2faf 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/enums/QueryVersion.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/enums/QueryVersion.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,6 +20,5 @@ package org.onap.aai.rest.enums; public enum QueryVersion { - V1, - V2; -}
\ No newline at end of file + V1, V2; +} diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/CQConfig.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/CQConfig.java index d17fb2b..e6f55eb 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/CQConfig.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/CQConfig.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -22,7 +22,7 @@ package org.onap.aai.rest.search; public abstract class CQConfig { protected GetCustomQueryConfig queryConfig; - public GetCustomQueryConfig getCustomQueryConfig(){ + public GetCustomQueryConfig getCustomQueryConfig() { return queryConfig; } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfig.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfig.java index 2fa7ec1..a7633ca 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfig.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfig.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -22,32 +22,35 @@ package org.onap.aai.rest.search; import java.util.List; public class CustomQueryConfig { - public CustomQueryConfig() { - // used by GetCustomQueryConfig - } - - - private String query; - private List<String> queryOptionalProperties; - private List<String> queryRequiredProperties; - - public void setQuery(String query) { - this.query = query; - } - public String getQuery() { - return this.query; - } - - public void setQueryOptionalProperties( List<String> queryOptionalProperties) { - this.queryOptionalProperties = queryOptionalProperties; - } - public List<String> getQueryOptionalProperties( ) { - return queryOptionalProperties; - } - public void setQueryRequiredProperties( List<String> queryRequiredProperties) { - this.queryRequiredProperties = queryRequiredProperties; - } - public List<String> getQueryRequiredProperties( ) { - return queryRequiredProperties; - } + public CustomQueryConfig() { + // used by GetCustomQueryConfig + } + + private String query; + private List<String> queryOptionalProperties; + private List<String> queryRequiredProperties; + + public void setQuery(String query) { + this.query = query; + } + + public String getQuery() { + return this.query; + } + + public void setQueryOptionalProperties(List<String> queryOptionalProperties) { + this.queryOptionalProperties = queryOptionalProperties; + } + + public List<String> getQueryOptionalProperties() { + return queryOptionalProperties; + } + + public void setQueryRequiredProperties(List<String> queryRequiredProperties) { + this.queryRequiredProperties = queryRequiredProperties; + } + + public List<String> getQueryRequiredProperties() { + return queryRequiredProperties; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfigDTO.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfigDTO.java index 30d8d30..7f90566 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfigDTO.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfigDTO.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -39,32 +39,32 @@ package org.onap.aai.rest.search; * ============LICENSE_END========================================================= */ -import org.springframework.util.StringUtils; - import com.fasterxml.jackson.annotation.JsonProperty; +import org.springframework.util.StringUtils; + public class CustomQueryConfigDTO { - @JsonProperty("stored-query") - private String storedQuery; - @JsonProperty("query") - private CustomQueryDTO queryDTO; + @JsonProperty("stored-query") + private String storedQuery; + @JsonProperty("query") + private CustomQueryDTO queryDTO; + + public CustomQueryDTO getQueryDTO() { + if (queryDTO == null) + queryDTO = new CustomQueryDTO(); + if (!StringUtils.isEmpty(storedQuery)) { + queryDTO.setQuery(storedQuery); + } + return queryDTO; + } - public CustomQueryDTO getQueryDTO() { - if(queryDTO == null) - queryDTO = new CustomQueryDTO(); - if (!StringUtils.isEmpty(storedQuery)) { - queryDTO.setQuery(storedQuery); - } - return queryDTO; - } + public void setQueryDTO(CustomQueryDTO query) { + this.queryDTO = query; + } - public void setQueryDTO(CustomQueryDTO query) { - this.queryDTO = query; - } + public void setStoredQuery(String storedQuery) { + this.storedQuery = storedQuery; + } - public void setStoredQuery(String storedQuery) { - this.storedQuery = storedQuery; - } - } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryDTO.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryDTO.java index 16b1430..970e5b3 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryDTO.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryDTO.java @@ -10,7 +10,7 @@ package org.onap.aai.rest.search; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,37 +20,41 @@ package org.onap.aai.rest.search; * ============LICENSE_END========================================================= */ -import java.util.List; - import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.Lists; +import java.util.List; + public class CustomQueryDTO { - private String query; - @JsonProperty("optional-properties") - private List<String> queryOptionalProperties = Lists.newArrayList(); - @JsonProperty("required-properties") - private List<String> queryRequiredProperties = Lists.newArrayList();; - - public void setQuery(String query) { - this.query = query; - } - public String getQuery() { - return this.query; - } - - public void setQueryOptionalProperties( List<String> queryOptionalProperties) { - this.queryOptionalProperties = queryOptionalProperties; - } - public List<String> getQueryOptionalProperties( ) { - return queryOptionalProperties; - } - public void setQueryRequiredProperties( List<String> queryRequiredProperties) { - this.queryRequiredProperties = queryRequiredProperties; - } - public List<String> getQueryRequiredProperties( ) { - return queryRequiredProperties; - } + private String query; + @JsonProperty("optional-properties") + private List<String> queryOptionalProperties = Lists.newArrayList(); + @JsonProperty("required-properties") + private List<String> queryRequiredProperties = Lists.newArrayList();; + + public void setQuery(String query) { + this.query = query; + } + + public String getQuery() { + return this.query; + } + + public void setQueryOptionalProperties(List<String> queryOptionalProperties) { + this.queryOptionalProperties = queryOptionalProperties; + } + + public List<String> getQueryOptionalProperties() { + return queryOptionalProperties; + } + + public void setQueryRequiredProperties(List<String> queryRequiredProperties) { + this.queryRequiredProperties = queryRequiredProperties; + } + + public List<String> getQueryRequiredProperties() { + return queryRequiredProperties; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryTestDTO.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryTestDTO.java index cdc9d15..b64f07f 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryTestDTO.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryTestDTO.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -39,83 +39,79 @@ package org.onap.aai.rest.search; * ============LICENSE_END========================================================= */ +import com.beust.jcommander.internal.Maps; +import com.fasterxml.jackson.annotation.JsonProperty; + import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import com.beust.jcommander.internal.Maps; -import com.fasterxml.jackson.annotation.JsonProperty; - public class CustomQueryTestDTO { - - - @JsonProperty("stored-query") - private String storedQuery; - - @JsonProperty("vertices") - private List<LinkedHashMap<String, String>> verticesDtos; - - @JsonProperty("edges") - private List<LinkedHashMap<String, String>> edgesDtos; - - @JsonProperty("optional-properties") - private Map<String, String> queryOptionalProperties = Maps.newHashMap(); - - @JsonProperty("required-properties") - private Map<String, String> queryRequiredProperties = Maps.newHashMap(); - - @JsonProperty("expected-result") - private ExpectedResultsDto expectedResultsDtos; - - public String getStoredQuery() { - return storedQuery; - } - - public void setStoredQuery(String storedQuery) { - this.storedQuery = storedQuery; - } - - public List<LinkedHashMap<String, String>> getVerticesDtos() { - return verticesDtos; - } - - public void setVerticesDtos(List<LinkedHashMap<String, String>> verticesDtos) { - this.verticesDtos = verticesDtos; - } - - public List<LinkedHashMap<String, String>> getEdgesDtos() { - return edgesDtos; - } - - public void setEdgesDtos(List<LinkedHashMap<String, String>> edgesDtos) { - this.edgesDtos = edgesDtos; - } - - public Map<String, String> getQueryOptionalProperties() { - return queryOptionalProperties; - } - - public void setQueryOptionalProperties( - Map<String, String> queryOptionalProperties) { - this.queryOptionalProperties = queryOptionalProperties; - } - - public Map<String, String> getQueryRequiredProperties() { - return queryRequiredProperties; - } - - public void setQueryRequiredProperties( - Map<String, String> queryRequiredProperties) { - this.queryRequiredProperties = queryRequiredProperties; - } - - public ExpectedResultsDto getExpectedResultsDtos() { - return expectedResultsDtos; - } - - public void setExpectedResultsDtos(ExpectedResultsDto expectedResultsDtos) { - this.expectedResultsDtos = expectedResultsDtos; - } - - + + @JsonProperty("stored-query") + private String storedQuery; + + @JsonProperty("vertices") + private List<LinkedHashMap<String, String>> verticesDtos; + + @JsonProperty("edges") + private List<LinkedHashMap<String, String>> edgesDtos; + + @JsonProperty("optional-properties") + private Map<String, String> queryOptionalProperties = Maps.newHashMap(); + + @JsonProperty("required-properties") + private Map<String, String> queryRequiredProperties = Maps.newHashMap(); + + @JsonProperty("expected-result") + private ExpectedResultsDto expectedResultsDtos; + + public String getStoredQuery() { + return storedQuery; + } + + public void setStoredQuery(String storedQuery) { + this.storedQuery = storedQuery; + } + + public List<LinkedHashMap<String, String>> getVerticesDtos() { + return verticesDtos; + } + + public void setVerticesDtos(List<LinkedHashMap<String, String>> verticesDtos) { + this.verticesDtos = verticesDtos; + } + + public List<LinkedHashMap<String, String>> getEdgesDtos() { + return edgesDtos; + } + + public void setEdgesDtos(List<LinkedHashMap<String, String>> edgesDtos) { + this.edgesDtos = edgesDtos; + } + + public Map<String, String> getQueryOptionalProperties() { + return queryOptionalProperties; + } + + public void setQueryOptionalProperties(Map<String, String> queryOptionalProperties) { + this.queryOptionalProperties = queryOptionalProperties; + } + + public Map<String, String> getQueryRequiredProperties() { + return queryRequiredProperties; + } + + public void setQueryRequiredProperties(Map<String, String> queryRequiredProperties) { + this.queryRequiredProperties = queryRequiredProperties; + } + + public ExpectedResultsDto getExpectedResultsDtos() { + return expectedResultsDtos; + } + + public void setExpectedResultsDtos(ExpectedResultsDto expectedResultsDtos) { + this.expectedResultsDtos = expectedResultsDtos; + } + } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/ExpectedResultsDto.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/ExpectedResultsDto.java index 9c4c3b0..cda93fb 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/ExpectedResultsDto.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/ExpectedResultsDto.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,20 +20,20 @@ package org.onap.aai.rest.search; -import java.util.List; - import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; + public class ExpectedResultsDto { - @JsonProperty("ids") - List<String> ids; + @JsonProperty("ids") + List<String> ids; + + public List<String> getIds() { + return ids; + } - public List<String> getIds() { - return ids; - } + public void setIds(List<String> ids) { + this.ids = ids; + } - public void setIds(List<String> ids) { - this.ids = ids; - } - } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/GenericQueryProcessor.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/GenericQueryProcessor.java index 8e62900..d63b910 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/GenericQueryProcessor.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/GenericQueryProcessor.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,9 +19,17 @@ */ package org.onap.aai.rest.search; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.att.eelf.configuration.EELFManager; + +import java.io.FileNotFoundException; +import java.net.URI; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; + import org.apache.tinkerpop.gremlin.process.traversal.P; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; @@ -39,422 +47,431 @@ import org.onap.aai.serialization.engines.QueryStyle; import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.serialization.queryformats.Format; import org.onap.aai.serialization.queryformats.SubGraphStyle; - -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import java.io.FileNotFoundException; -import java.net.URI; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public abstract class GenericQueryProcessor { - private static Logger LOGGER = LoggerFactory.getLogger(GenericQueryProcessor.class); - - protected final Optional<URI> uri; - protected final MultivaluedMap<String, String> queryParams; - protected final Optional<Collection<Vertex>> vertices; - protected static Pattern p = Pattern.compile("query/(.*+)"); - protected Optional<String> gremlin; - protected final TransactionalGraphEngine dbEngine; - protected GremlinServerSingleton gremlinServerSingleton; - protected GroovyQueryBuilder groovyQueryBuilder = new GroovyQueryBuilder(); - protected final boolean isGremlin; - protected Optional<DslQueryProcessor> dslQueryProcessorOptional; - - public Map<String, List<String>> getPropertiesMap() { - return propertiesList; - } - - public void setPropertiesMap(Map<String, List<String>> propertiesMap) { - this.propertiesList = propertiesMap; - } - - private Map<String, List<String>> propertiesList; - /* dsl parameters to store dsl query and to check - - * if this is a DSL request - */ - protected Optional<String> dsl; - protected final boolean isDsl ; - protected boolean isHistory; - protected GraphTraversalSource traversalSource; - protected QueryStyle style; - protected QueryVersion dslApiVersion; - protected Format format; - - protected GenericQueryProcessor(Builder builder) { - this.uri = builder.getUri(); - this.dbEngine = builder.getDbEngine(); - this.vertices = builder.getVertices(); - this.gremlin = builder.getGremlin(); - this.isGremlin = builder.isGremlin(); - this.dsl = builder.getDsl(); - this.isDsl = builder.isDsl(); - this.gremlinServerSingleton = builder.getGremlinServerSingleton(); - this.dslQueryProcessorOptional = builder.getDslQueryProcessor(); - this.dslApiVersion = builder.getDslApiVersion(); - - if (uri.isPresent()) { - queryParams = URITools.getQueryMap(uri.get()); - } else if (builder.getUriParams() != null) { - queryParams = builder.getUriParams(); - } else { - queryParams = new MultivaluedHashMap<>(); - } - this.traversalSource = builder.getTraversalSource(); - this.style = builder.getStyle(); - this.isHistory = builder.isHistory(); - this.format = builder.getFormat(); - } - - protected abstract GraphTraversal<?,?> runQuery(String query, Map<String, Object> params, GraphTraversalSource traversalSource); - - protected List<Object> processSubGraph(SubGraphStyle style, GraphTraversal<?,?> g) { - final List<Object> resultVertices = new Vector<>(); - g.store("y"); - - if (SubGraphStyle.prune.equals(style) || SubGraphStyle.star.equals(style)) { - g.barrier().bothE(); - if (SubGraphStyle.prune.equals(style)) { - g.where(__.otherV().where(P.within("y"))); - } - g.dedup().subgraph("subGraph").cap("subGraph").map(x -> (Graph)x.get()).next().traversal().V().forEachRemaining(x -> { - resultVertices.add(x); - }); - } else { - resultVertices.addAll(g.toList()); - } - return resultVertices; - } - - public List<Object> execute(SubGraphStyle style) throws FileNotFoundException, AAIException { - final List<Object> resultVertices; - - Pair<String, Map<String, Object>> tuple = this.createQuery(); - String query = tuple.getValue0(); - if (queryParams.containsKey("as-tree")) { - if (queryParams.getFirst("as-tree").equalsIgnoreCase("true")) { - if (this.isDsl) { // If dsl query and as-tree parameter is true, remove "end" concatenation and append tree. - query = removeDslQueryEnd(query); - } - query = query.concat(".tree()"); // Otherwise, normal gremlin query will just append tree - } - } - Map<String, Object> params = tuple.getValue1(); - - if (query.equals("") && (vertices.isPresent() && vertices.get().isEmpty())) { - //nothing to do, just exit - return new ArrayList<>(); - } - GraphTraversal<?,?> g = this.runQuery(query, params, traversalSource); - - resultVertices = this.processSubGraph(style, g); - - return resultVertices; - } - - private String removeDslQueryEnd(String query) { - String end = ".cap('x').unfold().dedup()"; - if (query.length() <= end.length()) { - return query; - } - if (query.contains(end)) { - int startIndex = query.length() - end.length(); - for (int i = 0; startIndex - i >= 0; i++) { // remove tailing instance - startIndex = query.length() - end.length() - i; - int lastIndex = query.length() - i; - if (query.substring(startIndex, lastIndex).equals(end)) { - query = query.substring(0, startIndex) + query.substring(lastIndex); - break; - } - } - } - return query; - } - - protected Pair<String, Map<String, Object>> createQuery() throws AAIException { - Map<String, Object> params = new HashMap<>(); - String query = ""; - if (this.isGremlin) { - query = gremlin.get(); - - }else if (this.isDsl) { - String dslUserQuery = dsl.get(); - if(dslQueryProcessorOptional.isPresent()){ - Map<String, Object>resultMap = dslQueryProcessorOptional.get().parseAaiQuery(dslApiVersion, dslUserQuery); - String dslQuery = resultMap.get("query").toString(); - Object propMap = resultMap.get("propertiesMap"); - if (propMap instanceof Map) { - Map<String, List<String>> newPropMap = new HashMap<String, List<String>>(); - newPropMap = (Map<String, List<String>>)propMap; - setPropertiesMap(newPropMap); - } - query = groovyQueryBuilder.executeTraversal(dbEngine, dslQuery, params, style, traversalSource); - String startPrefix = "g.V()"; - query = startPrefix + query; - } - LOGGER.debug("Converted to gremlin query\n {}", query); - }else { - Matcher m = p.matcher(uri.get().getPath()); - String queryName = ""; - List<String> optionalParameters = Collections.emptyList(); - if (m.find()) { - queryName = m.group(1); - CustomQueryConfig queryConfig = gremlinServerSingleton.getCustomQueryConfig(queryName); - if ( queryConfig != null ) { - query = queryConfig.getQuery(); - optionalParameters = queryConfig.getQueryOptionalProperties(); - } - } - - for (String key : queryParams.keySet()) { - params.put(key, queryParams.getFirst(key)); - if ( optionalParameters.contains(key) ){ - optionalParameters.remove(key); - } - } - - if (!optionalParameters.isEmpty()){ - MissingOptionalParameter missingParameter = MissingOptionalParameter.getInstance(); - for ( String key : optionalParameters ) { - params.put(key, missingParameter); - } - } - - if (vertices.isPresent() && !vertices.get().isEmpty()) { - - // Get the vertices and convert them into object array - // The reason for this was .V() takes in an array of objects - // not a list of objects so that needs to be converted + private static Logger LOGGER = LoggerFactory.getLogger(GenericQueryProcessor.class); + + protected final Optional<URI> uri; + protected final MultivaluedMap<String, String> queryParams; + protected final Optional<Collection<Vertex>> vertices; + protected static Pattern p = Pattern.compile("query/(.*+)"); + protected Optional<String> gremlin; + protected final TransactionalGraphEngine dbEngine; + protected GremlinServerSingleton gremlinServerSingleton; + protected GroovyQueryBuilder groovyQueryBuilder = new GroovyQueryBuilder(); + protected final boolean isGremlin; + protected Optional<DslQueryProcessor> dslQueryProcessorOptional; + + public Map<String, List<String>> getPropertiesMap() { + return propertiesList; + } + + public void setPropertiesMap(Map<String, List<String>> propertiesMap) { + this.propertiesList = propertiesMap; + } + + private Map<String, List<String>> propertiesList; + /* + * dsl parameters to store dsl query and to check + * + * if this is a DSL request + */ + protected Optional<String> dsl; + protected final boolean isDsl; + protected boolean isHistory; + protected GraphTraversalSource traversalSource; + protected QueryStyle style; + protected QueryVersion dslApiVersion; + protected Format format; + + protected GenericQueryProcessor(Builder builder) { + this.uri = builder.getUri(); + this.dbEngine = builder.getDbEngine(); + this.vertices = builder.getVertices(); + this.gremlin = builder.getGremlin(); + this.isGremlin = builder.isGremlin(); + this.dsl = builder.getDsl(); + this.isDsl = builder.isDsl(); + this.gremlinServerSingleton = builder.getGremlinServerSingleton(); + this.dslQueryProcessorOptional = builder.getDslQueryProcessor(); + this.dslApiVersion = builder.getDslApiVersion(); + + if (uri.isPresent()) { + queryParams = URITools.getQueryMap(uri.get()); + } else if (builder.getUriParams() != null) { + queryParams = builder.getUriParams(); + } else { + queryParams = new MultivaluedHashMap<>(); + } + this.traversalSource = builder.getTraversalSource(); + this.style = builder.getStyle(); + this.isHistory = builder.isHistory(); + this.format = builder.getFormat(); + } + + protected abstract GraphTraversal<?, ?> runQuery(String query, Map<String, Object> params, + GraphTraversalSource traversalSource); + + protected List<Object> processSubGraph(SubGraphStyle style, GraphTraversal<?, ?> g) { + final List<Object> resultVertices = new Vector<>(); + g.store("y"); + + if (SubGraphStyle.prune.equals(style) || SubGraphStyle.star.equals(style)) { + g.barrier().bothE(); + if (SubGraphStyle.prune.equals(style)) { + g.where(__.otherV().where(P.within("y"))); + } + g.dedup().subgraph("subGraph").cap("subGraph").map(x -> (Graph) x.get()).next() + .traversal().V().forEachRemaining(x -> { + resultVertices.add(x); + }); + } else { + resultVertices.addAll(g.toList()); + } + return resultVertices; + } + + public List<Object> execute(SubGraphStyle style) throws FileNotFoundException, AAIException { + final List<Object> resultVertices; + + Pair<String, Map<String, Object>> tuple = this.createQuery(); + String query = tuple.getValue0(); + if (queryParams.containsKey("as-tree")) { + if (queryParams.getFirst("as-tree").equalsIgnoreCase("true")) { + if (this.isDsl) { // If dsl query and as-tree parameter is true, remove "end" + // concatenation and append tree. + query = removeDslQueryEnd(query); + } + query = query.concat(".tree()"); // Otherwise, normal gremlin query will just append + // tree + } + } + Map<String, Object> params = tuple.getValue1(); + + if (query.equals("") && (vertices.isPresent() && vertices.get().isEmpty())) { + // nothing to do, just exit + return new ArrayList<>(); + } + GraphTraversal<?, ?> g = this.runQuery(query, params, traversalSource); + + resultVertices = this.processSubGraph(style, g); + + return resultVertices; + } + + private String removeDslQueryEnd(String query) { + String end = ".cap('x').unfold().dedup()"; + if (query.length() <= end.length()) { + return query; + } + if (query.contains(end)) { + int startIndex = query.length() - end.length(); + for (int i = 0; startIndex - i >= 0; i++) { // remove tailing instance + startIndex = query.length() - end.length() - i; + int lastIndex = query.length() - i; + if (query.substring(startIndex, lastIndex).equals(end)) { + query = query.substring(0, startIndex) + query.substring(lastIndex); + break; + } + } + } + return query; + } + + protected Pair<String, Map<String, Object>> createQuery() throws AAIException { + Map<String, Object> params = new HashMap<>(); + String query = ""; + if (this.isGremlin) { + query = gremlin.get(); + + } else if (this.isDsl) { + String dslUserQuery = dsl.get(); + if (dslQueryProcessorOptional.isPresent()) { + Map<String, Object> resultMap = + dslQueryProcessorOptional.get().parseAaiQuery(dslApiVersion, dslUserQuery); + String dslQuery = resultMap.get("query").toString(); + Object propMap = resultMap.get("propertiesMap"); + if (propMap instanceof Map) { + Map<String, List<String>> newPropMap = new HashMap<String, List<String>>(); + newPropMap = (Map<String, List<String>>) propMap; + setPropertiesMap(newPropMap); + } + query = groovyQueryBuilder.executeTraversal(dbEngine, dslQuery, params, style, + traversalSource); + String startPrefix = "g.V()"; + query = startPrefix + query; + } + LOGGER.debug("Converted to gremlin query\n {}", query); + } else { + Matcher m = p.matcher(uri.get().getPath()); + String queryName = ""; + List<String> optionalParameters = Collections.emptyList(); + if (m.find()) { + queryName = m.group(1); + CustomQueryConfig queryConfig = + gremlinServerSingleton.getCustomQueryConfig(queryName); + if (queryConfig != null) { + query = queryConfig.getQuery(); + optionalParameters = queryConfig.getQueryOptionalProperties(); + } + } + + for (String key : queryParams.keySet()) { + params.put(key, queryParams.getFirst(key)); + if (optionalParameters.contains(key)) { + optionalParameters.remove(key); + } + } + + if (!optionalParameters.isEmpty()) { + MissingOptionalParameter missingParameter = MissingOptionalParameter.getInstance(); + for (String key : optionalParameters) { + params.put(key, missingParameter); + } + } + + if (vertices.isPresent() && !vertices.get().isEmpty()) { + + // Get the vertices and convert them into object array + // The reason for this was .V() takes in an array of objects + // not a list of objects so that needs to be converted // Also instead of statically creating the list which is a bad practice - // We are binding the array dynamically to the groovy processor correctly - // This will fix the memory issue of the method size too big - // as statically creating a list string and passing is not appropriate + // We are binding the array dynamically to the groovy processor correctly + // This will fix the memory issue of the method size too big + // as statically creating a list string and passing is not appropriate - Object [] startVertices = vertices.get().toArray(); + Object[] startVertices = vertices.get().toArray(); - params.put("startVertexes", startVertices); + params.put("startVertexes", startVertices); - if (query == null) { - query = ""; - } else { - query = groovyQueryBuilder.executeTraversal(dbEngine, query, params, style, traversalSource); - } + if (query == null) { + query = ""; + } else { + query = groovyQueryBuilder.executeTraversal(dbEngine, query, params, style, + traversalSource); + } - String startPrefix = "g.V(startVertexes)"; + String startPrefix = "g.V(startVertexes)"; - if (!"".equals(query)) { - query = startPrefix + query; - } else { - query = startPrefix; - } + if (!"".equals(query)) { + query = startPrefix + query; + } else { + query = startPrefix; + } - // Getting all the vertices and logging them is not reasonable - // As it could have performance impacts so doing a check here - // to see if the logger is trace so only print the start vertexes - // otherwise we would like to see what the gremlin query that was converted + // Getting all the vertices and logging them is not reasonable + // As it could have performance impacts so doing a check here + // to see if the logger is trace so only print the start vertexes + // otherwise we would like to see what the gremlin query that was converted // So to check if the output matches the desired behavior - // This way if to enable deeper logging, just changing logback would work - if(LOGGER.isTraceEnabled()){ - String readQuery = query.replaceAll("startVertexes", - Arrays.toString(startVertices).replaceAll("[^0-9,]", "")); - LOGGER.trace("Converted to gremlin query including the start vertices \n {}", readQuery); - } - else if(LOGGER.isDebugEnabled()){ - LOGGER.debug("Converted to gremlin query without the start vertices \n {}", query); - } - } else { - throw new AAIException("AAI_6148"); - } - - } - - return new Pair<>(query, params); - } - - public static class Builder { - - private final TransactionalGraphEngine dbEngine; - private Optional<URI> uri = Optional.empty(); - private Optional<String> gremlin = Optional.empty(); - private boolean isGremlin = false; - private Optional<Collection<Vertex>> vertices = Optional.empty(); - private QueryProcessorType processorType = QueryProcessorType.GREMLIN_SERVER; - - private Optional<String> dsl = Optional.empty(); - private boolean isDsl = false; - private DslQueryProcessor dslQueryProcessor; - private GremlinServerSingleton gremlinServerSingleton; - private Optional<String> nodeType = Optional.empty(); - private boolean isNodeTypeQuery = false; - protected MultivaluedMap<String, String> uriParams; - protected GraphTraversalSource traversalSource; - protected boolean isHistory = false; - protected QueryVersion dslApiVersion; - protected Format format; - - - protected QueryStyle style = QueryStyle.GREMLIN_TRAVERSAL; - - public Builder(TransactionalGraphEngine dbEngine, GremlinServerSingleton gremlinServerSingleton) { - this.dbEngine = dbEngine; - this.gremlinServerSingleton = gremlinServerSingleton; - } - - public Builder queryFrom(URI uri) { - this.uri = Optional.of(uri); - this.isGremlin = false; - return this; - } - - public Builder startFrom(Collection<Vertex> vertices) { - this.vertices = Optional.of(vertices); - return this; - } - - public Builder queryFrom( String query, String queryType) { - - if(queryType.equals("gremlin")){ - this.gremlin = Optional.of(query); - this.isGremlin = true; - } - if(queryType.equals("dsl")){ - this.dsl = Optional.of(query); - this.isDsl = true; - } - if(queryType.equals("nodeQuery")){ - this.nodeType = Optional.of(query); - this.isNodeTypeQuery = true; - } - return this; - } - - public Builder uriParams(MultivaluedMap<String, String> uriParams) { - this.uriParams = uriParams; - return this; - } - - public Builder processWith(QueryProcessorType type) { - this.processorType = type; - return this; - } - - public Builder format(Format format) { - this.format = format; - return this; - } - - public Builder traversalSource(boolean isHistory, GraphTraversalSource source) { - this.traversalSource = source; - this.isHistory = isHistory; - if(this.isHistory){ - this.style = QueryStyle.HISTORY_GREMLIN_TRAVERSAL; - } - - return this; - } - - public Builder queryProcessor(DslQueryProcessor dslQueryProcessor){ - this.dslQueryProcessor = dslQueryProcessor; - return this; - } - - public Builder version(QueryVersion version){ - this.dslApiVersion = version; - return this; - } - - public Optional<DslQueryProcessor> getDslQueryProcessor(){ - return Optional.ofNullable(this.dslQueryProcessor); - } - public TransactionalGraphEngine getDbEngine() { - return dbEngine; - } - - public Optional<URI> getUri() { - return uri; - } - - public MultivaluedMap<String, String> getUriParams() { return uriParams; } - - public Optional<String> getGremlin() { - return gremlin; - } - - public boolean isGremlin() { - return isGremlin; - } - - public Optional<String> getDsl() { - return dsl; - } - - public boolean isDsl() { - return isDsl; - } - - public Optional<Collection<Vertex>> getVertices() { - return vertices; - } - - public QueryProcessorType getProcessorType() { - return processorType; - } - - public GremlinServerSingleton getGremlinServerSingleton(){ - return gremlinServerSingleton; - } - - public Optional<String> getNodeType() { - return nodeType; - } - - public boolean isNodeTypeQuery() { - return isNodeTypeQuery; - } - - public GenericQueryProcessor create() { - if (isNodeTypeQuery()) { - return new NodeQueryProcessor(this); - } - return new GroovyShellImpl(this); - } - - public GraphTraversalSource getTraversalSource() { - return traversalSource; - } - - public void setTraversalSource(GraphTraversalSource traversalSource) { - this.traversalSource = traversalSource; - } - - public boolean isHistory() { - return isHistory; - } - - public void setHistory(boolean history) { - isHistory = history; - } - - public QueryStyle getStyle() { - return style; - } - - public void setStyle(QueryStyle style) { - this.style = style; - } - - public QueryVersion getDslApiVersion() { - return dslApiVersion; - } - - public void setDslApiVersion(QueryVersion dslApiVersion) { - this.dslApiVersion = dslApiVersion; - } - - public Format getFormat(){ return this.format; } - - } + // This way if to enable deeper logging, just changing logback would work + if (LOGGER.isTraceEnabled()) { + String readQuery = query.replaceAll("startVertexes", + Arrays.toString(startVertices).replaceAll("[^0-9,]", "")); + LOGGER.trace("Converted to gremlin query including the start vertices \n {}", + readQuery); + } else if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Converted to gremlin query without the start vertices \n {}", + query); + } + } else { + throw new AAIException("AAI_6148"); + } + + } + + return new Pair<>(query, params); + } + + public static class Builder { + + private final TransactionalGraphEngine dbEngine; + private Optional<URI> uri = Optional.empty(); + private Optional<String> gremlin = Optional.empty(); + private boolean isGremlin = false; + private Optional<Collection<Vertex>> vertices = Optional.empty(); + private QueryProcessorType processorType = QueryProcessorType.GREMLIN_SERVER; + + private Optional<String> dsl = Optional.empty(); + private boolean isDsl = false; + private DslQueryProcessor dslQueryProcessor; + private GremlinServerSingleton gremlinServerSingleton; + private Optional<String> nodeType = Optional.empty(); + private boolean isNodeTypeQuery = false; + protected MultivaluedMap<String, String> uriParams; + protected GraphTraversalSource traversalSource; + protected boolean isHistory = false; + protected QueryVersion dslApiVersion; + protected Format format; + + protected QueryStyle style = QueryStyle.GREMLIN_TRAVERSAL; + + public Builder(TransactionalGraphEngine dbEngine, + GremlinServerSingleton gremlinServerSingleton) { + this.dbEngine = dbEngine; + this.gremlinServerSingleton = gremlinServerSingleton; + } + + public Builder queryFrom(URI uri) { + this.uri = Optional.of(uri); + this.isGremlin = false; + return this; + } + + public Builder startFrom(Collection<Vertex> vertices) { + this.vertices = Optional.of(vertices); + return this; + } + + public Builder queryFrom(String query, String queryType) { + + if (queryType.equals("gremlin")) { + this.gremlin = Optional.of(query); + this.isGremlin = true; + } + if (queryType.equals("dsl")) { + this.dsl = Optional.of(query); + this.isDsl = true; + } + if (queryType.equals("nodeQuery")) { + this.nodeType = Optional.of(query); + this.isNodeTypeQuery = true; + } + return this; + } + + public Builder uriParams(MultivaluedMap<String, String> uriParams) { + this.uriParams = uriParams; + return this; + } + + public Builder processWith(QueryProcessorType type) { + this.processorType = type; + return this; + } + + public Builder format(Format format) { + this.format = format; + return this; + } + + public Builder traversalSource(boolean isHistory, GraphTraversalSource source) { + this.traversalSource = source; + this.isHistory = isHistory; + if (this.isHistory) { + this.style = QueryStyle.HISTORY_GREMLIN_TRAVERSAL; + } + + return this; + } + + public Builder queryProcessor(DslQueryProcessor dslQueryProcessor) { + this.dslQueryProcessor = dslQueryProcessor; + return this; + } + + public Builder version(QueryVersion version) { + this.dslApiVersion = version; + return this; + } + + public Optional<DslQueryProcessor> getDslQueryProcessor() { + return Optional.ofNullable(this.dslQueryProcessor); + } + + public TransactionalGraphEngine getDbEngine() { + return dbEngine; + } + + public Optional<URI> getUri() { + return uri; + } + + public MultivaluedMap<String, String> getUriParams() { + return uriParams; + } + + public Optional<String> getGremlin() { + return gremlin; + } + + public boolean isGremlin() { + return isGremlin; + } + + public Optional<String> getDsl() { + return dsl; + } + + public boolean isDsl() { + return isDsl; + } + + public Optional<Collection<Vertex>> getVertices() { + return vertices; + } + + public QueryProcessorType getProcessorType() { + return processorType; + } + + public GremlinServerSingleton getGremlinServerSingleton() { + return gremlinServerSingleton; + } + + public Optional<String> getNodeType() { + return nodeType; + } + + public boolean isNodeTypeQuery() { + return isNodeTypeQuery; + } + + public GenericQueryProcessor create() { + if (isNodeTypeQuery()) { + return new NodeQueryProcessor(this); + } + return new GroovyShellImpl(this); + } + + public GraphTraversalSource getTraversalSource() { + return traversalSource; + } + + public void setTraversalSource(GraphTraversalSource traversalSource) { + this.traversalSource = traversalSource; + } + + public boolean isHistory() { + return isHistory; + } + + public void setHistory(boolean history) { + isHistory = history; + } + + public QueryStyle getStyle() { + return style; + } + + public void setStyle(QueryStyle style) { + this.style = style; + } + + public QueryVersion getDslApiVersion() { + return dslApiVersion; + } + + public void setDslApiVersion(QueryVersion dslApiVersion) { + this.dslApiVersion = dslApiVersion; + } + + public Format getFormat() { + return this.format; + } + + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/GetCustomQueryConfig.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/GetCustomQueryConfig.java index 76ecd20..98eb551 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/GetCustomQueryConfig.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/GetCustomQueryConfig.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,11 +19,6 @@ */ package org.onap.aai.rest.search; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; - - import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; @@ -31,108 +26,108 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + public class GetCustomQueryConfig { - private JsonArray storedQueries = null; - private CustomQueryConfig customQueryConfig; - - - private static final String QUERY_CONFIG = "query"; - private static final String REQUIRED_CONFIG = "required-properties"; - private static final String OPTIONAL_CONFIG = "optional-properties"; - private static final String STORED_QUERIES_CONFIG = "stored-queries"; - private static final String STORED_QUERY_CONFIG = "stored-query"; - - public GetCustomQueryConfig(String customQueryJson ) { - init(customQueryJson); - } - - private void init( String customQueryJson) { - JsonParser parser = new JsonParser(); - JsonObject queriesObject = parser.parse(customQueryJson).getAsJsonObject(); - if (queriesObject.has(STORED_QUERIES_CONFIG)) { - - storedQueries = queriesObject.getAsJsonArray(STORED_QUERIES_CONFIG); - } - } - - private List<String> toStringList(JsonArray array) { - Gson converter = new Gson(); - Type listType = new TypeToken<List<String>>() {}.getType(); - return converter.fromJson(array, listType); - } - - private List<String> getPropertyList(JsonObject configObject, String config ) { - JsonElement subqueryConfig; - JsonArray props; - - if ( configObject.has(config)) { - subqueryConfig = configObject.get(config); - if ( subqueryConfig != null && !subqueryConfig.isJsonNull() ) { - props = subqueryConfig.getAsJsonArray(); - if ( props != null ) { - return toStringList(props); - } - } - } - return toStringList(null); - } - - private void getStoredQueryBlock( JsonObject configObject, String config ) { - if ( !configObject.has(config)) { - customQueryConfig.setQueryRequiredProperties( new ArrayList<>() ); - customQueryConfig.setQueryOptionalProperties( new ArrayList<>() ); - return; - } - - JsonElement queryConfig; - JsonObject subObject; - List<String> propertyList; - - queryConfig = configObject.get(config); - subObject = queryConfig.getAsJsonObject(); - propertyList = getPropertyList(subObject, REQUIRED_CONFIG); - if ( propertyList == null ) { - propertyList = new ArrayList<>(); - } - customQueryConfig.setQueryRequiredProperties( propertyList ); - propertyList = getPropertyList(subObject, OPTIONAL_CONFIG); - if ( propertyList == null ) { - propertyList = new ArrayList<>(); - } - customQueryConfig.setQueryOptionalProperties( propertyList ); - - } - - - public CustomQueryConfig getStoredQuery(String queryName ) { - - customQueryConfig = null; - JsonObject configObject; - JsonElement query; - JsonElement queryConfig; - - for (JsonElement storedQuery : storedQueries) { - if (storedQuery.isJsonObject()) { - JsonObject queryObject = storedQuery.getAsJsonObject(); - query = queryObject.get(queryName); - if ( query != null ) { - customQueryConfig = new CustomQueryConfig(); - configObject = query.getAsJsonObject(); - getStoredQueryBlock(configObject, QUERY_CONFIG); - if ( configObject.has(STORED_QUERY_CONFIG)) { - queryConfig = configObject.get(STORED_QUERY_CONFIG); - customQueryConfig.setQuery(queryConfig.getAsString()); - } - break; - } - } - } - - return customQueryConfig; - - } + private JsonArray storedQueries = null; + private CustomQueryConfig customQueryConfig; + + private static final String QUERY_CONFIG = "query"; + private static final String REQUIRED_CONFIG = "required-properties"; + private static final String OPTIONAL_CONFIG = "optional-properties"; + private static final String STORED_QUERIES_CONFIG = "stored-queries"; + private static final String STORED_QUERY_CONFIG = "stored-query"; + + public GetCustomQueryConfig(String customQueryJson) { + init(customQueryJson); + } + + private void init(String customQueryJson) { + JsonParser parser = new JsonParser(); + JsonObject queriesObject = parser.parse(customQueryJson).getAsJsonObject(); + if (queriesObject.has(STORED_QUERIES_CONFIG)) { + + storedQueries = queriesObject.getAsJsonArray(STORED_QUERIES_CONFIG); + } + } + + private List<String> toStringList(JsonArray array) { + Gson converter = new Gson(); + Type listType = new TypeToken<List<String>>() {}.getType(); + return converter.fromJson(array, listType); + } + + private List<String> getPropertyList(JsonObject configObject, String config) { + JsonElement subqueryConfig; + JsonArray props; + + if (configObject.has(config)) { + subqueryConfig = configObject.get(config); + if (subqueryConfig != null && !subqueryConfig.isJsonNull()) { + props = subqueryConfig.getAsJsonArray(); + if (props != null) { + return toStringList(props); + } + } + } + return toStringList(null); + } + + private void getStoredQueryBlock(JsonObject configObject, String config) { + if (!configObject.has(config)) { + customQueryConfig.setQueryRequiredProperties(new ArrayList<>()); + customQueryConfig.setQueryOptionalProperties(new ArrayList<>()); + return; + } + + JsonElement queryConfig; + JsonObject subObject; + List<String> propertyList; + + queryConfig = configObject.get(config); + subObject = queryConfig.getAsJsonObject(); + propertyList = getPropertyList(subObject, REQUIRED_CONFIG); + if (propertyList == null) { + propertyList = new ArrayList<>(); + } + customQueryConfig.setQueryRequiredProperties(propertyList); + propertyList = getPropertyList(subObject, OPTIONAL_CONFIG); + if (propertyList == null) { + propertyList = new ArrayList<>(); + } + customQueryConfig.setQueryOptionalProperties(propertyList); + + } + + public CustomQueryConfig getStoredQuery(String queryName) { + + customQueryConfig = null; + JsonObject configObject; + JsonElement query; + JsonElement queryConfig; + + for (JsonElement storedQuery : storedQueries) { + if (storedQuery.isJsonObject()) { + JsonObject queryObject = storedQuery.getAsJsonObject(); + query = queryObject.get(queryName); + if (query != null) { + customQueryConfig = new CustomQueryConfig(); + configObject = query.getAsJsonObject(); + getStoredQueryBlock(configObject, QUERY_CONFIG); + if (configObject.has(STORED_QUERY_CONFIG)) { + queryConfig = configObject.get(STORED_QUERY_CONFIG); + customQueryConfig.setQuery(queryConfig.getAsString()); + } + break; + } + } + } + return customQueryConfig; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java index e30f13f..a3bb074 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,16 +19,8 @@ */ package org.onap.aai.rest.search; -import org.onap.aai.logging.LogFormatTools; -import org.onap.aai.util.AAIConstants; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.att.eelf.configuration.EELFManager; -import org.apache.tinkerpop.gremlin.driver.Cluster; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import javax.annotation.PostConstruct; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -41,6 +33,16 @@ import java.util.Properties; import java.util.Timer; import java.util.TimerTask; +import javax.annotation.PostConstruct; + +import org.apache.tinkerpop.gremlin.driver.Cluster; +import org.onap.aai.logging.LogFormatTools; +import org.onap.aai.util.AAIConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; + public class GremlinServerSingleton { private static Logger logger = LoggerFactory.getLogger(GremlinServerSingleton.class); @@ -48,8 +50,8 @@ public class GremlinServerSingleton { private boolean timerSet; private Timer timer; - CQConfig customQueryInfo; + /** * Initializes the gremlin server singleton * Loads the configuration of the gremlin server and creates a cluster @@ -60,29 +62,29 @@ public class GremlinServerSingleton { * */ @Autowired - public GremlinServerSingleton(CQConfig customQueryInfo){ - this.customQueryInfo = customQueryInfo; + public GremlinServerSingleton(CQConfig customQueryInfo) { + this.customQueryInfo = customQueryInfo; } /** * Gets the query using CustomQueryConfig + * * @param key * @return */ - public String getStoredQueryFromConfig(String key){ + public String getStoredQueryFromConfig(String key) { GetCustomQueryConfig queryConfig = customQueryInfo.getCustomQueryConfig(); - CustomQueryConfig customQueryConfig = queryConfig.getStoredQuery(key); - if ( customQueryConfig == null ) { - return null; - } - return customQueryConfig.getQuery(); + CustomQueryConfig customQueryConfig = queryConfig.getStoredQuery(key); + if (customQueryConfig == null) { + return null; + } + return customQueryConfig.getQuery(); } - + public CustomQueryConfig getCustomQueryConfig(String key) { GetCustomQueryConfig queryConfig = customQueryInfo.getCustomQueryConfig(); - return queryConfig.getStoredQuery(key); + return queryConfig.getStoredQuery(key); } - } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/GroovyShellImpl.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/GroovyShellImpl.java index 340c525..126d754 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/GroovyShellImpl.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/GroovyShellImpl.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -21,36 +21,35 @@ package org.onap.aai.rest.search; import java.util.Map; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; +import javax.ws.rs.core.MultivaluedHashMap; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.onap.aai.aailog.logs.AaiDBTraversalMetricLog; import org.onap.aai.restcore.search.GremlinGroovyShell; import org.onap.aai.restcore.util.URITools; import org.onap.aai.util.AAIConstants; -import javax.ws.rs.core.MultivaluedHashMap; - public class GroovyShellImpl extends GenericQueryProcessor { - protected GroovyShellImpl(Builder builder) { - super(builder); - } - - @Override - protected GraphTraversal<?,?> runQuery(String query, Map<String, Object> params, GraphTraversalSource traversalSource) { + protected GroovyShellImpl(Builder builder) { + super(builder); + } - AaiDBTraversalMetricLog metricLog = new AaiDBTraversalMetricLog (AAIConstants.AAI_TRAVERSAL_MS); - metricLog.pre(uri); + @Override + protected GraphTraversal<?, ?> runQuery(String query, Map<String, Object> params, + GraphTraversalSource traversalSource) { - params.put("g", traversalSource); - GremlinGroovyShell shell = new GremlinGroovyShell(); - GraphTraversal<?,?> graphTraversal = shell.executeTraversal(query, params); + AaiDBTraversalMetricLog metricLog = + new AaiDBTraversalMetricLog(AAIConstants.AAI_TRAVERSAL_MS); + metricLog.pre(uri); - metricLog.post(); - return graphTraversal; - } - -} + params.put("g", traversalSource); + GremlinGroovyShell shell = new GremlinGroovyShell(); + GraphTraversal<?, ?> graphTraversal = shell.executeTraversal(query, params); + metricLog.post(); + return graphTraversal; + } +} diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/LocalCQConfig.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/LocalCQConfig.java index 42d88af..ebf49d7 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/LocalCQConfig.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/LocalCQConfig.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,16 +19,8 @@ */ package org.onap.aai.rest.search; -import org.onap.aai.exceptions.AAIException; -import org.onap.aai.logging.ErrorLogHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.att.eelf.configuration.EELFManager; -import org.onap.aai.logging.LogFormatTools; -import org.onap.aai.util.AAIConstants; -import org.springframework.beans.factory.annotation.Value; -import javax.annotation.PostConstruct; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -38,6 +30,16 @@ import java.util.Date; import java.util.Timer; import java.util.TimerTask; +import javax.annotation.PostConstruct; + +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.logging.ErrorLogHelper; +import org.onap.aai.logging.LogFormatTools; +import org.onap.aai.util.AAIConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; + public class LocalCQConfig extends CQConfig { private static Logger logger = LoggerFactory.getLogger(LocalCQConfig.class); @@ -51,7 +53,8 @@ public class LocalCQConfig extends CQConfig { public void init() { try { - String filepath = storedQueriesLocation + AAIConstants.AAI_FILESEP + "stored-queries.json"; + String filepath = + storedQueriesLocation + AAIConstants.AAI_FILESEP + "stored-queries.json"; logger.info("Using the Local stored queries"); Path path = Paths.get(filepath); String customQueryConfigJson = new String(Files.readAllBytes(path)); @@ -60,7 +63,8 @@ public class LocalCQConfig extends CQConfig { } catch (IOException e) { AAIException aaiException = new AAIException("AAI_4002", e); ErrorLogHelper.logException(aaiException); - //logger.error("Error occurred during the processing of query json file: " + LogFormatTools.getStackTop(e)); + // logger.error("Error occurred during the processing of query json file: " + + // LogFormatTools.getStackTop(e)); } TimerTask task = new FileWatcher(new File(storedQueriesLocation)) { @@ -75,7 +79,8 @@ public class LocalCQConfig extends CQConfig { } catch (IOException e) { AAIException aaiException = new AAIException("AAI_4002", e); ErrorLogHelper.logException(aaiException); - //logger.error("Error occurred during the processing of query json file: " + LogFormatTools.getStackTop(e)); + // logger.error("Error occurred during the processing of query json file: " + + // LogFormatTools.getStackTop(e)); } } }; diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/ModelAndNamedQueryRestProvider.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/ModelAndNamedQueryRestProvider.java index 821cb09..5c8b055 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/ModelAndNamedQueryRestProvider.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/ModelAndNamedQueryRestProvider.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,12 +19,23 @@ */ package org.onap.aai.rest.search; +import java.net.URI; +import java.util.ArrayList; +import java.util.Optional; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.*; +import javax.ws.rs.core.Response.Status; + import org.onap.aai.aailog.logs.AaiDBTraversalMetricLog; import org.onap.aai.concurrent.AaiCallable; import org.onap.aai.dbgraphmap.SearchGraph; import org.onap.aai.exceptions.AAIException; import org.onap.aai.logging.ErrorLogHelper; - import org.onap.aai.rest.util.AAIExtensionMap; import org.onap.aai.restcore.HttpMethod; import org.onap.aai.restcore.RESTAPI; @@ -35,17 +46,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.*; -import javax.ws.rs.core.Response.Status; -import java.net.URI; -import java.util.ArrayList; -import java.util.Optional; - /** * Implements the search subdomain in the REST API. All API calls must include * X-FromAppId and X-TransactionId in the header. @@ -54,213 +54,199 @@ import java.util.Optional; @Path("/search") public class ModelAndNamedQueryRestProvider extends RESTAPI { - private static final Logger LOGGER = LoggerFactory.getLogger(ModelAndNamedQueryRestProvider.class); - - public static final String NAMED_QUERY = "/named-query"; - - public static final String MODEL_QUERY = "/model"; - - - private SearchGraph searchGraph; - - private SchemaVersions schemaVersions; - - @Autowired - public ModelAndNamedQueryRestProvider(SearchGraph searchGraph, SchemaVersions schemaVersions){ - this.searchGraph = searchGraph; - this.schemaVersions = schemaVersions; - } - - /** - * Gets the named query response. - * - * @param headers the headers - * @param req the req - * @param queryParameters the query parameters - * @return the named query response - */ - /* ---------------- Start Named Query --------------------- */ - @POST - @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - @Path(NAMED_QUERY) - public Response getNamedQueryResponse(@Context HttpHeaders headers, - @Context HttpServletRequest req, - String queryParameters, - @Context UriInfo info) { - return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, - TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, - TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, - headers, - info, - HttpMethod.GET, - new AaiCallable<Response>() { - @Override - public Response process() { - return processNamedQueryResponse(headers, req, queryParameters); - } - } - ); - } - - public Response processNamedQueryResponse(@Context HttpHeaders headers, - @Context HttpServletRequest req, - String queryParameters) { - AAIException ex = null; - Response response; - String fromAppId; - String transId; - - ArrayList<String> templateVars = new ArrayList<>(); - try { - fromAppId = getFromAppId(headers); - transId = getTransId(headers); - - AAIExtensionMap aaiExtMap = new AAIExtensionMap(); - aaiExtMap.setHttpHeaders(headers); - aaiExtMap.setServletRequest(req); - aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); - //only consider header value for search - - - AaiDBTraversalMetricLog metricLog = new AaiDBTraversalMetricLog (AAIConstants.AAI_TRAVERSAL_MS); - String uriString = req.getRequestURI(); - Optional<URI> o; - if (uriString != null) { - o = Optional.of(new URI(uriString)); - } - else { - o = Optional.empty(); - } - metricLog.pre(o); - - response = searchGraph.runNamedQuery(fromAppId, transId, queryParameters, aaiExtMap); - metricLog.post(); - - } catch (AAIException e) { - // send error response - ex = e; - templateVars.add("POST Search"); - templateVars.add("getNamedQueryResponse"); - response = Response - .status(e.getErrorObject().getHTTPResponseCode()) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) - .build(); - } catch (Exception e) { - // send error response - ex = new AAIException("AAI_4000", e); - templateVars.add("POST Search"); - templateVars.add("getNamedQueryResponse"); - response = Response - .status(Status.INTERNAL_SERVER_ERROR) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) - .build(); - } finally { - // log success or failure - if (ex != null) { - ErrorLogHelper.logException(ex); - } - } - return response; - } - - /** - * Gets the model query response. - * - * @param headers the headers - * @param req the req - * @param inboundPayload the inbound payload - * @param action the action - * @return the model query response - */ - /* ---------------- Start Named Query --------------------- */ - @POST - @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - @Path(MODEL_QUERY) - public Response getModelQueryResponse(@Context HttpHeaders headers, - @Context HttpServletRequest req, - String inboundPayload, - @QueryParam("action") String action, - @Context UriInfo info) { - return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, - TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, - TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, - headers, - info, - HttpMethod.GET, - new AaiCallable<Response>() { - @Override - public Response process() { - return processModelQueryResponse(headers, req, inboundPayload, action); - } - } - ); - } - - public Response processModelQueryResponse(@Context HttpHeaders headers, - @Context HttpServletRequest req, - String inboundPayload, - @QueryParam("action") String action) { - AAIException ex = null; - Response response; - String fromAppId; - String transId; - ArrayList<String> templateVars = new ArrayList<>(); - try { - fromAppId = getFromAppId(headers); - transId = getTransId(headers); - - AAIExtensionMap aaiExtMap = new AAIExtensionMap(); - aaiExtMap.setHttpHeaders(headers); - aaiExtMap.setServletRequest(req); - aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); - aaiExtMap.setFromAppId(fromAppId); - aaiExtMap.setTransId(transId); - - //only consider header value for search - - - AaiDBTraversalMetricLog metricLog = new AaiDBTraversalMetricLog (AAIConstants.AAI_TRAVERSAL_MS); - String uriString = req.getRequestURI(); - Optional<URI> o; - if (uriString != null) { - o = Optional.of(new URI(uriString)); - } - else { - o = Optional.empty(); - } - metricLog.pre(o); - if (action != null && action.equalsIgnoreCase("DELETE")) { - response = searchGraph.executeModelOperation(fromAppId, transId, inboundPayload, true, aaiExtMap); - } else { - response = searchGraph.executeModelOperation(fromAppId, transId, inboundPayload, false, aaiExtMap); - } - metricLog.post(); - - } catch (AAIException e) { - // send error response - ex = e; - templateVars.add("POST Search"); - templateVars.add("getModelQueryResponse"); - response = Response - .status(e.getErrorObject().getHTTPResponseCode()) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) - .build(); - } catch (Exception e) { - // send error response - ex = new AAIException("AAI_4000", e); - templateVars.add("POST Search"); - templateVars.add("getModelQueryResponse"); - response = Response - .status(Status.INTERNAL_SERVER_ERROR) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) - .build(); - } finally { - // log success or failure - if (ex != null) { - ErrorLogHelper.logException(ex); - } - } - return response; - } + private static final Logger LOGGER = + LoggerFactory.getLogger(ModelAndNamedQueryRestProvider.class); + + public static final String NAMED_QUERY = "/named-query"; + + public static final String MODEL_QUERY = "/model"; + + private SearchGraph searchGraph; + + private SchemaVersions schemaVersions; + + @Autowired + public ModelAndNamedQueryRestProvider(SearchGraph searchGraph, SchemaVersions schemaVersions) { + this.searchGraph = searchGraph; + this.schemaVersions = schemaVersions; + } + + /** + * Gets the named query response. + * + * @param headers the headers + * @param req the req + * @param queryParameters the query parameters + * @return the named query response + */ + /* ---------------- Start Named Query --------------------- */ + @POST + @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) + @Path(NAMED_QUERY) + public Response getNamedQueryResponse(@Context HttpHeaders headers, + @Context HttpServletRequest req, String queryParameters, @Context UriInfo info) { + return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET, + new AaiCallable<Response>() { + @Override + public Response process() { + return processNamedQueryResponse(headers, req, queryParameters); + } + }); + } + + public Response processNamedQueryResponse(@Context HttpHeaders headers, + @Context HttpServletRequest req, String queryParameters) { + AAIException ex = null; + Response response; + String fromAppId; + String transId; + + ArrayList<String> templateVars = new ArrayList<>(); + try { + fromAppId = getFromAppId(headers); + transId = getTransId(headers); + + AAIExtensionMap aaiExtMap = new AAIExtensionMap(); + aaiExtMap.setHttpHeaders(headers); + aaiExtMap.setServletRequest(req); + aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); + // only consider header value for search + + AaiDBTraversalMetricLog metricLog = + new AaiDBTraversalMetricLog(AAIConstants.AAI_TRAVERSAL_MS); + String uriString = req.getRequestURI(); + Optional<URI> o; + if (uriString != null) { + o = Optional.of(new URI(uriString)); + } else { + o = Optional.empty(); + } + metricLog.pre(o); + + response = searchGraph.runNamedQuery(fromAppId, transId, queryParameters, aaiExtMap); + metricLog.post(); + + } catch (AAIException e) { + // send error response + ex = e; + templateVars.add("POST Search"); + templateVars.add("getNamedQueryResponse"); + response = Response + .status(e.getErrorObject().getHTTPResponseCode()).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) + .build(); + } catch (Exception e) { + // send error response + ex = new AAIException("AAI_4000", e); + templateVars.add("POST Search"); + templateVars.add("getNamedQueryResponse"); + response = Response + .status(Status.INTERNAL_SERVER_ERROR).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) + .build(); + } finally { + // log success or failure + if (ex != null) { + ErrorLogHelper.logException(ex); + } + } + return response; + } + + /** + * Gets the model query response. + * + * @param headers the headers + * @param req the req + * @param inboundPayload the inbound payload + * @param action the action + * @return the model query response + */ + /* ---------------- Start Named Query --------------------- */ + @POST + @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) + @Path(MODEL_QUERY) + public Response getModelQueryResponse(@Context HttpHeaders headers, + @Context HttpServletRequest req, String inboundPayload, @QueryParam("action") String action, + @Context UriInfo info) { + return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET, + new AaiCallable<Response>() { + @Override + public Response process() { + return processModelQueryResponse(headers, req, inboundPayload, action); + } + }); + } + + public Response processModelQueryResponse(@Context HttpHeaders headers, + @Context HttpServletRequest req, String inboundPayload, + @QueryParam("action") String action) { + AAIException ex = null; + Response response; + String fromAppId; + String transId; + ArrayList<String> templateVars = new ArrayList<>(); + try { + fromAppId = getFromAppId(headers); + transId = getTransId(headers); + + AAIExtensionMap aaiExtMap = new AAIExtensionMap(); + aaiExtMap.setHttpHeaders(headers); + aaiExtMap.setServletRequest(req); + aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); + aaiExtMap.setFromAppId(fromAppId); + aaiExtMap.setTransId(transId); + + // only consider header value for search + + AaiDBTraversalMetricLog metricLog = + new AaiDBTraversalMetricLog(AAIConstants.AAI_TRAVERSAL_MS); + String uriString = req.getRequestURI(); + Optional<URI> o; + if (uriString != null) { + o = Optional.of(new URI(uriString)); + } else { + o = Optional.empty(); + } + metricLog.pre(o); + if (action != null && action.equalsIgnoreCase("DELETE")) { + response = searchGraph.executeModelOperation(fromAppId, transId, inboundPayload, + true, aaiExtMap); + } else { + response = searchGraph.executeModelOperation(fromAppId, transId, inboundPayload, + false, aaiExtMap); + } + metricLog.post(); + + } catch (AAIException e) { + // send error response + ex = e; + templateVars.add("POST Search"); + templateVars.add("getModelQueryResponse"); + response = Response + .status(e.getErrorObject().getHTTPResponseCode()).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) + .build(); + } catch (Exception e) { + // send error response + ex = new AAIException("AAI_4000", e); + templateVars.add("POST Search"); + templateVars.add("getModelQueryResponse"); + response = Response + .status(Status.INTERNAL_SERVER_ERROR).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) + .build(); + } finally { + // log success or failure + if (ex != null) { + ErrorLogHelper.logException(ex); + } + } + return response; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/NodeQueryProcessor.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/NodeQueryProcessor.java index 366e7df..fc3847e 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/NodeQueryProcessor.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/NodeQueryProcessor.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,11 +19,15 @@ */ package org.onap.aai.rest.search; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit; +import java.io.FileNotFoundException; +import java.util.*; +import java.util.regex.Pattern; + +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.javatuples.Pair; @@ -31,87 +35,84 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.restcore.search.GroovyQueryBuilder; import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.serialization.queryformats.SubGraphStyle; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.io.FileNotFoundException; -import java.util.*; -import java.util.regex.Pattern; +public class NodeQueryProcessor extends GroovyShellImpl { -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; + private static Logger logger = LoggerFactory.getLogger(NodeQueryProcessor.class); -public class NodeQueryProcessor extends GroovyShellImpl { + protected String nodeType; + private MultivaluedMap<String, String> nodeQueryParams = new MultivaluedHashMap<>(); + protected final Optional<Collection<Vertex>> vertices; + protected static Pattern p = Pattern.compile("query/(.*+)"); + protected Optional<String> gremlin; + protected final TransactionalGraphEngine dbEngine; + protected GroovyQueryBuilder queryBuilder = new GroovyQueryBuilder(); + + protected NodeQueryProcessor(Builder builder) { + super(builder); + this.nodeQueryParams = builder.uriParams; + if (builder.getNodeType().isPresent()) { + this.nodeType = builder.getNodeType().get(); + } + this.dbEngine = builder.getDbEngine(); + this.vertices = builder.getVertices(); + + } + + public Pair<String, Map<String, Object>> createQuery() throws AAIException { + Map<String, Object> params = new HashMap<>(); + + Long timeNowInMilliSecs = System.currentTimeMillis(); + Long startTime = 0L; + if (nodeQueryParams.containsKey("hours")) { + Long hoursInMilliSec = + TimeUnit.HOURS.toMillis(Long.parseLong(nodeQueryParams.getFirst("hours"))); + startTime = timeNowInMilliSecs - hoursInMilliSec; + } else if (nodeQueryParams.containsKey("date-time")) { + Long dateTime = Long.parseLong(nodeQueryParams.getFirst("date-time")); + startTime = dateTime; + } + + String query = "builder.getVerticesByProperty('aai-node-type', nodeType)" + + ".or(builder.newInstance().getVerticesGreaterThanProperty('aai-created-ts',startTime)," + + " builder.newInstance().getVerticesGreaterThanProperty('aai-last-mod-ts',startTime)" + + ")"; + + params.put("startTime", startTime); + params.put("nodeType", nodeType); + + query = queryBuilder.executeTraversal(dbEngine, query, params); + + String startPrefix = "g.V()"; + + query = startPrefix + query; + + if (logger.isDebugEnabled()) { + logger.debug("Converted to gremlin query without the start vertices \n {}", query); + } + + return new Pair<>(query, params); + } + + public List<Object> execute(SubGraphStyle style) throws FileNotFoundException, AAIException { + final List<Object> resultVertices = new Vector<>(); + + Pair<String, Map<String, Object>> tuple = this.createQuery(); + String query = tuple.getValue0(); + Map<String, Object> params = tuple.getValue1(); + + if (query.equals("")) { + // nothing to do, just exit + return new ArrayList<>(); + } + GraphTraversal<?, ?> g = + this.runQuery(query, params, dbEngine.asAdmin().getTraversalSource()); + + resultVertices.addAll(g.toList()); - private static Logger logger = LoggerFactory.getLogger(NodeQueryProcessor.class); - - protected String nodeType; - private MultivaluedMap<String, String> nodeQueryParams = new MultivaluedHashMap<>(); - protected final Optional<Collection<Vertex>> vertices; - protected static Pattern p = Pattern.compile("query/(.*+)"); - protected Optional<String> gremlin; - protected final TransactionalGraphEngine dbEngine; - protected GroovyQueryBuilder queryBuilder = new GroovyQueryBuilder(); - - protected NodeQueryProcessor(Builder builder) { - super(builder); - this.nodeQueryParams = builder.uriParams; - if(builder.getNodeType().isPresent()) { - this.nodeType = builder.getNodeType().get(); - } - this.dbEngine = builder.getDbEngine(); - this.vertices = builder.getVertices(); - - } - - public Pair<String, Map<String, Object>> createQuery() throws AAIException { - Map<String, Object> params = new HashMap<>(); - - Long timeNowInMilliSecs = System.currentTimeMillis(); - Long startTime = 0L; - if(nodeQueryParams.containsKey("hours")){ - Long hoursInMilliSec = TimeUnit.HOURS.toMillis(Long.parseLong(nodeQueryParams.getFirst("hours"))); - startTime = timeNowInMilliSecs - hoursInMilliSec; - } - else if(nodeQueryParams.containsKey("date-time")){ - Long dateTime = Long.parseLong(nodeQueryParams.getFirst("date-time")); - startTime = dateTime; - } - - String query = "builder.getVerticesByProperty('aai-node-type', nodeType)" - + ".or(builder.newInstance().getVerticesGreaterThanProperty('aai-created-ts',startTime)," - + " builder.newInstance().getVerticesGreaterThanProperty('aai-last-mod-ts',startTime)" + ")"; - - params.put("startTime", startTime); - params.put("nodeType", nodeType); - - query = queryBuilder.executeTraversal(dbEngine, query, params); - - String startPrefix = "g.V()"; - - query = startPrefix + query; - - if (logger.isDebugEnabled()) { - logger.debug("Converted to gremlin query without the start vertices \n {}", query); - } - - return new Pair<>(query, params); - } - - public List<Object> execute(SubGraphStyle style) throws FileNotFoundException, AAIException { - final List<Object> resultVertices = new Vector<>(); - - Pair<String, Map<String, Object>> tuple = this.createQuery(); - String query = tuple.getValue0(); - Map<String, Object> params = tuple.getValue1(); - - if (query.equals("")) { - // nothing to do, just exit - return new ArrayList<>(); - } - GraphTraversal<?, ?> g = this.runQuery(query, params, dbEngine.asAdmin().getTraversalSource()); - - resultVertices.addAll(g.toList()); - - return resultVertices; - } + return resultVertices; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/QueryProcessorType.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/QueryProcessorType.java index c8e1d14..8e4c7cf 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/QueryProcessorType.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/QueryProcessorType.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -21,6 +21,5 @@ package org.onap.aai.rest.search; public enum QueryProcessorType { - GREMLIN_SERVER, - LOCAL_GROOVY + GREMLIN_SERVER, LOCAL_GROOVY } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/SchemaServiceCQConfig.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/SchemaServiceCQConfig.java index ea1b62f..49986de 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/SchemaServiceCQConfig.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/SchemaServiceCQConfig.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,19 +19,21 @@ */ package org.onap.aai.rest.search; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.att.eelf.configuration.EELFManager; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.PostConstruct; + import org.onap.aai.restclient.RestClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; -import javax.annotation.PostConstruct; -import java.util.HashMap; -import java.util.Map; - public class SchemaServiceCQConfig extends CQConfig { private static Logger logger = LoggerFactory.getLogger(SchemaServiceCQConfig.class); @@ -46,19 +48,20 @@ public class SchemaServiceCQConfig extends CQConfig { @PostConstruct public void initialize() { - //Call SchemaService to get custom queries + // Call SchemaService to get custom queries retrieveCustomQueries(); } public void retrieveCustomQueries() { - /* - Call Schema MS to get custom queries using RestTemplate - */ + /* + * Call Schema MS to get custom queries using RestTemplate + */ logger.info("Calling the SchemaService to retrieve stored queries"); String content = ""; Map<String, String> headersMap = new HashMap<>(); - ResponseEntity<String> schemaResponse = restClient.getGetRequest(content, customQueriesUri, headersMap); + ResponseEntity<String> schemaResponse = + restClient.getGetRequest(content, customQueriesUri, headersMap); queryConfig = new GetCustomQueryConfig(schemaResponse.getBody()); } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java index 1db2699..17edbc5 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/SearchProvider.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,6 +20,17 @@ package org.onap.aai.rest.search; import io.micrometer.core.annotation.Timed; + +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.*; +import javax.ws.rs.core.Response.Status; + import org.onap.aai.aailog.logs.AaiDBTraversalMetricLog; import org.onap.aai.concurrent.AaiCallable; import org.onap.aai.dbgraphmap.SearchGraph; @@ -46,15 +57,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.*; -import javax.ws.rs.core.*; -import javax.ws.rs.core.Response.Status; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - /** * Implements the search subdomain in the REST API. All API calls must include X-FromAppId and * X-TransactionId in the header. @@ -78,8 +80,8 @@ public class SearchProvider extends RESTAPI { private String basePath; @Autowired - public SearchProvider(LoaderFactory loaderFactory, SearchGraph searchGraph, SchemaVersions schemaVersions, - @Value("${schema.uri.base.path}") String basePath) { + public SearchProvider(LoaderFactory loaderFactory, SearchGraph searchGraph, + SchemaVersions schemaVersions, @Value("${schema.uri.base.path}") String basePath) { this.loaderFactory = loaderFactory; this.searchGraph = searchGraph; this.schemaVersions = schemaVersions; @@ -101,27 +103,29 @@ public class SearchProvider extends RESTAPI { @GET @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) @Path(GENERIC_QUERY) - public Response getGenericQueryResponse(@Context HttpHeaders headers, @Context HttpServletRequest req, - @QueryParam("start-node-type") final String startNodeType, - @QueryParam("key") final List<String> startNodeKeyParams, - @QueryParam("include") final List<String> includeNodeTypes, @QueryParam("depth") final int depth, - @PathParam("version") String versionParam, @Context UriInfo info) { - return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, - TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET, - new AaiCallable<Response>() { - @Override - public Response process() { - return processGenericQueryResponse(headers, req, startNodeType, startNodeKeyParams, - includeNodeTypes, depth, versionParam); - } - }); + public Response getGenericQueryResponse(@Context HttpHeaders headers, + @Context HttpServletRequest req, @QueryParam("start-node-type") final String startNodeType, + @QueryParam("key") final List<String> startNodeKeyParams, + @QueryParam("include") final List<String> includeNodeTypes, + @QueryParam("depth") final int depth, @PathParam("version") String versionParam, + @Context UriInfo info) { + return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET, + new AaiCallable<Response>() { + @Override + public Response process() { + return processGenericQueryResponse(headers, req, startNodeType, + startNodeKeyParams, includeNodeTypes, depth, versionParam); + } + }); } - public Response processGenericQueryResponse(@Context HttpHeaders headers, @Context HttpServletRequest req, - @QueryParam("start-node-type") final String startNodeType, - @QueryParam("key") final List<String> startNodeKeyParams, - @QueryParam("include") final List<String> includeNodeTypes, @QueryParam("depth") final int depth, - @PathParam("version") String versionParam) { + public Response processGenericQueryResponse(@Context HttpHeaders headers, + @Context HttpServletRequest req, @QueryParam("start-node-type") final String startNodeType, + @QueryParam("key") final List<String> startNodeKeyParams, + @QueryParam("include") final List<String> includeNodeTypes, + @QueryParam("depth") final int depth, @PathParam("version") String versionParam) { AAIException ex = null; Response searchResult; @@ -137,17 +141,20 @@ public class SearchProvider extends RESTAPI { final ModelType factoryType = ModelType.MOXY; Loader loader = loaderFactory.createLoaderForVersion(factoryType, version); - TransactionalGraphEngine dbEngine = new JanusGraphDBEngine(QueryStyle.TRAVERSAL, loader); + TransactionalGraphEngine dbEngine = + new JanusGraphDBEngine(QueryStyle.TRAVERSAL, loader); DBSerializer dbSerializer = new DBSerializer(version, dbEngine, factoryType, fromAppId); - UrlBuilder urlBuilder = new UrlBuilder(version, dbSerializer, schemaVersions, this.basePath); + UrlBuilder urlBuilder = + new UrlBuilder(version, dbSerializer, schemaVersions, this.basePath); - AaiDBTraversalMetricLog metricLog = new AaiDBTraversalMetricLog (AAIConstants.AAI_TRAVERSAL_MS); + AaiDBTraversalMetricLog metricLog = + new AaiDBTraversalMetricLog(AAIConstants.AAI_TRAVERSAL_MS); metricLog.pre(Optional.of(new URI(req.getRequestURI()))); - searchResult = searchGraph - .runGenericQuery(new GenericQueryBuilder().setHeaders(headers).setStartNodeType(startNodeType) - .setStartNodeKeyParams(startNodeKeyParams).setIncludeNodeTypes(includeNodeTypes) - .setDepth(depth).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + searchResult = searchGraph.runGenericQuery(new GenericQueryBuilder().setHeaders(headers) + .setStartNodeType(startNodeType).setStartNodeKeyParams(startNodeKeyParams) + .setIncludeNodeTypes(includeNodeTypes).setDepth(depth).setDbEngine(dbEngine) + .setLoader(loader).setUrlBuilder(urlBuilder)); metricLog.post(); @@ -156,17 +163,19 @@ public class SearchProvider extends RESTAPI { ex = e; templateVars.add("GET Search"); templateVars.add("getGenericQueryResponse"); - searchResult = Response.status(e.getErrorObject().getHTTPResponseCode()) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) - .build(); + searchResult = Response + .status(e.getErrorObject().getHTTPResponseCode()).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) + .build(); } catch (Exception e) { // send error response ex = new AAIException("AAI_4000", e); templateVars.add("GET Search"); templateVars.add("getGenericQueryResponse"); - searchResult = Response.status(Status.INTERNAL_SERVER_ERROR) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) - .build(); + searchResult = Response + .status(Status.INTERNAL_SERVER_ERROR).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) + .build(); } finally { // log success or failure if (ex != null) { @@ -193,28 +202,32 @@ public class SearchProvider extends RESTAPI { @GET @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) @Path(NODES_QUERY) - public Response getNodesQueryResponse(@Context HttpHeaders headers, @Context HttpServletRequest req, - @QueryParam("search-node-type") final String searchNodeType, - @QueryParam("edge-filter") final List<String> edgeFilterList, - @QueryParam("filter") final List<String> filterList, @PathParam("version") String versionParam, - @Context UriInfo info) + public Response getNodesQueryResponse(@Context HttpHeaders headers, + @Context HttpServletRequest req, + @QueryParam("search-node-type") final String searchNodeType, + @QueryParam("edge-filter") final List<String> edgeFilterList, + @QueryParam("filter") final List<String> filterList, + @PathParam("version") String versionParam, @Context UriInfo info) { - return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, - TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET, - new AaiCallable<Response>() { - @Override - public Response process() { - return processNodesQueryResponse(headers, req, searchNodeType, edgeFilterList, filterList, - versionParam); - } - }); + return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, + TraversalConstants.AAI_TRAVERSAL_TIMEOUT_LIMIT, headers, info, HttpMethod.GET, + new AaiCallable<Response>() { + @Override + public Response process() { + return processNodesQueryResponse(headers, req, searchNodeType, edgeFilterList, + filterList, versionParam); + } + }); } - public Response processNodesQueryResponse(@Context HttpHeaders headers, @Context HttpServletRequest req, - @QueryParam("search-node-type") final String searchNodeType, - @QueryParam("edge-filter") final List<String> edgeFilterList, - @QueryParam("filter") final List<String> filterList, @PathParam("version") String versionParam) { + public Response processNodesQueryResponse(@Context HttpHeaders headers, + @Context HttpServletRequest req, + @QueryParam("search-node-type") final String searchNodeType, + @QueryParam("edge-filter") final List<String> edgeFilterList, + @QueryParam("filter") final List<String> filterList, + @PathParam("version") String versionParam) { AAIException ex = null; Response searchResult; @@ -231,15 +244,18 @@ public class SearchProvider extends RESTAPI { final ModelType factoryType = ModelType.MOXY; Loader loader = loaderFactory.createLoaderForVersion(factoryType, version); - TransactionalGraphEngine dbEngine = new JanusGraphDBEngine(QueryStyle.TRAVERSAL, loader); + TransactionalGraphEngine dbEngine = + new JanusGraphDBEngine(QueryStyle.TRAVERSAL, loader); DBSerializer dbSerializer = new DBSerializer(version, dbEngine, factoryType, fromAppId); - UrlBuilder urlBuilder = new UrlBuilder(version, dbSerializer, schemaVersions, this.basePath); - + UrlBuilder urlBuilder = + new UrlBuilder(version, dbSerializer, schemaVersions, this.basePath); - AaiDBTraversalMetricLog metricLog = new AaiDBTraversalMetricLog (AAIConstants.AAI_TRAVERSAL_MS); + AaiDBTraversalMetricLog metricLog = + new AaiDBTraversalMetricLog(AAIConstants.AAI_TRAVERSAL_MS); metricLog.pre(Optional.of(new URI(req.getRequestURI()))); - searchResult = searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(headers) - .setTargetNodeType(searchNodeType).setEdgeFilterParams(edgeFilterList).setFilterParams(filterList) + searchResult = searchGraph.runNodesQuery( + new NodesQueryBuilder().setHeaders(headers).setTargetNodeType(searchNodeType) + .setEdgeFilterParams(edgeFilterList).setFilterParams(filterList) .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); metricLog.post(); @@ -249,17 +265,19 @@ public class SearchProvider extends RESTAPI { ex = e; templateVars.add("GET Search"); templateVars.add("getNodesQueryResponse"); - searchResult = Response.status(e.getErrorObject().getHTTPResponseCode()) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) - .build(); + searchResult = Response + .status(e.getErrorObject().getHTTPResponseCode()).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) + .build(); } catch (Exception e) { // send error response ex = new AAIException("AAI_4000", e); templateVars.add("GET Search"); templateVars.add("getNodesQueryResponse"); - searchResult = Response.status(Status.INTERNAL_SERVER_ERROR) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) - .build(); + searchResult = Response + .status(Status.INTERNAL_SERVER_ERROR).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) + .build(); } finally { // log success or failure if (ex != null) { @@ -269,6 +287,4 @@ public class SearchProvider extends RESTAPI { return searchResult; } - - } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/security/WebSecurityConfig.java b/aai-traversal/src/main/java/org/onap/aai/rest/security/WebSecurityConfig.java index c92d818..e24013b 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/security/WebSecurityConfig.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/security/WebSecurityConfig.java @@ -11,7 +11,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -23,6 +23,7 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.rest.security; + import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver; import org.keycloak.adapters.springsecurity.KeycloakConfiguration; import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider; @@ -40,35 +41,36 @@ import org.springframework.security.core.session.SessionRegistryImpl; import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy; import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy; import org.springframework.security.web.session.HttpSessionEventPublisher; + @Profile("keycloak") @KeycloakConfiguration @Import({KeycloakSpringBootConfigResolver.class}) public class WebSecurityConfig extends KeycloakWebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) { - KeycloakAuthenticationProvider keycloakAuthenticationProvider - = keycloakAuthenticationProvider(); - keycloakAuthenticationProvider.setGrantedAuthoritiesMapper( - new SimpleAuthorityMapper()); + KeycloakAuthenticationProvider keycloakAuthenticationProvider = + keycloakAuthenticationProvider(); + keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper()); auth.authenticationProvider(keycloakAuthenticationProvider); } + @Bean public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() { return new ServletListenerRegistrationBean<>(new HttpSessionEventPublisher()); } + @Bean @Override protected SessionAuthenticationStrategy sessionAuthenticationStrategy() { - return new RegisterSessionAuthenticationStrategy( - new SessionRegistryImpl()); + return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl()); } + @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); - http.authorizeRequests() - .antMatchers("/**") - .permitAll().and().csrf().disable(); + http.authorizeRequests().antMatchers("/**").permitAll().and().csrf().disable(); } + @Override public void configure(WebSecurity web) throws Exception { web.ignoring().regexMatchers("^.*/util/echo$"); diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/util/AAIExtensionMap.java b/aai-traversal/src/main/java/org/onap/aai/rest/util/AAIExtensionMap.java index 0aa70e3..4e5651d 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/util/AAIExtensionMap.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/util/AAIExtensionMap.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,6 +20,14 @@ package org.onap.aai.rest.util; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.UriInfo; + import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; @@ -29,13 +37,6 @@ import org.onap.aai.rest.db.DBRequest; import org.onap.aai.rest.db.HttpEntry; import org.onap.aai.serialization.engines.TransactionalGraphEngine; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.UriInfo; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; - public class AAIExtensionMap { // ======================================================================= // Attribute | Type diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJson.java b/aai-traversal/src/main/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJson.java index f16e700..f3ec5f8 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJson.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJson.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,86 +26,88 @@ import java.util.List; import java.util.Properties; public class ConvertQueryPropertiesToJson { - - private static final int MAX_FILE_SIZE = 256000; - - private void addStart( StringBuilder sb ) { - sb.append("{\n \"stored-queries\":[{\n"); - } - - private void addRequiredQueryProperties( StringBuilder sb, List<String> rqd ) { - Iterator it = rqd.iterator(); - sb.append(" \"query\":{\n \"required-properties\":["); - while( it.hasNext()) { - sb.append("\"" + it.next() + "\""); - if ( it.hasNext()) { - sb.append(","); - } - } - sb.append("]\n },\n"); - } - - private void addAnotherQuery( StringBuilder sb, String queryName, String query, List<String> rqd ) { - sb.append(" \"" + queryName + "\":{\n"); - if ( !rqd.isEmpty()) { - addRequiredQueryProperties( sb, rqd); - } - sb.append(" \"stored-query\":\"" + query + "\"\n }\n },{\n"); - } - - private void addLastQuery( StringBuilder sb, String queryName, String query, List<String> rqd ) { - sb.append(" \"" + queryName + "\":{\n"); - if ( !rqd.isEmpty() ) { - addRequiredQueryProperties( sb, rqd); - } - sb.append(" \"stored-query\":\"" + query + "\"\n }\n }]\n}\n"); - } - - private String get2ndParameter( String paramString) { - String endParams = paramString.substring(0, paramString.indexOf(')')); - String result = endParams.substring(endParams.indexOf(',') + 1 ); - String lastParam = result.trim(); - if ( lastParam.startsWith("\\") || lastParam.startsWith("'") || lastParam.startsWith("new ") ){ - return null; - } - - return lastParam; - } - - private List<String> findRqdProperties( String query) { - String[] parts = query.split("getVerticesByProperty"); - List<String> result = new ArrayList<>(); - if ( parts.length == 1 ) - return result; - int count = 0; - String foundRqdProperty; - while ( count++ < parts.length - 1 ) { - foundRqdProperty = get2ndParameter(parts[count]); - if ( foundRqdProperty != null && !result.contains(foundRqdProperty)) { - result.add(foundRqdProperty); - } - } - return result; - } - public String convertProperties( Properties props ) { - Enumeration<?> e = props.propertyNames(); - StringBuilder sb = new StringBuilder(MAX_FILE_SIZE); - String queryName; - String query; - addStart( sb ); - List<String> rqd; - while ( e.hasMoreElements()) { - queryName = (String)e.nextElement(); - query = props.getProperty(queryName).trim().replace("\"", "\\\""); - rqd = findRqdProperties( query); - if ( e.hasMoreElements()) { - addAnotherQuery( sb, queryName, query, rqd); - } else { - addLastQuery( sb, queryName, query, rqd); - } - } - + private static final int MAX_FILE_SIZE = 256000; + + private void addStart(StringBuilder sb) { + sb.append("{\n \"stored-queries\":[{\n"); + } + + private void addRequiredQueryProperties(StringBuilder sb, List<String> rqd) { + Iterator it = rqd.iterator(); + sb.append(" \"query\":{\n \"required-properties\":["); + while (it.hasNext()) { + sb.append("\"" + it.next() + "\""); + if (it.hasNext()) { + sb.append(","); + } + } + sb.append("]\n },\n"); + } + + private void addAnotherQuery(StringBuilder sb, String queryName, String query, + List<String> rqd) { + sb.append(" \"" + queryName + "\":{\n"); + if (!rqd.isEmpty()) { + addRequiredQueryProperties(sb, rqd); + } + sb.append(" \"stored-query\":\"" + query + "\"\n }\n },{\n"); + } + + private void addLastQuery(StringBuilder sb, String queryName, String query, List<String> rqd) { + sb.append(" \"" + queryName + "\":{\n"); + if (!rqd.isEmpty()) { + addRequiredQueryProperties(sb, rqd); + } + sb.append(" \"stored-query\":\"" + query + "\"\n }\n }]\n}\n"); + } + + private String get2ndParameter(String paramString) { + String endParams = paramString.substring(0, paramString.indexOf(')')); + String result = endParams.substring(endParams.indexOf(',') + 1); + String lastParam = result.trim(); + if (lastParam.startsWith("\\") || lastParam.startsWith("'") + || lastParam.startsWith("new ")) { + return null; + } + + return lastParam; + } + + private List<String> findRqdProperties(String query) { + String[] parts = query.split("getVerticesByProperty"); + List<String> result = new ArrayList<>(); + if (parts.length == 1) + return result; + int count = 0; + String foundRqdProperty; + while (count++ < parts.length - 1) { + foundRqdProperty = get2ndParameter(parts[count]); + if (foundRqdProperty != null && !result.contains(foundRqdProperty)) { + result.add(foundRqdProperty); + } + } + return result; + } + + public String convertProperties(Properties props) { + Enumeration<?> e = props.propertyNames(); + StringBuilder sb = new StringBuilder(MAX_FILE_SIZE); + String queryName; + String query; + addStart(sb); + List<String> rqd; + while (e.hasMoreElements()) { + queryName = (String) e.nextElement(); + query = props.getProperty(queryName).trim().replace("\"", "\\\""); + rqd = findRqdProperties(query); + if (e.hasMoreElements()) { + addAnotherQuery(sb, queryName, query, rqd); + } else { + addLastQuery(sb, queryName, query, rqd); + } + } + return sb.toString(); - } + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/util/EchoResponse.java b/aai-traversal/src/main/java/org/onap/aai/rest/util/EchoResponse.java index 16c2618..d0ba708 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/util/EchoResponse.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/util/EchoResponse.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -42,79 +42,79 @@ import org.onap.aai.restcore.RESTAPI; */ @Path("/util") public class EchoResponse extends RESTAPI { - - protected static String authPolicyFunctionName = "util"; - - public static final String ECHO_PATH = "/echo"; - - /** - * Simple health-check API that echos back the X-FromAppId and X-TransactionId to clients. - * If there is a query string, a transaction gets logged into hbase, proving the application is connected to the data store. - * If there is no query string, no transacction logging is done to hbase. - * - * @param headers the headers - * @param req the req - * @param myAction if exists will cause transaction to be logged to hbase - * @return the response - */ - @GET - @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - @Path(ECHO_PATH) - public Response echoResult(@Context HttpHeaders headers, @Context HttpServletRequest req, - @QueryParam("action") String myAction) { - AAIException ex = null; - Response response; - String fromAppId; - String transId; - - try { - fromAppId = getFromAppId(headers ); - transId = getTransId(headers); - } catch (AAIException e) { - ArrayList<String> templateVars = new ArrayList<>(); - templateVars.add("PUT uebProvider"); - templateVars.add("addTopic"); - return Response - .status(e.getErrorObject().getHTTPResponseCode()) - .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) - .build(); - } - - try { - - HashMap<AAIException, ArrayList<String>> exceptionList = new HashMap<>(); - - ArrayList<String> templateVars = new ArrayList<>(); - templateVars.add(fromAppId); - templateVars.add(transId); - - exceptionList.put(new AAIException("AAI_0002", "OK"), templateVars); - - response = Response.status(Status.OK) - .entity(ErrorLogHelper.getRESTAPIInfoResponse( - headers.getAcceptableMediaTypes(), exceptionList)) - .build(); - - } catch (Exception e) { - ex = new AAIException("AAI_4000", e); - ArrayList<String> templateVars = new ArrayList<>(); - templateVars.add(Action.GET.name()); - templateVars.add(fromAppId +" "+transId); - - response = Response - .status(Status.INTERNAL_SERVER_ERROR) - .entity(ErrorLogHelper.getRESTAPIErrorResponse( - headers.getAcceptableMediaTypes(), ex, - templateVars)).build(); - - } finally { - if (ex != null) { - ErrorLogHelper.logException(ex); - } - - } - - return response; - } + + protected static String authPolicyFunctionName = "util"; + + public static final String ECHO_PATH = "/echo"; + + /** + * Simple health-check API that echos back the X-FromAppId and X-TransactionId to clients. + * If there is a query string, a transaction gets logged into hbase, proving the application is + * connected to the data store. + * If there is no query string, no transacction logging is done to hbase. + * + * @param headers the headers + * @param req the req + * @param myAction if exists will cause transaction to be logged to hbase + * @return the response + */ + @GET + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Path(ECHO_PATH) + public Response echoResult(@Context HttpHeaders headers, @Context HttpServletRequest req, + @QueryParam("action") String myAction) { + AAIException ex = null; + Response response; + String fromAppId; + String transId; + + try { + fromAppId = getFromAppId(headers); + transId = getTransId(headers); + } catch (AAIException e) { + ArrayList<String> templateVars = new ArrayList<>(); + templateVars.add("PUT uebProvider"); + templateVars.add("addTopic"); + return Response + .status(e.getErrorObject().getHTTPResponseCode()).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, templateVars)) + .build(); + } + + try { + + HashMap<AAIException, ArrayList<String>> exceptionList = new HashMap<>(); + + ArrayList<String> templateVars = new ArrayList<>(); + templateVars.add(fromAppId); + templateVars.add(transId); + + exceptionList.put(new AAIException("AAI_0002", "OK"), templateVars); + + response = Response + .status(Status.OK).entity(ErrorLogHelper + .getRESTAPIInfoResponse(headers.getAcceptableMediaTypes(), exceptionList)) + .build(); + + } catch (Exception e) { + ex = new AAIException("AAI_4000", e); + ArrayList<String> templateVars = new ArrayList<>(); + templateVars.add(Action.GET.name()); + templateVars.add(fromAppId + " " + transId); + + response = Response + .status(Status.INTERNAL_SERVER_ERROR).entity(ErrorLogHelper + .getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), ex, templateVars)) + .build(); + + } finally { + if (ex != null) { + ErrorLogHelper.logException(ex); + } + + } + + return response; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/util/LogFormatTools.java b/aai-traversal/src/main/java/org/onap/aai/rest/util/LogFormatTools.java index 931ab0b..f7539a0 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/util/LogFormatTools.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/util/LogFormatTools.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -25,11 +25,11 @@ import java.time.format.DateTimeFormatter; public class LogFormatTools { - private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; - private static final DateTimeFormatter DTF = DateTimeFormatter.ofPattern(DATE_FORMAT) - .withZone(ZoneOffset.UTC); - - public static String getCurrentDateTime() { - return DTF.format(ZonedDateTime.now()); - } + private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; + private static final DateTimeFormatter DTF = + DateTimeFormatter.ofPattern(DATE_FORMAT).withZone(ZoneOffset.UTC); + + public static String getCurrentDateTime() { + return DTF.format(ZonedDateTime.now()); + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/util/ValidateEncoding.java b/aai-traversal/src/main/java/org/onap/aai/rest/util/ValidateEncoding.java index 7d04bf7..fcf7e42 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/util/ValidateEncoding.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/util/ValidateEncoding.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -32,131 +32,133 @@ import org.springframework.web.util.UriUtils; */ public class ValidateEncoding { - private final String encoding = "UTF-8"; - - /** - * Instantiates a new validate encoding. - */ - private ValidateEncoding() { - - } - - /** - * The Class Helper. - */ - private static class Helper { - - /** The Constant INSTANCE. */ - private static final ValidateEncoding INSTANCE = new ValidateEncoding(); - } - - /** - * Gets the single instance of ValidateEncoding. - * - * @return single instance of ValidateEncoding - */ - public static ValidateEncoding getInstance() { - return Helper.INSTANCE; - } - - /** - * Validate. - * - * @param uri the uri - * @return true, if successful - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - public boolean validate(URI uri) throws UnsupportedEncodingException { - boolean result = true; - if (!validatePath(uri.getRawPath())) { - result = false; - } - /*if (!validateQueryParams(uri.getRawQuery())) { - result = false; - } //TODO - */ - - return result; - } - - /** - * Validate. - * - * @param info the info - * @return true, if successful - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - public boolean validate(UriInfo info) throws UnsupportedEncodingException { - boolean result = true; - if (!validatePath(info.getPath(false))) { - result = false; - } - if (!validateQueryParams(info.getQueryParameters(false))) { - result = false; - } - - return result; - } - - /** - * Validate path. - * - * @param path the path - * @return true, if successful - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - private boolean validatePath(String path) throws UnsupportedEncodingException { - String[] segments = path.split("/"); - boolean valid = true; - for (String segment : segments) { - if (!this.checkEncoding(segment)) { - valid = false; - } - } - - return valid; - - } - - /** - * Validate query params. - * - * @param params the params - * @return true, if successful - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - private boolean validateQueryParams(MultivaluedMap<String, String> params) throws UnsupportedEncodingException { - boolean valid = true; - - for (String key : params.keySet()) { - if (!this.checkEncoding(key)) { - valid = false; - } - for (String item : params.get(key)) { - if(item.contains("+")){ - item = item.replaceAll("\\+", "%20"); - } - if (!this.checkEncoding(item)) { - valid = false; - } - } - } - return valid; - } - - /** - * Check encoding. - * - * @param segment the segment - * @return true, if successful - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - private boolean checkEncoding(String segment) throws UnsupportedEncodingException { - boolean result = false; - String decode = UriUtils.decode(segment, encoding); - String encode = UriUtils.encode(decode, encoding); - result = segment.equals(encode); - - return result; - } + private final String encoding = "UTF-8"; + + /** + * Instantiates a new validate encoding. + */ + private ValidateEncoding() { + + } + + /** + * The Class Helper. + */ + private static class Helper { + + /** The Constant INSTANCE. */ + private static final ValidateEncoding INSTANCE = new ValidateEncoding(); + } + + /** + * Gets the single instance of ValidateEncoding. + * + * @return single instance of ValidateEncoding + */ + public static ValidateEncoding getInstance() { + return Helper.INSTANCE; + } + + /** + * Validate. + * + * @param uri the uri + * @return true, if successful + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + public boolean validate(URI uri) throws UnsupportedEncodingException { + boolean result = true; + if (!validatePath(uri.getRawPath())) { + result = false; + } + /* + * if (!validateQueryParams(uri.getRawQuery())) { + * result = false; + * } //TODO + */ + + return result; + } + + /** + * Validate. + * + * @param info the info + * @return true, if successful + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + public boolean validate(UriInfo info) throws UnsupportedEncodingException { + boolean result = true; + if (!validatePath(info.getPath(false))) { + result = false; + } + if (!validateQueryParams(info.getQueryParameters(false))) { + result = false; + } + + return result; + } + + /** + * Validate path. + * + * @param path the path + * @return true, if successful + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + private boolean validatePath(String path) throws UnsupportedEncodingException { + String[] segments = path.split("/"); + boolean valid = true; + for (String segment : segments) { + if (!this.checkEncoding(segment)) { + valid = false; + } + } + + return valid; + + } + + /** + * Validate query params. + * + * @param params the params + * @return true, if successful + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + private boolean validateQueryParams(MultivaluedMap<String, String> params) + throws UnsupportedEncodingException { + boolean valid = true; + + for (String key : params.keySet()) { + if (!this.checkEncoding(key)) { + valid = false; + } + for (String item : params.get(key)) { + if (item.contains("+")) { + item = item.replaceAll("\\+", "%20"); + } + if (!this.checkEncoding(item)) { + valid = false; + } + } + } + return valid; + } + + /** + * Check encoding. + * + * @param segment the segment + * @return true, if successful + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + private boolean checkEncoding(String segment) throws UnsupportedEncodingException { + boolean result = false; + String decode = UriUtils.decode(segment, encoding); + String encode = UriUtils.encode(decode, encoding); + result = segment.equals(encode); + + return result; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/service/AuthorizationService.java b/aai-traversal/src/main/java/org/onap/aai/service/AuthorizationService.java index b4fa996..b448bc8 100644 --- a/aai-traversal/src/main/java/org/onap/aai/service/AuthorizationService.java +++ b/aai-traversal/src/main/java/org/onap/aai/service/AuthorizationService.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,15 +19,6 @@ */ package org.onap.aai.service; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.eclipse.jetty.util.security.Password; -import org.onap.aai.Profiles; -import org.onap.aai.util.AAIConstants; -import org.springframework.context.annotation.Profile; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -37,6 +28,16 @@ import java.util.HashMap; import java.util.Map; import java.util.stream.Stream; +import javax.annotation.PostConstruct; + +import org.eclipse.jetty.util.security.Password; +import org.onap.aai.Profiles; +import org.onap.aai.util.AAIConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Service; + @Service @Profile(Profiles.ONE_WAY_SSL) public class AuthorizationService { @@ -48,45 +49,47 @@ public class AuthorizationService { private static final Base64.Encoder ENCODER = Base64.getEncoder(); @PostConstruct - public void init(){ + public void init() { String basicAuthFile = getBasicAuthFilePath(); - try(Stream<String> stream = Files.lines(Paths.get(basicAuthFile))){ + try (Stream<String> stream = Files.lines(Paths.get(basicAuthFile))) { stream.filter(line -> !line.startsWith("#")).forEach(str -> { - byte [] bytes = null; + byte[] bytes = null; String usernamePassword = null; String accessType = null; - String [] userAccessType = str.split(","); + String[] userAccessType = str.split(","); - if(userAccessType.length != 2){ - throw new RuntimeException("Please check the realm.properties file as it is not conforming to the basic auth"); + if (userAccessType.length != 2) { + throw new RuntimeException( + "Please check the realm.properties file as it is not conforming to the basic auth"); } usernamePassword = userAccessType[0]; - accessType = userAccessType[1]; + accessType = userAccessType[1]; String[] usernamePasswordArray = usernamePassword.split(":"); - if(usernamePasswordArray.length != 3){ - throw new RuntimeException("This username / pwd is not a valid entry in realm.properties"); + if (usernamePasswordArray.length != 3) { + throw new RuntimeException( + "This username / pwd is not a valid entry in realm.properties"); } String username = usernamePasswordArray[0]; String password = null; - if(str.contains("OBF:")){ + if (str.contains("OBF:")) { password = usernamePasswordArray[1] + ":" + usernamePasswordArray[2]; password = Password.deobfuscate(password); } - bytes = ENCODER.encode((username + ":" + password).getBytes(StandardCharsets.UTF_8)); + bytes = + ENCODER.encode((username + ":" + password).getBytes(StandardCharsets.UTF_8)); authorizedUsers.put(new String(bytes), accessType); - authorizedUsers.put(new String(ENCODER.encode(bytes)), accessType); }); } catch (IOException e) { @@ -94,11 +97,12 @@ public class AuthorizationService { } } - public boolean checkIfUserAuthorized(String authorization){ - return authorizedUsers.containsKey(authorization) && "admin".equals(authorizedUsers.get(authorization)); + public boolean checkIfUserAuthorized(String authorization) { + return authorizedUsers.containsKey(authorization) + && "admin".equals(authorizedUsers.get(authorization)); } - public String getBasicAuthFilePath(){ + public String getBasicAuthFilePath() { return AAIConstants.AAI_HOME_ETC_AUTH + AAIConstants.AAI_FILESEP + "realm.properties"; } } diff --git a/aai-traversal/src/main/java/org/onap/aai/service/RetiredService.java b/aai-traversal/src/main/java/org/onap/aai/service/RetiredService.java index 5989e31..b40c328 100644 --- a/aai-traversal/src/main/java/org/onap/aai/service/RetiredService.java +++ b/aai-traversal/src/main/java/org/onap/aai/service/RetiredService.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,16 +19,17 @@ */ package org.onap.aai.service; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.PropertySource; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Service; + @Service @PropertySource("classpath:retired.properties") @PropertySource(value = "file:${server.local.startpath}/retired.properties") @@ -42,26 +43,28 @@ public class RetiredService { private List<Pattern> retiredAllVersionList; @PostConstruct - public void initialize(){ - this.retiredPatternsList = Arrays.stream(retiredPatterns.split(",")).map(Pattern::compile).collect(Collectors.toList()); - this.retiredAllVersionList = Arrays.stream(retiredAllVersions.split(",")).map(Pattern::compile).collect(Collectors.toList()); + public void initialize() { + this.retiredPatternsList = Arrays.stream(retiredPatterns.split(",")).map(Pattern::compile) + .collect(Collectors.toList()); + this.retiredAllVersionList = Arrays.stream(retiredAllVersions.split(",")) + .map(Pattern::compile).collect(Collectors.toList()); } @Value("${retired.api.pattern.list}") - public void setRetiredPatterns(String retiredPatterns){ + public void setRetiredPatterns(String retiredPatterns) { this.retiredPatterns = retiredPatterns; } - public List<Pattern> getRetiredPatterns(){ + public List<Pattern> getRetiredPatterns() { return retiredPatternsList; } @Value("${retired.api.all.versions}") - public void setRetiredAllVersions(String retiredPatterns){ + public void setRetiredAllVersions(String retiredPatterns) { this.retiredAllVersions = retiredPatterns; } - public List<Pattern> getRetiredAllVersionList(){ + public List<Pattern> getRetiredAllVersionList() { return retiredAllVersionList; } } diff --git a/aai-traversal/src/main/java/org/onap/aai/transforms/Converter.java b/aai-traversal/src/main/java/org/onap/aai/transforms/Converter.java index 676c910..1fe66fe 100644 --- a/aai-traversal/src/main/java/org/onap/aai/transforms/Converter.java +++ b/aai-traversal/src/main/java/org/onap/aai/transforms/Converter.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/aai-traversal/src/main/java/org/onap/aai/transforms/LowerCamelToLowerHyphenConverter.java b/aai-traversal/src/main/java/org/onap/aai/transforms/LowerCamelToLowerHyphenConverter.java index aae42b5..6387deb 100644 --- a/aai-traversal/src/main/java/org/onap/aai/transforms/LowerCamelToLowerHyphenConverter.java +++ b/aai-traversal/src/main/java/org/onap/aai/transforms/LowerCamelToLowerHyphenConverter.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -25,7 +25,7 @@ public class LowerCamelToLowerHyphenConverter implements Converter { @Override public String convert(String input) { - if(input == null){ + if (input == null) { return null; } return CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, input); diff --git a/aai-traversal/src/main/java/org/onap/aai/transforms/LowerHyphenToLowerCamelConverter.java b/aai-traversal/src/main/java/org/onap/aai/transforms/LowerHyphenToLowerCamelConverter.java index b4baa0c..804326f 100644 --- a/aai-traversal/src/main/java/org/onap/aai/transforms/LowerHyphenToLowerCamelConverter.java +++ b/aai-traversal/src/main/java/org/onap/aai/transforms/LowerHyphenToLowerCamelConverter.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -24,10 +24,10 @@ package org.onap.aai.transforms; * for converting from the lower hyphen to lower camel case * <p> * Examples: - * lower-test => lowerTest - * lower-Test => lowerTest - * lowerTest => lowerTest - * lower-test-val => lowerTestVal + * lower-test => lowerTest + * lower-Test => lowerTest + * lowerTest => lowerTest + * lower-test-val => lowerTestVal * <p> * */ @@ -46,11 +46,11 @@ public class LowerHyphenToLowerCamelConverter implements Converter { * * @param input the input string to convert to camel case * @return a string that is converted to camel case - * if the input is null, then it returns null + * if the input is null, then it returns null */ @Override public String convert(String input) { - if(input == null){ + if (input == null) { return null; } @@ -59,17 +59,17 @@ public class LowerHyphenToLowerCamelConverter implements Converter { boolean isPreviousCharDash = false; - for(int index = 0; index < size; ++index){ + for (int index = 0; index < size; ++index) { char ch = input.charAt(index); - if(ch == '-'){ + if (ch == '-') { isPreviousCharDash = true; continue; } - if(isPreviousCharDash){ + if (isPreviousCharDash) { builder.append(Character.toUpperCase(ch)); isPreviousCharDash = false; - } else{ + } else { builder.append(ch); } } diff --git a/aai-traversal/src/main/java/org/onap/aai/transforms/MapTraverser.java b/aai-traversal/src/main/java/org/onap/aai/transforms/MapTraverser.java index f59fb10..24d5a83 100644 --- a/aai-traversal/src/main/java/org/onap/aai/transforms/MapTraverser.java +++ b/aai-traversal/src/main/java/org/onap/aai/transforms/MapTraverser.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,23 +19,22 @@ */ package org.onap.aai.transforms; - -import joptsimple.internal.Objects; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import joptsimple.internal.Objects; + public class MapTraverser { private Converter converter; - public MapTraverser(Converter converter){ + public MapTraverser(Converter converter) { this.converter = converter; } - public Map<String, Object> convertKeys(Map<String, Object> map){ + public Map<String, Object> convertKeys(Map<String, Object> map) { Objects.ensureNotNull(map); @@ -45,15 +44,16 @@ public class MapTraverser { return modifiedMap; } - private Map<String, Object> convertKeys(Map<String, Object> original, Map<String, Object> modified){ + private Map<String, Object> convertKeys(Map<String, Object> original, + Map<String, Object> modified) { - for(Map.Entry<String, Object> entry : original.entrySet()){ + for (Map.Entry<String, Object> entry : original.entrySet()) { String key = entry.getKey(); key = converter.convert(key); Object value = entry.getValue(); - if(value instanceof Map){ + if (value instanceof Map) { modified.put(key, convertKeys((Map<String, Object>) value, new HashMap<>())); - } else if(value instanceof List){ + } else if (value instanceof List) { modified.put(key, convertKeys((List<Object>) value)); } else { modified.put(key, value); @@ -63,16 +63,16 @@ public class MapTraverser { return modified; } - public List<Object> convertKeys(List<Object> list){ + public List<Object> convertKeys(List<Object> list) { List<Object> modifiedList = new ArrayList<>(); - if(list != null && !list.isEmpty()){ + if (list != null && !list.isEmpty()) { - for(Object o : list){ - if(o instanceof Map){ + for (Object o : list) { + if (o instanceof Map) { Map<String, Object> map = (Map<String, Object>) o; modifiedList.add(convertKeys(map)); - } else if(o instanceof List){ + } else if (o instanceof List) { List<Object> l = (List<Object>) o; modifiedList.add(convertKeys(l)); } else { diff --git a/aai-traversal/src/main/java/org/onap/aai/util/GenericQueryBuilder.java b/aai-traversal/src/main/java/org/onap/aai/util/GenericQueryBuilder.java index 8570fe4..82ccc73 100644 --- a/aai-traversal/src/main/java/org/onap/aai/util/GenericQueryBuilder.java +++ b/aai-traversal/src/main/java/org/onap/aai/util/GenericQueryBuilder.java @@ -19,11 +19,13 @@ */ package org.onap.aai.util; -import javax.ws.rs.core.HttpHeaders; import java.util.List; + +import javax.ws.rs.core.HttpHeaders; + import org.onap.aai.introspection.Loader; -import org.onap.aai.serialization.queryformats.utils.UrlBuilder; import org.onap.aai.serialization.engines.TransactionalGraphEngine; +import org.onap.aai.serialization.queryformats.utils.UrlBuilder; /** * Builder Class used to minimize number of formal parameters. diff --git a/aai-traversal/src/main/java/org/onap/aai/util/MakeNamedQuery.java b/aai-traversal/src/main/java/org/onap/aai/util/MakeNamedQuery.java index 17207f3..7bda3bb 100644 --- a/aai-traversal/src/main/java/org/onap/aai/util/MakeNamedQuery.java +++ b/aai-traversal/src/main/java/org/onap/aai/util/MakeNamedQuery.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,15 +18,14 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.util; -import java.io.File; +import com.att.eelf.configuration.EELFManager; + +import java.io.File; import java.nio.charset.Charset; import java.util.*; import java.util.Map.Entry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.att.eelf.configuration.EELFManager; import org.apache.commons.io.FileUtils; import org.onap.aai.config.SpringContextAware; import org.onap.aai.introspection.Introspector; @@ -36,217 +35,230 @@ import org.onap.aai.introspection.ModelType; import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.setup.SchemaVersions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class MakeNamedQuery { - - private static final Logger logger = LoggerFactory.getLogger(MakeNamedQuery.class.getName()); - - public static void main(String[] args) throws Exception { - String _apiVersion = AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP); - String widgetJsonDir = null; - String modelVersion = null; - String namedQueryUuid = UUID.randomUUID().toString(); - if (args.length > 0) { - if (args[0] != null) { - _apiVersion = args[0]; - } - if (args[1] != null) { - widgetJsonDir = args[1]; - } - if (args[2] != null) { - modelVersion = args[2]; - } - if (args[3] != null) { - namedQueryUuid = args[3]; - } - } - - if (widgetJsonDir == null) { - System.err.println("You must specify a directory for widgetModelJson"); - System.exit(0); - } - if (modelVersion == null) { - System.err.println("You must specify a modelVersion"); - System.exit(0); - } - - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext( - "org.onap.aai.config", - "org.onap.aai.setup" - ); - - LoaderFactory loaderFactory = ctx.getBean(LoaderFactory.class); - SchemaVersions schemaVersions = ctx.getBean(SchemaVersions.class); - - if(schemaVersions.getVersions().contains(_apiVersion)){ - - Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, new SchemaVersion(_apiVersion)); - - // iterate the collection of resources - - ArrayList<String> processedWidgets = new ArrayList<>(); - - - HashMap<String, List<Introspector>> widgetToRelationship = new HashMap<>(); - for (Entry<String, Introspector> aaiResEnt : loader.getAllObjects().entrySet()) { - Introspector meObject; - // no need for a ModelVers DynamicEntity - - Introspector aaiRes = aaiResEnt.getValue(); - - if (!(aaiRes.isContainer() || aaiRes.getName().equals("aai-internal"))) { - String resource = aaiRes.getName(); - - if (processedWidgets.contains(resource)) { - continue; - } - processedWidgets.add(resource); - - String widgetName = resource; - String filePathString = widgetJsonDir + "/" + widgetName + "-" + modelVersion + ".json"; - File f = new File(filePathString); - if (f.exists()) { - System.out.println(f.toString()); - String json = FileUtils.readFileToString(f, Charset.defaultCharset()); - - meObject = loader.unmarshal("Model", json); - String modelInvariantId = meObject.getValue("model-invariant-id"); - if (meObject.hasProperty("model-vers")) { - Introspector modelVers = meObject.getWrappedValue("model-vers"); - List<Introspector> modelVerList = modelVers.getWrappedListValue("model-ver"); - for (Introspector modelVer : modelVerList) { - - List<Introspector> relList = new ArrayList<>(); - Introspector widgetRelationship = makeWidgetRelationship(loader, modelInvariantId, - modelVer.getValue("model-version-id").toString()); - relList.add(widgetRelationship); - - widgetToRelationship.put(widgetName, relList); - } - } - } - } - } - - //source vnf-id, related service-instance-id, all related vnfs in this service-instance-id - //this should be abstracted and moved to a file - - List<Introspector> genericVnfRelationship = widgetToRelationship.get("generic-vnf"); - List<Introspector> vserverRelationship = widgetToRelationship.get("vserver"); - List<Introspector> tenantRelationship = widgetToRelationship.get("tenant"); - List<Introspector> cloudRegionRelationship = widgetToRelationship.get("cloud-region"); - List<Introspector> esrSystemInfoRelationship = widgetToRelationship.get("esr-system-info"); - - Introspector namedQueryObj = loader.introspectorFromName("named-query"); - namedQueryObj.setValue("named-query-uuid", namedQueryUuid); - namedQueryObj.setValue("named-query-name", "vnf-to-esr-system-info"); - namedQueryObj.setValue("named-query-version", "1.0"); - namedQueryObj.setValue("description", "Named Query - VNF to ESR System Info"); - - Introspector genericVnfNQE = setupNQElements(namedQueryObj, genericVnfRelationship); - - Introspector vserverNQE = setupNQElements(genericVnfNQE, vserverRelationship); - - Introspector tenantNQE = setupNQElements(vserverNQE, tenantRelationship); - - Introspector cloudRegionNQE = setupNQElements(tenantNQE, cloudRegionRelationship); - - Introspector esrSystemInfoNQE = setupNQElements(cloudRegionNQE, esrSystemInfoRelationship); - - System.out.println(namedQueryObj.marshal(true)); - - } - - System.exit(0); - - } - - private static Introspector setupNQElements (Introspector nqeObj, List<Introspector> listOfRelationships) { - Introspector newNQElement = null; - try { - Introspector newNQElements = null; - List<Object> nqElementList = null; - if (nqeObj.getWrappedValue("named-query-elements") != null) { - newNQElements = nqeObj.getWrappedValue("named-query-elements"); - nqElementList = newNQElements.getValue("named-query-element"); - } else { - newNQElements = nqeObj.newIntrospectorInstanceOfProperty("named-query-elements"); - nqeObj.setValue("named-query-elements", newNQElements.getUnderlyingObject()); - nqElementList = newNQElements.getValue("named-query-element"); - } - newNQElement = loadNQElement(newNQElements, listOfRelationships); - if (newNQElement != null) { - nqElementList.add(newNQElement.getUnderlyingObject()); - } - - } catch (AAIUnknownObjectException e) { - logger.info("AAIUnknownObjectException in MakeNamedQuery.setupNQElements() "+e); - e.printStackTrace(); - } catch (IllegalArgumentException e) { - logger.info("IllegalArgumentException in MakeNamedQuery.setupNQElements() "+e); - e.printStackTrace(); - } - return newNQElement; - } - - private static Introspector loadNQElement (Introspector nqElements, List<Introspector> listOfRelationships) { - Introspector newNqElement = null; - try { - newNqElement = nqElements.getLoader().introspectorFromName("named-query-element"); - - //newNqElement.setValue("named-query-element-uuid", UUID.randomUUID().toString()); - - Introspector newRelationshipList = newNqElement.getLoader().introspectorFromName("relationship-list"); - newNqElement.setValue("relationship-list", newRelationshipList.getUnderlyingObject()); - - List<Object> newRelationshipListList = newRelationshipList.getValue("relationship"); - - for (Introspector rel : listOfRelationships) { - newRelationshipListList.add(rel.getUnderlyingObject()); - } - - } catch (AAIUnknownObjectException e) { - logger.info("AAIUnknownObjectException in MakeNamedQuery.loadNQElement() "+e); - e.printStackTrace(); - } catch (IllegalArgumentException e) { - logger.info("IllegalArgumentException in MakeNamedQuery.loadNQElement() "+e); - e.printStackTrace(); - } - return newNqElement; - - } - private static Introspector makeWidgetRelationship(Loader loader, String modelInvariantId, String modelVersionId) { - - Introspector newRelationship = null; - try { - newRelationship = loader.introspectorFromName("relationship"); - - List<Object> newRelationshipData = newRelationship.getValue("relationship-data"); - - newRelationship.setValue("related-to", "model"); - - Introspector newRelationshipDatum1 = newRelationship.getLoader().introspectorFromName("relationship-data"); - Introspector newRelationshipDatum2 = newRelationship.getLoader().introspectorFromName("relationship-data"); - - - newRelationshipDatum1.setValue("relationship-key", "model.model-invariant-id"); - newRelationshipDatum1.setValue("relationship-value", modelInvariantId); - - //newRelationshipDatum2.setValue("relationship-key", "model-ver.model-version-id"); - //newRelationshipDatum2.setValue("relationship-value", modelVersionId); - - newRelationshipData.add(newRelationshipDatum1.getUnderlyingObject()); - //newRelationshipData.add(newRelationshipDatum2.getUnderlyingObject()); - } catch (AAIUnknownObjectException e) { - logger.info("AAIUnknownObjectException in MakeNamedQuery.makeWidgetRelationship() "+e); - e.printStackTrace(); - } catch (IllegalArgumentException e) { - logger.info("IllegalArgumentException in MakeNamedQuery.makeWidgetRelationship() "+e); - e.printStackTrace(); - } - - return newRelationship; - } - -}
\ No newline at end of file + + private static final Logger logger = LoggerFactory.getLogger(MakeNamedQuery.class.getName()); + + public static void main(String[] args) throws Exception { + String _apiVersion = AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP); + String widgetJsonDir = null; + String modelVersion = null; + String namedQueryUuid = UUID.randomUUID().toString(); + if (args.length > 0) { + if (args[0] != null) { + _apiVersion = args[0]; + } + if (args[1] != null) { + widgetJsonDir = args[1]; + } + if (args[2] != null) { + modelVersion = args[2]; + } + if (args[3] != null) { + namedQueryUuid = args[3]; + } + } + + if (widgetJsonDir == null) { + System.err.println("You must specify a directory for widgetModelJson"); + System.exit(0); + } + if (modelVersion == null) { + System.err.println("You must specify a modelVersion"); + System.exit(0); + } + + AnnotationConfigApplicationContext ctx = + new AnnotationConfigApplicationContext("org.onap.aai.config", "org.onap.aai.setup"); + + LoaderFactory loaderFactory = ctx.getBean(LoaderFactory.class); + SchemaVersions schemaVersions = ctx.getBean(SchemaVersions.class); + + if (schemaVersions.getVersions().contains(_apiVersion)) { + + Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, + new SchemaVersion(_apiVersion)); + + // iterate the collection of resources + + ArrayList<String> processedWidgets = new ArrayList<>(); + + HashMap<String, List<Introspector>> widgetToRelationship = new HashMap<>(); + for (Entry<String, Introspector> aaiResEnt : loader.getAllObjects().entrySet()) { + Introspector meObject; + // no need for a ModelVers DynamicEntity + + Introspector aaiRes = aaiResEnt.getValue(); + + if (!(aaiRes.isContainer() || aaiRes.getName().equals("aai-internal"))) { + String resource = aaiRes.getName(); + + if (processedWidgets.contains(resource)) { + continue; + } + processedWidgets.add(resource); + + String widgetName = resource; + String filePathString = + widgetJsonDir + "/" + widgetName + "-" + modelVersion + ".json"; + File f = new File(filePathString); + if (f.exists()) { + System.out.println(f.toString()); + String json = FileUtils.readFileToString(f, Charset.defaultCharset()); + + meObject = loader.unmarshal("Model", json); + String modelInvariantId = meObject.getValue("model-invariant-id"); + if (meObject.hasProperty("model-vers")) { + Introspector modelVers = meObject.getWrappedValue("model-vers"); + List<Introspector> modelVerList = + modelVers.getWrappedListValue("model-ver"); + for (Introspector modelVer : modelVerList) { + + List<Introspector> relList = new ArrayList<>(); + Introspector widgetRelationship = + makeWidgetRelationship(loader, modelInvariantId, + modelVer.getValue("model-version-id").toString()); + relList.add(widgetRelationship); + + widgetToRelationship.put(widgetName, relList); + } + } + } + } + } + + // source vnf-id, related service-instance-id, all related vnfs in this + // service-instance-id + // this should be abstracted and moved to a file + + List<Introspector> genericVnfRelationship = widgetToRelationship.get("generic-vnf"); + List<Introspector> vserverRelationship = widgetToRelationship.get("vserver"); + List<Introspector> tenantRelationship = widgetToRelationship.get("tenant"); + List<Introspector> cloudRegionRelationship = widgetToRelationship.get("cloud-region"); + List<Introspector> esrSystemInfoRelationship = + widgetToRelationship.get("esr-system-info"); + + Introspector namedQueryObj = loader.introspectorFromName("named-query"); + namedQueryObj.setValue("named-query-uuid", namedQueryUuid); + namedQueryObj.setValue("named-query-name", "vnf-to-esr-system-info"); + namedQueryObj.setValue("named-query-version", "1.0"); + namedQueryObj.setValue("description", "Named Query - VNF to ESR System Info"); + + Introspector genericVnfNQE = setupNQElements(namedQueryObj, genericVnfRelationship); + + Introspector vserverNQE = setupNQElements(genericVnfNQE, vserverRelationship); + + Introspector tenantNQE = setupNQElements(vserverNQE, tenantRelationship); + + Introspector cloudRegionNQE = setupNQElements(tenantNQE, cloudRegionRelationship); + + Introspector esrSystemInfoNQE = + setupNQElements(cloudRegionNQE, esrSystemInfoRelationship); + + System.out.println(namedQueryObj.marshal(true)); + + } + + System.exit(0); + + } + + private static Introspector setupNQElements(Introspector nqeObj, + List<Introspector> listOfRelationships) { + Introspector newNQElement = null; + try { + Introspector newNQElements = null; + List<Object> nqElementList = null; + if (nqeObj.getWrappedValue("named-query-elements") != null) { + newNQElements = nqeObj.getWrappedValue("named-query-elements"); + nqElementList = newNQElements.getValue("named-query-element"); + } else { + newNQElements = nqeObj.newIntrospectorInstanceOfProperty("named-query-elements"); + nqeObj.setValue("named-query-elements", newNQElements.getUnderlyingObject()); + nqElementList = newNQElements.getValue("named-query-element"); + } + newNQElement = loadNQElement(newNQElements, listOfRelationships); + if (newNQElement != null) { + nqElementList.add(newNQElement.getUnderlyingObject()); + } + + } catch (AAIUnknownObjectException e) { + logger.info("AAIUnknownObjectException in MakeNamedQuery.setupNQElements() " + e); + e.printStackTrace(); + } catch (IllegalArgumentException e) { + logger.info("IllegalArgumentException in MakeNamedQuery.setupNQElements() " + e); + e.printStackTrace(); + } + return newNQElement; + } + + private static Introspector loadNQElement(Introspector nqElements, + List<Introspector> listOfRelationships) { + Introspector newNqElement = null; + try { + newNqElement = nqElements.getLoader().introspectorFromName("named-query-element"); + + // newNqElement.setValue("named-query-element-uuid", UUID.randomUUID().toString()); + + Introspector newRelationshipList = + newNqElement.getLoader().introspectorFromName("relationship-list"); + newNqElement.setValue("relationship-list", newRelationshipList.getUnderlyingObject()); + + List<Object> newRelationshipListList = newRelationshipList.getValue("relationship"); + + for (Introspector rel : listOfRelationships) { + newRelationshipListList.add(rel.getUnderlyingObject()); + } + + } catch (AAIUnknownObjectException e) { + logger.info("AAIUnknownObjectException in MakeNamedQuery.loadNQElement() " + e); + e.printStackTrace(); + } catch (IllegalArgumentException e) { + logger.info("IllegalArgumentException in MakeNamedQuery.loadNQElement() " + e); + e.printStackTrace(); + } + return newNqElement; + + } + + private static Introspector makeWidgetRelationship(Loader loader, String modelInvariantId, + String modelVersionId) { + + Introspector newRelationship = null; + try { + newRelationship = loader.introspectorFromName("relationship"); + + List<Object> newRelationshipData = newRelationship.getValue("relationship-data"); + + newRelationship.setValue("related-to", "model"); + + Introspector newRelationshipDatum1 = + newRelationship.getLoader().introspectorFromName("relationship-data"); + Introspector newRelationshipDatum2 = + newRelationship.getLoader().introspectorFromName("relationship-data"); + + newRelationshipDatum1.setValue("relationship-key", "model.model-invariant-id"); + newRelationshipDatum1.setValue("relationship-value", modelInvariantId); + + // newRelationshipDatum2.setValue("relationship-key", "model-ver.model-version-id"); + // newRelationshipDatum2.setValue("relationship-value", modelVersionId); + + newRelationshipData.add(newRelationshipDatum1.getUnderlyingObject()); + // newRelationshipData.add(newRelationshipDatum2.getUnderlyingObject()); + } catch (AAIUnknownObjectException e) { + logger + .info("AAIUnknownObjectException in MakeNamedQuery.makeWidgetRelationship() " + e); + e.printStackTrace(); + } catch (IllegalArgumentException e) { + logger.info("IllegalArgumentException in MakeNamedQuery.makeWidgetRelationship() " + e); + e.printStackTrace(); + } + + return newRelationship; + } + +} diff --git a/aai-traversal/src/main/java/org/onap/aai/util/NodesQueryBuilder.java b/aai-traversal/src/main/java/org/onap/aai/util/NodesQueryBuilder.java index 978e484..1250270 100644 --- a/aai-traversal/src/main/java/org/onap/aai/util/NodesQueryBuilder.java +++ b/aai-traversal/src/main/java/org/onap/aai/util/NodesQueryBuilder.java @@ -20,10 +20,12 @@ package org.onap.aai.util; -import org.onap.aai.serialization.engines.TransactionalGraphEngine; -import javax.ws.rs.core.HttpHeaders; import java.util.List; + +import javax.ws.rs.core.HttpHeaders; + import org.onap.aai.introspection.Loader; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.serialization.queryformats.utils.UrlBuilder; /** diff --git a/aai-traversal/src/main/java/org/onap/aai/util/TraversalConstants.java b/aai-traversal/src/main/java/org/onap/aai/util/TraversalConstants.java index fdeefe1..0094bc2 100644 --- a/aai-traversal/src/main/java/org/onap/aai/util/TraversalConstants.java +++ b/aai-traversal/src/main/java/org/onap/aai/util/TraversalConstants.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,23 +20,25 @@ package org.onap.aai.util; public final class TraversalConstants { - public static final int AAI_QUERY_PORT = 8446; - - public static final String AAI_TRAVERSAL_TIMEOUT_LIMIT = "aai.traversal.timeoutlimit"; - public static final String AAI_TRAVERSAL_TIMEOUT_ENABLED = "aai.traversal.timeoutenabled"; - public static final String AAI_TRAVERSAL_TIMEOUT_APP = "aai.traversal.timeout.appspecific"; - - public static final String AAI_TRAVERSAL_DSL_TIMEOUT_LIMIT = "aai.traversal.dsl.timeoutlimit"; - public static final String AAI_TRAVERSAL_DSL_TIMEOUT_ENABLED = "aai.traversal.dsl.timeoutenabled"; - public static final String AAI_TRAVERSAL_DSL_TIMEOUT_APP = "aai.traversal.dsl.timeout.appspecific"; - public static final String DSL_NOVALIDATION_CLIENTS = "aai.traversal.dsl.novalidation.clients"; - public static final String DSL_OVERRIDE = "aai.dsl.override"; - public static final String DSL_MAX_NODE_COUNT = "15"; + public static final int AAI_QUERY_PORT = 8446; + + public static final String AAI_TRAVERSAL_TIMEOUT_LIMIT = "aai.traversal.timeoutlimit"; + public static final String AAI_TRAVERSAL_TIMEOUT_ENABLED = "aai.traversal.timeoutenabled"; + public static final String AAI_TRAVERSAL_TIMEOUT_APP = "aai.traversal.timeout.appspecific"; + + public static final String AAI_TRAVERSAL_DSL_TIMEOUT_LIMIT = "aai.traversal.dsl.timeoutlimit"; + public static final String AAI_TRAVERSAL_DSL_TIMEOUT_ENABLED = + "aai.traversal.dsl.timeoutenabled"; + public static final String AAI_TRAVERSAL_DSL_TIMEOUT_APP = + "aai.traversal.dsl.timeout.appspecific"; + public static final String DSL_NOVALIDATION_CLIENTS = "aai.traversal.dsl.novalidation.clients"; + public static final String DSL_OVERRIDE = "aai.dsl.override"; + public static final String DSL_MAX_NODE_COUNT = "15"; public static final long HISTORY_MAX_HOURS = 192; - - private TraversalConstants() { - // prevent instantiation - } + + private TraversalConstants() { + // prevent instantiation + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java b/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java index 39aa31c..87d6d8f 100644 --- a/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java +++ b/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,19 @@ */ package org.onap.aai.web; +import static java.lang.Boolean.parseBoolean; +import static java.util.Comparator.comparingInt; + import com.google.common.collect.Sets; + +import java.lang.reflect.AnnotatedElement; +import java.util.Collection; +import java.util.Comparator; +import java.util.Set; +import java.util.logging.Logger; + +import javax.annotation.Priority; + import org.glassfish.jersey.server.ResourceConfig; import org.onap.aai.rest.*; import org.onap.aai.rest.search.ModelAndNamedQueryRestProvider; @@ -32,21 +44,12 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.core.env.Environment; -import javax.annotation.Priority; -import java.lang.reflect.AnnotatedElement; -import java.util.Collection; -import java.util.Comparator; -import java.util.Set; -import java.util.logging.Logger; - -import static java.lang.Boolean.parseBoolean; -import static java.util.Comparator.comparingInt; - @Configuration public class JerseyConfiguration { private static final Logger log = Logger.getLogger(JerseyConfiguration.class.getName()); - private static final org.slf4j.Logger logger = LoggerFactory.getLogger(JerseyConfiguration.class.getName()); + private static final org.slf4j.Logger logger = + LoggerFactory.getLogger(JerseyConfiguration.class.getName()); private static final String LOGGING_ENABLED_PROPERTY = "aai.request.logging.enabled"; private static final boolean ENABLE_RESPONSE_LOGGING = false; @@ -62,18 +65,11 @@ public class JerseyConfiguration { public ResourceConfig resourceConfig() { ResourceConfig resourceConfig = new ResourceConfig(); - Set<Class<?>> classes = Sets.newHashSet( - SearchProvider.class, - ModelAndNamedQueryRestProvider.class, - QueryConsumer.class, - RecentAPIConsumer.class, - DslConsumer.class, - EchoResponse.class, - CQ2Gremlin.class, - CQ2GremlinTest.class - ); - Set<Class<?>> filterClasses = Sets.newHashSet( - org.onap.aai.interceptors.pre.RequestTransactionLogging.class, + Set<Class<?>> classes = Sets.newHashSet(SearchProvider.class, + ModelAndNamedQueryRestProvider.class, QueryConsumer.class, RecentAPIConsumer.class, + DslConsumer.class, EchoResponse.class, CQ2Gremlin.class, CQ2GremlinTest.class); + Set<Class<?>> filterClasses = + Sets.newHashSet(org.onap.aai.interceptors.pre.RequestTransactionLogging.class, org.onap.aai.interceptors.pre.HeaderValidation.class, org.onap.aai.interceptors.pre.HttpHeaderInterceptor.class, org.onap.aai.interceptors.pre.OneWaySslAuthorization.class, @@ -84,28 +80,24 @@ public class JerseyConfiguration { org.onap.aai.interceptors.pre.RequestModification.class, org.onap.aai.interceptors.post.InvalidResponseStatus.class, org.onap.aai.interceptors.post.ResponseTransactionLogging.class, - org.onap.aai.interceptors.post.ResponseHeaderManipulation.class - ); + org.onap.aai.interceptors.post.ResponseHeaderManipulation.class); resourceConfig.registerClasses(classes); logger.debug("REGISTERED CLASSES " + classes.toString()); throwIfPriorityAnnotationAbsent(filterClasses); - filterClasses.stream() - .filter(this::isEnabledByActiveProfiles) - .sorted(priorityComparator()) - .forEach(resourceConfig::register); - - filterClasses.stream() - .filter(this::isEnabledByActiveProfiles) - .sorted(priorityComparator()) - .forEach(s -> logger.debug("REGISTERED FILTERS " + s.getName())); + filterClasses.stream().filter(this::isEnabledByActiveProfiles).sorted(priorityComparator()) + .forEach(resourceConfig::register); + + filterClasses.stream().filter(this::isEnabledByActiveProfiles).sorted(priorityComparator()) + .forEach(s -> logger.debug("REGISTERED FILTERS " + s.getName())); return resourceConfig; } private <T> void throwIfPriorityAnnotationAbsent(Collection<Class<? extends T>> classes) { for (Class clazz : classes) { if (!clazz.isAnnotationPresent(Priority.class)) { - logger.debug("throwIfPriorityAnnotationAbsent: missing filter priority for : " + clazz.getName()); + logger.debug("throwIfPriorityAnnotationAbsent: missing filter priority for : " + + clazz.getName()); throw new MissingFilterPriorityException(clazz); } } @@ -120,9 +112,10 @@ public class JerseyConfiguration { } private boolean isEnabledByActiveProfiles(AnnotatedElement annotatedElement) { - boolean result = !annotatedElement.isAnnotationPresent(Profile.class) || - environment.acceptsProfiles(annotatedElement.getAnnotation(Profile.class).value()); - logger.debug("isEnabledByActiveProfiles: annotatedElement: " + annotatedElement.toString() + " result=" + result); + boolean result = !annotatedElement.isAnnotationPresent(Profile.class) + || environment.acceptsProfiles(annotatedElement.getAnnotation(Profile.class).value()); + logger.debug("isEnabledByActiveProfiles: annotatedElement: " + annotatedElement.toString() + + " result=" + result); return result; } @@ -131,4 +124,4 @@ public class JerseyConfiguration { super("Container filter " + clazz.getName() + " does not have @Priority annotation"); } } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/main/java/org/onap/aai/web/LocalHostAccessLog.java b/aai-traversal/src/main/java/org/onap/aai/web/LocalHostAccessLog.java index d2a4e89..cea7fc5 100644 --- a/aai-traversal/src/main/java/org/onap/aai/web/LocalHostAccessLog.java +++ b/aai-traversal/src/main/java/org/onap/aai/web/LocalHostAccessLog.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,6 +20,9 @@ package org.onap.aai.web; import ch.qos.logback.access.jetty.RequestLogImpl; + +import java.util.Arrays; + import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.server.handler.RequestLogHandler; import org.eclipse.jetty.util.thread.QueuedThreadPool; @@ -29,39 +32,37 @@ import org.springframework.boot.web.servlet.server.AbstractServletWebServerFacto import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.Arrays; - @Configuration public class LocalHostAccessLog { @Bean public AbstractServletWebServerFactory jettyConfigBean( - @Value("${jetty.threadPool.maxThreads:200}") final String maxThreads, - @Value("${jetty.threadPool.minThreads:8}") final String minThreads - ){ + @Value("${jetty.threadPool.maxThreads:200}") final String maxThreads, + @Value("${jetty.threadPool.minThreads:8}") final String minThreads) { JettyServletWebServerFactory jef = new JettyServletWebServerFactory(); - jef.addServerCustomizers((org.springframework.boot.web.embedded.jetty.JettyServerCustomizer) server -> { + jef.addServerCustomizers( + (org.springframework.boot.web.embedded.jetty.JettyServerCustomizer) server -> { - HandlerCollection handlers = new HandlerCollection(); + HandlerCollection handlers = new HandlerCollection(); - Arrays.stream(server.getHandlers()).forEach(handlers::addHandler); + Arrays.stream(server.getHandlers()).forEach(handlers::addHandler); - RequestLogHandler requestLogHandler = new RequestLogHandler(); - requestLogHandler.setServer(server); + RequestLogHandler requestLogHandler = new RequestLogHandler(); + requestLogHandler.setServer(server); - RequestLogImpl requestLogImpl = new RequestLogImpl(); - requestLogImpl.setResource("/localhost-access-logback.xml"); - requestLogImpl.start(); + RequestLogImpl requestLogImpl = new RequestLogImpl(); + requestLogImpl.setResource("/localhost-access-logback.xml"); + requestLogImpl.start(); - requestLogHandler.setRequestLog(requestLogImpl); - handlers.addHandler(requestLogHandler); - server.setHandler(handlers); + requestLogHandler.setRequestLog(requestLogImpl); + handlers.addHandler(requestLogHandler); + server.setHandler(handlers); - final QueuedThreadPool threadPool = server.getBean(QueuedThreadPool.class); - threadPool.setMaxThreads(Integer.valueOf(maxThreads)); - threadPool.setMinThreads(Integer.valueOf(minThreads)); - }); + final QueuedThreadPool threadPool = server.getBean(QueuedThreadPool.class); + threadPool.setMaxThreads(Integer.valueOf(maxThreads)); + threadPool.setMinThreads(Integer.valueOf(minThreads)); + }); return jef; } } diff --git a/aai-traversal/src/main/java/org/onap/aai/web/MicrometerConfiguration.java b/aai-traversal/src/main/java/org/onap/aai/web/MicrometerConfiguration.java index 7c93e7d..77dbe96 100644 --- a/aai-traversal/src/main/java/org/onap/aai/web/MicrometerConfiguration.java +++ b/aai-traversal/src/main/java/org/onap/aai/web/MicrometerConfiguration.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,23 +18,24 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.web; + import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; import io.micrometer.jersey2.server.JerseyTags; import io.micrometer.jersey2.server.JerseyTagsProvider; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + import org.glassfish.jersey.server.ContainerResponse; import org.glassfish.jersey.server.monitoring.RequestEvent; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** - * Configuration Class to add customized tags to http metrics scraped in /actuator/prometheus endpoint + * Configuration Class to add customized tags to http metrics scraped in /actuator/prometheus + * endpoint */ @Configuration -@ConditionalOnProperty( - value="scrape.uri.metrics", - havingValue = "true") +@ConditionalOnProperty(value = "scrape.uri.metrics", havingValue = "true") public class MicrometerConfiguration { private static final String TAG_AAI_URI = "aai_uri"; private static final String NOT_AVAILABLE = "NOT AVAILABLE"; @@ -46,8 +47,10 @@ public class MicrometerConfiguration { public Iterable httpRequestTags(RequestEvent event) { ContainerResponse response = event.getContainerResponse(); return Tags.of(JerseyTags.method(event.getContainerRequest()), - JerseyTags.exception(event), JerseyTags.status(response), JerseyTags.outcome(response), getAaiUriTag(event)); + JerseyTags.exception(event), JerseyTags.status(response), + JerseyTags.outcome(response), getAaiUriTag(event)); } + private Tag getAaiUriTag(RequestEvent event) { String aai_uri = event.getUriInfo().getRequestUri().toString(); if (aai_uri == null) { @@ -55,9 +58,11 @@ public class MicrometerConfiguration { } return Tag.of(TAG_AAI_URI, aai_uri); } + @Override public Iterable<Tag> httpLongRequestTags(RequestEvent event) { - return Tags.of(JerseyTags.method(event.getContainerRequest()), JerseyTags.uri(event)); + return Tags.of(JerseyTags.method(event.getContainerRequest()), + JerseyTags.uri(event)); } }; } diff --git a/aai-traversal/src/main/java/org/onap/aai/web/WebConfiguration.java b/aai-traversal/src/main/java/org/onap/aai/web/WebConfiguration.java index 5300611..a2a4271 100644 --- a/aai-traversal/src/main/java/org/onap/aai/web/WebConfiguration.java +++ b/aai-traversal/src/main/java/org/onap/aai/web/WebConfiguration.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,20 +27,16 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter @Configuration public class WebConfiguration { - @Bean - public WebMvcConfigurerAdapter forwardToIndex() { - return new WebMvcConfigurerAdapter() { - @Override - public void addViewControllers(ViewControllerRegistry registry) { - registry.addViewController("/swagger").setViewName( - "redirect:/swagger/index.html"); - registry.addViewController("/swagger/").setViewName( - "redirect:/swagger/index.html"); - registry.addViewController("/docs").setViewName( - "redirect:/docs/html/index.html"); - registry.addViewController("/docs/").setViewName( - "redirect:/docs/html/index.html"); - } - }; - } -}
\ No newline at end of file + @Bean + public WebMvcConfigurerAdapter forwardToIndex() { + return new WebMvcConfigurerAdapter() { + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/swagger").setViewName("redirect:/swagger/index.html"); + registry.addViewController("/swagger/").setViewName("redirect:/swagger/index.html"); + registry.addViewController("/docs").setViewName("redirect:/docs/html/index.html"); + registry.addViewController("/docs/").setViewName("redirect:/docs/html/index.html"); + } + }; + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/AAIGremlinQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/AAIGremlinQueryTest.java index 2009389..266cb60 100644 --- a/aai-traversal/src/test/java/org/onap/aai/AAIGremlinQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/AAIGremlinQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,16 @@ */ package org.onap.aai; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.IsNot.not; +import static org.junit.Assert.fail; + import com.jayway.jsonpath.JsonPath; + +import java.util.*; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.JanusGraphTransaction; @@ -32,8 +41,8 @@ import org.onap.aai.util.AAIConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; import org.springframework.context.annotation.Import; import org.springframework.http.*; import org.springframework.test.context.ContextConfiguration; @@ -42,14 +51,6 @@ import org.springframework.test.context.junit4.rules.SpringClassRule; import org.springframework.test.context.junit4.rules.SpringMethodRule; import org.springframework.web.client.RestTemplate; -import java.util.*; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.core.IsNot.not; -import static org.junit.Assert.fail; - /** * A sample junit test using spring boot that provides the ability to spin * up the application from the junit layer and run rest requests against @@ -61,7 +62,9 @@ import static org.junit.Assert.fail; * This can be used to potentially replace a lot of the fitnesse tests since * they will be testing against the same thing except fitnesse uses hbase */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") @ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @Import(TraversalTestConfiguration.class) @@ -94,7 +97,7 @@ public class AAIGremlinQueryTest { AAIConfig.init(); } - public void createGraph(){ + public void createGraph() { JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); @@ -104,18 +107,14 @@ public class AAIGremlinQueryTest { GraphTraversalSource g = transaction.traversal(); - g.addV() - .property("aai-node-type", "pserver") - .property("hostname", "test-pserver") - .property("in-maint", false) - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver") - .next(); + g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver") + .property("in-maint", false).property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver").next(); - } catch(Exception ex){ + } catch (Exception ex) { success = false; } finally { - if(success){ + if (success) { transaction.commit(); } else { transaction.rollback(); @@ -157,7 +156,8 @@ public class AAIGremlinQueryTest { String endpoint = "/aai/v11/query?format=console"; httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); String result = JsonPath.read(responseEntity.getBody().toString(), "$.results[0].result"); @@ -184,7 +184,8 @@ public class AAIGremlinQueryTest { String endpoint = "/aai/v11/query?format=console"; httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); String result = JsonPath.read(responseEntity.getBody().toString(), "$.results[0].result"); @@ -202,32 +203,26 @@ public class AAIGremlinQueryTest { headers.setAccept(Collections.singletonList(MediaType.APPLICATION_XML)); httpEntity = new HttpEntity(payload, headers); String endpoint = "/aai/v11/query?format=count"; - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); - assertThat(responseEntity.getBody().toString(), containsString("<results><result><pserver>1</pserver></result></results>")); + assertThat(responseEntity.getBody().toString(), + containsString("<results><result><pserver>1</pserver></result></results>")); gremlinQueryMap.put("gremlin-query", "g.V().has('hostname', 'test-pserver')"); payload = PayloadUtil.getTemplatePayload("gremlin-query.json", gremlinQueryMap); httpEntity = new HttpEntity(payload, headers); - Format[] formats = new Format[]{ - Format.graphson, - Format.pathed, - Format.id, - Format.resource, - Format.simple, - Format.resource_and_url, - Format.console, - Format.raw, - Format.count - }; + Format[] formats = new Format[] {Format.graphson, Format.pathed, Format.id, Format.resource, + Format.simple, Format.resource_and_url, Format.console, Format.raw, Format.count}; - for(Format format : formats){ + for (Format format : formats) { endpoint = "/aai/v11/query?format=" + format.toString(); logger.debug("Current endpoint being executed {}", endpoint); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); String responseBody = responseEntity.getBody().toString(); @@ -236,6 +231,7 @@ public class AAIGremlinQueryTest { assertThat(responseBody, is(not(containsString("<result><result>")))); } } + @Test public void testPserverCountUsingDsl() throws Exception { Map<String, String> dslQuerymap = new HashMap<>(); @@ -248,7 +244,8 @@ public class AAIGremlinQueryTest { String endpoint = "/aai/v11/dsl?format=console"; httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); String result = JsonPath.read(responseEntity.getBody().toString(), "$.results[0].result"); @@ -266,30 +263,24 @@ public class AAIGremlinQueryTest { headers.setAccept(Collections.singletonList(MediaType.APPLICATION_XML)); httpEntity = new HttpEntity(payload, headers); String endpoint = "/aai/v11/dsl?format=count"; - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); - assertThat(responseEntity.getBody().toString(), containsString("<results><result><pserver>1</pserver></result></results>")); + assertThat(responseEntity.getBody().toString(), + containsString("<results><result><pserver>1</pserver></result></results>")); httpEntity = new HttpEntity(payload, headers); - Format[] formats = new Format[]{ - Format.graphson, - Format.pathed, - Format.id, - Format.resource, - Format.simple, - Format.resource_and_url, - Format.console, - Format.raw, - Format.count - }; + Format[] formats = new Format[] {Format.graphson, Format.pathed, Format.id, Format.resource, + Format.simple, Format.resource_and_url, Format.console, Format.raw, Format.count}; - for(Format format : formats){ + for (Format format : formats) { endpoint = "/aai/v11/dsl?format=" + format.toString(); logger.debug("Current endpoint being executed {}", endpoint); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); String responseBody = responseEntity.getBody().toString(); @@ -309,14 +300,12 @@ public class AAIGremlinQueryTest { GraphTraversalSource g = transaction.traversal(); - g.V().has("source-of-truth", "JUNIT") - .toList() - .forEach(Vertex::remove); + g.V().has("source-of-truth", "JUNIT").toList().forEach(Vertex::remove); - } catch(Exception ex){ + } catch (Exception ex) { success = false; } finally { - if(success){ + if (success) { transaction.commit(); } else { transaction.rollback(); diff --git a/aai-traversal/src/test/java/org/onap/aai/AAISetup.java b/aai-traversal/src/test/java/org/onap/aai/AAISetup.java index a13384a..e1cbe45 100644 --- a/aai-traversal/src/test/java/org/onap/aai/AAISetup.java +++ b/aai-traversal/src/test/java/org/onap/aai/AAISetup.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,83 +27,74 @@ import java.util.Map; import org.apache.commons.io.IOUtils; import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Rule; import org.onap.aai.config.*; import org.onap.aai.dbgraphmap.SearchGraph; import org.onap.aai.edges.EdgeIngestor; import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.MoxyLoader; import org.onap.aai.nodes.NodeIngestor; import org.onap.aai.rest.db.HttpEntry; import org.onap.aai.rest.dsl.DslQueryProcessor; import org.onap.aai.rest.search.GremlinServerSingleton; import org.onap.aai.serialization.db.EdgeSerializer; 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.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.ContextConfiguration; -import org.onap.aai.introspection.MoxyLoader; -import org.onap.aai.setup.SchemaLocationsBean; -import org.junit.ClassRule; -import org.junit.Rule; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.rules.SpringClassRule; import org.springframework.test.context.junit4.rules.SpringMethodRule; -@ContextConfiguration(classes = { - ConfigConfiguration.class, - AAIConfigTranslator.class, - EdgeIngestor.class, - EdgeSerializer.class, - NodeIngestor.class, - SpringContextAware.class, - IntrospectionConfig.class , - RestBeanConfig.class, - SearchConfiguration.class, - DslConfiguration.class, - XmlFormatTransformerConfiguration.class, - GremlinServerSingleton.class -}) -@TestPropertySource(properties = { - "schema.uri.base.path = /aai", - "schema.ingest.file = src/test/resources/application-test.properties" -}) +@ContextConfiguration( + classes = {ConfigConfiguration.class, AAIConfigTranslator.class, EdgeIngestor.class, + EdgeSerializer.class, NodeIngestor.class, SpringContextAware.class, + IntrospectionConfig.class, RestBeanConfig.class, SearchConfiguration.class, + DslConfiguration.class, XmlFormatTransformerConfiguration.class, + GremlinServerSingleton.class}) +@TestPropertySource( + properties = {"schema.uri.base.path = /aai", + "schema.ingest.file = src/test/resources/application-test.properties"}) public abstract class AAISetup { - @Autowired - protected NodeIngestor nodeIngestor; - - @Autowired - protected LoaderFactory loaderFactory; - - @Autowired - protected Map<SchemaVersion, MoxyLoader> moxyLoaderInstance; - - @Autowired - protected HttpEntry traversalHttpEntry; - - @Autowired - protected HttpEntry traversalUriHttpEntry; - - @Autowired + @Autowired + protected NodeIngestor nodeIngestor; + + @Autowired + protected LoaderFactory loaderFactory; + + @Autowired + protected Map<SchemaVersion, MoxyLoader> moxyLoaderInstance; + + @Autowired + protected HttpEntry traversalHttpEntry; + + @Autowired + protected HttpEntry traversalUriHttpEntry; + + @Autowired protected SearchGraph searchGraph; - - @Autowired - protected EdgeSerializer edgeSer; - - @Autowired - protected EdgeIngestor edgeIngestor; - @Autowired - protected DslQueryProcessor dslQueryProcessor; + @Autowired + protected EdgeSerializer edgeSer; + + @Autowired + protected EdgeIngestor edgeIngestor; + + @Autowired + protected DslQueryProcessor dslQueryProcessor; - @Autowired - protected SchemaVersions schemaVersions; + @Autowired + protected SchemaVersions schemaVersions; - @Autowired - protected GremlinServerSingleton gremlinServerSingleton; + @Autowired + protected GremlinServerSingleton gremlinServerSingleton; - @Value("${schema.uri.base.path}") - protected String basePath; + @Value("${schema.uri.base.path}") + protected String basePath; @ClassRule public static final SpringClassRule springClassRule = new SpringClassRule(); @@ -115,14 +106,12 @@ public abstract class AAISetup { public static void setupBundleconfig() throws Exception { System.setProperty("AJSC_HOME", "./"); System.setProperty("BUNDLECONFIG_DIR", "src/main/resources/"); - + } - + public String getPayload(String filename) throws IOException { - InputStream inputStream = getClass() - .getClassLoader() - .getResourceAsStream(filename); + InputStream inputStream = getClass().getClassLoader().getResourceAsStream(filename); String message = String.format("Unable to find the %s in src/test/resources", filename); assertNotNull(message, inputStream); @@ -131,11 +120,3 @@ public abstract class AAISetup { return resource; } } - - - - - - - - diff --git a/aai-traversal/src/test/java/org/onap/aai/HttpTestUtil.java b/aai-traversal/src/test/java/org/onap/aai/HttpTestUtil.java index f12c8c3..23342f8 100644 --- a/aai-traversal/src/test/java/org/onap/aai/HttpTestUtil.java +++ b/aai-traversal/src/test/java/org/onap/aai/HttpTestUtil.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,18 @@ */ package org.onap.aai; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.when; + +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import javax.ws.rs.core.*; + import org.javatuples.Pair; import org.mockito.Mockito; import org.onap.aai.config.SpringContextAware; @@ -37,17 +49,6 @@ import org.onap.aai.setup.SchemaVersions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.core.*; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import static org.mockito.Matchers.anyObject; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.when; - public class HttpTestUtil extends RESTAPI { private static final Logger logger = LoggerFactory.getLogger(HttpTestUtil.class); @@ -67,14 +68,14 @@ public class HttpTestUtil extends RESTAPI { private SchemaVersions schemaVersions; - public void init(){ + public void init() { schemaVersions = (SchemaVersions) SpringContextAware.getBean("schemaVersions"); - httpHeaders = Mockito.mock(HttpHeaders.class); - uriInfo = Mockito.mock(UriInfo.class); + httpHeaders = Mockito.mock(HttpHeaders.class); + uriInfo = Mockito.mock(UriInfo.class); - headersMultiMap = new MultivaluedHashMap<>(); - queryParameters = Mockito.spy(new MultivaluedHashMap<>()); + headersMultiMap = new MultivaluedHashMap<>(); + queryParameters = Mockito.spy(new MultivaluedHashMap<>()); headersMultiMap.add("X-FromAppId", "JUNIT"); headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString()); @@ -100,7 +101,8 @@ public class HttpTestUtil extends RESTAPI { when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON); } - public Response doPut(String uri, String payload) throws UnsupportedEncodingException, AAIException { + public Response doPut(String uri, String payload) + throws UnsupportedEncodingException, AAIException { this.init(); Response response = null; @@ -112,26 +114,27 @@ public class HttpTestUtil extends RESTAPI { uri = uri.replaceAll("/aai/", ""); logger.info("Starting the put request for the uri {} with payload {}", uri, payload); - String [] arr = uri.split("/"); + String[] arr = uri.split("/"); SchemaVersion version = null; - if(arr.length > 1){ - if(arr[0].matches("^v\\d+")){ + if (arr.length > 1) { + if (arr[0].matches("^v\\d+")) { version = new SchemaVersion(arr[0]); uri = uri.replaceAll("^v\\d+", ""); } } - if(version == null){ + if (version == null) { version = schemaVersions.getDefaultVersion(); } Mockito.when(uriInfo.getPath()).thenReturn(uri); - HttpEntry resourceHttpEntry = SpringContextAware.getBean("traversalHttpEntry", HttpEntry.class); + HttpEntry resourceHttpEntry = + SpringContextAware.getBean("traversalHttpEntry", HttpEntry.class); resourceHttpEntry.setHttpEntryProperties(version); - Loader loader = resourceHttpEntry.getLoader(); - dbEngine = resourceHttpEntry.getDbEngine(); + Loader loader = resourceHttpEntry.getLoader(); + dbEngine = resourceHttpEntry.getDbEngine(); URI uriObject = UriBuilder.fromPath(uri).build(); URIToObject uriToObject = new URIToObject(loader, uriObject); @@ -139,50 +142,54 @@ public class HttpTestUtil extends RESTAPI { String objType = uriToObject.getEntityName(); QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject); - logger.info("Unmarshalling the payload to this {}", objType); Introspector obj; HttpMethod httpMethod; - if(uri.contains("/relationship-list/relationship")){ - obj = loader.unmarshal("relationship", payload, org.onap.aai.restcore.MediaType.getEnum("application/json")); + if (uri.contains("/relationship-list/relationship")) { + obj = loader.unmarshal("relationship", payload, + org.onap.aai.restcore.MediaType.getEnum("application/json")); httpMethod = HttpMethod.PUT_EDGE; } else { - obj = loader.unmarshal(objType, payload, org.onap.aai.restcore.MediaType.getEnum("application/json")); + obj = loader.unmarshal(objType, payload, + org.onap.aai.restcore.MediaType.getEnum("application/json")); httpMethod = HttpMethod.PUT; this.validateIntrospector(obj, loader, uriObject, httpMethod); } - - DBRequest dbRequest = - new DBRequest.Builder(httpMethod, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION") - .rawRequestContent(payload).build(); + DBRequest dbRequest = new DBRequest.Builder(httpMethod, uriObject, uriQuery, obj, + httpHeaders, uriInfo, "JUNIT-TRANSACTION").rawRequestContent(payload).build(); List<DBRequest> dbRequestList = new ArrayList<>(); dbRequestList.add(dbRequest); - Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = resourceHttpEntry.process(dbRequestList, "JUNIT"); + Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = + resourceHttpEntry.process(dbRequestList, "JUNIT"); response = responsesTuple.getValue1().get(0).getValue1(); } catch (AAIException e) { - response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, e); - success = false; - } catch(Exception e){ + response = + this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, e); + success = false; + } catch (Exception e) { AAIException ex = new AAIException("AAI_4000", e); - response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, ex); + response = + this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, ex); success = false; } finally { - if(success){ - if(response != null){ - if((response.getStatus() / 100) == 2){ - logger.info("Successfully completed the PUT request with status {} and committing it to DB", response.getStatus()); + if (success) { + if (response != null) { + if ((response.getStatus() / 100) == 2) { + logger.info( + "Successfully completed the PUT request with status {} and committing it to DB", + response.getStatus()); } else { logFailure(HttpMethod.PUT, response); } } dbEngine.commit(); } else { - if(response != null) { + if (response != null) { logFailure(HttpMethod.PUT, response); } dbEngine.rollback(); @@ -204,33 +211,35 @@ public class HttpTestUtil extends RESTAPI { uri = uri.replaceAll("/aai/", ""); logger.info("Starting the GET request for the uri {} with depth {}", uri, "all"); - String [] arr = uri.split("/"); + String[] arr = uri.split("/"); SchemaVersion version = null; - if(arr.length > 1){ - if(arr[0].matches("^v\\d+")){ + if (arr.length > 1) { + if (arr[0].matches("^v\\d+")) { version = new SchemaVersion(arr[0]); uri = uri.replaceAll("^v\\d+", ""); } } - if(version == null){ + if (version == null) { version = schemaVersions.getDefaultVersion(); } - HttpEntry resourceHttpEntry = SpringContextAware.getBean("traversalHttpEntry", HttpEntry.class); + HttpEntry resourceHttpEntry = + SpringContextAware.getBean("traversalHttpEntry", HttpEntry.class); resourceHttpEntry.setHttpEntryProperties(version); - - Loader loader = resourceHttpEntry.getLoader(); - dbEngine = resourceHttpEntry.getDbEngine(); + + Loader loader = resourceHttpEntry.getLoader(); + dbEngine = resourceHttpEntry.getDbEngine(); URI uriObject = UriBuilder.fromPath(uri).build(); URIToObject uriToObject = new URIToObject(loader, uriObject); String objType = uriToObject.getEntityName(); queryParameters.add("depth", "all"); - QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject, queryParameters); + QueryParser uriQuery = + dbEngine.getQueryBuilder().createQueryFromURI(uriObject, queryParameters); Mockito.when(uriInfo.getPath()).thenReturn(uri); @@ -238,28 +247,32 @@ public class HttpTestUtil extends RESTAPI { Introspector obj = loader.introspectorFromName(objType); - DBRequest dbRequest = - new DBRequest.Builder(HttpMethod.GET, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION") - .build(); + DBRequest dbRequest = new DBRequest.Builder(HttpMethod.GET, uriObject, uriQuery, obj, + httpHeaders, uriInfo, "JUNIT-TRANSACTION").build(); List<DBRequest> dbRequestList = new ArrayList<>(); dbRequestList.add(dbRequest); - Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = resourceHttpEntry.process(dbRequestList, "JUNIT"); + Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = + resourceHttpEntry.process(dbRequestList, "JUNIT"); response = responsesTuple.getValue1().get(0).getValue1(); } catch (AAIException e) { - response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, e); + response = + this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, e); success = false; - } catch(Exception e){ + } catch (Exception e) { AAIException ex = new AAIException("AAI_4000", e); - response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, ex); + response = + this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, ex); success = false; } finally { - if(success){ - if(response != null){ - if((response.getStatus() / 100) == 2){ - logger.info("Successfully completed the GET request with status {} and committing it to DB", response.getStatus()); + if (success) { + if (response != null) { + if ((response.getStatus() / 100) == 2) { + logger.info( + "Successfully completed the GET request with status {} and committing it to DB", + response.getStatus()); } else { logFailure(HttpMethod.GET, response); } @@ -274,7 +287,8 @@ public class HttpTestUtil extends RESTAPI { return response; } - public Response doDelete(String uri, String resourceVersion) throws UnsupportedEncodingException, AAIException { + public Response doDelete(String uri, String resourceVersion) + throws UnsupportedEncodingException, AAIException { this.init(); Response response = null; @@ -284,43 +298,46 @@ public class HttpTestUtil extends RESTAPI { try { uri = uri.replaceAll("/aai/", ""); - logger.info("Starting the delete request for the uri {} with resource version {}", uri, resourceVersion); + logger.info("Starting the delete request for the uri {} with resource version {}", uri, + resourceVersion); - String [] arr = uri.split("/"); + String[] arr = uri.split("/"); SchemaVersion version = null; - if(arr.length > 1){ - if(arr[0].matches("^v\\d+")){ + if (arr.length > 1) { + if (arr[0].matches("^v\\d+")) { version = new SchemaVersion(arr[0]); - if(!uri.contains("relationship-list/relationship")){ + if (!uri.contains("relationship-list/relationship")) { uri = uri.replaceAll("^v\\d+", ""); } } } - if(version == null){ + if (version == null) { version = schemaVersions.getDefaultVersion(); } Mockito.when(uriInfo.getPath()).thenReturn(uri); - HttpEntry resourceHttpEntry = SpringContextAware.getBean("traversalHttpEntry", HttpEntry.class); + HttpEntry resourceHttpEntry = + SpringContextAware.getBean("traversalHttpEntry", HttpEntry.class); resourceHttpEntry.setHttpEntryProperties(version); - Loader loader = resourceHttpEntry.getLoader(); - dbEngine = resourceHttpEntry.getDbEngine(); + Loader loader = resourceHttpEntry.getLoader(); + dbEngine = resourceHttpEntry.getDbEngine(); URI uriObject = UriBuilder.fromPath(uri).build(); URIToObject uriToObject = new URIToObject(loader, uriObject); String objType = uriToObject.getEntityName(); queryParameters.add("resource-version", resourceVersion); - QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject, queryParameters); + QueryParser uriQuery = + dbEngine.getQueryBuilder().createQueryFromURI(uriObject, queryParameters); logger.info("Unmarshalling the payload to this {}", objType); Introspector obj; HttpMethod httpMethod; - if(uri.contains("/relationship-list/relationship")){ + if (uri.contains("/relationship-list/relationship")) { obj = loader.introspectorFromName("relationship"); httpMethod = HttpMethod.DELETE_EDGE; } else { @@ -328,28 +345,32 @@ public class HttpTestUtil extends RESTAPI { httpMethod = HttpMethod.DELETE; } - DBRequest dbRequest = - new DBRequest.Builder(httpMethod, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION") - .build(); + DBRequest dbRequest = new DBRequest.Builder(httpMethod, uriObject, uriQuery, obj, + httpHeaders, uriInfo, "JUNIT-TRANSACTION").build(); List<DBRequest> dbRequestList = new ArrayList<>(); dbRequestList.add(dbRequest); - Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = resourceHttpEntry.process(dbRequestList, "JUNIT"); + Pair<Boolean, List<Pair<URI, Response>>> responsesTuple = + resourceHttpEntry.process(dbRequestList, "JUNIT"); response = responsesTuple.getValue1().get(0).getValue1(); } catch (AAIException e) { - response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, e); + response = + this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, e); success = false; - } catch(Exception e){ + } catch (Exception e) { AAIException ex = new AAIException("AAI_4000", e); - response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, ex); + response = + this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, ex); success = false; } finally { - if(success){ - if(response != null){ - if((response.getStatus() / 100) == 2){ - logger.info("Successfully completed the DELETE request with status {} and committing it to DB", response.getStatus()); + if (success) { + if (response != null) { + if ((response.getStatus() / 100) == 2) { + logger.info( + "Successfully completed the DELETE request with status {} and committing it to DB", + response.getStatus()); } else { logFailure(HttpMethod.DELETE, response); } @@ -364,8 +385,9 @@ public class HttpTestUtil extends RESTAPI { return response; } - public static void logFailure(HttpMethod httpMethod, Response response){ - logger.info("Unable to complete the {} request with status {} and rolling back", httpMethod.toString(), response.getStatus()); + public static void logFailure(HttpMethod httpMethod, Response response) { + logger.info("Unable to complete the {} request with status {} and rolling back", + httpMethod.toString(), response.getStatus()); logger.info("Response body of failed request {}", response.getEntity()); } diff --git a/aai-traversal/src/test/java/org/onap/aai/PayloadUtil.java b/aai-traversal/src/test/java/org/onap/aai/PayloadUtil.java index 8adc9d1..5a86d92 100644 --- a/aai-traversal/src/test/java/org/onap/aai/PayloadUtil.java +++ b/aai-traversal/src/test/java/org/onap/aai/PayloadUtil.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,7 @@ */ package org.onap.aai; -import org.apache.commons.io.IOUtils; +import static org.junit.Assert.assertNotNull; import java.io.IOException; import java.io.InputStream; @@ -28,7 +28,7 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import static org.junit.Assert.assertNotNull; +import org.apache.commons.io.IOUtils; public class PayloadUtil { @@ -37,7 +37,8 @@ public class PayloadUtil { public static String getExpectedPayload(String fileName) throws IOException { - InputStream inputStream = PayloadUtil.class.getClassLoader().getResourceAsStream("payloads/expected/" + fileName); + InputStream inputStream = + PayloadUtil.class.getClassLoader().getResourceAsStream("payloads/expected/" + fileName); String message = String.format("Unable to find the %s in src/test/resources", fileName); assertNotNull(message, inputStream); @@ -50,7 +51,8 @@ public class PayloadUtil { public static String getResourcePayload(String fileName) throws IOException { - InputStream inputStream = PayloadUtil.class.getClassLoader().getResourceAsStream("payloads/resource/" + fileName); + InputStream inputStream = + PayloadUtil.class.getClassLoader().getResourceAsStream("payloads/resource/" + fileName); String message = String.format("Unable to find the %s in src/test/resources", fileName); assertNotNull(message, inputStream); @@ -61,16 +63,18 @@ public class PayloadUtil { return resource; } - public static String getTemplatePayload(String fileName, Map<String, String> templateValueMap) throws Exception { + public static String getTemplatePayload(String fileName, Map<String, String> templateValueMap) + throws Exception { - InputStream inputStream = PayloadUtil.class.getClassLoader().getResourceAsStream("payloads/templates/" + fileName); + InputStream inputStream = PayloadUtil.class.getClassLoader() + .getResourceAsStream("payloads/templates/" + fileName); String message = String.format("Unable to find the %s in src/test/resources", fileName); assertNotNull(message, inputStream); String resource; - if(cache.containsKey(fileName)){ + if (cache.containsKey(fileName)) { resource = cache.get(fileName); } else { resource = IOUtils.toString(inputStream); @@ -81,26 +85,31 @@ public class PayloadUtil { String resourceWithTemplateValues = resource; - while(matcher.find()){ + while (matcher.find()) { int start = matcher.start() + 2; int end = matcher.end() - 1; String key = resource.substring(start, end); - if(templateValueMap.containsKey(key)){ - resourceWithTemplateValues = resourceWithTemplateValues.replaceAll("\\$\\{" + key +"\\}", templateValueMap.get(key)); + if (templateValueMap.containsKey(key)) { + resourceWithTemplateValues = resourceWithTemplateValues + .replaceAll("\\$\\{" + key + "\\}", templateValueMap.get(key)); } else { - throw new RuntimeException("Unable to find the key value pair in map for the template processing for key " + key); + throw new RuntimeException( + "Unable to find the key value pair in map for the template processing for key " + + key); } } inputStream.close(); return resourceWithTemplateValues; } - + public static String getNamedQueryPayload(String fileName) throws IOException { - InputStream inputStream = PayloadUtil.class.getClassLoader().getResourceAsStream("payloads/named-queries/" + fileName); + InputStream inputStream = PayloadUtil.class.getClassLoader() + .getResourceAsStream("payloads/named-queries/" + fileName); - String message = String.format("Unable to find the %s in src/test/resources/payloads/named-queries", fileName); + String message = String + .format("Unable to find the %s in src/test/resources/payloads/named-queries", fileName); assertNotNull(message, inputStream); String resource = IOUtils.toString(inputStream); diff --git a/aai-traversal/src/test/java/org/onap/aai/QueryParameterTest.java b/aai-traversal/src/test/java/org/onap/aai/QueryParameterTest.java index faf0160..817ba28 100644 --- a/aai-traversal/src/test/java/org/onap/aai/QueryParameterTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/QueryParameterTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,16 +19,25 @@ */ package org.onap.aai; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; + import com.att.eelf.configuration.EELFManager; + +import java.util.*; + +import javax.ws.rs.core.Response; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.onap.aai.config.PropertyPasswordConfiguration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; import org.springframework.context.annotation.Import; import org.springframework.http.*; import org.springframework.test.context.ContextConfiguration; @@ -36,15 +45,10 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; -import javax.ws.rs.core.Response; -import java.util.*; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertThat; - @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") @ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @Import(TraversalTestConfiguration.class) @@ -62,7 +66,6 @@ public class QueryParameterTest { private String configurationUri2; - @Autowired RestTemplate restTemplate; @@ -96,14 +99,14 @@ public class QueryParameterTest { httpTestUtil = new HttpTestUtil(); configurationId = "test-" + UUID.randomUUID().toString(); - configurationUri ="/aai/v13/network/configurations/configuration/" + configurationId; + configurationUri = "/aai/v13/network/configurations/configuration/" + configurationId; Map<String, String> configurationMap = new HashMap<>(); configurationMap.put("configuration-id", configurationId); String payload = PayloadUtil.getTemplatePayload("configuration.json", configurationMap); httpTestUtil.doPut(configurationUri, payload); configurationId2 = "test-" + UUID.randomUUID().toString(); - configurationUri2 ="/aai/v13/network/configurations/configuration/" + configurationId2; + configurationUri2 = "/aai/v13/network/configurations/configuration/" + configurationId2; configurationMap.put("configuration-id", configurationId2); payload = PayloadUtil.getTemplatePayload("configuration.json", configurationMap); httpTestUtil.doPut(configurationUri2, payload); @@ -112,7 +115,7 @@ public class QueryParameterTest { serviceInstanceId = "test-service-instance1"; serviceInstanceName = "test service instance1"; - customerUri ="/aai/v13/business/network/customers/customer/" + customerId; + customerUri = "/aai/v13/business/network/customers/customer/" + customerId; Map<String, String> customerMap = new HashMap<>(); customerMap.put("customer-id", customerId); customerMap.put("service-instance-id", serviceInstanceId); @@ -125,7 +128,7 @@ public class QueryParameterTest { customerId2 = "test-" + UUID.randomUUID().toString(); serviceInstanceId2 = "test-service-instance2"; serviceInstanceName2 = "test service instance1"; - customerUri2 ="/aai/v13/business/customers/customer/" + customerId2; + customerUri2 = "/aai/v13/business/customers/customer/" + customerId2; customerMap = new HashMap<>(); customerMap.put("customer-id", customerId2); @@ -135,7 +138,7 @@ public class QueryParameterTest { httpTestUtil.doPut(customerUri2, payload); vnfId = "test-" + UUID.randomUUID().toString(); - vnfUri ="/aai/v13/network/generic-vnfs/generic-vnf/" + vnfId; + vnfUri = "/aai/v13/network/generic-vnfs/generic-vnf/" + vnfId; Map<String, String> vnfMap = new HashMap<>(); vnfMap.put("vnf-id", vnfId); vnfMap.put("configuration-id", configurationId); @@ -145,7 +148,7 @@ public class QueryParameterTest { httpTestUtil.doPut(vnfUri, payload); vnfId2 = "test-" + UUID.randomUUID().toString(); - vnfUri2 ="/aai/v13/network/generic-vnfs/generic-vnf/" + vnfId2; + vnfUri2 = "/aai/v13/network/generic-vnfs/generic-vnf/" + vnfId2; vnfMap = new HashMap<>(); vnfMap.put("vnf-id", vnfId2); vnfMap.put("configuration-id", configurationId2); @@ -180,7 +183,8 @@ public class QueryParameterTest { String payload = PayloadUtil.getTemplatePayload("custom-query.json", customQueryMap); httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); LOGGER.info("Response of custom query : {}", responseEntity.getBody().toString()); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); assertThat(responseEntity.getBody().toString(), containsString(customerUri2)); diff --git a/aai-traversal/src/test/java/org/onap/aai/SubgraphPruneTest.java b/aai-traversal/src/test/java/org/onap/aai/SubgraphPruneTest.java index 42a4542..4aefa85 100644 --- a/aai-traversal/src/test/java/org/onap/aai/SubgraphPruneTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/SubgraphPruneTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,13 +19,20 @@ */ package org.onap.aai; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; + +import java.util.*; + +import javax.ws.rs.core.Response; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.onap.aai.config.PropertyPasswordConfiguration; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; import org.springframework.context.annotation.Import; import org.springframework.http.*; import org.springframework.test.context.ContextConfiguration; @@ -33,20 +40,15 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; -import javax.ws.rs.core.Response; -import java.util.*; - -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertThat; - @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") @ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @Import(TraversalTestConfiguration.class) public class SubgraphPruneTest { - private HttpTestUtil httpTestUtil; private String pserverUri; @@ -73,7 +75,7 @@ public class SubgraphPruneTest { httpTestUtil = new HttpTestUtil(); hostname = "test-" + UUID.randomUUID().toString(); - pserverUri ="/aai/v11/cloud-infrastructure/pservers/pserver/" + hostname; + pserverUri = "/aai/v11/cloud-infrastructure/pservers/pserver/" + hostname; Map<String, String> pserverMap = new HashMap<>(); pserverMap.put("hostname", hostname); String payload = PayloadUtil.getTemplatePayload("pserver.json", pserverMap); @@ -91,8 +93,10 @@ public class SubgraphPruneTest { cloudRegionMap.put("vserver-name", "some-vserver-name-id1111"); cloudRegionMap.put("pserver-uri", pserverUri); - String cloudRegionPayload = PayloadUtil.getTemplatePayload("cloud-region-with-vserver.json", cloudRegionMap); - String cloudRegionUri = "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/some-owner-id1111/some-region-id1111"; + String cloudRegionPayload = + PayloadUtil.getTemplatePayload("cloud-region-with-vserver.json", cloudRegionMap); + String cloudRegionUri = + "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/some-owner-id1111/some-region-id1111"; Response response = httpTestUtil.doPut(cloudRegionUri, cloudRegionPayload); @@ -114,14 +118,16 @@ public class SubgraphPruneTest { Map<String, String> gremlinQueryMap = new HashMap<>(); // Having the cap('x') here causes the subgraph to fail - gremlinQueryMap.put("gremlin-query", "g.V().has('vserver-id', '" + vserverId + "').store('x').out().has('aai-node-type', 'pserver').store('x').cap('x').unfold()"); + gremlinQueryMap.put("gremlin-query", "g.V().has('vserver-id', '" + vserverId + + "').store('x').out().has('aai-node-type', 'pserver').store('x').cap('x').unfold()"); String payload = PayloadUtil.getTemplatePayload("gremlin-query.json", gremlinQueryMap); String endpoint = "/aai/v13/query?format=console&subgraph=prune"; httpEntity = new HttpEntity(payload, headers); ResponseEntity responseEntity = null; - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); System.out.println(responseEntity.getBody().toString()); assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); } diff --git a/aai-traversal/src/test/java/org/onap/aai/TraversalTestConfiguration.java b/aai-traversal/src/test/java/org/onap/aai/TraversalTestConfiguration.java index 516c6b9..8b94352 100644 --- a/aai-traversal/src/test/java/org/onap/aai/TraversalTestConfiguration.java +++ b/aai-traversal/src/test/java/org/onap/aai/TraversalTestConfiguration.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,11 +19,19 @@ */ package org.onap.aai; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.KeyStore; + +import javax.net.ssl.SSLContext; + import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContextBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.web.client.RestTemplateBuilder; @@ -36,13 +44,6 @@ import org.springframework.util.ResourceUtils; import org.springframework.web.client.ResponseErrorHandler; import org.springframework.web.client.RestTemplate; -import javax.net.ssl.SSLContext; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.security.KeyStore; - @TestConfiguration public class TraversalTestConfiguration { @@ -60,31 +61,30 @@ public class TraversalTestConfiguration { RestTemplate restTemplate = null; - if(env.acceptsProfiles("one-way-ssl", "two-way-ssl")) { - char[] trustStorePassword = env.getProperty("server.ssl.trust-store-password").toCharArray(); - char[] keyStorePassword = env.getProperty("server.ssl.key-store-password").toCharArray(); + if (env.acceptsProfiles("one-way-ssl", "two-way-ssl")) { + char[] trustStorePassword = + env.getProperty("server.ssl.trust-store-password").toCharArray(); + char[] keyStorePassword = + env.getProperty("server.ssl.key-store-password").toCharArray(); String keyStore = env.getProperty("server.ssl.key-store"); String trustStore = env.getProperty("server.ssl.trust-store"); SSLContextBuilder sslContextBuilder = SSLContextBuilder.create(); if (env.acceptsProfiles("two-way-ssl")) { - sslContextBuilder = sslContextBuilder.loadKeyMaterial(loadPfx(keyStore, keyStorePassword), keyStorePassword); + sslContextBuilder = sslContextBuilder + .loadKeyMaterial(loadPfx(keyStore, keyStorePassword), keyStorePassword); } SSLContext sslContext = sslContextBuilder - .loadTrustMaterial(ResourceUtils.getFile(trustStore), trustStorePassword) - .build(); + .loadTrustMaterial(ResourceUtils.getFile(trustStore), trustStorePassword).build(); - HttpClient client = HttpClients.custom() - .setSSLContext(sslContext) - .setSSLHostnameVerifier((s, sslSession) -> true) - .build(); + HttpClient client = HttpClients.custom().setSSLContext(sslContext) + .setSSLHostnameVerifier((s, sslSession) -> true).build(); restTemplate = builder - .requestFactory(() -> new HttpComponentsClientHttpRequestFactory(client)) - .build(); - }else { + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory(client)).build(); + } else { restTemplate = builder.build(); } @@ -100,7 +100,7 @@ public class TraversalTestConfiguration { return true; } - if(clientHttpResponse.getRawStatusCode() % 100 == 5){ + if (clientHttpResponse.getRawStatusCode() % 100 == 5) { logger.debug("Call returned a error " + clientHttpResponse.getStatusText()); return true; } diff --git a/aai-traversal/src/test/java/org/onap/aai/dbgraphgen/ModelBasedProcessingInvalidDataTest.java b/aai-traversal/src/test/java/org/onap/aai/dbgraphgen/ModelBasedProcessingInvalidDataTest.java index e1515e3..842a6ca 100644 --- a/aai-traversal/src/test/java/org/onap/aai/dbgraphgen/ModelBasedProcessingInvalidDataTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/dbgraphgen/ModelBasedProcessingInvalidDataTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,8 +19,16 @@ */ package org.onap.aai.dbgraphgen; +import static org.junit.Assert.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyMapOf; +import static org.mockito.Mockito.when; + import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; + +import java.util.*; + import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.graphdb.types.system.BaseVertexLabel; import org.janusgraph.graphdb.types.system.EmptyVertex; @@ -40,13 +48,6 @@ import org.onap.aai.introspection.ModelType; import org.onap.aai.serialization.db.DBSerializer; import org.onap.aai.serialization.engines.TransactionalGraphEngine; -import java.util.*; - -import static org.junit.Assert.*; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyMapOf; -import static org.mockito.Mockito.when; - @RunWith(MockitoJUnitRunner.class) public class ModelBasedProcessingInvalidDataTest extends AAISetup { @@ -60,7 +61,6 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { @Mock private ModelBasedProcessing mockProcessor; - @Mock private DbMethHelper dbMethHelper; @@ -73,7 +73,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { @Before public void init() { MockitoAnnotations.initMocks(this); - loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion()); + loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, + schemaVersions.getDefaultVersion()); processor = new ModelBasedProcessing(loader, dbEngine, serializer); dbMethHelper = new DbMethHelper(loader, dbEngine); @@ -83,181 +84,161 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { @Test public void getStartNodesAndModVersionIdsTest() throws AAIException { - - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("test", new Object()); startNodeFilterArrayOfHashes.add(map); Map<String, String> result = new HashMap<>(); Map<String, String> result1 = mockProcessor.getStartNodesAndModVersionIds("test", "test", - "test", "test", "test", - "test", startNodeFilterArrayOfHashes, - "test"); + "test", "test", "test", "test", startNodeFilterArrayOfHashes, "test"); assertNotNull(result); } - @Test(expected = NullPointerException.class) public void getStartNodesAndModVersionIdsTest2() throws AAIException { - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("test", new Object()); startNodeFilterArrayOfHashes.add(map); - Map<String, String> result1 = processor.getStartNodesAndModVersionIds("test", "test", - "", "test", "test", - "test", startNodeFilterArrayOfHashes, - "test"); + Map<String, String> result1 = processor.getStartNodesAndModVersionIds("test", "test", "", + "test", "test", "test", startNodeFilterArrayOfHashes, "test"); assertNotNull(result1); } - @Test(expected = NullPointerException.class) public void getStartNodesAndModVersionIdsTest3() throws AAIException { - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("test", new Object()); startNodeFilterArrayOfHashes.add(map); - Map<String, String> result1 = processor.getStartNodesAndModVersionIds("test", "test", - "", "", "test", - "test", startNodeFilterArrayOfHashes, - "test"); + Map<String, String> result1 = processor.getStartNodesAndModVersionIds("test", "test", "", + "", "test", "test", startNodeFilterArrayOfHashes, "test"); assertNotNull(result1); } - @Test(expected = AAIException.class) public void getStartNodesAndModVersionIdsTest4() throws AAIException { - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("test", new Object()); startNodeFilterArrayOfHashes.add(map); - Map<String, String> result1 = processor.getStartNodesAndModVersionIds("test", "test", - "", "", "", - "test", startNodeFilterArrayOfHashes, - "test"); + Map<String, String> result1 = processor.getStartNodesAndModVersionIds("test", "test", "", + "", "", "test", startNodeFilterArrayOfHashes, "test"); assertNotNull(result1); } - @Test(expected = AAIException.class) public void getStartNodesAndModVersionIdsTest5() throws AAIException { - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("test", new Object()); startNodeFilterArrayOfHashes.add(map); - Map<String, String> result1 = processor.getStartNodesAndModVersionIds("test", "test", - "", "", "", - "", startNodeFilterArrayOfHashes, - "test"); + Map<String, String> result1 = processor.getStartNodesAndModVersionIds("test", "test", "", + "", "", "", startNodeFilterArrayOfHashes, "test"); assertNotNull(result1); } - @Test(expected = AAIException.class) public void getStartNodesAndModVersionIdsNullTest() throws AAIException { - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); Map<String, String> result = null; - result = processor.getStartNodesAndModVersionIds("test", "test", - "", "", "", - "", startNodeFilterArrayOfHashes, - "test"); + result = processor.getStartNodesAndModVersionIds("test", "test", "", "", "", "", + startNodeFilterArrayOfHashes, "test"); assertNotNull(result); } - @Test(expected = NullPointerException.class) public void getStartNodesAndModVersionIdsNullTest1() throws AAIException { - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); Map<String, String> result = null; - result = processor.getStartNodesAndModVersionIds("test", "test", - "Test", "", "", - "", startNodeFilterArrayOfHashes, - "test"); + result = processor.getStartNodesAndModVersionIds("test", "test", "Test", "", "", "", + startNodeFilterArrayOfHashes, "test"); assertNotNull(result); } @Test(expected = NullPointerException.class) public void getStartNodesAndModVersionIdsNullTest2() throws AAIException { - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); Map<String, String> result = null; - result = processor.getStartNodesAndModVersionIds("test", "test", - "", "test", "", - "", startNodeFilterArrayOfHashes, - "test"); + result = processor.getStartNodesAndModVersionIds("test", "test", "", "test", "", "", + startNodeFilterArrayOfHashes, "test"); assertNotNull(result); } - @Test(expected = NullPointerException.class) public void getStartNodesAndModVersionIdsNullTest3() throws AAIException { - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); Map<String, String> result = null; - result = processor.getStartNodesAndModVersionIds("test", "test", - "", "", "test", - "", startNodeFilterArrayOfHashes, - "test"); + result = processor.getStartNodesAndModVersionIds("test", "test", "", "", "test", "", + startNodeFilterArrayOfHashes, "test"); assertNotNull(result); } @Test(expected = NullPointerException.class) public void getModelVerTopWidgetTypeTest() throws AAIException { Vertex vertex = new EmptyVertex(); - //Mockito.when(mockProcessor.getModelVerTopWidgetType(Mockito.any(Vertex.class), Mockito.any(String.class))).thenReturn("Sucess"); + // Mockito.when(mockProcessor.getModelVerTopWidgetType(Mockito.any(Vertex.class), + // Mockito.any(String.class))).thenReturn("Sucess"); String result = processor.getModelVerTopWidgetType(vertex, "test"); - assertEquals("result has -local tacked on the end as it should", "Sucess", result - ); + assertEquals("result has -local tacked on the end as it should", "Sucess", result); } @Test(expected = NullPointerException.class) public void getModelVerTopWidgetType() throws AAIException { - /*Mockito.when(mockProcessor.getModelVerTopWidgetType(Mockito.any(String.class), - Mockito.any(String.class), Mockito.any(String.class), - Mockito.any(String.class), Mockito.any(String.class)) - ).thenReturn("Sucess");*/ + /* + * Mockito.when(mockProcessor.getModelVerTopWidgetType(Mockito.any(String.class), + * Mockito.any(String.class), Mockito.any(String.class), + * Mockito.any(String.class), Mockito.any(String.class)) + * ).thenReturn("Sucess"); + */ String result = processor.getModelVerTopWidgetType("test", "test", "test", "Test", "test"); - assertEquals("result has -local tacked on the end as it should", "Sucess", result - ); + assertEquals("result has -local tacked on the end as it should", "Sucess", result); } @Test(expected = AAIException.class) public void queryByModel() throws AAIException { - /*Mockito.when(mockProcessor.getModelVerTopWidgetType(Mockito.any(String.class), - Mockito.any(String.class), Mockito.any(String.class), - Mockito.any(String.class), Mockito.any(String.class)) - ).thenReturn("Sucess");*/ - List<ResultSet> result = processor.queryByModel("test", "test", - "test", "test", "test", - "generic-vnf", null, - "test"); + /* + * Mockito.when(mockProcessor.getModelVerTopWidgetType(Mockito.any(String.class), + * Mockito.any(String.class), Mockito.any(String.class), + * Mockito.any(String.class), Mockito.any(String.class)) + * ).thenReturn("Sucess"); + */ + List<ResultSet> result = processor.queryByModel("test", "test", "test", "test", "test", + "generic-vnf", null, "test"); assertEquals("result has -local tacked on the end as it should", 0, result.size()); - } - @Test(expected = NullPointerException.class) public void queryByModel_Timed() throws AAIException { - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("test", new Object()); startNodeFilterArrayOfHashes.add(map); - List<ResultSet> result = processor.queryByModel_Timed("test", "test", - "test", "test", "test", - "test", startNodeFilterArrayOfHashes, - "test"); + List<ResultSet> result = processor.queryByModel_Timed("test", "test", "test", "test", + "test", "test", startNodeFilterArrayOfHashes, "test"); assertEquals("result has -local tacked on the end as it should", 0, result.size()); - } @Mock @@ -267,17 +248,14 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { public void runDeleteByModel() throws AAIException { Map<String, String> resultMock = new HashMap<String, String>(); - // when(mockProcessor.getNodeUsingUniqueId(any(String.class),any(String.class),any(String.class),any(String.class),any(String.class))).thenReturn(vertex); - when(mockProcessor.runDeleteByModel(any(String.class), - any(String.class), any(String.class), - any(String.class), anyMapOf(String.class, Object.class), any(String.class), any(String.class)) - ).thenReturn(resultMock); - Map<String, String> result = processor.runDeleteByModel("test", "test", - "test", "test", startNodeFilterHash, - "test", - "test"); - assertEquals("result has -local tacked on the end as it should", result.size(), resultMock.size()); - + // when(mockProcessor.getNodeUsingUniqueId(any(String.class),any(String.class),any(String.class),any(String.class),any(String.class))).thenReturn(vertex); + when(mockProcessor.runDeleteByModel(any(String.class), any(String.class), any(String.class), + any(String.class), anyMapOf(String.class, Object.class), any(String.class), + any(String.class))).thenReturn(resultMock); + Map<String, String> result = processor.runDeleteByModel("test", "test", "test", "test", + startNodeFilterHash, "test", "test"); + assertEquals("result has -local tacked on the end as it should", result.size(), + resultMock.size()); } @@ -287,11 +265,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { public void runDeleteByModelWithNullParams() throws AAIException { Map<String, String> resultMock = new HashMap<String, String>(); - - Map<String, String> result = processor.runDeleteByModel("test", "test", - null, null, null, - "test", - "test"); + Map<String, String> result = + processor.runDeleteByModel("test", "test", null, null, null, "test", "test"); assertNotNull(result); @@ -300,22 +275,17 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { @Test(expected = NullPointerException.class) public void runDeleteByModelWithNullParams1() throws AAIException { - Map<String, String> result1 = processor.runDeleteByModel("test", "test", - null, "unknown", null, - "test", - "test"); + Map<String, String> result1 = + processor.runDeleteByModel("test", "test", null, "unknown", null, "test", "test"); assertNotNull(result1); } - @Test(expected = NullPointerException.class) public void runDeleteByModelWithNullParams2() throws AAIException { - Map<String, String> result1 = processor.runDeleteByModel("test", "test", - null, "unknown", null, - "test", - "test"); + Map<String, String> result1 = + processor.runDeleteByModel("test", "test", null, "unknown", null, "test", "test"); assertNotNull(result1); } @@ -325,9 +295,11 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String transId = "test"; String fromAppId = "test"; String namedQueryUuid = "test"; - ArrayList<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + ArrayList<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); String apiVer = "test"; - List<ResultSet> result = processor.queryByNamedQuery(transId, fromAppId, namedQueryUuid, startNodeFilterArrayOfHashes, apiVer); + List<ResultSet> result = processor.queryByNamedQuery(transId, fromAppId, namedQueryUuid, + startNodeFilterArrayOfHashes, apiVer); assertNotNull(result); } @@ -337,10 +309,12 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String fromAppId = "test"; String namedQueryUuid = "test"; String secondaryFilterCutPoint = "test"; - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<Map<String, Object>>(); + List<Map<String, Object>> startNodeFilterArrayOfHashes = + new ArrayList<Map<String, Object>>(); String apiVer = "test"; Map<String, Object> secondaryFilterHash = new HashMap<String, Object>(); - List<ResultSet> result = processor.queryByNamedQuery(transId, fromAppId, namedQueryUuid, startNodeFilterArrayOfHashes, apiVer, secondaryFilterCutPoint, secondaryFilterHash); + List<ResultSet> result = processor.queryByNamedQuery(transId, fromAppId, namedQueryUuid, + startNodeFilterArrayOfHashes, apiVer, secondaryFilterCutPoint, secondaryFilterHash); assertNotNull(result); } @@ -352,22 +326,17 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { resultSet.setVert(null); Map<String, String> result = processor.deleteAsNeededFromResultSet("test", "test", - resultSet, "test", "test", - "test", - resultMock); + resultSet, "test", "test", "test", resultMock); assertEquals(result.size(), 0); resultSet.setVert(vert); Map<String, String> result1 = processor.deleteAsNeededFromResultSet("test", "test", - resultSet, "test", "test", - "test", - resultMock); + resultSet, "test", "test", "test", resultMock); assertEquals(result.size(), 0); - } @Test(expected = NullPointerException.class) @@ -414,7 +383,7 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { rsList.add(rs1); rs.setSubResultSet(rsList); Map<String, Object> map = new HashMap<String, Object>(); - //map.put("test.filter",new Object()); + // map.put("test.filter",new Object()); boolean result = processor.satisfiesFilters(rs, map); assertEquals(result, false); @@ -452,12 +421,11 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { public void collectInstanceDataTest() throws AAIException { BaseVertexLabel bs = new BaseVertexLabel("test"); - //bs.setId(80); + // bs.setId(80); EmptyVertex ev = new EmptyVertex(); - //ev.setId(50l); + // ev.setId(50l); Vertex thisLevelElemVtx = ev; - Multimap<String, String> thisMap = ArrayListMultimap.create(); List<String> vidsTraversed = new ArrayList<String>(); // only applies when collecting data using the default model for delete @@ -466,22 +434,23 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { namedQueryElementHash.put("test", "test"); Map<String, String> delKeyHash = new HashMap<String, String>(); - ResultSet rs = processor.collectInstanceData("test", "test", thisLevelElemVtx, "test", validNextStepMap, vidsTraversed, 1, delKeyHash, namedQueryElementHash, "test"); + ResultSet rs = processor.collectInstanceData("test", "test", thisLevelElemVtx, "test", + validNextStepMap, vidsTraversed, 1, delKeyHash, namedQueryElementHash, "test"); } @Test(expected = NullPointerException.class) - public void genTopoMap4ModelVerTest() throws - AAIException { + public void genTopoMap4ModelVerTest() throws AAIException { Vertex vertext = new EmptyVertex(); - Multimap<String, String> map = processor.genTopoMap4ModelVer("test", "test", vertext, "test"); + Multimap<String, String> map = + processor.genTopoMap4ModelVer("test", "test", vertext, "test"); assertNotEquals(map, null); } @Test(expected = AAIException.class) - public void genTopoMap4ModelVerTestNull() throws - AAIException { + public void genTopoMap4ModelVerTestNull() throws AAIException { Vertex vertext = null; - Multimap<String, String> map = processor.genTopoMap4ModelVer("test", "test", vertext, "test"); + Multimap<String, String> map = + processor.genTopoMap4ModelVer("test", "test", vertext, "test"); assertNotEquals(map, null); } @@ -495,7 +464,7 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { @Test(expected = AAIException.class) public void getModConstraintHashTest() throws AAIException { Vertex modelElementVtx = new EmptyVertex(); - //modelElementVtx.property(AAIProperties.NODE_TYPE,"Model"); + // modelElementVtx.property(AAIProperties.NODE_TYPE,"Model"); Vertex modelElementVtx1 = new EmptyVertex(); Map<String, Vertex> currentHash = new HashMap<String, Vertex>(); currentHash.put("constraint", modelElementVtx1); @@ -506,7 +475,7 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { @Test(expected = AAIException.class) public void getModConstraintHashTestNull() throws AAIException { Vertex modelElementVtx = null; - //modelElementVtx.property(AAIProperties.NODE_TYPE,"Model"); + // modelElementVtx.property(AAIProperties.NODE_TYPE,"Model"); Vertex modelElementVtx1 = null; Map<String, Vertex> currentHash = new HashMap<String, Vertex>(); currentHash.put("constraint", modelElementVtx1); @@ -517,7 +486,7 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { @Test(expected = NullPointerException.class) public void getTopElementForSvcOrResModelVerTest() throws AAIException { Vertex modelElementVtx = new EmptyVertex(); - //modelElementVtx.property(AAIProperties.NODE_TYPE,"Model"); + // modelElementVtx.property(AAIProperties.NODE_TYPE,"Model"); Vertex modelElementVtx1 = new EmptyVertex(); Map<String, Vertex> currentHash = new HashMap<String, Vertex>(); currentHash.put("constraint", modelElementVtx1); @@ -535,7 +504,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { namedQueryElementVertex.properties("property-collect-list", ""); - Map<String, Object> result = processor.getNamedQueryPropOverRide(transId, fromAppId, namedQueryElementVertex, instanceVertex, apiVer); + Map<String, Object> result = processor.getNamedQueryPropOverRide(transId, fromAppId, + namedQueryElementVertex, instanceVertex, apiVer); assertNotEquals(result, null); } @@ -549,7 +519,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { namedQueryElementVertex.properties("property-collect-list", ""); - Map<String, Object> result = processor.getNamedQueryPropOverRide(transId, fromAppId, namedQueryElementVertex, instanceVertex, apiVer); + Map<String, Object> result = processor.getNamedQueryPropOverRide(transId, fromAppId, + namedQueryElementVertex, instanceVertex, apiVer); assertNotEquals(result, null); } @@ -563,7 +534,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { namedQueryElementVertex.properties("property-collect-list", ""); - boolean result = processor.namedQueryConstraintSaysStop(transId, fromAppId, namedQueryElementVertex, instanceVertex, apiVer); + boolean result = processor.namedQueryConstraintSaysStop(transId, fromAppId, + namedQueryElementVertex, instanceVertex, apiVer); assertTrue(result); } @@ -577,7 +549,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { namedQueryElementVertex.properties("property-collect-list", ""); - boolean result = processor.namedQueryConstraintSaysStop(transId, fromAppId, namedQueryElementVertex, instanceVertex, apiVer); + boolean result = processor.namedQueryConstraintSaysStop(transId, fromAppId, + namedQueryElementVertex, instanceVertex, apiVer); assertTrue(result); } @@ -589,8 +562,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { Vertex instanceVertex = null; String apiVer = "test"; - - boolean result = processor.namedQueryConstraintSaysStop(transId, fromAppId, namedQueryElementVertex, instanceVertex, apiVer); + boolean result = processor.namedQueryConstraintSaysStop(transId, fromAppId, + namedQueryElementVertex, instanceVertex, apiVer); assertTrue(result); } @@ -606,7 +579,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { namedQueryElementVertex.properties("property-collect-list", ""); - Map<String, Object> result = processor.getNamedQueryExtraDataLookup(transId, fromAppId, namedQueryElementVertex, instanceVertex, apiVer); + Map<String, Object> result = processor.getNamedQueryExtraDataLookup(transId, fromAppId, + namedQueryElementVertex, instanceVertex, apiVer); assertTrue(result.size() > 0); } @@ -622,8 +596,7 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { int levelCounter = 1; Map<String, String> result = processor.collectNQElementHash(transId, fromAppId, - thisLevelElemVtx, incomingTrail, currentHash, - vidsTraversed, levelCounter); + thisLevelElemVtx, incomingTrail, currentHash, vidsTraversed, levelCounter); assertNotEquals(result, null); } @@ -642,8 +615,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String overRideModelVersionId = "test"; Map<String, String> result = processor.collectDeleteKeyHash(transId, fromAppId, - thisLevelElemVtx, incomingTrail, currentHash, - vidsTraversed, levelCounter, modConstraintHash, overRideModelId, overRideModelVersionId); + thisLevelElemVtx, incomingTrail, currentHash, vidsTraversed, levelCounter, + modConstraintHash, overRideModelId, overRideModelVersionId); assertNotEquals(result, null); } @@ -680,9 +653,9 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { List<String> vidsTraversed = new ArrayList<String>(); int levelCounter = 1; - Multimap<String, String> result = processor.collectTopology4ModelVer(transId, fromAppId, - thisLevelElemVtx, incomingTrail, thisMap, vidsTraversed, levelCounter, currentHash - , "test", "test"); + Multimap<String, String> result = + processor.collectTopology4ModelVer(transId, fromAppId, thisLevelElemVtx, incomingTrail, + thisMap, vidsTraversed, levelCounter, currentHash, "test", "test"); assertNotEquals(result, null); } @@ -700,7 +673,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String incomingTrail = "test"; Multimap<String, String> currentMap = ArrayListMultimap.create(); - Multimap<String, String> result = processor.collectTopology4LinkagePoint(transId, fromAppId, linkagePointStrVal, incomingTrail, currentMap); + Multimap<String, String> result = processor.collectTopology4LinkagePoint(transId, fromAppId, + linkagePointStrVal, incomingTrail, currentMap); assertNotEquals(result, null); } @@ -719,7 +693,8 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String fromAppId = "test"; Vertex queryVertex = new EmptyVertex(); String namedQueryUuid = "E44533334343"; - Multimap<String, String> result = processor.genTopoMap4NamedQ(transId, fromAppId, queryVertex, namedQueryUuid); + Multimap<String, String> result = + processor.genTopoMap4NamedQ(transId, fromAppId, queryVertex, namedQueryUuid); assertNotEquals(result, null); } @@ -735,7 +710,7 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { int levelCounter = 1; Multimap<String, String> result = processor.collectTopology4NamedQ(transId, fromAppId, - thisLevelElemVtx, incomingTrail, thisMap, vidsTraversed, levelCounter); + thisLevelElemVtx, incomingTrail, thisMap, vidsTraversed, levelCounter); assertNotEquals(result, null); } @@ -785,7 +760,6 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { boolean vertex = processor.nodeTypeSupportsPersona(incomingTrail); assertFalse(vertex); - incomingTrail = "test"; boolean vertex1 = processor.nodeTypeSupportsPersona(incomingTrail); assertTrue(vertex1); @@ -797,11 +771,11 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String transID = "test"; Vertex thisLevelElemVtx = new EmptyVertex(); String incomingTrail = "test"; - String vertex1 = processor.getNqElementWidgetType(appId, transID, thisLevelElemVtx, incomingTrail); + String vertex1 = + processor.getNqElementWidgetType(appId, transID, thisLevelElemVtx, incomingTrail); assertNotEquals(vertex1, null); } - @Test(expected = NullPointerException.class) public void getModElementWidgetType() throws AAIException { String appId = "test"; @@ -819,11 +793,11 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String nodeType = "generic-vnf"; String idPropertyName = "test"; String uniqueIdVal = "test"; - Vertex vertex1 = processor.getNodeUsingUniqueId(transID, appId, nodeType, idPropertyName, uniqueIdVal); + Vertex vertex1 = + processor.getNodeUsingUniqueId(transID, appId, nodeType, idPropertyName, uniqueIdVal); assertNotEquals(vertex1, null); } - @Test(expected = AAIException.class) public void getNodeUsingUniqueIdNull() throws AAIException { String appId = "test"; @@ -832,12 +806,12 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String idPropertyName = "test"; String uniqueIdVal = ""; Vertex vertex1 = null; - vertex1 = processor.getNodeUsingUniqueId(transID, appId, nodeType, idPropertyName, uniqueIdVal); + vertex1 = + processor.getNodeUsingUniqueId(transID, appId, nodeType, idPropertyName, uniqueIdVal); assertNotEquals(vertex1, null); } - @Test(expected = AAIException.class) public void getNodeUsingUniqueIdNull1() throws AAIException { String appId = "test"; @@ -846,13 +820,12 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String idPropertyName = ""; String uniqueIdVal = "test"; Vertex vertex1 = null; - vertex1 = processor.getNodeUsingUniqueId(transID, appId, nodeType, idPropertyName, uniqueIdVal); + vertex1 = + processor.getNodeUsingUniqueId(transID, appId, nodeType, idPropertyName, uniqueIdVal); assertNotEquals(vertex1, null); - } - @Test(expected = AAIException.class) public void getNodeUsingUniqueIdNull2() throws AAIException { String appId = "test"; @@ -861,10 +834,10 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String idPropertyName = "test"; String uniqueIdVal = "test"; Vertex vertex1 = null; - vertex1 = processor.getNodeUsingUniqueId(transID, appId, nodeType, idPropertyName, uniqueIdVal); + vertex1 = + processor.getNodeUsingUniqueId(transID, appId, nodeType, idPropertyName, uniqueIdVal); assertNotEquals(vertex1, null); - } @Test(expected = NullPointerException.class) @@ -877,7 +850,6 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { assertNotEquals(result, null); } - @Test(expected = AAIException.class) public void getModelVersUsingNameNull() throws AAIException { String appId = "test"; @@ -888,7 +860,6 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { assertNotEquals(result, null); } - @Test(expected = NullPointerException.class) public void getModVersUsingModelInvId() throws AAIException { String appId = "test"; @@ -959,9 +930,6 @@ public class ModelBasedProcessingInvalidDataTest extends AAISetup { String modelName = "test"; processor.validateModel(transID, appId, modelName, modelVersionId); - } - } - diff --git a/aai-traversal/src/test/java/org/onap/aai/dbgraphgen/ModelBasedProcessingTest.java b/aai-traversal/src/test/java/org/onap/aai/dbgraphgen/ModelBasedProcessingTest.java index 80f6d34..ab1ea0a 100644 --- a/aai-traversal/src/test/java/org/onap/aai/dbgraphgen/ModelBasedProcessingTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/dbgraphgen/ModelBasedProcessingTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -21,6 +21,12 @@ package org.onap.aai.dbgraphgen; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.T; @@ -42,12 +48,7 @@ import org.onap.aai.serialization.engines.QueryStyle; import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.setup.SchemaVersion; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class ModelBasedProcessingTest extends AAISetup{ +public class ModelBasedProcessingTest extends AAISetup { private SchemaVersion version; private static final ModelType introspectorFactoryType = ModelType.MOXY; @@ -57,828 +58,917 @@ public class ModelBasedProcessingTest extends AAISetup{ private static final String FROM_APP_ID = "JUNIT"; private static final String API_VERSION = "1.0"; private static final String AAI_NODE_TYPE = "aai-node-type"; - + private static final String MODEL_VESION_NODE_VALUE = "model-ver"; private static final String MODEL_VERSION_ID_KEY = "model-version-id"; private static final String MODEL_VERSION_ID_VALUE = "model-version-id-1"; - + private static final String MODEL_INVARIANT_ID_NODE_VALUE = "model-invariant-id-local"; private static final String MODEL_INVARIANT_ID_KEY = "model-invariant-id-local"; private static final String MODEL_INVARIANT_ID_VALUE = "model-invariant-id-1"; - + private static final String MODEL_NAME_NODE_VALUE = "model-name"; private static final String MODEL_NAME_ID_KEY = "model-name"; private static final String MODEL_NAME_ID_VALUE = "generic-vnf"; - - - private static TransactionalGraphEngine dbEngine; - private static TransactionalGraphEngine.Admin admin; - DBSerializer serializer; - private static Loader loader; - - ModelBasedProcessing modelBasedProcessor; - - GraphTraversalSource source; - - Graph graph; - - Vertex model; - Vertex modelVersion; - Vertex modelElement; - Vertex constrainedElementSet; - Vertex namedQueryElement; - Vertex linkagePoints; - Vertex namedQuery; - - @BeforeClass - public static void configure() throws Exception { - System.setProperty("AJSC_HOME", "."); - System.setProperty("BUNDLECONFIG_DIR", "src/main/resources"); - } - - @Before - public void init() throws AAIException { - MockitoAnnotations.initMocks(this); - version = schemaVersions.getDefaultVersion(); - loader = loaderFactory.createLoaderForVersion(introspectorFactoryType, version); - TransactionalGraphEngine newDbEngine = new JanusGraphDBEngine(queryStyle, loader); - dbEngine = Mockito.spy(newDbEngine); - serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); - admin = Mockito.spy(dbEngine.asAdmin()); - modelBasedProcessor = new ModelBasedProcessing(loader, dbEngine, serializer); - graph = TinkerGraph.open(); - source = createGraph(); - } - - private GraphTraversalSource createGraph() throws AAIException { - model = graph.addVertex(T.label, "model", T.id, "0", AAI_NODE_TYPE, "model", "model-invariant-id", "model-invariant-id-1", "model-type", "widget"); - modelVersion = graph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "1", AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, MODEL_VERSION_ID_KEY, - MODEL_VERSION_ID_VALUE,MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); - graph.addVertex(T.label, MODEL_INVARIANT_ID_NODE_VALUE, T.id, "2", MODEL_INVARIANT_ID_KEY, MODEL_INVARIANT_ID_VALUE, "model-version-id-local", MODEL_VERSION_ID_VALUE); - namedQuery = graph.addVertex(T.label, "named-query", T.id, "3","aai-node-type", "named-query", "named-query-uuid", "named-query-uuid-1"); - graph.addVertex(T.label, MODEL_NAME_NODE_VALUE, T.id, "4", AAI_NODE_TYPE, MODEL_NAME_NODE_VALUE, MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE); - modelElement = graph.addVertex(T.label, "model-element", T.id, "5", AAI_NODE_TYPE, "model-element"); - Vertex modelConstraint = graph.addVertex(T.label, "model-constraint", T.id, "6", AAI_NODE_TYPE, "model-constraint","constrained-element-set-uuid-2-replace","cesu2r-1"); - constrainedElementSet = graph.addVertex(T.label, "constrained-element-set", T.id, "7", AAI_NODE_TYPE, "constrained-element-set"); - Vertex elementChoiceSet = graph.addVertex(T.label, "element-choice-set", T.id, "8", AAI_NODE_TYPE, "element-choice-set"); - namedQueryElement = graph.addVertex(T.label, "named-query-element", T.id, "9","aai-node-type", "named-query-element", - "property-limit-desc", "show-all", "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", - "property-collect-list", "property-collect-list-1"); - linkagePoints = graph.addVertex(T.label, "linkage-points", T.id, "10", AAI_NODE_TYPE, "linkage-points", "linkage-points", getArrayListAsString(), - "new-data-del-flag", "F"); - - GraphTraversalSource g = graph.traversal(); - edgeSer.addTreeEdge(g, model, modelVersion); - edgeSer.addTreeEdge(g, modelElement, modelConstraint); - edgeSer.addTreeEdge(g, constrainedElementSet, modelConstraint); - edgeSer.addTreeEdge(g, modelVersion, modelElement); - edgeSer.addTreeEdge(g, modelElement, constrainedElementSet); - edgeSer.addTreeEdge(g, constrainedElementSet, elementChoiceSet); - edgeSer.addTreeEdge(g, modelElement, elementChoiceSet); - edgeSer.addTreeEdge(g, namedQuery, namedQueryElement); - edgeSer.addTreeEdge(g, namedQueryElement, namedQueryElement); - edgeSer.addEdge(g, modelVersion, modelElement); - edgeSer.addEdge(g, model, namedQueryElement); - return g; - } - - @Test(expected=AAIException.class) - public void testGetStartNodesAndModVersionIds_NullId_ExpectException() throws AAIException { - List<Map<String,Object>> startNodeFilterArrayOfHashes=new ArrayList<>(); - String passedModelVerId = null; - String passedModelInvId = null; - String passedModelName = null; - modelBasedProcessor.getStartNodesAndModVersionIds("9999","postmen",passedModelVerId,passedModelInvId, - passedModelName,"generic-vnf",startNodeFilterArrayOfHashes,""); - } - - @Test - public void testGetStartNodesAndModVersionIds_ModelVersion() throws AAIException { - - List<Map<String,Object>> startNodeFilterArrayOfHashes=new ArrayList<>(); - String passedModelInvId = null; - String passedModelName = null; - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, MODEL_VERSION_ID_VALUE, passedModelInvId, passedModelName, - AAI_NODE_TYPE, startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test - public void testGetStartNodesAndModVersionIds_ModelInId() throws AAIException { - List<Map<String,Object>> startNodeFilterArrayOfHashes=new ArrayList<>(); - String passedModelVersion = null; - String passedModelName = null; - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID,passedModelVersion,MODEL_INVARIANT_ID_VALUE, passedModelName, - AAI_NODE_TYPE, startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test - public void testGetStartNodesAndModVersionIds_ModelName() throws AAIException { - List<Map<String,Object>> startNodeFilterArrayOfHashes=new ArrayList<>(); - String passedModelVersion = null; - String passedModelInvId = null; - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID,passedModelVersion,passedModelInvId, MODEL_NAME_ID_VALUE, - AAI_NODE_TYPE, startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testGetStartNodesAndModVersionIds_NonEmptyHashMap_ModelVersion() throws AAIException { - Map<String, Object> map = new HashMap<>(); - map.put("model-ver.model-name", "model-name"); - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); - startNodeFilterArrayOfHashes.add(map); - String passedModelInvId = null; - String passedModelName = null; - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, MODEL_VERSION_ID_VALUE, passedModelInvId, passedModelName, - MODEL_NAME_ID_VALUE, startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testGetStartNodesAndModVersionIds_NonEmptyHashMap_ModelInvId() throws AAIException { - Map<String, Object> map = new HashMap<>(); - map.put("model-ver.model-name", "model-name"); - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); - startNodeFilterArrayOfHashes.add(map); - String passedModelVersion = null; - String passedModelName = null; - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID,passedModelVersion,MODEL_INVARIANT_ID_VALUE, passedModelName, - MODEL_NAME_ID_VALUE, startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testGetStartNodesAndModVersionIds_NonEmptyHashMap_ModelName() throws AAIException { - Map<String, Object> map = new HashMap<>(); - map.put("model-ver.model-name", "model-name"); - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); - startNodeFilterArrayOfHashes.add(map); - String passedModelVersion = null; - String passedModelInvId = null; - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID,passedModelVersion,passedModelInvId, MODEL_NAME_ID_VALUE, - MODEL_NAME_ID_VALUE, startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testQueryByModel() throws AAIException { - List<Map<String,Object>> startNodeFilterArrayOfHashes=new ArrayList<>(); - String passedModelInvId = null; - String passedModelName = null; - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.queryByModel(TRANSACTION_ID, FROM_APP_ID, MODEL_VERSION_ID_VALUE, passedModelInvId, passedModelName, - AAI_NODE_TYPE, startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testQueryByModel_Timed() throws AAIException { - List<Map<String,Object>> startNodeFilterArrayOfHashes=new ArrayList<>(); - String passedModelVersion = null; - String passedModelName = null; - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.queryByModel_Timed(TRANSACTION_ID, FROM_APP_ID,passedModelVersion,MODEL_INVARIANT_ID_VALUE, passedModelName, - MODEL_NAME_ID_VALUE, startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testgetModelTypeFromModelVer_NullVertexArg() throws AAIException { - Vertex nullVertex = null; - modelBasedProcessor.getModelVerTopWidgetType(nullVertex, ""); - } - - @Test - public void testValidateNamedQuery_FoundQuery() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - - modelBasedProcessor.validateNamedQuery("9999", "JUNIT", "named-query-uuid-1", "1.0"); - } - - @Test(expected=AAIException.class) - public void testValidateNamedQuery_NotFoundQuery() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - - modelBasedProcessor.validateNamedQuery("9999", "JUNIT", "named-query-uuid", "1.0"); - } - - @Test(expected=AAIException.class) - public void testGetNodeUsingUniqueId_NullUniqueId() throws AAIException { - modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen","generic-vnf","vnf-id",""); - modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen","generic-vnf","vnf-id",null); - } - - @Test(expected=AAIException.class) - public void testGetNodeUsingUniqueId_NullPropertyName() throws AAIException { - modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen","generic-vnf","","vnf-id-1"); - modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen","generic-vnf",null,"vnf-id-1"); - } - - @Test(expected=AAIException.class) - public void testGetNodeUsingUniqueId_NullNodeType() throws AAIException { - modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen","","vnf-id","vnf-id-1"); - modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen",null,"vnf-id","vnf-id-1"); - } - - @Test(expected=AAIException.class) - public void testValidateModel() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.validateModel("9999", "JUNIT", MODEL_VERSION_ID_VALUE, "1.0"); - } - - @Test - public void testShowResultSet_NullVertex() { - ResultSet rs = getResultSet(); - rs.setVert(null); - modelBasedProcessor.showResultSet(rs, 1); - } - - @Test - public void testShowResultSet_NonEmptyOverrideHash() { - ResultSet rs = getResultSet(); - modelBasedProcessor.showResultSet(rs, 2); - } - - @Test - public void testShowResultSet_EmptyOverrideHash() { - ResultSet rs = getResultSet(); - rs.setPropertyOverRideHash(new HashMap<String, Object>()); - modelBasedProcessor.showResultSet(rs, 2); - } - - private ResultSet getResultSet() { - ResultSet rs = new ResultSet(); - rs.setVert(model); - rs.setLocationInModelSubGraph("2"); - Map<String,Object> overrideHash = new HashMap<String, Object>(); - rs.setPropertyOverRideHash(overrideHash); - overrideHash.put("key1", "value1"); - overrideHash.put("key2", "value2"); - overrideHash.put("key3", "value3"); - overrideHash.put("key4", "value4"); - - Map<String,Object> extraHash = new HashMap<String, Object>(); - rs.setExtraPropertyHash(extraHash); - extraHash.put("key1", "value1"); - extraHash.put("key2", "value2"); - extraHash.put("key3", "value3"); - extraHash.put("key4", "value4"); - - return rs; - } - - @Test - public void testPruneResultSet_NotCutPointType() throws AAIException { - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - - ResultSet rs = getResultSet(); - List<ResultSet> subResultSet = new ArrayList<>(); - subResultSet.add(getResultSet()); - rs.setSubResultSet(subResultSet); - modelBasedProcessor.pruneResultSet(rs, "mdl", new HashMap<>()); - } - - @Test - public void testPruneResultSet_CutPointType() throws AAIException { - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - - ResultSet rs = getResultSet(); - Map<String, Object> startNodeFilterHash = new HashMap<>(); - startNodeFilterHash.put("model.model_type","widget"); - startNodeFilterHash.put("named_query.named-query-uuid","named-query-uuid-1"); - modelBasedProcessor.pruneResultSet(rs, "model", startNodeFilterHash); - } - - @Test - public void testCollapseForDoNotOutput_FlagTrue() throws AAIException { - - ResultSet rs = getResultSet(); - List<ResultSet> subResultSet = new ArrayList<>(); - subResultSet.add(getResultSet()); - rs.setSubResultSet(subResultSet); - rs.setDoNotOutputFlag("true"); - modelBasedProcessor.collapseForDoNotOutput(rs); - } - - @Test - public void testCollapseForDoNotOutput_FlagFalse() throws AAIException { - - ResultSet rs = getResultSet(); - List<ResultSet> subResultSet = new ArrayList<>(); - subResultSet.add(getResultSet()); - rs.setSubResultSet(subResultSet); - rs.setDoNotOutputFlag("false"); - modelBasedProcessor.collapseForDoNotOutput(rs); - } - - @Test - public void testMakeSureItsAnArrayList() { - String listString = getArrayListAsString(); - modelBasedProcessor.makeSureItsAnArrayList(listString); - } - - private String getArrayListAsString() { - List<String> strList = new ArrayList<>(); - strList.add("1"); - strList.add("2"); - strList.add("3"); - return strList.toString(); - } - - @Test - public void testGetModConstraintHash() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getModConstraintHash(modelElement, new HashMap<>()); - } - - @Test(expected=AAIException.class) - public void testGenTopoMap4ModelVer_WidgetType() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.genTopoMap4ModelVer(TRANSACTION_ID, FROM_APP_ID, modelVersion, MODEL_VERSION_ID_VALUE); - } - - @Test(expected=AAIException.class) - public void testGenTopoMap4ModelVer_ServiceType() throws AAIException { - - Graph serviceGraph = TinkerGraph.open(); - Vertex modelV = serviceGraph.addVertex(T.label, "model", T.id, "20", AAI_NODE_TYPE, "model", "model-invariant-id", "model-invariant-id-1", "model-type", "service"); - Vertex modelVerV = serviceGraph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "21", AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, - MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE,MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); - Vertex modelElementV = graph.addVertex(T.label, "model-element", T.id, "22", AAI_NODE_TYPE, "model-element"); - GraphTraversalSource gts = serviceGraph.traversal(); - - //EdgeRules rules4Service = EdgeRules.getInstance(); - edgeSer.addTreeEdge(gts, modelV, modelVerV); - edgeSer.addTreeEdge(gts, modelElementV, modelVerV); - edgeSer.addEdge(gts, modelElementV, modelVerV); - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.genTopoMap4ModelVer(TRANSACTION_ID, FROM_APP_ID, modelVerV, MODEL_VERSION_ID_VALUE); - } - - @Test(expected=AAIException.class) - public void testCollectTopology4ModelVer() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - - Multimap<String, String> initialEmptyMap = ArrayListMultimap.create(); - List<String> vidsTraversed = new ArrayList<>(); - modelBasedProcessor.collectTopology4ModelVer(TRANSACTION_ID, FROM_APP_ID, modelElement, "", initialEmptyMap, vidsTraversed, - 0, null, MODEL_INVARIANT_ID_VALUE, MODEL_VERSION_ID_VALUE); - } - - @Test(expected=AAIException.class) - public void testGetNextStepElementsFromSet_NullVertex() throws AAIException { - modelBasedProcessor.getNextStepElementsFromSet(null); - } - - @Test - public void testRundeleteAsNeededFromResultSet() throws AAIException { - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - - ResultSet rs = getResultSet(); - rs.setNewDataDelFlag("T"); - modelBasedProcessor.deleteAsNeededFromResultSet(TRANSACTION_ID, FROM_APP_ID, rs, - "", API_VERSION, API_VERSION, new HashMap<>()); - } - - @Test(expected=AAIException.class) - public void testQueryByNamedQuery() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.queryByNamedQuery(TRANSACTION_ID, FROM_APP_ID, "named-query-uuid-1", new ArrayList<>(), API_VERSION); - } - - @Test - public void testCollectInstanceData() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - Multimap<String, String> validNextStepMap = ArrayListMultimap.create(); - validNextStepMap.put("named-query-element-uuid-1", "named-query-element-uuid-1"); - List<String> vidsTraversed=new ArrayList<>(); - vidsTraversed.add("named-query-element-uuid-1"); - Map<String,String> namedQueryElementHash = new HashMap<>(); - namedQueryElementHash.put("named-query-element-uuid-1", "named-query-element-uuid-1"); - modelBasedProcessor.collectInstanceData(TRANSACTION_ID, FROM_APP_ID, modelElement, "named-query-element-uuid-1", - validNextStepMap, vidsTraversed, 0, new HashMap<>(), namedQueryElementHash, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testNamedQueryConstraintSaysStop_NullNamedQueryVertex() throws AAIException { - modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, null, model, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testNamedQueryConstraintSaysStop_NullInstanceVertex() throws AAIException { - modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, model, null, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testNamedQueryConstraintSaysStop_NullContraintType() throws AAIException { - - Graph serviceGraph = TinkerGraph.open(); - Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "30","aai-node-type", "named-query-element", - "property-limit-desc", "show-all", "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", - "property-collect-list", "property-collect-list-1"); - Vertex propertyContraintV = graph.addVertex(T.label, "property-constraint", T.id, "31", AAI_NODE_TYPE, "property-constraint"); - Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "32", AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); - GraphTraversalSource gts = serviceGraph.traversal(); - - edgeSer.addTreeEdge(gts, namedQueryElementV, propertyContraintV); - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, namedQueryElementV, instanceVertexV, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testNamedQueryConstraintSaysStop_NullPropertyName() throws AAIException { - - Graph serviceGraph = TinkerGraph.open(); - Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "33","aai-node-type", "named-query-element", - "property-limit-desc", "show-all", "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", - "property-collect-list", "property-collect-list-1"); - Vertex propertyContraintV = graph.addVertex(T.label, "property-constraint", T.id, "34", AAI_NODE_TYPE, "property-constraint", "constraint-type", "EQUALS"); - Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "35", AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); - GraphTraversalSource gts = serviceGraph.traversal(); - - //EdgeRules rules4Service = EdgeRules.getInstance(); - edgeSer.addTreeEdge(gts, namedQueryElementV, propertyContraintV); - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, namedQueryElementV, instanceVertexV, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testNamedQueryConstraintSaysStop_NullPropertyValue() throws AAIException { - - Graph serviceGraph = TinkerGraph.open(); - Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "36","aai-node-type", "named-query-element", - "property-limit-desc", "show-all", "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", - "property-collect-list", "property-collect-list-1"); - Vertex propertyContraintV = graph.addVertex(T.label, "property-constraint", T.id, "37", AAI_NODE_TYPE, "property-constraint", - "constraint-type", "EQUALS", "property-name", "property-name"); - Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "38", AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); - GraphTraversalSource gts = serviceGraph.traversal(); - - edgeSer.addTreeEdge(gts, namedQueryElementV, propertyContraintV); - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, namedQueryElementV, instanceVertexV, API_VERSION); - } - - @Test - public void testNamedQueryConstraintSaysStop_ConstraintTypeEquals() throws AAIException { - - Graph serviceGraph = TinkerGraph.open(); - Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "39","aai-node-type", "named-query-element", - "property-limit-desc", "show-all", "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", - "property-collect-list", "property-collect-list-1"); - Vertex propertyContraintV = graph.addVertex(T.label, "property-constraint", T.id, "40", AAI_NODE_TYPE, "property-constraint", - "constraint-type", "EQUALS", "property-name", "property-name", "property-value", "property-value"); - Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "41", AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); - GraphTraversalSource gts = serviceGraph.traversal(); - - edgeSer.addTreeEdge(gts, namedQueryElementV, propertyContraintV); - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, namedQueryElementV, instanceVertexV, API_VERSION); - } - - @Test - public void testNamedQueryConstraintSaysStop_ConstraintTypeNotEquals() throws AAIException { - - Graph serviceGraph = TinkerGraph.open(); - Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "42","aai-node-type", "named-query-element", - "property-limit-desc", "show-all", "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", - "property-collect-list", "property-collect-list-1"); - Vertex propertyContraintV = graph.addVertex(T.label, "property-constraint", T.id, "43", AAI_NODE_TYPE, "property-constraint", - "constraint-type", "NOT-EQUALS", "property-name", "property-name", "property-value", "property-value"); - Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "44", AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); - GraphTraversalSource gts = serviceGraph.traversal(); - - edgeSer.addTreeEdge(gts, namedQueryElementV, propertyContraintV); - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, namedQueryElementV, instanceVertexV, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testGetNamedQueryExtraDataLookup_TargetNodeTypeNull() throws AAIException { - - Graph serviceGraph = TinkerGraph.open(); - Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "45","aai-node-type", "named-query-element", - "property-limit-desc", "show-all", "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", - "property-collect-list", "property-collect-list-1"); - Vertex relatedLookUpV = graph.addVertex(T.label, "related-lookup", T.id, "46", AAI_NODE_TYPE, "related-lookup", - "source-node-property", "source-node-property", "source-node-type", "generic-vnf"); - Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "47", AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); - GraphTraversalSource gts = serviceGraph.traversal(); - edgeSer.addTreeEdge(gts, namedQueryElementV, relatedLookUpV); - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.getNamedQueryExtraDataLookup(TRANSACTION_ID, FROM_APP_ID, namedQueryElementV, instanceVertexV, API_VERSION); - } - - @Test - public void testGetNamedQueryExtraDataLookup_InvalidSourceProperty() throws AAIException { - - Graph serviceGraph = TinkerGraph.open(); - Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "51","aai-node-type", "named-query-element", - "property-limit-desc", "show-all", "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", - "property-collect-list", "property-collect-list-1"); - Vertex relatedLookUpV = graph.addVertex(T.label, "related-lookup", T.id, "52", AAI_NODE_TYPE, "related-lookup", - "source-node-property", "source-node-property", "source-node-type", "generic-vnf", "target-node-type", "generic-vnf", - "target-node-property", "generic-vnf", "property-collect-list", "property-collect-list"); - Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "53", AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); - GraphTraversalSource gts = serviceGraph.traversal(); - edgeSer.addTreeEdge(gts, namedQueryElementV, relatedLookUpV); - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.getNamedQueryExtraDataLookup(TRANSACTION_ID, FROM_APP_ID, namedQueryElementV, instanceVertexV, API_VERSION); - } - - @Test(expected=IllegalArgumentException.class) - public void testGetNamedQueryExtraDataLookup_ValidSourceProperty() throws AAIException { - - Graph serviceGraph = TinkerGraph.open(); - Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "54","aai-node-type", "named-query-element", - "property-limit-desc", "show-all", "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", - "property-collect-list", "property-collect-list-1"); - Vertex relatedLookUpV = graph.addVertex(T.label, "related-lookup", T.id, "55", AAI_NODE_TYPE, "related-lookup", - "source-node-property", "source-node-property", "source-node-type", "generic-vnf", "target-node-type", "generic-vnf", "target-node-property", "generic-vnf"); - Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "56", AAI_NODE_TYPE, "instance-vertex", "source-node-property", "source-node-property"); - GraphTraversalSource gts = serviceGraph.traversal(); - edgeSer.addTreeEdge(gts, namedQueryElementV, relatedLookUpV); - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.getNamedQueryExtraDataLookup(TRANSACTION_ID, FROM_APP_ID, namedQueryElementV, instanceVertexV, API_VERSION); - } - - @Test - public void testCollectNQElementHash() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.collectNQElementHash(TRANSACTION_ID, FROM_APP_ID, namedQueryElement, "", new HashMap<>(), new ArrayList<>(), 0); - } - - @Test - public void testCollectDeleteKeyHash() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.collectDeleteKeyHash(TRANSACTION_ID, FROM_APP_ID, linkagePoints, "", new HashMap<>(), new ArrayList<>(), - 0, new HashMap<>(), "model-version-1", "model-version-id-local"); - } - - @Test(expected=AAIException.class) - public void testCheck4EdgeRule_InvalidNodeA() throws AAIException { - modelBasedProcessor.check4EdgeRule("model-version1", "model-ver"); - } - - @Test(expected=AAIException.class) - public void testCheck4EdgeRule_InvalidNodeB() throws AAIException { - modelBasedProcessor.check4EdgeRule("model-ver", "model-version1"); - } - - @Test(expected=AAIException.class) - public void testCheck4EdgeRule_InvalidEdge() throws AAIException { - modelBasedProcessor.check4EdgeRule("model-ver", "named-query"); - } - - @Test - public void testCollectTopology4LinkagePoint() throws AAIException { - String linkagePointStrVal = new String("model-ver|model"); - String incomingTrail = new String("model|model-ver"); - Multimap<String, String> currentMap = ArrayListMultimap.create(); - modelBasedProcessor.collectTopology4LinkagePoint(TRANSACTION_ID, FROM_APP_ID, linkagePointStrVal, incomingTrail, currentMap); - } - - @Test - public void testGenTopoMap4NamedQ() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.genTopoMap4NamedQ(TRANSACTION_ID, FROM_APP_ID, namedQuery, "named-query-uuid-1"); - } - - @Test - public void testGetModelThatNqElementRepresents() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getModelThatNqElementRepresents(namedQueryElement, ""); - } - - @Test - public void testGetModelVerThatElementRepresents() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getModelVerThatElementRepresents(modelElement, ""); - } - - @Test - public void testGetModelTypeFromModel() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getModelTypeFromModel(model, ""); - } - - @Test - public void testGetModelVerTopWidgetType() throws AAIException { - Graph serviceGraph = TinkerGraph.open(); - Vertex modelV = serviceGraph.addVertex(T.label, "model", T.id, "57", AAI_NODE_TYPE, "model", "model-invariant-id", "model-invariant-id-1", "model-type", "service"); - Vertex modelVerV = serviceGraph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "58", AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, - MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE,MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); - Vertex modelElementV = graph.addVertex(T.label, "model-element", T.id, "59", AAI_NODE_TYPE, "model-element"); - GraphTraversalSource gts = serviceGraph.traversal(); - - edgeSer.addTreeEdge(gts, modelV, modelVerV); - edgeSer.addTreeEdge(gts, modelElementV, modelVerV); - edgeSer.addEdge(gts, modelElementV, modelVerV); - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.getModelVerTopWidgetType(modelVerV, ""); - } - - @Test - public void testGetModelElementStepName() throws AAIException { - Graph serviceGraph = TinkerGraph.open(); - Vertex modelV = serviceGraph.addVertex(T.label, "model", T.id, "60", AAI_NODE_TYPE, "model", "model-invariant-id", "model-invariant-id-1", "model-type", "service"); - Vertex modelVerV = serviceGraph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "61", AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, - MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE,MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); - Vertex modelElementV = graph.addVertex(T.label, "model-element", T.id, "62", AAI_NODE_TYPE, "model-element"); - GraphTraversalSource gts = serviceGraph.traversal(); - - edgeSer.addTreeEdge(gts, modelV, modelVerV); - edgeSer.addTreeEdge(gts, modelElementV, modelVerV); - edgeSer.addEdge(gts, modelElementV, modelVerV); - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.getModelElementStepName(modelElementV, ""); - } - - @Test(expected=IllegalArgumentException.class) - public void testRunDeleteByModel() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - Map<String, Object> map = new HashMap<>(); - map.put("generic-vnf.d","relationshipdata"); - - modelBasedProcessor.runDeleteByModel(TRANSACTION_ID, FROM_APP_ID, MODEL_VERSION_ID_VALUE, "model-ver", map, API_VERSION, API_VERSION); - } - - @Test - public void testSecondConstructor() { - ModelBasedProcessing mdp = new ModelBasedProcessing(); - } - - @Test(expected=AAIIdentityMapParseException.class) - public void testQueryByNamedQuery_NonEmptyMap() throws AAIException { - Map<String, Object> map = new HashMap<>(); - map.put("model-ver.model-name", "model-name"); - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); - startNodeFilterArrayOfHashes.add(map); - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - - modelBasedProcessor.queryByNamedQuery(TRANSACTION_ID, FROM_APP_ID, "named-query-uuid-1", startNodeFilterArrayOfHashes, API_VERSION, null, null); - - } - - @Test(expected=AAIIdentityMapParseException.class) - public void testRunDeleteByModel_Service() throws AAIException { - Graph serviceGraph = TinkerGraph.open(); - Vertex modelV = serviceGraph.addVertex(T.label, "model", T.id, "63", AAI_NODE_TYPE, "model", "model-invariant-id", "model-invariant-id-1", "model-type", "service"); - Vertex modelVerV = serviceGraph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "64", AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, - MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE,MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); - Vertex modelElementV = graph.addVertex(T.label, "model-element", T.id, "65", AAI_NODE_TYPE, "model-element"); - GraphTraversalSource gts = serviceGraph.traversal(); - - edgeSer.addTreeEdge(gts, modelV, modelVerV); - edgeSer.addTreeEdge(gts, modelElementV, modelVerV); - edgeSer.addEdge(gts, modelElementV, modelVerV); - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - - Map<String, Object> map = new HashMap<>(); - map.put("generic-vnf.d","relationshipdata"); - - modelBasedProcessor.runDeleteByModel(TRANSACTION_ID, FROM_APP_ID, MODEL_VERSION_ID_VALUE, "model-ver", map, API_VERSION, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testGetStartNodesAndModVersionIds_NonEmptyHashMap_AllEmpty() throws AAIException { - Map<String, Object> map = new HashMap<>(); - map.put("model-ver.model-name", "model-name"); - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); - startNodeFilterArrayOfHashes.add(map); - String passedModelInvId = null; - String passedModelName = null; - String passedModelVerId = null; - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, passedModelVerId, passedModelInvId, passedModelName, - "", startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testGetStartNodesAndModVersionIds_NonEmptyHashMap_ModelTypeNonNull() throws AAIException { - Map<String, Object> map = new HashMap<>(); - map.put("model-ver.model-name", "model-name"); - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); - startNodeFilterArrayOfHashes.add(map); - String passedModelInvId = null; - String passedModelName = null; - String passedModelVerId = null; - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, passedModelVerId, passedModelInvId, passedModelName, - MODEL_NAME_ID_VALUE, startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testQueryByModel_Timed_NonEmptyHash() throws AAIException { - Map<String, Object> map = new HashMap<>(); - map.put("model-ver.model-name", "model-name"); - List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); - startNodeFilterArrayOfHashes.add(map); - String passedModelVersion = null; - String passedModelName = null; - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - modelBasedProcessor.queryByModel_Timed(TRANSACTION_ID, FROM_APP_ID,passedModelVersion,MODEL_INVARIANT_ID_VALUE, passedModelName, - MODEL_NAME_ID_VALUE, startNodeFilterArrayOfHashes, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testRunDeleteByModel_NullVersionAndNode() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - Map<String, Object> map = new HashMap<>(); - map.put("generic-vnf.d","relationshipdata"); - - modelBasedProcessor.runDeleteByModel(TRANSACTION_ID, FROM_APP_ID, "", "", map, API_VERSION, API_VERSION); - } - - @Test(expected=AAIException.class) - public void testRunDeleteByModel_NullVersion() throws AAIException { - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); - Map<String, Object> map = new HashMap<>(); - map.put("generic-vnf.d","relationshipdata"); - - modelBasedProcessor.runDeleteByModel(TRANSACTION_ID, FROM_APP_ID, "", "model-ver", map, API_VERSION, API_VERSION); - } - - @Test - public void testGenTopoMap4ModelVer_WidgetType_Map() throws AAIException { - - Graph serviceGraph = TinkerGraph.open(); - Vertex modelV = serviceGraph.addVertex(T.label, "model", T.id, "66", AAI_NODE_TYPE, "model", "model-invariant-id", "model-invariant-id-1", "model-type", "widget"); - Vertex modelVerV = serviceGraph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "67", AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, - MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE,MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); - GraphTraversalSource gts = serviceGraph.traversal(); - - edgeSer.addTreeEdge(gts, modelV, modelVerV); - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - - Mockito.when(dbEngine.asAdmin()).thenReturn(admin); - Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); - modelBasedProcessor.genTopoMap4ModelVer(TRANSACTION_ID, FROM_APP_ID, modelVerV, MODEL_VERSION_ID_VALUE); - } - + + private static TransactionalGraphEngine dbEngine; + private static TransactionalGraphEngine.Admin admin; + DBSerializer serializer; + private static Loader loader; + + ModelBasedProcessing modelBasedProcessor; + + GraphTraversalSource source; + + Graph graph; + + Vertex model; + Vertex modelVersion; + Vertex modelElement; + Vertex constrainedElementSet; + Vertex namedQueryElement; + Vertex linkagePoints; + Vertex namedQuery; + + @BeforeClass + public static void configure() throws Exception { + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "src/main/resources"); + } + + @Before + public void init() throws AAIException { + MockitoAnnotations.initMocks(this); + version = schemaVersions.getDefaultVersion(); + loader = loaderFactory.createLoaderForVersion(introspectorFactoryType, version); + TransactionalGraphEngine newDbEngine = new JanusGraphDBEngine(queryStyle, loader); + dbEngine = Mockito.spy(newDbEngine); + serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + admin = Mockito.spy(dbEngine.asAdmin()); + modelBasedProcessor = new ModelBasedProcessing(loader, dbEngine, serializer); + graph = TinkerGraph.open(); + source = createGraph(); + } + + private GraphTraversalSource createGraph() throws AAIException { + model = graph.addVertex(T.label, "model", T.id, "0", AAI_NODE_TYPE, "model", + "model-invariant-id", "model-invariant-id-1", "model-type", "widget"); + modelVersion = graph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "1", AAI_NODE_TYPE, + MODEL_VESION_NODE_VALUE, MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE, + MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); + graph.addVertex(T.label, MODEL_INVARIANT_ID_NODE_VALUE, T.id, "2", MODEL_INVARIANT_ID_KEY, + MODEL_INVARIANT_ID_VALUE, "model-version-id-local", MODEL_VERSION_ID_VALUE); + namedQuery = graph.addVertex(T.label, "named-query", T.id, "3", "aai-node-type", + "named-query", "named-query-uuid", "named-query-uuid-1"); + graph.addVertex(T.label, MODEL_NAME_NODE_VALUE, T.id, "4", AAI_NODE_TYPE, + MODEL_NAME_NODE_VALUE, MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE); + modelElement = + graph.addVertex(T.label, "model-element", T.id, "5", AAI_NODE_TYPE, "model-element"); + Vertex modelConstraint = + graph.addVertex(T.label, "model-constraint", T.id, "6", AAI_NODE_TYPE, + "model-constraint", "constrained-element-set-uuid-2-replace", "cesu2r-1"); + constrainedElementSet = graph.addVertex(T.label, "constrained-element-set", T.id, "7", + AAI_NODE_TYPE, "constrained-element-set"); + Vertex elementChoiceSet = graph.addVertex(T.label, "element-choice-set", T.id, "8", + AAI_NODE_TYPE, "element-choice-set"); + namedQueryElement = graph.addVertex(T.label, "named-query-element", T.id, "9", + "aai-node-type", "named-query-element", "property-limit-desc", "show-all", + "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", + "property-collect-list", "property-collect-list-1"); + linkagePoints = graph.addVertex(T.label, "linkage-points", T.id, "10", AAI_NODE_TYPE, + "linkage-points", "linkage-points", getArrayListAsString(), "new-data-del-flag", "F"); + + GraphTraversalSource g = graph.traversal(); + edgeSer.addTreeEdge(g, model, modelVersion); + edgeSer.addTreeEdge(g, modelElement, modelConstraint); + edgeSer.addTreeEdge(g, constrainedElementSet, modelConstraint); + edgeSer.addTreeEdge(g, modelVersion, modelElement); + edgeSer.addTreeEdge(g, modelElement, constrainedElementSet); + edgeSer.addTreeEdge(g, constrainedElementSet, elementChoiceSet); + edgeSer.addTreeEdge(g, modelElement, elementChoiceSet); + edgeSer.addTreeEdge(g, namedQuery, namedQueryElement); + edgeSer.addTreeEdge(g, namedQueryElement, namedQueryElement); + edgeSer.addEdge(g, modelVersion, modelElement); + edgeSer.addEdge(g, model, namedQueryElement); + return g; + } + + @Test(expected = AAIException.class) + public void testGetStartNodesAndModVersionIds_NullId_ExpectException() throws AAIException { + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + String passedModelVerId = null; + String passedModelInvId = null; + String passedModelName = null; + modelBasedProcessor.getStartNodesAndModVersionIds("9999", "postmen", passedModelVerId, + passedModelInvId, passedModelName, "generic-vnf", startNodeFilterArrayOfHashes, ""); + } + + @Test + public void testGetStartNodesAndModVersionIds_ModelVersion() throws AAIException { + + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + String passedModelInvId = null; + String passedModelName = null; + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, + MODEL_VERSION_ID_VALUE, passedModelInvId, passedModelName, AAI_NODE_TYPE, + startNodeFilterArrayOfHashes, API_VERSION); + } + + @Test + public void testGetStartNodesAndModVersionIds_ModelInId() throws AAIException { + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + String passedModelVersion = null; + String passedModelName = null; + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, + passedModelVersion, MODEL_INVARIANT_ID_VALUE, passedModelName, AAI_NODE_TYPE, + startNodeFilterArrayOfHashes, API_VERSION); + } + + @Test + public void testGetStartNodesAndModVersionIds_ModelName() throws AAIException { + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + String passedModelVersion = null; + String passedModelInvId = null; + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, + passedModelVersion, passedModelInvId, MODEL_NAME_ID_VALUE, AAI_NODE_TYPE, + startNodeFilterArrayOfHashes, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testGetStartNodesAndModVersionIds_NonEmptyHashMap_ModelVersion() + throws AAIException { + Map<String, Object> map = new HashMap<>(); + map.put("model-ver.model-name", "model-name"); + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + startNodeFilterArrayOfHashes.add(map); + String passedModelInvId = null; + String passedModelName = null; + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, + MODEL_VERSION_ID_VALUE, passedModelInvId, passedModelName, MODEL_NAME_ID_VALUE, + startNodeFilterArrayOfHashes, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testGetStartNodesAndModVersionIds_NonEmptyHashMap_ModelInvId() throws AAIException { + Map<String, Object> map = new HashMap<>(); + map.put("model-ver.model-name", "model-name"); + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + startNodeFilterArrayOfHashes.add(map); + String passedModelVersion = null; + String passedModelName = null; + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, + passedModelVersion, MODEL_INVARIANT_ID_VALUE, passedModelName, MODEL_NAME_ID_VALUE, + startNodeFilterArrayOfHashes, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testGetStartNodesAndModVersionIds_NonEmptyHashMap_ModelName() throws AAIException { + Map<String, Object> map = new HashMap<>(); + map.put("model-ver.model-name", "model-name"); + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + startNodeFilterArrayOfHashes.add(map); + String passedModelVersion = null; + String passedModelInvId = null; + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, + passedModelVersion, passedModelInvId, MODEL_NAME_ID_VALUE, MODEL_NAME_ID_VALUE, + startNodeFilterArrayOfHashes, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testQueryByModel() throws AAIException { + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + String passedModelInvId = null; + String passedModelName = null; + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.queryByModel(TRANSACTION_ID, FROM_APP_ID, MODEL_VERSION_ID_VALUE, + passedModelInvId, passedModelName, AAI_NODE_TYPE, startNodeFilterArrayOfHashes, + API_VERSION); + } + + @Test(expected = AAIException.class) + public void testQueryByModel_Timed() throws AAIException { + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + String passedModelVersion = null; + String passedModelName = null; + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.queryByModel_Timed(TRANSACTION_ID, FROM_APP_ID, passedModelVersion, + MODEL_INVARIANT_ID_VALUE, passedModelName, MODEL_NAME_ID_VALUE, + startNodeFilterArrayOfHashes, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testgetModelTypeFromModelVer_NullVertexArg() throws AAIException { + Vertex nullVertex = null; + modelBasedProcessor.getModelVerTopWidgetType(nullVertex, ""); + } + + @Test + public void testValidateNamedQuery_FoundQuery() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + + modelBasedProcessor.validateNamedQuery("9999", "JUNIT", "named-query-uuid-1", "1.0"); + } + + @Test(expected = AAIException.class) + public void testValidateNamedQuery_NotFoundQuery() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + + modelBasedProcessor.validateNamedQuery("9999", "JUNIT", "named-query-uuid", "1.0"); + } + + @Test(expected = AAIException.class) + public void testGetNodeUsingUniqueId_NullUniqueId() throws AAIException { + modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen", "generic-vnf", "vnf-id", ""); + modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen", "generic-vnf", "vnf-id", null); + } + + @Test(expected = AAIException.class) + public void testGetNodeUsingUniqueId_NullPropertyName() throws AAIException { + modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen", "generic-vnf", "", "vnf-id-1"); + modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen", "generic-vnf", null, + "vnf-id-1"); + } + + @Test(expected = AAIException.class) + public void testGetNodeUsingUniqueId_NullNodeType() throws AAIException { + modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen", "", "vnf-id", "vnf-id-1"); + modelBasedProcessor.getNodeUsingUniqueId("9999", "postmen", null, "vnf-id", "vnf-id-1"); + } + + @Test(expected = AAIException.class) + public void testValidateModel() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.validateModel("9999", "JUNIT", MODEL_VERSION_ID_VALUE, "1.0"); + } + + @Test + public void testShowResultSet_NullVertex() { + ResultSet rs = getResultSet(); + rs.setVert(null); + modelBasedProcessor.showResultSet(rs, 1); + } + + @Test + public void testShowResultSet_NonEmptyOverrideHash() { + ResultSet rs = getResultSet(); + modelBasedProcessor.showResultSet(rs, 2); + } + + @Test + public void testShowResultSet_EmptyOverrideHash() { + ResultSet rs = getResultSet(); + rs.setPropertyOverRideHash(new HashMap<String, Object>()); + modelBasedProcessor.showResultSet(rs, 2); + } + + private ResultSet getResultSet() { + ResultSet rs = new ResultSet(); + rs.setVert(model); + rs.setLocationInModelSubGraph("2"); + Map<String, Object> overrideHash = new HashMap<String, Object>(); + rs.setPropertyOverRideHash(overrideHash); + overrideHash.put("key1", "value1"); + overrideHash.put("key2", "value2"); + overrideHash.put("key3", "value3"); + overrideHash.put("key4", "value4"); + + Map<String, Object> extraHash = new HashMap<String, Object>(); + rs.setExtraPropertyHash(extraHash); + extraHash.put("key1", "value1"); + extraHash.put("key2", "value2"); + extraHash.put("key3", "value3"); + extraHash.put("key4", "value4"); + + return rs; + } + + @Test + public void testPruneResultSet_NotCutPointType() throws AAIException { + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + + ResultSet rs = getResultSet(); + List<ResultSet> subResultSet = new ArrayList<>(); + subResultSet.add(getResultSet()); + rs.setSubResultSet(subResultSet); + modelBasedProcessor.pruneResultSet(rs, "mdl", new HashMap<>()); + } + + @Test + public void testPruneResultSet_CutPointType() throws AAIException { + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + + ResultSet rs = getResultSet(); + Map<String, Object> startNodeFilterHash = new HashMap<>(); + startNodeFilterHash.put("model.model_type", "widget"); + startNodeFilterHash.put("named_query.named-query-uuid", "named-query-uuid-1"); + modelBasedProcessor.pruneResultSet(rs, "model", startNodeFilterHash); + } + + @Test + public void testCollapseForDoNotOutput_FlagTrue() throws AAIException { + + ResultSet rs = getResultSet(); + List<ResultSet> subResultSet = new ArrayList<>(); + subResultSet.add(getResultSet()); + rs.setSubResultSet(subResultSet); + rs.setDoNotOutputFlag("true"); + modelBasedProcessor.collapseForDoNotOutput(rs); + } + + @Test + public void testCollapseForDoNotOutput_FlagFalse() throws AAIException { + + ResultSet rs = getResultSet(); + List<ResultSet> subResultSet = new ArrayList<>(); + subResultSet.add(getResultSet()); + rs.setSubResultSet(subResultSet); + rs.setDoNotOutputFlag("false"); + modelBasedProcessor.collapseForDoNotOutput(rs); + } + + @Test + public void testMakeSureItsAnArrayList() { + String listString = getArrayListAsString(); + modelBasedProcessor.makeSureItsAnArrayList(listString); + } + + private String getArrayListAsString() { + List<String> strList = new ArrayList<>(); + strList.add("1"); + strList.add("2"); + strList.add("3"); + return strList.toString(); + } + + @Test + public void testGetModConstraintHash() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getModConstraintHash(modelElement, new HashMap<>()); + } + + @Test(expected = AAIException.class) + public void testGenTopoMap4ModelVer_WidgetType() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.genTopoMap4ModelVer(TRANSACTION_ID, FROM_APP_ID, modelVersion, + MODEL_VERSION_ID_VALUE); + } + + @Test(expected = AAIException.class) + public void testGenTopoMap4ModelVer_ServiceType() throws AAIException { + + Graph serviceGraph = TinkerGraph.open(); + Vertex modelV = serviceGraph.addVertex(T.label, "model", T.id, "20", AAI_NODE_TYPE, "model", + "model-invariant-id", "model-invariant-id-1", "model-type", "service"); + Vertex modelVerV = serviceGraph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "21", + AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE, + MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); + Vertex modelElementV = + graph.addVertex(T.label, "model-element", T.id, "22", AAI_NODE_TYPE, "model-element"); + GraphTraversalSource gts = serviceGraph.traversal(); + + // EdgeRules rules4Service = EdgeRules.getInstance(); + edgeSer.addTreeEdge(gts, modelV, modelVerV); + edgeSer.addTreeEdge(gts, modelElementV, modelVerV); + edgeSer.addEdge(gts, modelElementV, modelVerV); + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.genTopoMap4ModelVer(TRANSACTION_ID, FROM_APP_ID, modelVerV, + MODEL_VERSION_ID_VALUE); + } + + @Test(expected = AAIException.class) + public void testCollectTopology4ModelVer() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + + Multimap<String, String> initialEmptyMap = ArrayListMultimap.create(); + List<String> vidsTraversed = new ArrayList<>(); + modelBasedProcessor.collectTopology4ModelVer(TRANSACTION_ID, FROM_APP_ID, modelElement, "", + initialEmptyMap, vidsTraversed, 0, null, MODEL_INVARIANT_ID_VALUE, + MODEL_VERSION_ID_VALUE); + } + + @Test(expected = AAIException.class) + public void testGetNextStepElementsFromSet_NullVertex() throws AAIException { + modelBasedProcessor.getNextStepElementsFromSet(null); + } + + @Test + public void testRundeleteAsNeededFromResultSet() throws AAIException { + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + + ResultSet rs = getResultSet(); + rs.setNewDataDelFlag("T"); + modelBasedProcessor.deleteAsNeededFromResultSet(TRANSACTION_ID, FROM_APP_ID, rs, "", + API_VERSION, API_VERSION, new HashMap<>()); + } + + @Test(expected = AAIException.class) + public void testQueryByNamedQuery() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.queryByNamedQuery(TRANSACTION_ID, FROM_APP_ID, "named-query-uuid-1", + new ArrayList<>(), API_VERSION); + } + + @Test + public void testCollectInstanceData() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + Multimap<String, String> validNextStepMap = ArrayListMultimap.create(); + validNextStepMap.put("named-query-element-uuid-1", "named-query-element-uuid-1"); + List<String> vidsTraversed = new ArrayList<>(); + vidsTraversed.add("named-query-element-uuid-1"); + Map<String, String> namedQueryElementHash = new HashMap<>(); + namedQueryElementHash.put("named-query-element-uuid-1", "named-query-element-uuid-1"); + modelBasedProcessor.collectInstanceData(TRANSACTION_ID, FROM_APP_ID, modelElement, + "named-query-element-uuid-1", validNextStepMap, vidsTraversed, 0, new HashMap<>(), + namedQueryElementHash, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testNamedQueryConstraintSaysStop_NullNamedQueryVertex() throws AAIException { + modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, null, model, + API_VERSION); + } + + @Test(expected = AAIException.class) + public void testNamedQueryConstraintSaysStop_NullInstanceVertex() throws AAIException { + modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, model, null, + API_VERSION); + } + + @Test(expected = AAIException.class) + public void testNamedQueryConstraintSaysStop_NullContraintType() throws AAIException { + + Graph serviceGraph = TinkerGraph.open(); + Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "30", + "aai-node-type", "named-query-element", "property-limit-desc", "show-all", + "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", + "property-collect-list", "property-collect-list-1"); + Vertex propertyContraintV = graph.addVertex(T.label, "property-constraint", T.id, "31", + AAI_NODE_TYPE, "property-constraint"); + Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "32", + AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); + GraphTraversalSource gts = serviceGraph.traversal(); + + edgeSer.addTreeEdge(gts, namedQueryElementV, propertyContraintV); + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, + namedQueryElementV, instanceVertexV, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testNamedQueryConstraintSaysStop_NullPropertyName() throws AAIException { + + Graph serviceGraph = TinkerGraph.open(); + Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "33", + "aai-node-type", "named-query-element", "property-limit-desc", "show-all", + "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", + "property-collect-list", "property-collect-list-1"); + Vertex propertyContraintV = graph.addVertex(T.label, "property-constraint", T.id, "34", + AAI_NODE_TYPE, "property-constraint", "constraint-type", "EQUALS"); + Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "35", + AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); + GraphTraversalSource gts = serviceGraph.traversal(); + + // EdgeRules rules4Service = EdgeRules.getInstance(); + edgeSer.addTreeEdge(gts, namedQueryElementV, propertyContraintV); + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, + namedQueryElementV, instanceVertexV, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testNamedQueryConstraintSaysStop_NullPropertyValue() throws AAIException { + + Graph serviceGraph = TinkerGraph.open(); + Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "36", + "aai-node-type", "named-query-element", "property-limit-desc", "show-all", + "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", + "property-collect-list", "property-collect-list-1"); + Vertex propertyContraintV = graph.addVertex(T.label, "property-constraint", T.id, "37", + AAI_NODE_TYPE, "property-constraint", "constraint-type", "EQUALS", "property-name", + "property-name"); + Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "38", + AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); + GraphTraversalSource gts = serviceGraph.traversal(); + + edgeSer.addTreeEdge(gts, namedQueryElementV, propertyContraintV); + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, + namedQueryElementV, instanceVertexV, API_VERSION); + } + + @Test + public void testNamedQueryConstraintSaysStop_ConstraintTypeEquals() throws AAIException { + + Graph serviceGraph = TinkerGraph.open(); + Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "39", + "aai-node-type", "named-query-element", "property-limit-desc", "show-all", + "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", + "property-collect-list", "property-collect-list-1"); + Vertex propertyContraintV = graph.addVertex(T.label, "property-constraint", T.id, "40", + AAI_NODE_TYPE, "property-constraint", "constraint-type", "EQUALS", "property-name", + "property-name", "property-value", "property-value"); + Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "41", + AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); + GraphTraversalSource gts = serviceGraph.traversal(); + + edgeSer.addTreeEdge(gts, namedQueryElementV, propertyContraintV); + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, + namedQueryElementV, instanceVertexV, API_VERSION); + } + + @Test + public void testNamedQueryConstraintSaysStop_ConstraintTypeNotEquals() throws AAIException { + + Graph serviceGraph = TinkerGraph.open(); + Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "42", + "aai-node-type", "named-query-element", "property-limit-desc", "show-all", + "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", + "property-collect-list", "property-collect-list-1"); + Vertex propertyContraintV = graph.addVertex(T.label, "property-constraint", T.id, "43", + AAI_NODE_TYPE, "property-constraint", "constraint-type", "NOT-EQUALS", "property-name", + "property-name", "property-value", "property-value"); + Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "44", + AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); + GraphTraversalSource gts = serviceGraph.traversal(); + + edgeSer.addTreeEdge(gts, namedQueryElementV, propertyContraintV); + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.namedQueryConstraintSaysStop(TRANSACTION_ID, FROM_APP_ID, + namedQueryElementV, instanceVertexV, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testGetNamedQueryExtraDataLookup_TargetNodeTypeNull() throws AAIException { + + Graph serviceGraph = TinkerGraph.open(); + Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "45", + "aai-node-type", "named-query-element", "property-limit-desc", "show-all", + "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", + "property-collect-list", "property-collect-list-1"); + Vertex relatedLookUpV = + graph.addVertex(T.label, "related-lookup", T.id, "46", AAI_NODE_TYPE, "related-lookup", + "source-node-property", "source-node-property", "source-node-type", "generic-vnf"); + Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "47", + AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); + GraphTraversalSource gts = serviceGraph.traversal(); + edgeSer.addTreeEdge(gts, namedQueryElementV, relatedLookUpV); + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.getNamedQueryExtraDataLookup(TRANSACTION_ID, FROM_APP_ID, + namedQueryElementV, instanceVertexV, API_VERSION); + } + + @Test + public void testGetNamedQueryExtraDataLookup_InvalidSourceProperty() throws AAIException { + + Graph serviceGraph = TinkerGraph.open(); + Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "51", + "aai-node-type", "named-query-element", "property-limit-desc", "show-all", + "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", + "property-collect-list", "property-collect-list-1"); + Vertex relatedLookUpV = + graph.addVertex(T.label, "related-lookup", T.id, "52", AAI_NODE_TYPE, "related-lookup", + "source-node-property", "source-node-property", "source-node-type", "generic-vnf", + "target-node-type", "generic-vnf", "target-node-property", "generic-vnf", + "property-collect-list", "property-collect-list"); + Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "53", + AAI_NODE_TYPE, "instance-vertex", "property-name", "property-name"); + GraphTraversalSource gts = serviceGraph.traversal(); + edgeSer.addTreeEdge(gts, namedQueryElementV, relatedLookUpV); + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.getNamedQueryExtraDataLookup(TRANSACTION_ID, FROM_APP_ID, + namedQueryElementV, instanceVertexV, API_VERSION); + } + + @Test(expected = IllegalArgumentException.class) + public void testGetNamedQueryExtraDataLookup_ValidSourceProperty() throws AAIException { + + Graph serviceGraph = TinkerGraph.open(); + Vertex namedQueryElementV = graph.addVertex(T.label, "named-query-element", T.id, "54", + "aai-node-type", "named-query-element", "property-limit-desc", "show-all", + "do-not-output", "true", "named-query-element-uuid", "named-query-element-uuid-1", + "property-collect-list", "property-collect-list-1"); + Vertex relatedLookUpV = + graph.addVertex(T.label, "related-lookup", T.id, "55", AAI_NODE_TYPE, "related-lookup", + "source-node-property", "source-node-property", "source-node-type", "generic-vnf", + "target-node-type", "generic-vnf", "target-node-property", "generic-vnf"); + Vertex instanceVertexV = graph.addVertex(T.label, "instance-vertex", T.id, "56", + AAI_NODE_TYPE, "instance-vertex", "source-node-property", "source-node-property"); + GraphTraversalSource gts = serviceGraph.traversal(); + edgeSer.addTreeEdge(gts, namedQueryElementV, relatedLookUpV); + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.getNamedQueryExtraDataLookup(TRANSACTION_ID, FROM_APP_ID, + namedQueryElementV, instanceVertexV, API_VERSION); + } + + @Test + public void testCollectNQElementHash() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.collectNQElementHash(TRANSACTION_ID, FROM_APP_ID, namedQueryElement, "", + new HashMap<>(), new ArrayList<>(), 0); + } + + @Test + public void testCollectDeleteKeyHash() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.collectDeleteKeyHash(TRANSACTION_ID, FROM_APP_ID, linkagePoints, "", + new HashMap<>(), new ArrayList<>(), 0, new HashMap<>(), "model-version-1", + "model-version-id-local"); + } + + @Test(expected = AAIException.class) + public void testCheck4EdgeRule_InvalidNodeA() throws AAIException { + modelBasedProcessor.check4EdgeRule("model-version1", "model-ver"); + } + + @Test(expected = AAIException.class) + public void testCheck4EdgeRule_InvalidNodeB() throws AAIException { + modelBasedProcessor.check4EdgeRule("model-ver", "model-version1"); + } + + @Test(expected = AAIException.class) + public void testCheck4EdgeRule_InvalidEdge() throws AAIException { + modelBasedProcessor.check4EdgeRule("model-ver", "named-query"); + } + + @Test + public void testCollectTopology4LinkagePoint() throws AAIException { + String linkagePointStrVal = new String("model-ver|model"); + String incomingTrail = new String("model|model-ver"); + Multimap<String, String> currentMap = ArrayListMultimap.create(); + modelBasedProcessor.collectTopology4LinkagePoint(TRANSACTION_ID, FROM_APP_ID, + linkagePointStrVal, incomingTrail, currentMap); + } + + @Test + public void testGenTopoMap4NamedQ() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.genTopoMap4NamedQ(TRANSACTION_ID, FROM_APP_ID, namedQuery, + "named-query-uuid-1"); + } + + @Test + public void testGetModelThatNqElementRepresents() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getModelThatNqElementRepresents(namedQueryElement, ""); + } + + @Test + public void testGetModelVerThatElementRepresents() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getModelVerThatElementRepresents(modelElement, ""); + } + + @Test + public void testGetModelTypeFromModel() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getModelTypeFromModel(model, ""); + } + + @Test + public void testGetModelVerTopWidgetType() throws AAIException { + Graph serviceGraph = TinkerGraph.open(); + Vertex modelV = serviceGraph.addVertex(T.label, "model", T.id, "57", AAI_NODE_TYPE, "model", + "model-invariant-id", "model-invariant-id-1", "model-type", "service"); + Vertex modelVerV = serviceGraph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "58", + AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE, + MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); + Vertex modelElementV = + graph.addVertex(T.label, "model-element", T.id, "59", AAI_NODE_TYPE, "model-element"); + GraphTraversalSource gts = serviceGraph.traversal(); + + edgeSer.addTreeEdge(gts, modelV, modelVerV); + edgeSer.addTreeEdge(gts, modelElementV, modelVerV); + edgeSer.addEdge(gts, modelElementV, modelVerV); + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.getModelVerTopWidgetType(modelVerV, ""); + } + + @Test + public void testGetModelElementStepName() throws AAIException { + Graph serviceGraph = TinkerGraph.open(); + Vertex modelV = serviceGraph.addVertex(T.label, "model", T.id, "60", AAI_NODE_TYPE, "model", + "model-invariant-id", "model-invariant-id-1", "model-type", "service"); + Vertex modelVerV = serviceGraph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "61", + AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE, + MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); + Vertex modelElementV = + graph.addVertex(T.label, "model-element", T.id, "62", AAI_NODE_TYPE, "model-element"); + GraphTraversalSource gts = serviceGraph.traversal(); + + edgeSer.addTreeEdge(gts, modelV, modelVerV); + edgeSer.addTreeEdge(gts, modelElementV, modelVerV); + edgeSer.addEdge(gts, modelElementV, modelVerV); + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.getModelElementStepName(modelElementV, ""); + } + + @Test(expected = IllegalArgumentException.class) + public void testRunDeleteByModel() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + Map<String, Object> map = new HashMap<>(); + map.put("generic-vnf.d", "relationshipdata"); + + modelBasedProcessor.runDeleteByModel(TRANSACTION_ID, FROM_APP_ID, MODEL_VERSION_ID_VALUE, + "model-ver", map, API_VERSION, API_VERSION); + } + + @Test + public void testSecondConstructor() { + ModelBasedProcessing mdp = new ModelBasedProcessing(); + } + + @Test(expected = AAIIdentityMapParseException.class) + public void testQueryByNamedQuery_NonEmptyMap() throws AAIException { + Map<String, Object> map = new HashMap<>(); + map.put("model-ver.model-name", "model-name"); + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + startNodeFilterArrayOfHashes.add(map); + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + + modelBasedProcessor.queryByNamedQuery(TRANSACTION_ID, FROM_APP_ID, "named-query-uuid-1", + startNodeFilterArrayOfHashes, API_VERSION, null, null); + + } + + @Test(expected = AAIIdentityMapParseException.class) + public void testRunDeleteByModel_Service() throws AAIException { + Graph serviceGraph = TinkerGraph.open(); + Vertex modelV = serviceGraph.addVertex(T.label, "model", T.id, "63", AAI_NODE_TYPE, "model", + "model-invariant-id", "model-invariant-id-1", "model-type", "service"); + Vertex modelVerV = serviceGraph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "64", + AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE, + MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); + Vertex modelElementV = + graph.addVertex(T.label, "model-element", T.id, "65", AAI_NODE_TYPE, "model-element"); + GraphTraversalSource gts = serviceGraph.traversal(); + + edgeSer.addTreeEdge(gts, modelV, modelVerV); + edgeSer.addTreeEdge(gts, modelElementV, modelVerV); + edgeSer.addEdge(gts, modelElementV, modelVerV); + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + + Map<String, Object> map = new HashMap<>(); + map.put("generic-vnf.d", "relationshipdata"); + + modelBasedProcessor.runDeleteByModel(TRANSACTION_ID, FROM_APP_ID, MODEL_VERSION_ID_VALUE, + "model-ver", map, API_VERSION, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testGetStartNodesAndModVersionIds_NonEmptyHashMap_AllEmpty() throws AAIException { + Map<String, Object> map = new HashMap<>(); + map.put("model-ver.model-name", "model-name"); + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + startNodeFilterArrayOfHashes.add(map); + String passedModelInvId = null; + String passedModelName = null; + String passedModelVerId = null; + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, + passedModelVerId, passedModelInvId, passedModelName, "", startNodeFilterArrayOfHashes, + API_VERSION); + } + + @Test(expected = AAIException.class) + public void testGetStartNodesAndModVersionIds_NonEmptyHashMap_ModelTypeNonNull() + throws AAIException { + Map<String, Object> map = new HashMap<>(); + map.put("model-ver.model-name", "model-name"); + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + startNodeFilterArrayOfHashes.add(map); + String passedModelInvId = null; + String passedModelName = null; + String passedModelVerId = null; + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.getStartNodesAndModVersionIds(TRANSACTION_ID, FROM_APP_ID, + passedModelVerId, passedModelInvId, passedModelName, MODEL_NAME_ID_VALUE, + startNodeFilterArrayOfHashes, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testQueryByModel_Timed_NonEmptyHash() throws AAIException { + Map<String, Object> map = new HashMap<>(); + map.put("model-ver.model-name", "model-name"); + List<Map<String, Object>> startNodeFilterArrayOfHashes = new ArrayList<>(); + startNodeFilterArrayOfHashes.add(map); + String passedModelVersion = null; + String passedModelName = null; + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + modelBasedProcessor.queryByModel_Timed(TRANSACTION_ID, FROM_APP_ID, passedModelVersion, + MODEL_INVARIANT_ID_VALUE, passedModelName, MODEL_NAME_ID_VALUE, + startNodeFilterArrayOfHashes, API_VERSION); + } + + @Test(expected = AAIException.class) + public void testRunDeleteByModel_NullVersionAndNode() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + Map<String, Object> map = new HashMap<>(); + map.put("generic-vnf.d", "relationshipdata"); + + modelBasedProcessor.runDeleteByModel(TRANSACTION_ID, FROM_APP_ID, "", "", map, API_VERSION, + API_VERSION); + } + + @Test(expected = AAIException.class) + public void testRunDeleteByModel_NullVersion() throws AAIException { + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(source); + Map<String, Object> map = new HashMap<>(); + map.put("generic-vnf.d", "relationshipdata"); + + modelBasedProcessor.runDeleteByModel(TRANSACTION_ID, FROM_APP_ID, "", "model-ver", map, + API_VERSION, API_VERSION); + } + + @Test + public void testGenTopoMap4ModelVer_WidgetType_Map() throws AAIException { + + Graph serviceGraph = TinkerGraph.open(); + Vertex modelV = serviceGraph.addVertex(T.label, "model", T.id, "66", AAI_NODE_TYPE, "model", + "model-invariant-id", "model-invariant-id-1", "model-type", "widget"); + Vertex modelVerV = serviceGraph.addVertex(T.label, MODEL_VESION_NODE_VALUE, T.id, "67", + AAI_NODE_TYPE, MODEL_VESION_NODE_VALUE, MODEL_VERSION_ID_KEY, MODEL_VERSION_ID_VALUE, + MODEL_NAME_ID_KEY, MODEL_NAME_ID_VALUE, "model-version", "model-version-1"); + GraphTraversalSource gts = serviceGraph.traversal(); + + edgeSer.addTreeEdge(gts, modelV, modelVerV); + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + + Mockito.when(dbEngine.asAdmin()).thenReturn(admin); + Mockito.when(admin.getReadOnlyTraversalSource()).thenReturn(gts); + modelBasedProcessor.genTopoMap4ModelVer(TRANSACTION_ID, FROM_APP_ID, modelVerV, + MODEL_VERSION_ID_VALUE); + } + } diff --git a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphEdgeRuleTest.java b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphEdgeRuleTest.java index 7148ca3..30323d2 100644 --- a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphEdgeRuleTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphEdgeRuleTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,34 +30,34 @@ import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException; import org.onap.aai.exceptions.AAIException; import org.springframework.beans.factory.annotation.Autowired; +public class SearchGraphEdgeRuleTest extends AAISetup { + @Rule + public ExpectedException expectedEx = ExpectedException.none(); -public class SearchGraphEdgeRuleTest extends AAISetup{ - @Rule - public ExpectedException expectedEx = ExpectedException.none(); - - - @Test - public void getEdgeLabelTest() throws AAIException, EdgeRuleNotFoundException { - String[] label = searchGraph.getEdgeLabel("customer", "service-subscription"); - - assertEquals("org.onap.relationships.inventory.BelongsTo", label[0]); - } - - @Test - public void getEdgeLabelThrowsExceptionWhenNoRuleExists() throws Exception { - String nodeTypeA = "complex"; - String nodeTypeB = "service"; - expectedEx.expect(org.onap.aai.edges.exceptions.EdgeRuleNotFoundException.class); - expectedEx.expectMessage("No rules found for EdgeRuleQuery with filter params node type: complex, node type: service, type: any, isPrivate"); - searchGraph.getEdgeLabel(nodeTypeA, nodeTypeB); - } - - @Test - public void getEdgeLabelThrowsExceptionWhenNodeTypesDoNotExist() throws Exception { - String nodeTypeA = "A"; - String nodeTypeB = "B"; - expectedEx.expect(org.onap.aai.edges.exceptions.EdgeRuleNotFoundException.class); - expectedEx.expectMessage("No rules found for EdgeRuleQuery with filter params node type: A, node type: B, type: any, isPrivate"); - searchGraph.getEdgeLabel(nodeTypeA, nodeTypeB); - } + @Test + public void getEdgeLabelTest() throws AAIException, EdgeRuleNotFoundException { + String[] label = searchGraph.getEdgeLabel("customer", "service-subscription"); + + assertEquals("org.onap.relationships.inventory.BelongsTo", label[0]); + } + + @Test + public void getEdgeLabelThrowsExceptionWhenNoRuleExists() throws Exception { + String nodeTypeA = "complex"; + String nodeTypeB = "service"; + expectedEx.expect(org.onap.aai.edges.exceptions.EdgeRuleNotFoundException.class); + expectedEx.expectMessage( + "No rules found for EdgeRuleQuery with filter params node type: complex, node type: service, type: any, isPrivate"); + searchGraph.getEdgeLabel(nodeTypeA, nodeTypeB); + } + + @Test + public void getEdgeLabelThrowsExceptionWhenNodeTypesDoNotExist() throws Exception { + String nodeTypeA = "A"; + String nodeTypeB = "B"; + expectedEx.expect(org.onap.aai.edges.exceptions.EdgeRuleNotFoundException.class); + expectedEx.expectMessage( + "No rules found for EdgeRuleQuery with filter params node type: A, node type: B, type: any, isPrivate"); + searchGraph.getEdgeLabel(nodeTypeA, nodeTypeB); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphNamedQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphNamedQueryTest.java index 7839496..73896a0 100644 --- a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphNamedQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphNamedQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,8 +19,25 @@ */ package org.onap.aai.dbgraphmap; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import com.google.gson.JsonObject; import com.google.gson.JsonParser; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.*; + import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; @@ -31,22 +48,7 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.rest.util.AAIExtensionMap; import org.onap.aai.util.AAIConstants; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.*; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.*; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class SearchGraphNamedQueryTest extends AAISetup{ +public class SearchGraphNamedQueryTest extends AAISetup { protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json"); @@ -68,80 +70,83 @@ public class SearchGraphNamedQueryTest extends AAISetup{ private List<MediaType> outputMediaTypes; private static boolean ranOnce = false; - + private HttpTestUtil httpTestUtil; - - private String getJsonValue(String json, String key ) { + private String getJsonValue(String json, String key) { JsonObject jsonObj = new JsonParser().parse(json).getAsJsonObject(); String strValue = ""; - if ( jsonObj.isJsonObject()) { - strValue = jsonObj.get(key).getAsString(); + if (jsonObj.isJsonObject()) { + strValue = jsonObj.get(key).getAsString(); } - return strValue; + return strValue; } - + private void addWidgets() { - String widgetPath = "." + AAIConstants.AAI_FILESEP + "src/main/resources" + AAIConstants.AAI_FILESEP + "etc" + - AAIConstants.AAI_FILESEP + "scriptdata"+ AAIConstants.AAI_FILESEP + "widget-model-json"; - + String widgetPath = "." + AAIConstants.AAI_FILESEP + "src/main/resources" + + AAIConstants.AAI_FILESEP + "etc" + AAIConstants.AAI_FILESEP + "scriptdata" + + AAIConstants.AAI_FILESEP + "widget-model-json"; + File dir = new File(widgetPath); File[] files = dir.listFiles(); assert files != null; - for ( File file : files) { - try { - Path path = Paths.get(widgetPath + AAIConstants.AAI_FILESEP + file.getName()); - String widgetPayload = new String(Files.readAllBytes(path)); - String modelInvariantId = getJsonValue(widgetPayload, "model-invariant-id"); - String widgetUri = "/aai/v12/service-design-and-creation/models/model/" + modelInvariantId; - Response response = httpTestUtil.doPut(widgetUri, widgetPayload); - assertEquals("Expected the named-query to be created", 201, response.getStatus()); - } catch ( AAIException | IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } + for (File file : files) { + try { + Path path = Paths.get(widgetPath + AAIConstants.AAI_FILESEP + file.getName()); + String widgetPayload = new String(Files.readAllBytes(path)); + String modelInvariantId = getJsonValue(widgetPayload, "model-invariant-id"); + String widgetUri = + "/aai/v12/service-design-and-creation/models/model/" + modelInvariantId; + Response response = httpTestUtil.doPut(widgetUri, widgetPayload); + assertEquals("Expected the named-query to be created", 201, response.getStatus()); + } catch (AAIException | IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } } - + private void addNamedQueries() { - String namedQueryPath = "." + AAIConstants.AAI_FILESEP + "src/main/resources" + AAIConstants.AAI_FILESEP + "etc" + - AAIConstants.AAI_FILESEP + "scriptdata"+ AAIConstants.AAI_FILESEP + "named-query-json"; - + String namedQueryPath = "." + AAIConstants.AAI_FILESEP + "src/main/resources" + + AAIConstants.AAI_FILESEP + "etc" + AAIConstants.AAI_FILESEP + "scriptdata" + + AAIConstants.AAI_FILESEP + "named-query-json"; + File dir = new File(namedQueryPath); File[] files = dir.listFiles(); assert files != null; - for ( File file : files) { - try { - Path path = Paths.get(namedQueryPath + AAIConstants.AAI_FILESEP + file.getName()); - String namedQueryPayload = new String(Files.readAllBytes(path)); - String namedQueryUuid = getJsonValue(namedQueryPayload, "named-query-uuid"); - String namedQueryUri = "/aai/v12/service-design-and-creation/named-queries/named-query/" + namedQueryUuid; - - Response response = httpTestUtil.doPut(namedQueryUri, namedQueryPayload); - assertEquals("Expected the named-query to be created", 201, response.getStatus()); - } catch ( AAIException | IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } + for (File file : files) { + try { + Path path = Paths.get(namedQueryPath + AAIConstants.AAI_FILESEP + file.getName()); + String namedQueryPayload = new String(Files.readAllBytes(path)); + String namedQueryUuid = getJsonValue(namedQueryPayload, "named-query-uuid"); + String namedQueryUri = + "/aai/v12/service-design-and-creation/named-queries/named-query/" + + namedQueryUuid; + + Response response = httpTestUtil.doPut(namedQueryUri, namedQueryPayload); + assertEquals("Expected the named-query to be created", 201, response.getStatus()); + } catch (AAIException | IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } } - - private String addVersionToUri(String uri ) { - return "/aai/" + schemaVersions.getDefaultVersion() + "/" + uri; + + private String addVersionToUri(String uri) { + return "/aai/" + schemaVersions.getDefaultVersion() + "/" + uri; } @Before - public void setup(){ - - httpTestUtil = new HttpTestUtil(); + public void setup() { - - httpHeaders = mock(HttpHeaders.class); + httpTestUtil = new HttpTestUtil(); - headersMultiMap = new MultivaluedHashMap<>(); - queryParameters = Mockito.spy(new MultivaluedHashMap<>()); + httpHeaders = mock(HttpHeaders.class); + + headersMultiMap = new MultivaluedHashMap<>(); + queryParameters = Mockito.spy(new MultivaluedHashMap<>()); headersMultiMap.add("X-FromAppId", "JUNIT"); headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString()); @@ -157,231 +162,250 @@ public class SearchGraphNamedQueryTest extends AAISetup{ when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap); - when(httpHeaders.getRequestHeader("X-FromAppId")).thenReturn(Collections.singletonList("JUNIT")); - when(httpHeaders.getRequestHeader("X-TransactionId")).thenReturn(Collections.singletonList("JUNIT")); + when(httpHeaders.getRequestHeader("X-FromAppId")) + .thenReturn(Collections.singletonList("JUNIT")); + when(httpHeaders.getRequestHeader("X-TransactionId")) + .thenReturn(Collections.singletonList("JUNIT")); when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList); - - // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable + // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very + // unreasonable Mockito.doReturn(null).when(queryParameters).remove(anyObject()); when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON); - if ( !ranOnce ) { - ranOnce = true; - addWidgets(); - addNamedQueries(); - } + if (!ranOnce) { + ranOnce = true; + addWidgets(); + addNamedQueries(); + } } - @Test public void getDHVLogicalLinkByCircuitId_1_0_Test() throws Exception { - AAIExtensionMap aaiExtMap = new AAIExtensionMap(); - aaiExtMap.setHttpHeaders(httpHeaders); - String queryParameters = PayloadUtil.getNamedQueryPayload("query-payload.DHVLogicalLinkByCircuitId-1.0.json"); - String putPayload = PayloadUtil.getNamedQueryPayload("logical-link.DHVLogicalLinkByCircuitId-1.0.json"); - + AAIExtensionMap aaiExtMap = new AAIExtensionMap(); + aaiExtMap.setHttpHeaders(httpHeaders); + String queryParameters = + PayloadUtil.getNamedQueryPayload("query-payload.DHVLogicalLinkByCircuitId-1.0.json"); + String putPayload = + PayloadUtil.getNamedQueryPayload("logical-link.DHVLogicalLinkByCircuitId-1.0.json"); + String linkName = getJsonValue(putPayload, "link-name"); String putUri = addVersionToUri("network/logical-links/logical-link/" + linkName); - Response response = httpTestUtil.doPut(putUri, putPayload); + Response response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the logical-link to be created", 201, response.getStatus()); - + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); Mockito.when(request.getContentType()).thenReturn("application/json"); - - aaiExtMap.setUri("/search/named-query"); - aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); - aaiExtMap.setServletRequest(request); - - - response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, aaiExtMap); + + aaiExtMap.setUri("/search/named-query"); + aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); + aaiExtMap.setServletRequest(request); + + response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, aaiExtMap); System.out.println("response was\n" + response.getEntity().toString()); assertEquals("Expected success from query", 200, response.getStatus()); boolean hasLinkName = response.getEntity().toString().indexOf(linkName) > 0; - assertTrue("Response contains linkName", hasLinkName ); + assertTrue("Response contains linkName", hasLinkName); } @Test public void getSvcSubscriberModelInfo_1_0_Test() throws Exception { - AAIExtensionMap aaiExtMap = new AAIExtensionMap(); - aaiExtMap.setHttpHeaders(httpHeaders); - String queryParameters = PayloadUtil.getNamedQueryPayload("query-payload.SvcSubscriberModelInfo-1.0.json"); - - String putPayload = PayloadUtil.getNamedQueryPayload("model.SvcSubscriberModelInfo-1.0.json"); + AAIExtensionMap aaiExtMap = new AAIExtensionMap(); + aaiExtMap.setHttpHeaders(httpHeaders); + String queryParameters = + PayloadUtil.getNamedQueryPayload("query-payload.SvcSubscriberModelInfo-1.0.json"); + + String putPayload = + PayloadUtil.getNamedQueryPayload("model.SvcSubscriberModelInfo-1.0.json"); String modelInvariantId = getJsonValue(putPayload, "model-invariant-id"); - String putUri = addVersionToUri("service-design-and-creation/models/model/" + modelInvariantId); - Response response = httpTestUtil.doPut(putUri, putPayload); + String putUri = + addVersionToUri("service-design-and-creation/models/model/" + modelInvariantId); + Response response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the model to be created", 201, response.getStatus()); - + putPayload = PayloadUtil.getNamedQueryPayload("customer.SvcSubscriberModelInfo-1.0.json"); String globalCustomerId = getJsonValue(putPayload, "global-customer-id"); putUri = addVersionToUri("business/customers/customer/" + globalCustomerId); - response = httpTestUtil.doPut(putUri, putPayload); + response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the customer to be created", 201, response.getStatus()); - + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); Mockito.when(request.getContentType()).thenReturn("application/json"); - - aaiExtMap.setUri("/search/named-query"); - aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); - aaiExtMap.setServletRequest(request); - - - response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, aaiExtMap); + + aaiExtMap.setUri("/search/named-query"); + aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); + aaiExtMap.setServletRequest(request); + + response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, aaiExtMap); assertEquals("Expected success from query", 200, response.getStatus()); boolean hasModelName = response.getEntity().toString().indexOf("junit-model-name") > 0; - assertTrue("Response contains modelName from model-ver", hasModelName ); + assertTrue("Response contains modelName from model-ver", hasModelName); } - + @Test public void getClosedLoopNamedQuery_1_0_Test() throws Exception { - AAIExtensionMap aaiExtMap = new AAIExtensionMap(); - aaiExtMap.setHttpHeaders(httpHeaders); - String queryParameters = PayloadUtil.getNamedQueryPayload("query-payload.closed-loop-named-query-1.0.json"); - - String putPayload = PayloadUtil.getNamedQueryPayload("model.closed-loop-named-query-1.0.json"); + AAIExtensionMap aaiExtMap = new AAIExtensionMap(); + aaiExtMap.setHttpHeaders(httpHeaders); + String queryParameters = + PayloadUtil.getNamedQueryPayload("query-payload.closed-loop-named-query-1.0.json"); + + String putPayload = + PayloadUtil.getNamedQueryPayload("model.closed-loop-named-query-1.0.json"); String modelInvariantId = getJsonValue(putPayload, "model-invariant-id"); - String putUri = addVersionToUri("service-design-and-creation/models/model/" + modelInvariantId); - Response response = httpTestUtil.doPut(putUri, putPayload); - assertEquals("Expected the model to be created", 201, response.getStatus()); - - putPayload = PayloadUtil.getNamedQueryPayload("cloud-region.closed-loop-named-query-1.0.json"); + String putUri = + addVersionToUri("service-design-and-creation/models/model/" + modelInvariantId); + Response response = httpTestUtil.doPut(putUri, putPayload); + assertEquals("Expected the model to be created", 201, response.getStatus()); + + putPayload = + PayloadUtil.getNamedQueryPayload("cloud-region.closed-loop-named-query-1.0.json"); String cloudOwner = getJsonValue(putPayload, "cloud-owner"); String cloudRegionId = getJsonValue(putPayload, "cloud-region-id"); - putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId); - response = httpTestUtil.doPut(putUri, putPayload); + putUri = addVersionToUri( + "cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId); + response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the cloud-region to be created", 201, response.getStatus()); - - putPayload = PayloadUtil.getNamedQueryPayload("cloud-region2.closed-loop-named-query-1.0.json"); + + putPayload = + PayloadUtil.getNamedQueryPayload("cloud-region2.closed-loop-named-query-1.0.json"); String cloudOwner2 = getJsonValue(putPayload, "cloud-owner"); String cloudRegionId2 = getJsonValue(putPayload, "cloud-region-id"); - putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner2 + "/" + cloudRegionId2); - response = httpTestUtil.doPut(putUri, putPayload); - assertEquals("Expected the cloud-region2 to be created", 201, response.getStatus()); - + putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner2 + + "/" + cloudRegionId2); + response = httpTestUtil.doPut(putUri, putPayload); + assertEquals("Expected the cloud-region2 to be created", 201, response.getStatus()); + putPayload = PayloadUtil.getNamedQueryPayload("tenant.closed-loop-named-query-1.0.json"); String tenantId = getJsonValue(putPayload, "tenant-id"); - putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId - + "/tenants/tenant/" + tenantId); - response = httpTestUtil.doPut(putUri, putPayload); - assertEquals("Expected the tenant to be created", 201, response.getStatus()); + putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + + "/" + cloudRegionId + "/tenants/tenant/" + tenantId); + response = httpTestUtil.doPut(putUri, putPayload); + assertEquals("Expected the tenant to be created", 201, response.getStatus()); putPayload = PayloadUtil.getNamedQueryPayload("tenant2.closed-loop-named-query-1.0.json"); String tenantId2 = getJsonValue(putPayload, "tenant-id"); - putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner2 + "/" + cloudRegionId2 - + "/tenants/tenant/" + tenantId2); - response = httpTestUtil.doPut(putUri, putPayload); + putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner2 + + "/" + cloudRegionId2 + "/tenants/tenant/" + tenantId2); + response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the tenant2 to be created", 201, response.getStatus()); - + putPayload = PayloadUtil.getNamedQueryPayload("vserver.closed-loop-named-query-1.0.json"); String vserverId = getJsonValue(putPayload, "vserver-id"); - putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId - + "/tenants/tenant/" + tenantId + "/vservers/vserver/" + vserverId); - response = httpTestUtil.doPut(putUri, putPayload); - assertEquals("Expected the vserver to be created", 201, response.getStatus()); + putUri = + addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + + cloudRegionId + "/tenants/tenant/" + tenantId + "/vservers/vserver/" + vserverId); + response = httpTestUtil.doPut(putUri, putPayload); + assertEquals("Expected the vserver to be created", 201, response.getStatus()); putPayload = PayloadUtil.getNamedQueryPayload("vserver2.closed-loop-named-query-1.0.json"); String vserverId2 = getJsonValue(putPayload, "vserver-id"); - putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner2 + "/" + cloudRegionId2 - + "/tenants/tenant/" + tenantId2 + "/vservers/vserver/" + vserverId2); - response = httpTestUtil.doPut(putUri, putPayload); + putUri = addVersionToUri( + "cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner2 + "/" + cloudRegionId2 + + "/tenants/tenant/" + tenantId2 + "/vservers/vserver/" + vserverId2); + response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the vserver2 to be created", 201, response.getStatus()); - + putPayload = PayloadUtil.getNamedQueryPayload("customer.closed-loop-named-query-1.0.json"); String globalCustomerId = getJsonValue(putPayload, "global-customer-id"); putUri = addVersionToUri("business/customers/customer/" + globalCustomerId); - response = httpTestUtil.doPut(putUri, putPayload); + response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the customer to be created", 201, response.getStatus()); - putPayload = PayloadUtil.getNamedQueryPayload("generic-vnf.closed-loop-named-query-1.0.json"); + putPayload = + PayloadUtil.getNamedQueryPayload("generic-vnf.closed-loop-named-query-1.0.json"); String vnfId = getJsonValue(putPayload, "vnf-id"); putUri = addVersionToUri("network/generic-vnfs/generic-vnf/" + vnfId); - response = httpTestUtil.doPut(putUri, putPayload); + response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the generic-vnf to be created", 201, response.getStatus()); - + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); Mockito.when(request.getContentType()).thenReturn("application/json"); - - aaiExtMap.setUri("/search/named-query"); - aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); - aaiExtMap.setServletRequest(request); - - - response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, aaiExtMap); + + aaiExtMap.setUri("/search/named-query"); + aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); + aaiExtMap.setServletRequest(request); + + response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, aaiExtMap); assertEquals("Expected success from query", 200, response.getStatus()); - boolean hasModelName = response.getEntity().toString().indexOf("example-model-name-val-closed-loop") > 0; - assertTrue("Response contains modelName from model-ver", hasModelName ); + boolean hasModelName = + response.getEntity().toString().indexOf("example-model-name-val-closed-loop") > 0; + assertTrue("Response contains modelName from model-ver", hasModelName); } - + @Test public void getComponentList_1_2_Test() throws Exception { - AAIExtensionMap aaiExtMap = new AAIExtensionMap(); - aaiExtMap.setHttpHeaders(httpHeaders); - String queryParameters = PayloadUtil.getNamedQueryPayload("query-payload.ComponentList-1.2.json"); - - String putPayload = PayloadUtil.getNamedQueryPayload("model.ComponentList-1.2.json"); + AAIExtensionMap aaiExtMap = new AAIExtensionMap(); + aaiExtMap.setHttpHeaders(httpHeaders); + String queryParameters = + PayloadUtil.getNamedQueryPayload("query-payload.ComponentList-1.2.json"); + + String putPayload = PayloadUtil.getNamedQueryPayload("model.ComponentList-1.2.json"); String modelInvariantId = getJsonValue(putPayload, "model-invariant-id"); - String putUri = addVersionToUri("service-design-and-creation/models/model/" + modelInvariantId); - Response response = httpTestUtil.doPut(putUri, putPayload); + String putUri = + addVersionToUri("service-design-and-creation/models/model/" + modelInvariantId); + Response response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the model to be created", 201, response.getStatus()); - + putPayload = PayloadUtil.getNamedQueryPayload("customer.ComponentList-1.2.json"); String globalCustomerId = getJsonValue(putPayload, "global-customer-id"); putUri = addVersionToUri("business/customers/customer/" + globalCustomerId); - response = httpTestUtil.doPut(putUri, putPayload); + response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the customer to be created", 201, response.getStatus()); - + putPayload = PayloadUtil.getNamedQueryPayload("generic-vnf.ComponentList-1.2.json"); String vnfId = getJsonValue(putPayload, "vnf-id"); putUri = addVersionToUri("network/generic-vnfs/generic-vnf/" + vnfId); - response = httpTestUtil.doPut(putUri, putPayload); - assertEquals("Expected the generic-vnf to be created", 201, response.getStatus()); + response = httpTestUtil.doPut(putUri, putPayload); + assertEquals("Expected the generic-vnf to be created", 201, response.getStatus()); putPayload = PayloadUtil.getNamedQueryPayload("vf-module.ComponentList-1.2.json"); String vfModuleId = getJsonValue(putPayload, "vf-module-id"); - putUri = addVersionToUri("network/generic-vnfs/generic-vnf/" + vnfId + "/vf-modules/vf-module/" + vfModuleId); - response = httpTestUtil.doPut(putUri, putPayload); + putUri = addVersionToUri( + "network/generic-vnfs/generic-vnf/" + vnfId + "/vf-modules/vf-module/" + vfModuleId); + response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the vf-module to be created", 201, response.getStatus()); - + putPayload = PayloadUtil.getNamedQueryPayload("cloud-region.ComponentList-1.2.json"); String cloudOwner = getJsonValue(putPayload, "cloud-owner"); String cloudRegionId = getJsonValue(putPayload, "cloud-region-id"); - putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId); - response = httpTestUtil.doPut(putUri, putPayload); + putUri = addVersionToUri( + "cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId); + response = httpTestUtil.doPut(putUri, putPayload); assertEquals("Expected the cloud-region to be created", 201, response.getStatus()); - + putPayload = PayloadUtil.getNamedQueryPayload("tenant.ComponentList-1.2.json"); String tenantId = getJsonValue(putPayload, "tenant-id"); - putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId - + "/tenants/tenant/" + tenantId); - response = httpTestUtil.doPut(putUri, putPayload); - assertEquals("Expected the tenant to be created", 201, response.getStatus()); - + putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + + "/" + cloudRegionId + "/tenants/tenant/" + tenantId); + response = httpTestUtil.doPut(putUri, putPayload); + assertEquals("Expected the tenant to be created", 201, response.getStatus()); + putPayload = PayloadUtil.getNamedQueryPayload("vserver.ComponentList-1.2.json"); String vserverId = getJsonValue(putPayload, "vserver-id"); - putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId - + "/tenants/tenant/" + tenantId + "/vservers/vserver/" + vserverId); - response = httpTestUtil.doPut(putUri, putPayload); - assertEquals("Expected the vserver to be created", 201, response.getStatus()); - + putUri = + addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + + cloudRegionId + "/tenants/tenant/" + tenantId + "/vservers/vserver/" + vserverId); + response = httpTestUtil.doPut(putUri, putPayload); + assertEquals("Expected the vserver to be created", 201, response.getStatus()); + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); Mockito.when(request.getContentType()).thenReturn("application/json"); - - aaiExtMap.setUri("/search/named-query"); - aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); - aaiExtMap.setServletRequest(request); - - - response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, aaiExtMap); + + aaiExtMap.setUri("/search/named-query"); + aaiExtMap.setApiVersion(schemaVersions.getDefaultVersion().toString()); + aaiExtMap.setServletRequest(request); + + response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, aaiExtMap); assertEquals("Expected success from query", 200, response.getStatus()); - boolean hasModelName = response.getEntity().toString().indexOf("example-model-name-val-component-list") > 0; - assertTrue("Response contains modelName from model-ver", hasModelName ); - } -}
\ No newline at end of file + boolean hasModelName = + response.getEntity().toString().indexOf("example-model-name-val-component-list") > 0; + assertTrue("Response contains modelName from model-ver", hasModelName); + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphTest.java b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphTest.java index 2b4ec18..c46af87 100644 --- a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,17 @@ */ package org.onap.aai.dbgraphmap; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.net.URI; +import java.util.*; +import java.util.stream.Stream; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.*; + import org.apache.tinkerpop.gremlin.structure.Vertex; import org.eclipse.persistence.dynamic.DynamicEntity; import org.janusgraph.graphdb.types.system.EmptyVertex; @@ -42,19 +53,7 @@ import org.onap.aai.setup.SchemaVersion; import org.onap.aai.util.GenericQueryBuilder; import org.onap.aai.util.NodesQueryBuilder; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.*; -import java.net.URI; -import java.util.*; -import java.util.stream.Stream; - -import static org.mockito.Matchers.anyObject; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class SearchGraphTest extends AAISetup{ - - +public class SearchGraphTest extends AAISetup { protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json"); @@ -109,16 +108,18 @@ public class SearchGraphTest extends AAISetup{ when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap); - when(httpHeaders.getRequestHeader("X-FromAppId")).thenReturn(Collections.singletonList("JUNIT")); - when(httpHeaders.getRequestHeader("X-TransactionId")).thenReturn(Collections.singletonList("JUNIT")); + when(httpHeaders.getRequestHeader("X-FromAppId")) + .thenReturn(Collections.singletonList("JUNIT")); + when(httpHeaders.getRequestHeader("X-TransactionId")) + .thenReturn(Collections.singletonList("JUNIT")); when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList); - when(uriInfo.getQueryParameters()).thenReturn(queryParameters); when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters); - // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable + // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very + // unreasonable Mockito.doReturn(null).when(queryParameters).remove(anyObject()); when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON); @@ -127,21 +128,25 @@ public class SearchGraphTest extends AAISetup{ } @Test(expected = AAIException.class) - public void runNodesQuery() throws AAIException{ - DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + public void runNodesQuery() throws AAIException { + DBSerializer serializer = + new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); UrlBuilder urlBuilder = new UrlBuilder(version, serializer, schemaVersions, basePath); - searchGraph.runNodesQuery( - new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType("").setEdgeFilterParams(null) - .setFilterParams(null).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("").setEdgeFilterParams(null).setFilterParams(null) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); } + @Test(expected = AAIException.class) - public void runNodesQueryNull() throws AAIException{ - DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + public void runNodesQueryNull() throws AAIException { + DBSerializer serializer = + new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); UrlBuilder urlBuilder = new UrlBuilder(version, serializer, schemaVersions, basePath); - searchGraph.runNodesQuery( - new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType("nnn").setEdgeFilterParams(null) - .setFilterParams(null).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("nnn").setEdgeFilterParams(null).setFilterParams(null) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); } + @Test(expected = AAIException.class) public void testRunGenericQueryFailWhenInvalidRelationshipList() throws AAIException { @@ -151,15 +156,16 @@ public class SearchGraphTest extends AAISetup{ List<String> includeStrings = new ArrayList<>(); includeStrings.add("cloud-region"); - DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + DBSerializer serializer = + new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); UrlBuilder urlBuilder = new UrlBuilder(version, serializer, schemaVersions, basePath); - Response response = searchGraph.runGenericQuery(new GenericQueryBuilder().setHeaders(httpHeaders) - .setStartNodeType("service-instance").setStartNodeKeyParams(keys).setIncludeNodeTypes(includeStrings) - .setDepth(1).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Response response = searchGraph.runGenericQuery( + new GenericQueryBuilder().setHeaders(httpHeaders).setStartNodeType("service-instance") + .setStartNodeKeyParams(keys).setIncludeNodeTypes(includeStrings).setDepth(1) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); System.out.println(response); } - @Test(expected = AAIException.class) public void testRunGenericQueryFailWhenInvalidRelationshipList1() throws AAIException { @@ -169,10 +175,12 @@ public class SearchGraphTest extends AAISetup{ List<String> includeStrings = new ArrayList<>(); includeStrings.add("cloud-region"); - DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + DBSerializer serializer = + new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); UrlBuilder urlBuilder = new UrlBuilder(version, serializer, schemaVersions, basePath); - Response response = searchGraph.runGenericQuery(new GenericQueryBuilder().setHeaders(httpHeaders) - .setStartNodeType(null).setStartNodeKeyParams(keys).setIncludeNodeTypes(includeStrings).setDepth(1) + Response response = searchGraph.runGenericQuery( + new GenericQueryBuilder().setHeaders(httpHeaders).setStartNodeType(null) + .setStartNodeKeyParams(keys).setIncludeNodeTypes(includeStrings).setDepth(1) .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); System.out.println(response); } @@ -183,10 +191,12 @@ public class SearchGraphTest extends AAISetup{ List<String> includeStrings = new ArrayList<>(); includeStrings.add("cloud-region"); - DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + DBSerializer serializer = + new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); UrlBuilder urlBuilder = new UrlBuilder(version, serializer, schemaVersions, basePath); - Response response = searchGraph.runGenericQuery(new GenericQueryBuilder().setHeaders(httpHeaders) - .setStartNodeType("").setStartNodeKeyParams(null).setIncludeNodeTypes(includeStrings).setDepth(1) + Response response = searchGraph + .runGenericQuery(new GenericQueryBuilder().setHeaders(httpHeaders).setStartNodeType("") + .setStartNodeKeyParams(null).setIncludeNodeTypes(includeStrings).setDepth(1) .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); System.out.println(response); } @@ -197,11 +207,13 @@ public class SearchGraphTest extends AAISetup{ List<String> keys = new ArrayList<>(); keys.add("cloud-region.cloud-owner:test-aic"); - DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + DBSerializer serializer = + new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); UrlBuilder urlBuilder = new UrlBuilder(version, serializer, schemaVersions, basePath); - Response response = searchGraph.runGenericQuery(new GenericQueryBuilder().setHeaders(httpHeaders) - .setStartNodeType("").setStartNodeKeyParams(keys).setIncludeNodeTypes(null).setDepth(1) - .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Response response = + searchGraph.runGenericQuery(new GenericQueryBuilder().setHeaders(httpHeaders) + .setStartNodeType("").setStartNodeKeyParams(keys).setIncludeNodeTypes(null) + .setDepth(1).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); System.out.println(response); } @@ -209,113 +221,121 @@ public class SearchGraphTest extends AAISetup{ public void createSearchResults1() throws Exception { List<Vertex> keys = new ArrayList<>(); - Vertex vertex=new EmptyVertex(); + Vertex vertex = new EmptyVertex(); keys.add(vertex); - UrlBuilder urlBuilder=mock(UrlBuilder.class); - when(urlBuilder.pathed(vertex)).thenReturn("cloud-region"); - Stream<Vertex> stream=mock(Stream.class); + UrlBuilder urlBuilder = mock(UrlBuilder.class); + when(urlBuilder.pathed(vertex)).thenReturn("cloud-region"); + Stream<Vertex> stream = mock(Stream.class); when(stream.isParallel()).thenReturn(true); - RelationshipToURI relationshipToURI=mock(RelationshipToURI.class); - URI uri =new URI(""); + RelationshipToURI relationshipToURI = mock(RelationshipToURI.class); + URI uri = new URI(""); when(relationshipToURI.getUri()).thenReturn(uri); Introspector response = searchGraph.createSearchResults(loader, urlBuilder, keys); System.out.println(response); } + @Test(expected = AAIException.class) - public void executeModelOperationTest() throws Exception{ - Vertex vertex=new EmptyVertex(); + public void executeModelOperationTest() throws Exception { + Vertex vertex = new EmptyVertex(); vertex.property("model-name"); - AAIExtensionMap map=mock(AAIExtensionMap.class); - HttpServletRequest servletRequest=mock(HttpServletRequest.class); + AAIExtensionMap map = mock(AAIExtensionMap.class); + HttpServletRequest servletRequest = mock(HttpServletRequest.class); when(map.getHttpServletRequest()).thenReturn(servletRequest); when(servletRequest.getContentType()).thenReturn("application/json"); - DynamicEntity modelAndNamedQuerySearch=mock(DynamicEntity.class); + DynamicEntity modelAndNamedQuerySearch = mock(DynamicEntity.class); when(modelAndNamedQuerySearch.isSet("topNodeType")).thenReturn(true); - searchGraph.executeModelOperation("","","",true, - map); + searchGraph.executeModelOperation("", "", "", true, map); } @Test(expected = AAIException.class) - public void executeModelOperationXMLTest() throws Exception{ - Vertex vertex=new EmptyVertex(); + public void executeModelOperationXMLTest() throws Exception { + Vertex vertex = new EmptyVertex(); vertex.property("model-name"); - AAIExtensionMap map=mock(AAIExtensionMap.class); - HttpServletRequest servletRequest=mock(HttpServletRequest.class); + AAIExtensionMap map = mock(AAIExtensionMap.class); + HttpServletRequest servletRequest = mock(HttpServletRequest.class); when(map.getHttpServletRequest()).thenReturn(servletRequest); when(servletRequest.getContentType()).thenReturn("application/xml"); - DynamicEntity modelAndNamedQuerySearch=mock(DynamicEntity.class); + DynamicEntity modelAndNamedQuerySearch = mock(DynamicEntity.class); when(modelAndNamedQuerySearch.isSet("queryParameters")).thenReturn(true); - searchGraph.executeModelOperation("","","",true, - map); + searchGraph.executeModelOperation("", "", "", true, map); } + @Test - public void runNodesQueryTest() throws AAIException{ - UrlBuilder urlBuilder=mock(UrlBuilder.class); - List<String> filter=new ArrayList<>(); + public void runNodesQueryTest() throws AAIException { + UrlBuilder urlBuilder = mock(UrlBuilder.class); + List<String> filter = new ArrayList<>(); filter.add("model:EQUALS:DOES-NOT-EXIST:AAI"); - List<String> edgeFilter=new ArrayList<>(); + List<String> edgeFilter = new ArrayList<>(); edgeFilter.add("model:DOES-NOT-EXIST:DOES-NOT-EXIST:AAI"); - Response response= searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter) - .setFilterParams(filter).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Response response = searchGraph.runNodesQuery( + new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType("model-ver") + .setEdgeFilterParams(edgeFilter).setFilterParams(filter).setDbEngine(dbEngine) + .setLoader(loader).setUrlBuilder(urlBuilder)); Assert.assertNotNull(response); } @Test - public void runNodesQueryExistsTest() throws AAIException{ - UrlBuilder urlBuilder=mock(UrlBuilder.class); - List<String> filter=new ArrayList<String>(); + public void runNodesQueryExistsTest() throws AAIException { + UrlBuilder urlBuilder = mock(UrlBuilder.class); + List<String> filter = new ArrayList<String>(); filter.add("model:EQUALS:DOES-NOT-EXIST:AAI"); - List<String> edgeFilter=new ArrayList<String>(); + List<String> edgeFilter = new ArrayList<String>(); edgeFilter.add("model:EXISTS:DOES-NOT-EXIST:AAI"); - Response response= searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter) - .setFilterParams(filter).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Response response = searchGraph.runNodesQuery( + new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType("model-ver") + .setEdgeFilterParams(edgeFilter).setFilterParams(filter).setDbEngine(dbEngine) + .setLoader(loader).setUrlBuilder(urlBuilder)); Assert.assertNotNull(response); } @Test - public void runNodesQueryTestDOESNOTEQUAL() throws AAIException{ - UrlBuilder urlBuilder=mock(UrlBuilder.class); - List<String> filter=new ArrayList<String>(); + public void runNodesQueryTestDOESNOTEQUAL() throws AAIException { + UrlBuilder urlBuilder = mock(UrlBuilder.class); + List<String> filter = new ArrayList<String>(); filter.add("model:DOES-NOT-EQUAL:DOES-NOT-EXIST"); - List<String> edgeFilter=new ArrayList<>(); - searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter) - .setFilterParams(filter).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + List<String> edgeFilter = new ArrayList<>(); + searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); } @Test - public void runNodesQueryTestGreaterThan3() throws AAIException{ - UrlBuilder urlBuilder=mock(UrlBuilder.class); - List<String> filter=new ArrayList<>(); + public void runNodesQueryTestGreaterThan3() throws AAIException { + UrlBuilder urlBuilder = mock(UrlBuilder.class); + List<String> filter = new ArrayList<>(); filter.add("model:DOES-NOT-EQUAL:DOES-NOT-EXIST:AAI"); - List<String> edgeFilter=new ArrayList<>(); - searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter) - .setFilterParams(filter).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + List<String> edgeFilter = new ArrayList<>(); + searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); } @Test - public void runNodesQueryTestGreaterThanExists() throws AAIException{ - UrlBuilder urlBuilder=mock(UrlBuilder.class); - List<String> filter=new ArrayList<>(); + public void runNodesQueryTestGreaterThanExists() throws AAIException { + UrlBuilder urlBuilder = mock(UrlBuilder.class); + List<String> filter = new ArrayList<>(); filter.add("model:EXISTS:DOES-NOT-EXIST:AAI"); - List<String> edgeFilter=new ArrayList<>(); - searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter) - .setFilterParams(filter).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + List<String> edgeFilter = new ArrayList<>(); + searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); } @Test(expected = AAIException.class) - public void runNodesQueryTestGreaterThanDoesNotExists() throws AAIException{ - UrlBuilder urlBuilder=mock(UrlBuilder.class); - List<String> filter=new ArrayList<>(); + public void runNodesQueryTestGreaterThanDoesNotExists() throws AAIException { + UrlBuilder urlBuilder = mock(UrlBuilder.class); + List<String> filter = new ArrayList<>(); filter.add("model:DOES_NOT_EXIST:DOES-NOT-EXIST:AAI"); - List<String> edgeFilter=new ArrayList<>(); - searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter) - .setFilterParams(filter).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + List<String> edgeFilter = new ArrayList<>(); + searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); } } diff --git a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestConfiguration.java b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestConfiguration.java index 4b87cde..0ff845a 100644 --- a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestConfiguration.java +++ b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestConfiguration.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -23,7 +23,9 @@ import com.github.dockerjava.api.model.ExposedPort; import com.github.dockerjava.api.model.HostConfig; import com.github.dockerjava.api.model.PortBinding; import com.github.dockerjava.api.model.Ports; + import dasniko.testcontainers.keycloak.KeycloakContainer; + import org.keycloak.adapters.springboot.KeycloakSpringBootProperties; import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.KeycloakBuilder; @@ -42,23 +44,19 @@ class KeycloakTestConfiguration { @Bean KeycloakContainer keycloakContainer(KeycloakTestProperties properties) { KeycloakContainer keycloak = new KeycloakContainer("jboss/keycloak:12.0.4") - .withRealmImportFile(properties.realmJson) - .withCreateContainerCmdModifier(cmd -> cmd.withHostConfig( - new HostConfig().withPortBindings(new PortBinding(Ports.Binding.bindPort(Integer.parseInt(properties.port)), new ExposedPort(8080))) - )); + .withRealmImportFile(properties.realmJson).withCreateContainerCmdModifier( + cmd -> cmd.withHostConfig(new HostConfig().withPortBindings( + new PortBinding(Ports.Binding.bindPort(Integer.parseInt(properties.port)), + new ExposedPort(8080))))); keycloak.start(); return keycloak; } @Bean Keycloak keycloakAdminClient(KeycloakContainer keycloak, KeycloakTestProperties properties) { - return KeycloakBuilder.builder() - .serverUrl(keycloak.getAuthServerUrl()) - .realm(properties.realm) - .clientId(properties.adminCli) - .username(keycloak.getAdminUsername()) - .password(keycloak.getAdminPassword()) - .build(); + return KeycloakBuilder.builder().serverUrl(keycloak.getAuthServerUrl()) + .realm(properties.realm).clientId(properties.adminCli) + .username(keycloak.getAdminUsername()).password(keycloak.getAdminPassword()).build(); } @Bean diff --git a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestProperties.java b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestProperties.java index df9db84..72b6f6f 100644 --- a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestProperties.java +++ b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestProperties.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/MultiTenancyIT.java b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/MultiTenancyIT.java index b0fddb4..38490f8 100644 --- a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/MultiTenancyIT.java +++ b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/MultiTenancyIT.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,8 +19,17 @@ */ package org.onap.aai.it.multitenancy; +import static org.junit.Assert.*; + import com.jayway.jsonpath.JsonPath; + import dasniko.testcontainers.keycloak.KeycloakContainer; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.janusgraph.core.JanusGraphTransaction; import org.junit.Test; @@ -35,13 +44,6 @@ import org.springframework.context.annotation.Import; import org.springframework.http.*; import org.springframework.test.context.TestPropertySource; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.*; - @Import(KeycloakTestConfiguration.class) @TestPropertySource(locations = "classpath:it/application-keycloak-test.properties") public class MultiTenancyIT extends AbstractSpringRestTest { @@ -61,44 +63,30 @@ public class MultiTenancyIT extends AbstractSpringRestTest { try { GraphTraversalSource g = transaction.traversal(); - g.addV().property("aai-node-type", "pnf") - .property("pnf-name", "test-pnf-name-01") - .property("prov-status", "in_service") - .property("data-owner", "operator") - .property("in-maint", false) - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-01").next(); - - g.addV().property("aai-node-type", "pnf") - .property("pnf-name", "test-pnf-name-02") - .property("prov-status", "in_service") - .property("in-maint", false) - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-02").next(); - - g.addV().property("aai-node-type", "pnf") - .property("pnf-name", "test-pnf-name-03") - .property("prov-status", "in_service") - .property("data-owner", "selector") - .property("in-maint", false) - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-03").next(); - - g.addV().property("aai-node-type", "pnf") - .property("pnf-name", "test-pnf-name-04") - .property("prov-status", "in_service") - .property("data-owner", "selector") - .property("in-maint", false) - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-04").next(); - - g.addV().property("aai-node-type", "pnf") - .property("pnf-name", "test-pnf-name-05") - .property("prov-status", "in_service") - .property("data-owner", "selector") - .property("in-maint", false) - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-05").next(); + g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-01") + .property("prov-status", "in_service").property("data-owner", "operator") + .property("in-maint", false).property("source-of-truth", "JUNIT") + .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-01").next(); + + g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-02") + .property("prov-status", "in_service").property("in-maint", false) + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-02").next(); + + g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-03") + .property("prov-status", "in_service").property("data-owner", "selector") + .property("in-maint", false).property("source-of-truth", "JUNIT") + .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-03").next(); + + g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-04") + .property("prov-status", "in_service").property("data-owner", "selector") + .property("in-maint", false).property("source-of-truth", "JUNIT") + .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-04").next(); + + g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-05") + .property("prov-status", "in_service").property("data-owner", "selector") + .property("in-maint", false).property("source-of-truth", "JUNIT") + .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-05").next(); } catch (Exception ex) { success = false; } finally { @@ -132,7 +120,8 @@ public class MultiTenancyIT extends AbstractSpringRestTest { assertEquals(queryResults.size(), 2); // get pnf with bob (operator_readOnly) - username = "bob"; password = "bob"; + username = "bob"; + password = "bob"; headers = this.getHeaders(username, password); httpEntity = new HttpEntity(payload, headers); responseEntity = restTemplate.exchange(endpoint, HttpMethod.PUT, httpEntity, String.class); @@ -141,7 +130,8 @@ public class MultiTenancyIT extends AbstractSpringRestTest { assertEquals(queryResults.size(), 2); // get pnf with ted (selector) - username = "ted"; password = "ted"; + username = "ted"; + password = "ted"; headers = this.getHeaders(username, password); httpEntity = new HttpEntity(payload, headers); responseEntity = restTemplate.exchange(endpoint, HttpMethod.PUT, httpEntity, String.class); @@ -174,13 +164,9 @@ public class MultiTenancyIT extends AbstractSpringRestTest { private String getStringToken(String username, String password) { Keycloak keycloakClient = KeycloakBuilder.builder() - .serverUrl(keycloakContainer.getAuthServerUrl()) - .realm(properties.realm) - .clientId(properties.clientId) - .clientSecret(properties.clientSecret) - .username(username) - .password(password) - .build(); + .serverUrl(keycloakContainer.getAuthServerUrl()).realm(properties.realm) + .clientId(properties.clientId).clientSecret(properties.clientSecret).username(username) + .password(password).build(); AccessTokenResponse tokenResponse = keycloakClient.tokenManager().getAccessToken(); assertNotNull(tokenResponse); diff --git a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/RoleHandler.java b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/RoleHandler.java index 763c071..cd4f1b5 100644 --- a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/RoleHandler.java +++ b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/RoleHandler.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,16 +19,16 @@ */ package org.onap.aai.it.multitenancy; +import java.util.Collections; + import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.resource.RealmResource; -import java.util.Collections; - class RoleHandler { - /** - Following roles should be the same as given roles in multi-tenancy-realm json file - */ + /** + * Following roles should be the same as given roles in multi-tenancy-realm json file + */ final static String OPERATOR = "operator"; private final Keycloak adminClient; private final KeycloakTestProperties properties; @@ -40,17 +40,13 @@ class RoleHandler { void addToUser(String role, String username) { RealmResource realm = adminClient.realm(properties.realm); - realm.users().get(username) - .roles() - .realmLevel() - .add(Collections.singletonList(realm.roles().get(role).toRepresentation())); + realm.users().get(username).roles().realmLevel() + .add(Collections.singletonList(realm.roles().get(role).toRepresentation())); } void removeFromUser(String role, String username) { RealmResource realm = adminClient.realm(properties.realm); - realm.users().get(username) - .roles() - .realmLevel() - .remove(Collections.singletonList(realm.roles().get(role).toRepresentation())); + realm.users().get(username).roles().realmLevel() + .remove(Collections.singletonList(realm.roles().get(role).toRepresentation())); } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/AbstractSpringRestTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/AbstractSpringRestTest.java index de98a8c..ac71b57 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/AbstractSpringRestTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/AbstractSpringRestTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,11 @@ */ package org.onap.aai.rest; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.Collections; + import org.apache.tinkerpop.gremlin.process.traversal.P; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Vertex; @@ -33,8 +38,8 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.nodes.NodeIngestor; import org.onap.aai.util.AAIConfig; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; import org.springframework.context.annotation.Import; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -45,12 +50,9 @@ import org.springframework.test.context.junit4.rules.SpringClassRule; import org.springframework.test.context.junit4.rules.SpringMethodRule; import org.springframework.web.client.RestTemplate; -import java.io.UnsupportedEncodingException; -import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.Collections; - -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") @Import(TraversalTestConfiguration.class) public abstract class AbstractSpringRestTest { @@ -66,14 +68,14 @@ public abstract class AbstractSpringRestTest { @Autowired protected NodeIngestor nodeIngestor; - + @LocalServerPort protected int randomPort; protected HttpEntity httpEntity; protected String baseUrl; - protected HttpHeaders headers ; + protected HttpHeaders headers; @BeforeClass public static void setupConfig() throws AAIException { @@ -95,7 +97,8 @@ public abstract class AbstractSpringRestTest { headers.add("Real-Time", "true"); headers.add("X-FromAppId", "JUNIT"); headers.add("X-TransactionId", "JUNIT"); - String authorization = Base64.getEncoder().encodeToString("AAI:AAI".getBytes(StandardCharsets.UTF_8)); + String authorization = + Base64.getEncoder().encodeToString("AAI:AAI".getBytes(StandardCharsets.UTF_8)); headers.add("Authorization", "Basic " + authorization); httpEntity = new HttpEntity(headers); baseUrl = "http://localhost:" + randomPort; @@ -104,11 +107,12 @@ public abstract class AbstractSpringRestTest { /* * Inheritors please override this one */ - public void createTestGraph(){ - + public void createTestGraph() { + } + @After - public void tearDown(){ + public void tearDown() { JanusGraph janusGraph = AAIGraph.getInstance().getGraph(); JanusGraphTransaction transaction = janusGraph.newTransaction(); @@ -117,13 +121,12 @@ public abstract class AbstractSpringRestTest { try { GraphTraversalSource g = transaction.traversal(); - g.V().has("source-of-truth", P.within("JUNIT", "AAI-EXTENSIONS")) - .toList() - .forEach(Vertex::remove); - } catch(Exception ex){ + g.V().has("source-of-truth", P.within("JUNIT", "AAI-EXTENSIONS")).toList() + .forEach(Vertex::remove); + } catch (Exception ex) { success = false; } finally { - if(success){ + if (success) { transaction.commit(); } else { transaction.rollback(); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/BadQueryFormatTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/BadQueryFormatTest.java index ea31302..eb8902e 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/BadQueryFormatTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/BadQueryFormatTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,15 @@ */ package org.onap.aai.rest; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.junit.MatcherAssert.assertThat; + +import java.util.Base64; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -28,8 +37,8 @@ import org.onap.aai.TraversalApp; import org.onap.aai.TraversalTestConfiguration; import org.onap.aai.config.PropertyPasswordConfiguration; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; import org.springframework.context.annotation.Import; import org.springframework.http.*; import org.springframework.test.context.ContextConfiguration; @@ -37,17 +46,10 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; -import java.util.Base64; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.junit.MatcherAssert.assertThat; - @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") @ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @Import(TraversalTestConfiguration.class) @@ -99,11 +101,13 @@ public class BadQueryFormatTest { String endpoint = "/aai/v11/query?format=hello"; httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); System.out.println(responseEntity.getBody()); assertThat(responseEntity.getStatusCode(), is(HttpStatus.BAD_REQUEST)); - assertThat(responseEntity.getBody().toString(), containsString("Bad Parameter Passed:Unsupported format query parameter hello in request")); + assertThat(responseEntity.getBody().toString(), containsString( + "Bad Parameter Passed:Unsupported format query parameter hello in request")); } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/ConfigurationTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/ConfigurationTest.java index 5294f24..b0f9869 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/ConfigurationTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/ConfigurationTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,14 @@ */ package org.onap.aai.rest; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.UnsupportedEncodingException; +import java.util.Base64; +import java.util.Collections; + import org.junit.Before; import org.junit.Test; import org.onap.aai.TraversalApp; @@ -34,21 +42,17 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.web.client.RestTemplate; -import java.io.UnsupportedEncodingException; -import java.util.Base64; -import java.util.Collections; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; - /** * Test REST requests against configuration resource */ @TestPropertySource(locations = "classpath:application-test.properties") -@ContextConfiguration(initializers = PropertyPasswordConfiguration.class, classes = {SpringContextAware.class}) +@ContextConfiguration( + initializers = PropertyPasswordConfiguration.class, + classes = {SpringContextAware.class}) @Import(TraversalTestConfiguration.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = {SpringContextAware.class, TraversalApp.class}) +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = {SpringContextAware.class, TraversalApp.class}) public class ConfigurationTest extends AbstractSpringRestTest { @Autowired RestTemplate restTemplate; @@ -59,6 +63,7 @@ public class ConfigurationTest extends AbstractSpringRestTest { private HttpEntity<String> httpEntity; private String actuatorurl; private HttpHeaders headers; + @Before public void setup() throws UnsupportedEncodingException { @@ -83,24 +88,27 @@ public class ConfigurationTest extends AbstractSpringRestTest { ResponseEntity responseEntity = null; String responseBody = null; - //set Accept as text/plain in order to get access of endpoint "/actuator/prometheus" - responseEntity = restTemplate.exchange(actuatorurl + "/actuator/prometheus", HttpMethod.GET, httpEntity, String.class); + // set Accept as text/plain in order to get access of endpoint "/actuator/prometheus" + responseEntity = restTemplate.exchange(actuatorurl + "/actuator/prometheus", HttpMethod.GET, + httpEntity, String.class); responseBody = (String) responseEntity.getBody(); assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); System.out.println("responseBody---------" + responseBody); assertFalse(responseBody.contains("aai_uri")); assertTrue(responseBody.contains("group_id")); - - //Set Accept as MediaType.APPLICATION_JSON in order to get access of endpoint "/actuator/info" and "/actuator/health" + // Set Accept as MediaType.APPLICATION_JSON in order to get access of endpoint + // "/actuator/info" and "/actuator/health" headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); httpEntity = new HttpEntity<String>(headers); - responseEntity = restTemplate.exchange(actuatorurl + "/actuator/info", HttpMethod.GET, httpEntity, String.class); + responseEntity = restTemplate.exchange(actuatorurl + "/actuator/info", HttpMethod.GET, + httpEntity, String.class); responseBody = (String) responseEntity.getBody(); assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); assertTrue(responseBody.contains("aai-traversal")); - responseEntity = restTemplate.exchange(actuatorurl + "/actuator/health", HttpMethod.GET, httpEntity, String.class); + responseEntity = restTemplate.exchange(actuatorurl + "/actuator/health", HttpMethod.GET, + httpEntity, String.class); responseBody = (String) responseEntity.getBody(); assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); assertTrue(responseBody.contains("UP")); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/DslConsumerTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/DslConsumerTest.java index 311de49..b72107f 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/DslConsumerTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/DslConsumerTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,10 +19,18 @@ */ package org.onap.aai.rest; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.not; +import static org.junit.Assert.*; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; + +import java.util.*; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.JanusGraphTransaction; @@ -36,873 +44,999 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.*; -import java.util.*; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.*; - public class DslConsumerTest extends AbstractSpringRestTest { - private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumerTest.class); - - @Override - public void createTestGraph() { - JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); - boolean success = true; - try { - GraphTraversalSource g = transaction.traversal(); - Vertex p1 = g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver-dsl") - .property("in-maint", false).property("source-of-truth", "JUNIT") - .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl").next(); - Vertex p2 = g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver-dsl-02") - .property("in-maint", false).property("source-of-truth", "JUNIT") - .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl-02").next(); - Vertex p3 = g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver-dsl-03") - .property("in-maint", false).property("source-of-truth", "JUNIT") - .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl-03").next(); - Vertex p4 = g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver-dsl-04") - .property("in-maint", false).property("source-of-truth", "JUNIT") - .property("number-of-cpus", 364).property("source-of-truth", "JUNIT") - .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl-04").next(); - Vertex c1 = g.addV().property("aai-node-type", "complex").property("physical-location-id", "test-complex-dsl") - .property("state", "NJ") - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/cloud-infrastructure/complexes/complex/test-complex-dsl").next(); - Vertex cr1 = g.addV().property("aai-node-type", "cloud-region") - .property("cloud-owner", "test-cloud-owner-01") - .property("cloud-region-id", "test-cloud-region-id-01") - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/test-cloud-owner-01/test-cloud-region-id-01").next(); - Vertex pnf01 = g.addV().property("aai-node-type", "pnf") - .property("pnf-name", "test-pnf-name-01") - .property("in-maint", false) - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-01").next(); - Vertex vserver2 = g.addV().property("aai-node-type", "vserver") - .property("vserver-id", "test-vserver-id-2") - .property("vserver-name", "test-vserver-name-2") - .property("in-maint", "false") - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/vservers/vserver/test-vserver-id-2").next(); - Vertex tenant2 = g.addV().property("aai-node-type", "tenant") - .property("tenant-id", "test-tenant-id-2") - .property("tenant-name", "test-tenant-name-2") - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/tenants/tenant/test-tenant-id-2").next(); - Vertex linterface2 = g.addV().property("aai-node-type", "l-interface") - .property("interface-name", "test-interface-name-02") - .property("priority", "123") - .property("is-port-mirrored", "true") - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/l-interfaces/l-interface/test-interface-name-02").next(); - Vertex oamNetwork2 = g.addV().property("aai-node-type", "oam-network") - .property("network-uuid", "test-network-uuid-02") - .property("network-name", "test-network-name-02") - .property("cvlan-tag", "456") - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/oam-networks/oam-network/test-network-uuid-02").next(); - Vertex cr2 = g.addV().property("aai-node-type", "cloud-region") - .property("cloud-owner", "test-cloud-owner-02") - .property("cloud-region-id", "test-cloud-region-id-02") - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/test-cloud-owner-02/test-cloud-region-id-02").next(); - - // For adding edges, check the dbedgetules and the property from and to node - // along with the other properties to populate information - p1.addEdge("org.onap.relationships.inventory.LocatedIn", c1, - "private", false, - "prevent-delete", "NONE", - "delete-other-v", "NONE", - "contains-other-v", "NONE", - "default", true); - p1.addEdge("org.onap.relationships.inventory.LocatedIn", cr1, - "private", false, - "prevent-delete", "NONE", - "delete-other-v", "NONE", - "contains-other-v", "NONE", - "default", true); - p3.addEdge("org.onap.relationships.inventory.LocatedIn", c1, - "private", false, - "prevent-delete", "NONE", - "delete-other-v", "NONE", - "contains-other-v", "NONE", - "default", true); - p4.addEdge("org.onap.relationships.inventory.LocatedIn", c1, - "private", false, - "prevent-delete", "NONE", - "delete-other-v", "NONE", - "contains-other-v", "NONE", - "default", true); - tenant2.addEdge("org.onap.relationships.inventory.BelongsTo", cr2, - "private", false, - "prevent-delete", "NONE", - "delete-other-v", "NONE", - "contains-other-v", "NONE", - "default", true); - vserver2.addEdge("org.onap.relationships.inventory.BelongsTo", tenant2, - "private", false, - "prevent-delete", "NONE", - "delete-other-v", "NONE", - "contains-other-v", "NONE", - "default", true); - linterface2.addEdge("tosca.relationships.network.BindsTo", vserver2, - "direction", "OUT", - "multiplicity", "MANY2ONE", - "contains-other-v", "!OUT", - "delete-other-v", "!OUT", - "prevent-delete", "NONE", - "default", true); - oamNetwork2.addEdge("org.onap.relationships.inventory.BelongsTo", cr2, - "direction", "OUT", - "multiplicity", "MANY2ONE", - "contains-other-v", "!OUT", - "delete-other-v", "NONE", - "prevent-delete", "!OUT", - "default", true); - - - } catch (Exception ex) { - success = false; - } finally { - if (success) { - transaction.commit(); - } else { - transaction.rollback(); - fail("Unable to setup the graph"); - } - } - } - - @Test - public void testDslQuery() throws Exception { - - String endpoint = "/aai/v14/dsl?format=console"; - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - headers.add("X-Dsl-Version", "V1"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, - String.class); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - System.out.println(responseEntity.getBody()); - assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - - headers.setAccept(Collections.singletonList(MediaType.APPLICATION_XML)); - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, - String.class); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - - // Make sure that there are no two result <result><result> - assertThat(responseEntity.getBody().toString(), is(not(containsString("<result><result>")))); - assertThat(responseEntity.getBody().toString(), is(containsString("<results><result>"))); - } - - @Test - public void testDslQueryV2() throws Exception { - - String endpoint = "/aai/v14/dsl?format=console"; - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl') > complex*"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - headers.add("X-Dsl-Version", "V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, - String.class); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - - headers.setAccept(Collections.singletonList(MediaType.APPLICATION_XML)); - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, - String.class); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - - // Make sure that there are no two result <result><result> - assertThat(responseEntity.getBody().toString(), is(not(containsString("<result><result>")))); - assertThat(responseEntity.getBody().toString(), is(containsString("<results><result>"))); - } - - @Test - public void testDslQueryV2Aggregate() throws Exception { - String endpoint = "/aai/v17/dsl?format=aggregate"; - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - System.out.println("Payload" + payload); - headers.add("X-Dsl-Version", "V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, - String.class); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - System.out.println(responseEntity.getBody()); - assertNotNull("Response from /aai/v17/dsl is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - } - - @Test - public void testDslQueryException() throws Exception { - Map<String, String> dslQuerymap = new HashMap<>(); - dslQuerymap.put("dsl-query", "xserver"); - - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQuerymap); - - ResponseEntity responseEntity = null; - - String endpoint = "/aai/v11/dsl?format=console"; - - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - assertEquals("Expected the response to be 404", HttpStatus.BAD_REQUEST, - responseEntity.getStatusCode()); - } - - @Test - public void testDslQueryOverride() throws Exception { - Map<String, String> dslQuerymap = new HashMap<>(); - dslQuerymap.put("dsl-query", "pserver*"); - - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQuerymap); - - ResponseEntity responseEntity = null; - - String endpoint = "/aai/v11/dsl?format=console"; - - headers.add("X-DslOverride", AAIConfig.get(TraversalConstants.DSL_OVERRIDE)); - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - assertEquals("Expected the response to be 404", HttpStatus.BAD_REQUEST, - responseEntity.getStatusCode()); - } - - - @Test - public void testSelectedPropertiesNotRequiredOnDSLStartNode() throws Exception { - Map<String, String> dslQuerymap = new HashMap<>(); - dslQuerymap.put("dsl-query", "pserver*('equip-model','abc')"); - - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQuerymap); - - String endpoint = "/aai/v11/dsl?format=console"; - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - - assertEquals("Expected the response to be " + HttpStatus.OK, HttpStatus.OK, - responseEntity.getStatusCode()); - } - - @Test - public void testAPropertyIsRequiredOnDSLStartNode() throws Exception { - Map<String, String> dslQuerymap = new HashMap<>(); - dslQuerymap.put("dsl-query", "pserver*"); - - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQuerymap); - - String endpoint = "/aai/v11/dsl?format=console"; - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - - assertEquals("Expected the response to be " + HttpStatus.BAD_REQUEST, HttpStatus.BAD_REQUEST, - responseEntity.getStatusCode()); - } - - @Test - public void testDslQueryProcessingV2_WithSimpleFormat_WithAsTreeQueryParameter() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=simple&depth=0&nodesOnly=true&as-tree=true"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); - JsonObject properties = resultsValue.get("properties").getAsJsonObject(); - assertEquals(2, properties.size()); - assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); - assertTrue(properties.get("in-maint").toString().equals("false")); - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryProcessingV2_WithSimpleFormat_WithoutAsTreeQueryParameter() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); - - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=simple&depth=0&nodesOnly=true"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); - JsonObject properties = resultsValue.get("properties").getAsJsonObject(); - assertEquals(2, properties.size()); - assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); - assertTrue(properties.get("in-maint").toString().equals("false")); - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryProcessingV2_WithResourceFormat_WithAsTreeQueryParameter() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); - - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=resource&depth=0&nodesOnly=true&as-tree=true"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); - JsonObject properties = resultsValue.get("pserver").getAsJsonObject(); - assertEquals(2, properties.size()); - assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); - assertTrue(properties.get("in-maint").toString().equals("false")); - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryProcessingV2_WithResourceFormat_WithoutAsTreeQueryParameter() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); - - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=resource&depth=0&nodesOnly=true"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); - JsonObject properties = resultsValue.get("pserver").getAsJsonObject(); - assertEquals(2, properties.size()); - assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); - assertTrue(properties.get("in-maint").toString().equals("false")); - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryProcessingV2_WithResourceAndUrlFormat_WithAsTreeQueryParameter() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); - - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=resource_and_url&depth=0&nodesOnly=true&as-tree=true"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); - JsonObject properties = resultsValue.get("pserver").getAsJsonObject(); - assertEquals(2, properties.size()); - assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); - assertTrue(properties.get("in-maint").toString().equals("false")); - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryProcessingV2_WithResourceAndUrlFormat_WithoutAsTreeQueryParameter() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); - - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=resource_and_url&depth=0&nodesOnly=true"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); - JsonObject properties = resultsValue.get("pserver").getAsJsonObject(); - assertEquals(2, properties.size()); - assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); - assertTrue(properties.get("in-maint").toString().equals("false")); - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryTestAggregateFormatLastNodeNotSelectedAndNotReturned() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver{'hostname'}('hostname','test-pserver-dsl') > complex"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=aggregate"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); - assertNull(resultsValue.get("/aai/v16/cloud-infrastructure/complexes/complex/test-complex-dsl")); //assert complex is not returned since it is not selected - JsonObject properties = resultsValue.get("/aai/v16/cloud-infrastructure/pservers/pserver/test-pserver-dsl").getAsJsonObject().get("properties").getAsJsonObject(); - assertEquals(1, properties.size()); - assertThat(properties.get("hostname").toString(), is("\"test-pserver-dsl\"")); //assert only hostname is selected - assertNull(properties.get("in-maint")); //assert that in-maint is not returned in the properties list - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryTestAggregateFormatLastNodeSelectedAndReturned() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver{'hostname'}('hostname','test-pserver-dsl') > complex*"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=aggregate"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - JsonArray resultsValue = resultsArray.get(0).getAsJsonArray(); - assertNotNull(resultsValue.get(1).getAsJsonObject().get("/aai/v16/cloud-infrastructure/complexes/complex/test-complex-dsl")); //assert complex is returned since it is selected - JsonObject properties = resultsValue.get(0).getAsJsonObject().get("/aai/v16/cloud-infrastructure/pservers/pserver/test-pserver-dsl").getAsJsonObject().get("properties").getAsJsonObject(); - assertEquals(1, properties.size()); - assertThat(properties.get("hostname").toString(), is("\"test-pserver-dsl\"")); //verify that only selected attribute (hostname) is displayed - assertNull(properties.get("in-maint")); //assert that in-maint is not returned in the properties list - JsonObject complexProperties = resultsValue.get(1).getAsJsonObject().get("/aai/v16/cloud-infrastructure/complexes/complex/test-complex-dsl").getAsJsonObject().get("properties").getAsJsonObject(); - assertEquals(2, complexProperties.size()); //internal properties like source-of-truth, node-type and aai-uri are not returned. - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryTestAggregateFormatInternalPropsNotReturned() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=aggregate"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - JsonObject properties = resultsArray.get(0).getAsJsonObject().get("/aai/v16/cloud-infrastructure/pservers/pserver/test-pserver-dsl").getAsJsonObject().get("properties").getAsJsonObject(); - assertEquals(2, properties.size()); - assertThat(properties.get("hostname").toString(), is("\"test-pserver-dsl\"")); //verify that only hostname is displayed - assertNull(properties.get("source-of-truth")); //assert that source-of-truth is not returned in properties list - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryTestWithMultipleWheres() throws Exception { - // Return pservers where pserver has edge to complex "AND" same pserver also has an edge to cloud-region - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')(> complex)(> cloud-region)"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v18/dsl?format=aggregate"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - assertEquals(1, resultsArray.size()); // Returns only test-pserver-dsl, does not return test-pserver-dsl-03 since it does not have an edge to cloud-region - assertEquals(null, resultsArray.get(0).getAsJsonObject().get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl-03")); //not returned - assertNotNull(resultsArray.get(0).getAsJsonObject().get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl")); - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryTestWithMultipleWhereNots() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname')!(> complex)!(> cloud-region)"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v18/dsl?format=aggregate"; - - // Add header with V2 to use the {} feature as a part of dsl query - headers.add("X-DslApiVersion","V2"); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - assertEquals(1, resultsArray.size()); // Returns only test-pserver-dsl-02 - assertEquals(null, resultsArray.get(0).getAsJsonObject().get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl")); //not returned - assertNotNull(resultsArray.get(0).getAsJsonObject().get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl-02")); - headers.remove("X-DslApiVersion"); - } - - @Test - public void testDslQueryProcessing_ExpectedError_WrongDataType() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('number-of-cpus','test')"); - - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=simple"; - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - Assert.assertTrue(responseString.contains( - "Value ['test'] is not an instance of the expected data type for property key ['number-of-cpus'] and cannot be converted. " + - "Expected: class java.lang.Integer, found: class java.lang.String")); - } - - @Test - public void testDslQueryOnComplex_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "[complex*('source-of-truth', 'JUNIT'), complex*('aai-uri', '/cloud-infrastructure/complexes/complex/test-complex-dsl')]"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=resource"; - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - JsonObject resultValue = resultsArray.get(0).getAsJsonObject(); - JsonObject complex = resultValue.get("complex").getAsJsonObject(); - Assert.assertEquals("\"test-complex-dsl\"", complex.get("physical-location-id").toString()); - } - - @Test - public void testDslQueryOnPserver_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "[pserver*('hostname','test-pserver-dsl'), complex*('physical-location-id', 'test-complex-dsl')]"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=resource"; - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Extract the properties array from the response and compare in assert statements - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - for (JsonElement je : resultsArray) { - JsonObject jo = je.getAsJsonObject(); - if (jo.get("complex") != null) { - Assert.assertEquals("\"test-complex-dsl\"", jo.get("complex").getAsJsonObject().get("physical-location-id").toString()); - } - else if (jo.get("pserver") != null) { - Assert.assertEquals("\"test-pserver-dsl\"", jo.get("pserver").getAsJsonObject().get("hostname").toString()); - } else { - Assert.fail(); - } - } - } - - @Test - public void testDslQueryOnNodesWithEdges_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "[pserver*('hostname','test-pserver-dsl-02'), pserver*('hostname','test-pserver-dsl')>complex*, pnf('pnf-name','pnf-name-noResults')>lag-interface>l-interface] > complex*"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=resource"; - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); // pnf should have no results - - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - boolean hasPserver1 = false, hasPserver2 = false; - for (JsonElement je : resultsArray) { - JsonObject jo = je.getAsJsonObject(); - if (jo.get("complex") != null) { - Assert.assertEquals("\"test-complex-dsl\"", jo.get("complex").getAsJsonObject().get("physical-location-id").toString()); - } - else if (jo.get("pserver") != null) { - if (jo.get("pserver").getAsJsonObject().get("hostname").toString().equals("\"test-pserver-dsl\"")){ - hasPserver1 = true; - } - if (jo.get("pserver").getAsJsonObject().get("hostname").toString().equals("\"test-pserver-dsl-02\"")) { - hasPserver2 = true; - } - } else { - Assert.fail(); - } - } - Assert.assertTrue(hasPserver1 && hasPserver2); - } - - @Test - public void testDslQueryOnNodesWithEdges2_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "[pnf*('pnf-name','test-pnf-name-01'),pserver(>cloud-region*('cloud-owner','test-cloud-owner-01'))]"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - String endpoint = "/aai/v16/dsl?format=resource"; - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - JsonParser jsonParser = new JsonParser(); - JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); - JsonArray resultsArray = results.get("results").getAsJsonArray(); - for (JsonElement je : resultsArray) { - JsonObject jo = je.getAsJsonObject(); - if (jo.get("pnf") != null) { - Assert.assertEquals("\"test-pnf-name-01\"", jo.get("pnf").getAsJsonObject().get("pnf-name").toString()); - } - else if (jo.get("cloud-region") != null) { - Assert.assertEquals("\"test-cloud-owner-01\"", jo.get("cloud-region").getAsJsonObject().get("cloud-owner").toString()); - } else { - Assert.fail(); - } - } - } - - @Test - public void testDslQuery_IsAgnosticWithBooleanPropertyAsString_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; - - // With expected boolean value "false" as a boolean value (no quotes) - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 1)"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Confirm that the vserver was returned in the response - Assert.assertTrue(responseString.contains("\"vserver-id\":\"test-vserver-id-2\"") ); - - dslQueryMap.remove("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 1)"); - - // With expected boolean value of in-maint, "false", in string form (with single quotes) - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'false')"); - payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - responseString = responseEntity.getBody().toString(); - // Confirm that the vserver was returned in the response - Assert.assertTrue(responseString.contains("\"vserver-id\":\"test-vserver-id-2\"") ); - } - - @Test - public void testDslQuery_IsAgnosticWithWrongBooleanPropertyAsString_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; - - // all string values not boolean related default to false - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'bogusBoolean')>l-interface*('priority', 123)"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Confirm that the l-interface was returned in the response - Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); - } - - @Test - public void testDslQuery_IsAgnosticWithBooleanPropertyAsInteger0_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; - - // 0 is false, should return value - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 0)>l-interface*('priority', 123)"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Confirm that the l-interface was returned in the response - Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); - } - - @Test - public void testDslQuery_IsAgnosticWithBooleanPropertyAsInteger1_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; - - // 0 is false, should return value - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 1)>l-interface*('priority', 123)"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Confirm that the l-interface was returned in the response - Assert.assertTrue(!responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); - } - - @Test - public void testDslQuery_IsAgnosticWithBooleanPropertyAsTrue_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; - - // 0 is false, should return value - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', true)>l-interface*('priority', 123)"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Confirm that the l-interface was returned in the response - Assert.assertTrue(!responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); - } - - @Test - public void testDslQuery_IsAgnosticWithBooleanPropertyAsTrueString_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; - - // 0 is false, should return value - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'true')>l-interface*('priority', 123)"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - // Confirm that the l-interface was returned in the response - Assert.assertTrue(!responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); - } - - @Test - public void testDslQuery_IsAgnosticWithIntegerPropertyAsString_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; - - // With expected boolean value "false" as a boolean value (no quotes) - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', false)>l-interface*('priority', '00123')"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Confirm that the l-interface was returned in the response - Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); - dslQueryMap.remove("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', false)>l-interface*('priority', '00123')"); - - // With expected boolean value of in-maint, "false", in string form (with single quotes) - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'false')>l-interface*('priority', 00123)"); - payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - responseString = responseEntity.getBody().toString(); - - // Confirm that the l-interface was returned in the response - Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"") ); - } - - @Test - public void testDslQuery_IsAgnosticWithLongPropertyAsString_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; - - // With expected boolean value "false" as a boolean value (no quotes) - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>oam-network*('cvlan-tag', '456')"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Confirm that the oam-network was returned in the response - Assert.assertTrue(responseString.contains("\"cvlan-tag\":456")); - dslQueryMap.remove("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>oam-network*('cvlan-tag', '456')"); - - dslQueryMap.put("dsl-query", "cloud-region*('cloud-owner', 'test-cloud-owner-02')>oam-network*('cvlan-tag', 456)"); - payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - responseString = responseEntity.getBody().toString(); - - // Confirm that the oam-network was returned in the response - Assert.assertTrue(responseString.contains("\"cvlan-tag\":456")); - } - - @Test - public void testDslQuery_IsAgnosticWithPrimitivePropertiesInList_ReturnSuccessfulResponse() throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; - - // With expected boolean value "false" as a boolean value (no quotes) - dslQueryMap.put("dsl-query", "complex('state')>pserver*('number-of-cpus', '234', '364', 2342)"); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - String responseString = responseEntity.getBody().toString(); - - // Confirm that the pserver was returned in the response - Assert.assertTrue(responseString.contains("\"number-of-cpus\":364")); - dslQueryMap.remove("dsl-query", "complex('state')>pserver*('number-of-cpus', '234', '364', 2342)"); - - dslQueryMap.put("dsl-query", "complex('state')>pserver*('number-of-cpus', '234', 364, 2342)"); - payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - responseString = responseEntity.getBody().toString(); - - // Confirm that the pserver was returned in the response - Assert.assertTrue(responseString.contains("\"number-of-cpus\":364")); - } + private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumerTest.class); + + @Override + public void createTestGraph() { + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + Vertex p1 = g.addV().property("aai-node-type", "pserver") + .property("hostname", "test-pserver-dsl").property("in-maint", false) + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl") + .next(); + Vertex p2 = g.addV().property("aai-node-type", "pserver") + .property("hostname", "test-pserver-dsl-02").property("in-maint", false) + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl-02") + .next(); + Vertex p3 = g.addV().property("aai-node-type", "pserver") + .property("hostname", "test-pserver-dsl-03").property("in-maint", false) + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl-03") + .next(); + Vertex p4 = g.addV().property("aai-node-type", "pserver") + .property("hostname", "test-pserver-dsl-04").property("in-maint", false) + .property("source-of-truth", "JUNIT").property("number-of-cpus", 364) + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-dsl-04") + .next(); + Vertex c1 = g.addV().property("aai-node-type", "complex") + .property("physical-location-id", "test-complex-dsl").property("state", "NJ") + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/complexes/complex/test-complex-dsl") + .next(); + Vertex cr1 = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-owner", "test-cloud-owner-01") + .property("cloud-region-id", "test-cloud-region-id-01") + .property("source-of-truth", "JUNIT") + .property("aai-uri", + "/cloud-infrastructure/cloud-regions/cloud-region/test-cloud-owner-01/test-cloud-region-id-01") + .next(); + Vertex pnf01 = + g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-01") + .property("in-maint", false).property("source-of-truth", "JUNIT") + .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-01").next(); + Vertex vserver2 = g.addV().property("aai-node-type", "vserver") + .property("vserver-id", "test-vserver-id-2") + .property("vserver-name", "test-vserver-name-2").property("in-maint", "false") + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/vservers/vserver/test-vserver-id-2").next(); + Vertex tenant2 = g.addV().property("aai-node-type", "tenant") + .property("tenant-id", "test-tenant-id-2") + .property("tenant-name", "test-tenant-name-2").property("source-of-truth", "JUNIT") + .property("aai-uri", "/tenants/tenant/test-tenant-id-2").next(); + Vertex linterface2 = g.addV().property("aai-node-type", "l-interface") + .property("interface-name", "test-interface-name-02").property("priority", "123") + .property("is-port-mirrored", "true").property("source-of-truth", "JUNIT") + .property("aai-uri", "/l-interfaces/l-interface/test-interface-name-02").next(); + Vertex oamNetwork2 = g.addV().property("aai-node-type", "oam-network") + .property("network-uuid", "test-network-uuid-02") + .property("network-name", "test-network-name-02").property("cvlan-tag", "456") + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/oam-networks/oam-network/test-network-uuid-02").next(); + Vertex cr2 = g.addV().property("aai-node-type", "cloud-region") + .property("cloud-owner", "test-cloud-owner-02") + .property("cloud-region-id", "test-cloud-region-id-02") + .property("source-of-truth", "JUNIT") + .property("aai-uri", + "/cloud-infrastructure/cloud-regions/cloud-region/test-cloud-owner-02/test-cloud-region-id-02") + .next(); + + // For adding edges, check the dbedgetules and the property from and to node + // along with the other properties to populate information + p1.addEdge("org.onap.relationships.inventory.LocatedIn", c1, "private", false, + "prevent-delete", "NONE", "delete-other-v", "NONE", "contains-other-v", "NONE", + "default", true); + p1.addEdge("org.onap.relationships.inventory.LocatedIn", cr1, "private", false, + "prevent-delete", "NONE", "delete-other-v", "NONE", "contains-other-v", "NONE", + "default", true); + p3.addEdge("org.onap.relationships.inventory.LocatedIn", c1, "private", false, + "prevent-delete", "NONE", "delete-other-v", "NONE", "contains-other-v", "NONE", + "default", true); + p4.addEdge("org.onap.relationships.inventory.LocatedIn", c1, "private", false, + "prevent-delete", "NONE", "delete-other-v", "NONE", "contains-other-v", "NONE", + "default", true); + tenant2.addEdge("org.onap.relationships.inventory.BelongsTo", cr2, "private", false, + "prevent-delete", "NONE", "delete-other-v", "NONE", "contains-other-v", "NONE", + "default", true); + vserver2.addEdge("org.onap.relationships.inventory.BelongsTo", tenant2, "private", + false, "prevent-delete", "NONE", "delete-other-v", "NONE", "contains-other-v", + "NONE", "default", true); + linterface2.addEdge("tosca.relationships.network.BindsTo", vserver2, "direction", "OUT", + "multiplicity", "MANY2ONE", "contains-other-v", "!OUT", "delete-other-v", "!OUT", + "prevent-delete", "NONE", "default", true); + oamNetwork2.addEdge("org.onap.relationships.inventory.BelongsTo", cr2, "direction", + "OUT", "multiplicity", "MANY2ONE", "contains-other-v", "!OUT", "delete-other-v", + "NONE", "prevent-delete", "!OUT", "default", true); + + } catch (Exception ex) { + success = false; + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to setup the graph"); + } + } + } + + @Test + public void testDslQuery() throws Exception { + + String endpoint = "/aai/v14/dsl?format=console"; + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + headers.add("X-Dsl-Version", "V1"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + System.out.println(responseEntity.getBody()); + assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_XML)); + httpEntity = new HttpEntity(payload, headers); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + + // Make sure that there are no two result <result><result> + assertThat(responseEntity.getBody().toString(), + is(not(containsString("<result><result>")))); + assertThat(responseEntity.getBody().toString(), is(containsString("<results><result>"))); + } + + @Test + public void testDslQueryV2() throws Exception { + + String endpoint = "/aai/v14/dsl?format=console"; + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl') > complex*"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + headers.add("X-Dsl-Version", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_XML)); + httpEntity = new HttpEntity(payload, headers); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + + // Make sure that there are no two result <result><result> + assertThat(responseEntity.getBody().toString(), + is(not(containsString("<result><result>")))); + assertThat(responseEntity.getBody().toString(), is(containsString("<results><result>"))); + } + + @Test + public void testDslQueryV2Aggregate() throws Exception { + String endpoint = "/aai/v17/dsl?format=aggregate"; + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + System.out.println("Payload" + payload); + headers.add("X-Dsl-Version", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + System.out.println(responseEntity.getBody()); + assertNotNull("Response from /aai/v17/dsl is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + } + + @Test + public void testDslQueryException() throws Exception { + Map<String, String> dslQuerymap = new HashMap<>(); + dslQuerymap.put("dsl-query", "xserver"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQuerymap); + + ResponseEntity responseEntity = null; + + String endpoint = "/aai/v11/dsl?format=console"; + + httpEntity = new HttpEntity(payload, headers); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + assertEquals("Expected the response to be 404", HttpStatus.BAD_REQUEST, + responseEntity.getStatusCode()); + } + + @Test + public void testDslQueryOverride() throws Exception { + Map<String, String> dslQuerymap = new HashMap<>(); + dslQuerymap.put("dsl-query", "pserver*"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQuerymap); + + ResponseEntity responseEntity = null; + + String endpoint = "/aai/v11/dsl?format=console"; + + headers.add("X-DslOverride", AAIConfig.get(TraversalConstants.DSL_OVERRIDE)); + httpEntity = new HttpEntity(payload, headers); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + assertEquals("Expected the response to be 404", HttpStatus.BAD_REQUEST, + responseEntity.getStatusCode()); + } + + @Test + public void testSelectedPropertiesNotRequiredOnDSLStartNode() throws Exception { + Map<String, String> dslQuerymap = new HashMap<>(); + dslQuerymap.put("dsl-query", "pserver*('equip-model','abc')"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQuerymap); + + String endpoint = "/aai/v11/dsl?format=console"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + + assertEquals("Expected the response to be " + HttpStatus.OK, HttpStatus.OK, + responseEntity.getStatusCode()); + } + + @Test + public void testAPropertyIsRequiredOnDSLStartNode() throws Exception { + Map<String, String> dslQuerymap = new HashMap<>(); + dslQuerymap.put("dsl-query", "pserver*"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQuerymap); + + String endpoint = "/aai/v11/dsl?format=console"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + + assertEquals("Expected the response to be " + HttpStatus.BAD_REQUEST, + HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); + } + + @Test + public void testDslQueryProcessingV2_WithSimpleFormat_WithAsTreeQueryParameter() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=simple&depth=0&nodesOnly=true&as-tree=true"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); + JsonObject properties = resultsValue.get("properties").getAsJsonObject(); + assertEquals(2, properties.size()); + assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); + assertTrue(properties.get("in-maint").toString().equals("false")); + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryProcessingV2_WithSimpleFormat_WithoutAsTreeQueryParameter() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=simple&depth=0&nodesOnly=true"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); + JsonObject properties = resultsValue.get("properties").getAsJsonObject(); + assertEquals(2, properties.size()); + assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); + assertTrue(properties.get("in-maint").toString().equals("false")); + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryProcessingV2_WithResourceFormat_WithAsTreeQueryParameter() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource&depth=0&nodesOnly=true&as-tree=true"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); + JsonObject properties = resultsValue.get("pserver").getAsJsonObject(); + assertEquals(2, properties.size()); + assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); + assertTrue(properties.get("in-maint").toString().equals("false")); + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryProcessingV2_WithResourceFormat_WithoutAsTreeQueryParameter() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource&depth=0&nodesOnly=true"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); + JsonObject properties = resultsValue.get("pserver").getAsJsonObject(); + assertEquals(2, properties.size()); + assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); + assertTrue(properties.get("in-maint").toString().equals("false")); + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryProcessingV2_WithResourceAndUrlFormat_WithAsTreeQueryParameter() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = + "/aai/v16/dsl?format=resource_and_url&depth=0&nodesOnly=true&as-tree=true"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); + JsonObject properties = resultsValue.get("pserver").getAsJsonObject(); + assertEquals(2, properties.size()); + assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); + assertTrue(properties.get("in-maint").toString().equals("false")); + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryProcessingV2_WithResourceAndUrlFormat_WithoutAsTreeQueryParameter() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver{'hostname', 'ptnii-equip-name', 'in-maint'}('hostname','test-pserver-dsl')"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource_and_url&depth=0&nodesOnly=true"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); + JsonObject properties = resultsValue.get("pserver").getAsJsonObject(); + assertEquals(2, properties.size()); + assertTrue(properties.get("hostname").toString().equals("\"test-pserver-dsl\"")); + assertTrue(properties.get("in-maint").toString().equals("false")); + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryTestAggregateFormatLastNodeNotSelectedAndNotReturned() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver{'hostname'}('hostname','test-pserver-dsl') > complex"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=aggregate"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject resultsValue = resultsArray.get(0).getAsJsonObject(); + assertNull( + resultsValue.get("/aai/v16/cloud-infrastructure/complexes/complex/test-complex-dsl")); // assert + // complex + // is + // not + // returned + // since + // it + // is + // not + // selected + JsonObject properties = + resultsValue.get("/aai/v16/cloud-infrastructure/pservers/pserver/test-pserver-dsl") + .getAsJsonObject().get("properties").getAsJsonObject(); + assertEquals(1, properties.size()); + assertThat(properties.get("hostname").toString(), is("\"test-pserver-dsl\"")); // assert + // only + // hostname + // is + // selected + assertNull(properties.get("in-maint")); // assert that in-maint is not returned in the + // properties list + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryTestAggregateFormatLastNodeSelectedAndReturned() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver{'hostname'}('hostname','test-pserver-dsl') > complex*"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=aggregate"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonArray resultsValue = resultsArray.get(0).getAsJsonArray(); + assertNotNull(resultsValue.get(1).getAsJsonObject() + .get("/aai/v16/cloud-infrastructure/complexes/complex/test-complex-dsl")); // assert + // complex is + // returned + // since it + // is + // selected + JsonObject properties = resultsValue.get(0).getAsJsonObject() + .get("/aai/v16/cloud-infrastructure/pservers/pserver/test-pserver-dsl") + .getAsJsonObject().get("properties").getAsJsonObject(); + assertEquals(1, properties.size()); + assertThat(properties.get("hostname").toString(), is("\"test-pserver-dsl\"")); // verify + // that only + // selected + // attribute + // (hostname) + // is + // displayed + assertNull(properties.get("in-maint")); // assert that in-maint is not returned in the + // properties list + JsonObject complexProperties = resultsValue.get(1).getAsJsonObject() + .get("/aai/v16/cloud-infrastructure/complexes/complex/test-complex-dsl") + .getAsJsonObject().get("properties").getAsJsonObject(); + assertEquals(2, complexProperties.size()); // internal properties like source-of-truth, + // node-type and aai-uri are not returned. + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryTestAggregateFormatInternalPropsNotReturned() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=aggregate"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject properties = resultsArray.get(0).getAsJsonObject() + .get("/aai/v16/cloud-infrastructure/pservers/pserver/test-pserver-dsl") + .getAsJsonObject().get("properties").getAsJsonObject(); + assertEquals(2, properties.size()); + assertThat(properties.get("hostname").toString(), is("\"test-pserver-dsl\"")); // verify + // that only + // hostname + // is + // displayed + assertNull(properties.get("source-of-truth")); // assert that source-of-truth is not + // returned in properties list + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryTestWithMultipleWheres() throws Exception { + // Return pservers where pserver has edge to complex "AND" same pserver also has an edge to + // cloud-region + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver*('hostname','test-pserver-dsl')(> complex)(> cloud-region)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v18/dsl?format=aggregate"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + assertEquals(1, resultsArray.size()); // Returns only test-pserver-dsl, does not return + // test-pserver-dsl-03 since it does not have an edge + // to cloud-region + assertEquals(null, resultsArray.get(0).getAsJsonObject() + .get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl-03")); // not + // returned + assertNotNull(resultsArray.get(0).getAsJsonObject() + .get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl")); + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryTestWithMultipleWhereNots() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver*('hostname')!(> complex)!(> cloud-region)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v18/dsl?format=aggregate"; + + // Add header with V2 to use the {} feature as a part of dsl query + headers.add("X-DslApiVersion", "V2"); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + assertEquals(1, resultsArray.size()); // Returns only test-pserver-dsl-02 + assertEquals(null, resultsArray.get(0).getAsJsonObject() + .get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl")); // not + // returned + assertNotNull(resultsArray.get(0).getAsJsonObject() + .get("/aai/v18/cloud-infrastructure/pservers/pserver/test-pserver-dsl-02")); + headers.remove("X-DslApiVersion"); + } + + @Test + public void testDslQueryProcessing_ExpectedError_WrongDataType() throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", "pserver*('number-of-cpus','test')"); + + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=simple"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + Assert.assertTrue(responseString.contains( + "Value ['test'] is not an instance of the expected data type for property key ['number-of-cpus'] and cannot be converted. " + + "Expected: class java.lang.Integer, found: class java.lang.String")); + } + + @Test + public void testDslQueryOnComplex_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "[complex*('source-of-truth', 'JUNIT'), complex*('aai-uri', '/cloud-infrastructure/complexes/complex/test-complex-dsl')]"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + JsonObject resultValue = resultsArray.get(0).getAsJsonObject(); + JsonObject complex = resultValue.get("complex").getAsJsonObject(); + Assert.assertEquals("\"test-complex-dsl\"", complex.get("physical-location-id").toString()); + } + + @Test + public void testDslQueryOnPserver_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "[pserver*('hostname','test-pserver-dsl'), complex*('physical-location-id', 'test-complex-dsl')]"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Extract the properties array from the response and compare in assert statements + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + for (JsonElement je : resultsArray) { + JsonObject jo = je.getAsJsonObject(); + if (jo.get("complex") != null) { + Assert.assertEquals("\"test-complex-dsl\"", + jo.get("complex").getAsJsonObject().get("physical-location-id").toString()); + } else if (jo.get("pserver") != null) { + Assert.assertEquals("\"test-pserver-dsl\"", + jo.get("pserver").getAsJsonObject().get("hostname").toString()); + } else { + Assert.fail(); + } + } + } + + @Test + public void testDslQueryOnNodesWithEdges_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "[pserver*('hostname','test-pserver-dsl-02'), pserver*('hostname','test-pserver-dsl')>complex*, pnf('pnf-name','pnf-name-noResults')>lag-interface>l-interface] > complex*"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); // pnf should have no results + + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + boolean hasPserver1 = false, hasPserver2 = false; + for (JsonElement je : resultsArray) { + JsonObject jo = je.getAsJsonObject(); + if (jo.get("complex") != null) { + Assert.assertEquals("\"test-complex-dsl\"", + jo.get("complex").getAsJsonObject().get("physical-location-id").toString()); + } else if (jo.get("pserver") != null) { + if (jo.get("pserver").getAsJsonObject().get("hostname").toString() + .equals("\"test-pserver-dsl\"")) { + hasPserver1 = true; + } + if (jo.get("pserver").getAsJsonObject().get("hostname").toString() + .equals("\"test-pserver-dsl-02\"")) { + hasPserver2 = true; + } + } else { + Assert.fail(); + } + } + Assert.assertTrue(hasPserver1 && hasPserver2); + } + + @Test + public void testDslQueryOnNodesWithEdges2_WithResourceFormatWithUnionAsStartNode_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "[pnf*('pnf-name','test-pnf-name-01'),pserver(>cloud-region*('cloud-owner','test-cloud-owner-01'))]"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + String endpoint = "/aai/v16/dsl?format=resource"; + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + JsonParser jsonParser = new JsonParser(); + JsonObject results = jsonParser.parse(responseString).getAsJsonObject(); + JsonArray resultsArray = results.get("results").getAsJsonArray(); + for (JsonElement je : resultsArray) { + JsonObject jo = je.getAsJsonObject(); + if (jo.get("pnf") != null) { + Assert.assertEquals("\"test-pnf-name-01\"", + jo.get("pnf").getAsJsonObject().get("pnf-name").toString()); + } else if (jo.get("cloud-region") != null) { + Assert.assertEquals("\"test-cloud-owner-01\"", + jo.get("cloud-region").getAsJsonObject().get("cloud-owner").toString()); + } else { + Assert.fail(); + } + } + } + + @Test + public void testDslQuery_IsAgnosticWithBooleanPropertyAsString_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // With expected boolean value "false" as a boolean value (no quotes) + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 1)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Confirm that the vserver was returned in the response + Assert.assertTrue(responseString.contains("\"vserver-id\":\"test-vserver-id-2\"")); + + dslQueryMap.remove("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 1)"); + + // With expected boolean value of in-maint, "false", in string form (with single quotes) + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'false')"); + payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseString = responseEntity.getBody().toString(); + // Confirm that the vserver was returned in the response + Assert.assertTrue(responseString.contains("\"vserver-id\":\"test-vserver-id-2\"")); + } + + @Test + public void testDslQuery_IsAgnosticWithWrongBooleanPropertyAsString_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // all string values not boolean related default to false + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'bogusBoolean')>l-interface*('priority', 123)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Confirm that the l-interface was returned in the response + Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"")); + } + + @Test + public void testDslQuery_IsAgnosticWithBooleanPropertyAsInteger0_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // 0 is false, should return value + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 0)>l-interface*('priority', 123)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Confirm that the l-interface was returned in the response + Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"")); + } + + @Test + public void testDslQuery_IsAgnosticWithBooleanPropertyAsInteger1_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // 0 is false, should return value + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 1)>l-interface*('priority', 123)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Confirm that the l-interface was returned in the response + Assert + .assertTrue(!responseString.contains("\"interface-name\":\"test-interface-name-02\"")); + } + + @Test + public void testDslQuery_IsAgnosticWithBooleanPropertyAsTrue_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // 0 is false, should return value + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', true)>l-interface*('priority', 123)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Confirm that the l-interface was returned in the response + Assert + .assertTrue(!responseString.contains("\"interface-name\":\"test-interface-name-02\"")); + } + + @Test + public void testDslQuery_IsAgnosticWithBooleanPropertyAsTrueString_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // 0 is false, should return value + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'true')>l-interface*('priority', 123)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + // Confirm that the l-interface was returned in the response + Assert + .assertTrue(!responseString.contains("\"interface-name\":\"test-interface-name-02\"")); + } + + @Test + public void testDslQuery_IsAgnosticWithIntegerPropertyAsString_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // With expected boolean value "false" as a boolean value (no quotes) + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', false)>l-interface*('priority', '00123')"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Confirm that the l-interface was returned in the response + Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"")); + dslQueryMap.remove("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', false)>l-interface*('priority', '00123')"); + + // With expected boolean value of in-maint, "false", in string form (with single quotes) + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>tenant*>vserver*('in-maint', 'false')>l-interface*('priority', 00123)"); + payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseString = responseEntity.getBody().toString(); + + // Confirm that the l-interface was returned in the response + Assert.assertTrue(responseString.contains("\"interface-name\":\"test-interface-name-02\"")); + } + + @Test + public void testDslQuery_IsAgnosticWithLongPropertyAsString_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // With expected boolean value "false" as a boolean value (no quotes) + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>oam-network*('cvlan-tag', '456')"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Confirm that the oam-network was returned in the response + Assert.assertTrue(responseString.contains("\"cvlan-tag\":456")); + dslQueryMap.remove("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>oam-network*('cvlan-tag', '456')"); + + dslQueryMap.put("dsl-query", + "cloud-region*('cloud-owner', 'test-cloud-owner-02')>oam-network*('cvlan-tag', 456)"); + payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseString = responseEntity.getBody().toString(); + + // Confirm that the oam-network was returned in the response + Assert.assertTrue(responseString.contains("\"cvlan-tag\":456")); + } + + @Test + public void testDslQuery_IsAgnosticWithPrimitivePropertiesInList_ReturnSuccessfulResponse() + throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + String endpoint = "/aai/v19/dsl?format=resource&nodesOnly=true"; + + // With expected boolean value "false" as a boolean value (no quotes) + dslQueryMap.put("dsl-query", + "complex('state')>pserver*('number-of-cpus', '234', '364', 2342)"); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + String responseString = responseEntity.getBody().toString(); + + // Confirm that the pserver was returned in the response + Assert.assertTrue(responseString.contains("\"number-of-cpus\":364")); + dslQueryMap.remove("dsl-query", + "complex('state')>pserver*('number-of-cpus', '234', '364', 2342)"); + + dslQueryMap.put("dsl-query", + "complex('state')>pserver*('number-of-cpus', '234', 364, 2342)"); + payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + + httpEntity = new HttpEntity(payload, headers); + responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + responseString = responseEntity.getBody().toString(); + + // Confirm that the pserver was returned in the response + Assert.assertTrue(responseString.contains("\"number-of-cpus\":364")); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/ExceptionHandlerTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/ExceptionHandlerTest.java index 6a7bd7e..6281892 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/ExceptionHandlerTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/ExceptionHandlerTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,15 +19,18 @@ */ package org.onap.aai.rest; +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import com.fasterxml.jackson.core.JsonLocation; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.sun.istack.SAXParseException2; -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.WebApplicationException; @@ -35,13 +38,12 @@ import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import static org.junit.Assert.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; public class ExceptionHandlerTest { @@ -57,10 +59,10 @@ public class ExceptionHandlerTest { private ExceptionHandler handler = new ExceptionHandler(); @Before - public void setup(){ + public void setup() { MockitoAnnotations.initMocks(this); - MultivaluedHashMap headersMultiMap = new MultivaluedHashMap<>(); + MultivaluedHashMap headersMultiMap = new MultivaluedHashMap<>(); headersMultiMap.add("X-FromAppId", "JUNIT"); headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString()); @@ -82,11 +84,12 @@ public class ExceptionHandlerTest { assertNotNull(response); assertNull(response.getEntity()); - assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus()); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus()); } @Test - public void testConversionOfWebApplicationResponseWhenUmarshalExceptionResultBadRequest() throws Exception { + public void testConversionOfWebApplicationResponseWhenUmarshalExceptionResultBadRequest() + throws Exception { SAXParseException2 mockSaxParseException = mock(SAXParseException2.class); Exception exception = new WebApplicationException(mockSaxParseException); @@ -94,7 +97,7 @@ public class ExceptionHandlerTest { assertNotNull(response); assertNotNull(response.getEntity()); - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } @Test @@ -106,7 +109,7 @@ public class ExceptionHandlerTest { assertNotNull(response); assertNotNull(response.getEntity()); - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } @Test @@ -118,7 +121,7 @@ public class ExceptionHandlerTest { assertNotNull(response); assertNotNull(response.getEntity()); - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } @Test @@ -131,13 +134,13 @@ public class ExceptionHandlerTest { assertNotNull(response); assertNotNull(response.getEntity()); - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); - + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } @Test - public void testConversionWhenUnknownExceptionResultBadRequestForXmlResponseType() throws Exception { + public void testConversionWhenUnknownExceptionResultBadRequestForXmlResponseType() + throws Exception { List<MediaType> outputMediaTypes = new ArrayList<>(); outputMediaTypes.add(MediaType.valueOf("application/xml")); @@ -149,6 +152,6 @@ public class ExceptionHandlerTest { assertNotNull(response); assertNotNull(response.getEntity()); - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/GfpVserverDataStoredQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/GfpVserverDataStoredQueryTest.java index 8acbd4e..845ddf9 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/GfpVserverDataStoredQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/GfpVserverDataStoredQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,15 +19,25 @@ */ package org.onap.aai.rest; -import org.onap.aai.config.PropertyPasswordConfiguration; -import org.onap.aai.transforms.XmlFormatTransformer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import com.att.eelf.configuration.EELFManager; import com.jayway.jsonpath.JsonPath; + +import java.util.*; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.*; + +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.janusgraph.core.JanusGraph; import org.janusgraph.core.JanusGraphTransaction; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -35,26 +45,19 @@ import org.mockito.Mockito; import org.onap.aai.AAISetup; import org.onap.aai.HttpTestUtil; import org.onap.aai.PayloadUtil; +import org.onap.aai.config.PropertyPasswordConfiguration; import org.onap.aai.dbmap.AAIGraph; import org.onap.aai.setup.SchemaVersion; +import org.onap.aai.transforms.XmlFormatTransformer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.test.context.ContextConfiguration; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.*; -import java.util.*; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - @ContextConfiguration(initializers = PropertyPasswordConfiguration.class) -public class GfpVserverDataStoredQueryTest extends AAISetup{ +public class GfpVserverDataStoredQueryTest extends AAISetup { - private static final Logger logger = LoggerFactory.getLogger(GfpVserverDataStoredQueryTest.class); + private static final Logger logger = + LoggerFactory.getLogger(GfpVserverDataStoredQueryTest.class); protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json"); @@ -79,9 +82,8 @@ public class GfpVserverDataStoredQueryTest extends AAISetup{ version = schemaVersions.getDefaultVersion(); - cloudRegionUri = "/aai/" + version.toString() - + "/cloud-infrastructure/cloud-regions/" - + "cloud-region/testOwner1/testRegion1"; + cloudRegionUri = "/aai/" + version.toString() + "/cloud-infrastructure/cloud-regions/" + + "cloud-region/testOwner1/testRegion1"; httpTestUtil = new HttpTestUtil(); Map<String, String> templateValues = new HashMap<>(); @@ -97,8 +99,8 @@ public class GfpVserverDataStoredQueryTest extends AAISetup{ templateValues.put("ipv6-address", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"); templateValues.put("vlan-interface", "vlan-interface1"); - String cloudRegionPayload = PayloadUtil. - getTemplatePayload("cloud-region-with-linterface.json", templateValues); + String cloudRegionPayload = + PayloadUtil.getTemplatePayload("cloud-region-with-linterface.json", templateValues); Response response = httpTestUtil.doPut(cloudRegionUri, cloudRegionPayload); logger.info("Response status received {}", response.getEntity()); @@ -107,12 +109,13 @@ public class GfpVserverDataStoredQueryTest extends AAISetup{ assertEquals("Expecting the cloud region to be created", 201, response.getStatus()); logger.info("Successfully created the cloud region with linterface"); - queryConsumer = new QueryConsumer(traversalUriHttpEntry, schemaVersions, gremlinServerSingleton, new XmlFormatTransformer(), basePath); + queryConsumer = new QueryConsumer(traversalUriHttpEntry, schemaVersions, + gremlinServerSingleton, new XmlFormatTransformer(), basePath); - httpHeaders = mock(HttpHeaders.class); + httpHeaders = mock(HttpHeaders.class); - headersMultiMap = new MultivaluedHashMap<>(); - queryParameters = Mockito.spy(new MultivaluedHashMap<>()); + headersMultiMap = new MultivaluedHashMap<>(); + queryParameters = Mockito.spy(new MultivaluedHashMap<>()); headersMultiMap.add("X-FromAppId", "JUNIT"); headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString()); @@ -138,7 +141,8 @@ public class GfpVserverDataStoredQueryTest extends AAISetup{ } @Test - public void testStoredQueryVerifyDoesNotThrowMethodTooLargeWhenLargeNumberOfStartingVertexes() throws Exception { + public void testStoredQueryVerifyDoesNotThrowMethodTooLargeWhenLargeNumberOfStartingVertexes() + throws Exception { // Add hundred thousand vserver vertexes to properly // test the scenario where the application was @@ -166,23 +170,15 @@ public class GfpVserverDataStoredQueryTest extends AAISetup{ Mockito.when(uriInfo.getQueryParameters()).thenReturn(queryParameters); when(uriInfo.getPath()).thenReturn(query); HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class); - when(mockRequest.getRequestURL()).thenReturn(new StringBuffer("https://localhost:8446" + query)); - - Response response = queryConsumer.executeQuery( - payload, - version.toString(), - "resource_and_url", "" + - "no_op", - httpHeaders, - mockRequest, - uriInfo, - "-1", - "-1" - ); + when(mockRequest.getRequestURL()) + .thenReturn(new StringBuffer("https://localhost:8446" + query)); + + Response response = queryConsumer.executeQuery(payload, version.toString(), + "resource_and_url", "" + "no_op", httpHeaders, mockRequest, uriInfo, "-1", "-1"); String entity = response.getEntity().toString(); - assertEquals("Expected the response to be 200 but got this returned: " + response.getEntity().toString(), - 200, response.getStatus()); + assertEquals("Expected the response to be 200 but got this returned: " + + response.getEntity().toString(), 200, response.getStatus()); List<String> urls = JsonPath.read(entity, "$.results[*].url"); assertEquals("Expected the urls to be 3", 3, urls.size()); removeVertexes(); @@ -207,31 +203,24 @@ public class GfpVserverDataStoredQueryTest extends AAISetup{ when(uriInfo.getPath()).thenReturn(query); HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class); - when(mockRequest.getRequestURL()).thenReturn(new StringBuffer("https://localhost:8446" + query)); - - Response response = queryConsumer.executeQuery( - payload, - version.toString(), - "resource_and_url", "" + - "no_op", - httpHeaders, - mockRequest, - uriInfo, - "-1", - "-1" - ); + when(mockRequest.getRequestURL()) + .thenReturn(new StringBuffer("https://localhost:8446" + query)); + + Response response = queryConsumer.executeQuery(payload, version.toString(), + "resource_and_url", "" + "no_op", httpHeaders, mockRequest, uriInfo, "-1", "-1"); String entity = response.getEntity().toString(); - assertEquals("Expected the response to be 400 but got this returned: " + entity, - 400, response.getStatus()); + assertEquals("Expected the response to be 400 but got this returned: " + entity, 400, + response.getStatus()); assertThat("Expecting error message since query doesn't exist", entity, - containsString("Query payload is invalid")); + containsString("Query payload is invalid")); } @Test - public void testStoredQueryWhenStartFilterReturnsZeroVertexesItShouldHandleProperly() throws Exception { + public void testStoredQueryWhenStartFilterReturnsZeroVertexesItShouldHandleProperly() + throws Exception { Map<String, String> templateValues = new HashMap<>(); @@ -248,35 +237,27 @@ public class GfpVserverDataStoredQueryTest extends AAISetup{ Mockito.when(uriInfo.getQueryParameters()).thenReturn(queryParameters); when(uriInfo.getPath()).thenReturn(query); HttpServletRequest mockRequest = Mockito.mock(HttpServletRequest.class); - when(mockRequest.getRequestURL()).thenReturn(new StringBuffer("https://localhost:8446" + query)); - + when(mockRequest.getRequestURL()) + .thenReturn(new StringBuffer("https://localhost:8446" + query)); - Response response = queryConsumer.executeQuery( - payload, - version.toString(), - "resource_and_url", "" + - "no_op", - httpHeaders, - mockRequest, - uriInfo, - "-1", - "-1" - ); + Response response = queryConsumer.executeQuery(payload, version.toString(), + "resource_and_url", "" + "no_op", httpHeaders, mockRequest, uriInfo, "-1", "-1"); String entity = response.getEntity().toString(); - assertEquals("Expected the response to be 404 but got this returned: " + entity, - 404, response.getStatus()); + assertEquals("Expected the response to be 404 but got this returned: " + entity, 404, + response.getStatus()); - assertThat(entity, containsString("Start URI returned no vertexes, please check the start URI")); + assertThat(entity, + containsString("Start URI returned no vertexes, please check the start URI")); } @After - public void tearDown(){ + public void tearDown() { removeVertexes(); } - private void removeVertexes(){ + private void removeVertexes() { JanusGraph JanusGraph = AAIGraph.getInstance().getGraph(); JanusGraphTransaction transaction = JanusGraph.newTransaction(); @@ -286,12 +267,12 @@ public class GfpVserverDataStoredQueryTest extends AAISetup{ try { GraphTraversalSource g = transaction.traversal(); g.V().has("source-of-truth", "JUNIT").toList().stream() - .forEach((vertex) -> vertex.remove()); - } catch(Exception ex){ + .forEach((vertex) -> vertex.remove()); + } catch (Exception ex) { success = false; logger.error("Unable to remove all of the junit vservers due to {}", ex); } finally { - if(success){ + if (success) { transaction.commit(); } else { transaction.rollback(); @@ -300,7 +281,7 @@ public class GfpVserverDataStoredQueryTest extends AAISetup{ } - private void addVservers(int vserversCount){ + private void addVservers(int vserversCount) { JanusGraph JanusGraph = AAIGraph.getInstance().getGraph(); JanusGraphTransaction transaction = JanusGraph.newTransaction(); @@ -310,20 +291,19 @@ public class GfpVserverDataStoredQueryTest extends AAISetup{ try { GraphTraversalSource g = transaction.traversal(); - for(int index = 0; index < vserversCount; index++){ + for (int index = 0; index < vserversCount; index++) { String randomVserverId = UUID.randomUUID().toString(); g.addV().property("aai-node-type", "vserver") - .property( "vserver-id", "random-" + randomVserverId) - .property( "vserver-name", "junit-vservers") - .property( "source-of-truth", "JUNIT") - .next(); + .property("vserver-id", "random-" + randomVserverId) + .property("vserver-name", "junit-vservers").property("source-of-truth", "JUNIT") + .next(); } - } catch(Exception ex){ + } catch (Exception ex) { success = false; logger.error("Unable to add all of the vservers due to {}", ex); } finally { - if(success){ + if (success) { transaction.commit(); } else { transaction.rollback(); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/QueryConsumerTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/QueryConsumerTest.java index 2570690..cfb81d4 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/QueryConsumerTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/QueryConsumerTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,19 @@ */ package org.onap.aai.rest; +import static org.hamcrest.core.Is.is; +import static org.hamcrest.core.StringContains.containsString; +import static org.junit.Assert.*; + +import java.io.UnsupportedEncodingException; +import java.util.Base64; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import javax.ws.rs.core.Response; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.janusgraph.core.JanusGraphTransaction; import org.junit.After; @@ -32,9 +45,11 @@ import org.onap.aai.TraversalTestConfiguration; import org.onap.aai.config.PropertyPasswordConfiguration; import org.onap.aai.dbmap.AAIGraph; import org.onap.aai.exceptions.AAIException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; import org.springframework.context.annotation.Import; import org.springframework.http.*; import org.springframework.test.context.ContextConfiguration; @@ -42,171 +57,160 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.UnsupportedEncodingException; -import java.util.Base64; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -import javax.ws.rs.core.Response; - -import static org.hamcrest.core.Is.is; -import static org.hamcrest.core.StringContains.containsString; -import static org.junit.Assert.*; - @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") @ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @Import(TraversalTestConfiguration.class) public class QueryConsumerTest { - private static final Logger LOGGER = LoggerFactory.getLogger(QueryConsumerTest.class); - private HttpTestUtil httpTestUtil; - - private String pserverUri; - - @Autowired - RestTemplate restTemplate; - - @LocalServerPort - int randomPort; - - private HttpEntity httpEntity; - - private HttpHeaders headers; - - private String baseUrl; - - private String cloudRegionUri; - - @Before - public void setup() throws Exception { - - headers = new HttpHeaders(); - headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); - headers.setContentType(MediaType.APPLICATION_JSON); - headers.add("Real-Time", "true"); - headers.add("X-FromAppId", "JUNIT"); - headers.add("X-TransactionId", "JUNIT"); - String authorization = Base64.getEncoder().encodeToString("AAI:AAI".getBytes("UTF-8")); - headers.add("Authorization", "Basic " + authorization); - baseUrl = "http://localhost:" + randomPort; - httpTestUtil = new HttpTestUtil(); - addPserver(); - - } - - private void addPserver() throws Exception, UnsupportedEncodingException, AAIException { - String hostname = "test-" + UUID.randomUUID().toString(); - pserverUri = "/aai/v11/cloud-infrastructure/pservers/pserver/" + hostname; - Map<String, String> pserverMap = new HashMap<>(); - pserverMap.put("hostname", hostname); - String payload = PayloadUtil.getTemplatePayload("pserver.json", pserverMap); - httpTestUtil.doPut(pserverUri, payload); - } - - private void addCloudRegion(Map<String, String> cloudRegionMap, String cloudRegionUri) - throws Exception, UnsupportedEncodingException, AAIException { - String cloudRegionPayload = PayloadUtil.getTemplatePayload("cloud-region-with-vserver.json", cloudRegionMap); - Response response = httpTestUtil.doPut(cloudRegionUri, cloudRegionPayload); - } - - private void addComplex(Map<String, String> complexMap, String complexUri) - throws Exception, UnsupportedEncodingException, AAIException { - String complexPayload = PayloadUtil.getTemplatePayload("complex.json", complexMap); - Response response = httpTestUtil.doPut(complexUri, complexPayload); - } - -// @Test - public void testRequiredAGood() throws Exception { - String endpoint = "/aai/v14/query?format=pathed"; - Map<String, String> cloudRegionMap = new HashMap<>(); - cloudRegionMap.put("cloud-owner", "test-owner-id1111"); - cloudRegionMap.put("cloud-region-id", "test-region-id1111"); - cloudRegionMap.put("tenant-id", "test-tenant-id1111"); - cloudRegionMap.put("tenant-name", "test-tenant-name-id1111"); - cloudRegionMap.put("vserver-id", "some-vserver-id-id1111"); - cloudRegionMap.put("vserver-name", "test-vserver-name-id1111"); - cloudRegionMap.put("pserver-uri", pserverUri); - cloudRegionUri = "/aai/v14/cloud-infrastructure/cloud-regions/cloud-region/test-owner-id1111/test-region-id1111"; - addCloudRegion(cloudRegionMap, cloudRegionUri); - - Map<String, String> complexMap = new HashMap<>(); - complexMap.put("physical-location-id", "location-1111"); - complexMap.put("cloud-region-uri", cloudRegionUri); - String complexUri = "/aai/v14/cloud-infrastructure/complexes/complex/location-1111"; - addComplex(complexMap, complexUri); - - Map<String, String> customQueryMap = new HashMap<>(); - - customQueryMap.put("start", "cloud-infrastructure/cloud-regions"); - customQueryMap.put("query", "cloud-region-sites?owner=test-owner-id1111"); - - String payload = PayloadUtil.getTemplatePayload("custom-query.json", customQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, - String.class); - LOGGER.info("Response of custom query : {}", responseEntity.getBody().toString()); - assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); - - // assertThat(responseEntity.getBody().toString(), - // containsString(customerUri2)); - } - - @Test - public void testRequiredBad() throws Exception { - String endpoint = "/aai/v14/query?format=pathed"; - Map<String, String> cloudRegionMap = new HashMap<>(); - cloudRegionMap.put("cloud-owner", "test-owner-id2222"); - cloudRegionMap.put("cloud-region-id", "test-region-id2222"); - cloudRegionMap.put("tenant-id", "test-tenant-id2222"); - cloudRegionMap.put("tenant-name", "test-tenant-name-id2222"); - cloudRegionMap.put("vserver-id", "some-vserver-id-id2222"); - cloudRegionMap.put("vserver-name", "test-vserver-name-id2222"); - cloudRegionMap.put("pserver-uri", pserverUri); - cloudRegionUri = "/aai/v14/cloud-infrastructure/cloud-regions/cloud-region/test-owner-id2222/test-region-id2222"; - addCloudRegion(cloudRegionMap, cloudRegionUri); - - Map<String, String> customQueryMap = new HashMap<>(); - - customQueryMap.put("start", "cloud-infrastructure/cloud-regions"); - customQueryMap.put("query", "cloud-region-sites?owner=test-owner-id2222&extra=extraParam"); - - String payload = PayloadUtil.getTemplatePayload("custom-query.json", customQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, - String.class); - LOGGER.info("Response of custom query : {}", responseEntity.getBody().toString()); - assertThat(responseEntity.getStatusCode(), is(HttpStatus.BAD_REQUEST)); - - assertThat(responseEntity.getBody().toString(), containsString("3022")); - } - - @After - public void tearDown() { - - JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); - boolean success = true; - try { - GraphTraversalSource g = transaction.traversal(); - g.V().has("source-of-truth", "JUNIT").toList().forEach(v -> v.remove()); - - } catch (Exception ex) { - success = false; - LOGGER.error("Unable to remove the vertexes", ex); - } finally { - if (success) { - transaction.commit(); - } else { - transaction.rollback(); - fail("Unable to teardown the graph"); - } - } - } + private static final Logger LOGGER = LoggerFactory.getLogger(QueryConsumerTest.class); + private HttpTestUtil httpTestUtil; + + private String pserverUri; + + @Autowired + RestTemplate restTemplate; + + @LocalServerPort + int randomPort; + + private HttpEntity httpEntity; + + private HttpHeaders headers; + + private String baseUrl; + + private String cloudRegionUri; + + @Before + public void setup() throws Exception { + + headers = new HttpHeaders(); + headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.add("Real-Time", "true"); + headers.add("X-FromAppId", "JUNIT"); + headers.add("X-TransactionId", "JUNIT"); + String authorization = Base64.getEncoder().encodeToString("AAI:AAI".getBytes("UTF-8")); + headers.add("Authorization", "Basic " + authorization); + baseUrl = "http://localhost:" + randomPort; + httpTestUtil = new HttpTestUtil(); + addPserver(); + + } + + private void addPserver() throws Exception, UnsupportedEncodingException, AAIException { + String hostname = "test-" + UUID.randomUUID().toString(); + pserverUri = "/aai/v11/cloud-infrastructure/pservers/pserver/" + hostname; + Map<String, String> pserverMap = new HashMap<>(); + pserverMap.put("hostname", hostname); + String payload = PayloadUtil.getTemplatePayload("pserver.json", pserverMap); + httpTestUtil.doPut(pserverUri, payload); + } + + private void addCloudRegion(Map<String, String> cloudRegionMap, String cloudRegionUri) + throws Exception, UnsupportedEncodingException, AAIException { + String cloudRegionPayload = + PayloadUtil.getTemplatePayload("cloud-region-with-vserver.json", cloudRegionMap); + Response response = httpTestUtil.doPut(cloudRegionUri, cloudRegionPayload); + } + + private void addComplex(Map<String, String> complexMap, String complexUri) + throws Exception, UnsupportedEncodingException, AAIException { + String complexPayload = PayloadUtil.getTemplatePayload("complex.json", complexMap); + Response response = httpTestUtil.doPut(complexUri, complexPayload); + } + + // @Test + public void testRequiredAGood() throws Exception { + String endpoint = "/aai/v14/query?format=pathed"; + Map<String, String> cloudRegionMap = new HashMap<>(); + cloudRegionMap.put("cloud-owner", "test-owner-id1111"); + cloudRegionMap.put("cloud-region-id", "test-region-id1111"); + cloudRegionMap.put("tenant-id", "test-tenant-id1111"); + cloudRegionMap.put("tenant-name", "test-tenant-name-id1111"); + cloudRegionMap.put("vserver-id", "some-vserver-id-id1111"); + cloudRegionMap.put("vserver-name", "test-vserver-name-id1111"); + cloudRegionMap.put("pserver-uri", pserverUri); + cloudRegionUri = + "/aai/v14/cloud-infrastructure/cloud-regions/cloud-region/test-owner-id1111/test-region-id1111"; + addCloudRegion(cloudRegionMap, cloudRegionUri); + + Map<String, String> complexMap = new HashMap<>(); + complexMap.put("physical-location-id", "location-1111"); + complexMap.put("cloud-region-uri", cloudRegionUri); + String complexUri = "/aai/v14/cloud-infrastructure/complexes/complex/location-1111"; + addComplex(complexMap, complexUri); + + Map<String, String> customQueryMap = new HashMap<>(); + + customQueryMap.put("start", "cloud-infrastructure/cloud-regions"); + customQueryMap.put("query", "cloud-region-sites?owner=test-owner-id1111"); + + String payload = PayloadUtil.getTemplatePayload("custom-query.json", customQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + LOGGER.info("Response of custom query : {}", responseEntity.getBody().toString()); + assertThat(responseEntity.getStatusCode(), is(HttpStatus.OK)); + + // assertThat(responseEntity.getBody().toString(), + // containsString(customerUri2)); + } + + @Test + public void testRequiredBad() throws Exception { + String endpoint = "/aai/v14/query?format=pathed"; + Map<String, String> cloudRegionMap = new HashMap<>(); + cloudRegionMap.put("cloud-owner", "test-owner-id2222"); + cloudRegionMap.put("cloud-region-id", "test-region-id2222"); + cloudRegionMap.put("tenant-id", "test-tenant-id2222"); + cloudRegionMap.put("tenant-name", "test-tenant-name-id2222"); + cloudRegionMap.put("vserver-id", "some-vserver-id-id2222"); + cloudRegionMap.put("vserver-name", "test-vserver-name-id2222"); + cloudRegionMap.put("pserver-uri", pserverUri); + cloudRegionUri = + "/aai/v14/cloud-infrastructure/cloud-regions/cloud-region/test-owner-id2222/test-region-id2222"; + addCloudRegion(cloudRegionMap, cloudRegionUri); + + Map<String, String> customQueryMap = new HashMap<>(); + + customQueryMap.put("start", "cloud-infrastructure/cloud-regions"); + customQueryMap.put("query", "cloud-region-sites?owner=test-owner-id2222&extra=extraParam"); + + String payload = PayloadUtil.getTemplatePayload("custom-query.json", customQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + LOGGER.info("Response of custom query : {}", responseEntity.getBody().toString()); + assertThat(responseEntity.getStatusCode(), is(HttpStatus.BAD_REQUEST)); + + assertThat(responseEntity.getBody().toString(), containsString("3022")); + } + + @After + public void tearDown() { + + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + g.V().has("source-of-truth", "JUNIT").toList().forEach(v -> v.remove()); + + } catch (Exception ex) { + success = false; + LOGGER.error("Unable to remove the vertexes", ex); + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to teardown the graph"); + } + } + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/RecentApiTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/RecentApiTest.java index 10ff7b9..d9d1809 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/RecentApiTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/RecentApiTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,144 +19,165 @@ */ package org.onap.aai.rest; +import static org.junit.Assert.*; + +import com.att.eelf.configuration.EELFManager; + +import java.util.Collections; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.janusgraph.core.JanusGraphTransaction; import org.junit.Test; import org.onap.aai.dbmap.AAIGraph; -import org.springframework.http.*; -import org.springframework.web.util.UriComponentsBuilder; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.att.eelf.configuration.EELFManager; - -import java.util.Collections; - -import static org.junit.Assert.*; +import org.springframework.http.*; +import org.springframework.web.util.UriComponentsBuilder; public class RecentApiTest extends AbstractSpringRestTest { - private static final Logger LOGGER = LoggerFactory.getLogger(RecentApiTest.class); - - @Override - public void createTestGraph() { - JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); - boolean success = true; - try { - GraphTraversalSource g = transaction.traversal(); - g.addV().property("aai-node-type", "pserver").property("hostname", "test-pserver-recents") - .property("in-maint", false).property("source-of-truth", "JUNIT") - .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-recents").next(); - } catch (Exception ex) { - success = false; - } finally { - if (success) { - transaction.commit(); - } else { - transaction.rollback(); - fail("Unable to setup the graph"); - } - } - } - - @Test - public void testRecentsQuery() { - - String endpoint = "/aai/recents/v14/pserver"; - httpEntity = new HttpEntity(headers); - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint).queryParam("hours", "190"); - ResponseEntity responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, - String.class); - LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); - assertNotNull("Response from /aai/recents/v14/pserver is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - - // Check different application xml headers for accept - headers.set("Accept", "application/xml"); - httpEntity = new HttpEntity(headers); - - responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, - String.class); - LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); - assertNotNull("Response from /aai/recents/v14/pserver is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - - headers.set("Accept", "application/xml; charset=UTF-8"); - httpEntity = new HttpEntity(headers); - - responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, - String.class); - LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); - assertNotNull("Response from /aai/recents/v14/pserver is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - } - - @Test - public void testRecentsHoursWrongNumber() { - String endpoint = "/aai/recents/v14/pserver"; - httpEntity = new HttpEntity(headers); - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint).queryParam("hours", "1900000000000000000000000000000000000000000000000"); - ResponseEntity responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, - String.class); - - LOGGER.debug("Response for PUT request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); - assertNotNull("Response from /aai/recents/v14/pserver is null", responseEntity); - assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - } - - @Test - public void testRecentsStartTimeWrongNumber() { - String endpoint = "/aai/recents/v14/pserver"; - httpEntity = new HttpEntity(headers); - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint).queryParam("date-time", "190000000000000000000000000000000000000000000"); - ResponseEntity responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, - String.class); - - LOGGER.debug("Response for PUT request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); - assertNotNull("Response from /aai/recents/v14/pserver is null", responseEntity); - assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - } - - @Test - public void testRecentsQueryException() { - String endpoint = "/aai/recents/v14/xserver"; - httpEntity = new HttpEntity(headers); - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint).queryParam("hours", "190"); - ResponseEntity responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, - String.class); - - LOGGER.debug("Response for PUT request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); - assertNotNull("Response from /aai/recents/v14/pserver is null", responseEntity); - assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); - } - - @Test - public void testRecentsQueryExceptionHours() { - String endpoint = "/aai/recents/v14/pserver"; - httpEntity = new HttpEntity(headers); - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint).queryParam("hours", "200"); - - ResponseEntity responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, - String.class); - LOGGER.debug("Response for PUT request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); - assertNotNull("Response from /aai/recents/v14/pserver is null", responseEntity); - assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, - responseEntity.getStatusCode()); - - } - - @Test - public void testRecentsQueryExceptionDateTime() { - String endpoint = "/aai/recents/v14/pserver"; - httpEntity = new HttpEntity(headers); - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint).queryParam("date-time", - "200"); - - ResponseEntity responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, - String.class); - LOGGER.debug("Response for PUT request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); - assertNotNull("Response from /aai/recents/v14/pserver is null", responseEntity); - assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, - responseEntity.getStatusCode()); - } + private static final Logger LOGGER = LoggerFactory.getLogger(RecentApiTest.class); + + @Override + public void createTestGraph() { + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + g.addV().property("aai-node-type", "pserver") + .property("hostname", "test-pserver-recents").property("in-maint", false) + .property("source-of-truth", "JUNIT") + .property("aai-uri", "/cloud-infrastructure/pservers/pserver/test-pserver-recents") + .next(); + } catch (Exception ex) { + success = false; + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to setup the graph"); + } + } + } + + @Test + public void testRecentsQuery() { + + String endpoint = "/aai/recents/v14/pserver"; + httpEntity = new HttpEntity(headers); + UriComponentsBuilder builder = + UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint).queryParam("hours", "190"); + ResponseEntity responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); + assertNotNull("Response from /aai/recents/v14/pserver is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + + // Check different application xml headers for accept + headers.set("Accept", "application/xml"); + httpEntity = new HttpEntity(headers); + + responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); + assertNotNull("Response from /aai/recents/v14/pserver is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + + headers.set("Accept", "application/xml; charset=UTF-8"); + httpEntity = new HttpEntity(headers); + + responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); + assertNotNull("Response from /aai/recents/v14/pserver is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + } + + @Test + public void testRecentsHoursWrongNumber() { + String endpoint = "/aai/recents/v14/pserver"; + httpEntity = new HttpEntity(headers); + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint) + .queryParam("hours", "1900000000000000000000000000000000000000000000000"); + ResponseEntity responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + + LOGGER.debug("Response for PUT request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); + assertNotNull("Response from /aai/recents/v14/pserver is null", responseEntity); + assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, + responseEntity.getStatusCode()); + } + + @Test + public void testRecentsStartTimeWrongNumber() { + String endpoint = "/aai/recents/v14/pserver"; + httpEntity = new HttpEntity(headers); + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint) + .queryParam("date-time", "190000000000000000000000000000000000000000000"); + ResponseEntity responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + + LOGGER.debug("Response for PUT request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); + assertNotNull("Response from /aai/recents/v14/pserver is null", responseEntity); + assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, + responseEntity.getStatusCode()); + } + + @Test + public void testRecentsQueryException() { + String endpoint = "/aai/recents/v14/xserver"; + httpEntity = new HttpEntity(headers); + UriComponentsBuilder builder = + UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint).queryParam("hours", "190"); + ResponseEntity responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + + LOGGER.debug("Response for PUT request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); + assertNotNull("Response from /aai/recents/v14/pserver is null", responseEntity); + assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, + responseEntity.getStatusCode()); + } + + @Test + public void testRecentsQueryExceptionHours() { + String endpoint = "/aai/recents/v14/pserver"; + httpEntity = new HttpEntity(headers); + UriComponentsBuilder builder = + UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint).queryParam("hours", "200"); + + ResponseEntity responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + LOGGER.debug("Response for PUT request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); + assertNotNull("Response from /aai/recents/v14/pserver is null", responseEntity); + assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, + responseEntity.getStatusCode()); + + } + + @Test + public void testRecentsQueryExceptionDateTime() { + String endpoint = "/aai/recents/v14/pserver"; + httpEntity = new HttpEntity(headers); + UriComponentsBuilder builder = + UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint).queryParam("date-time", "200"); + + ResponseEntity responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + LOGGER.debug("Response for PUT request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); + assertNotNull("Response from /aai/recents/v14/pserver is null", responseEntity); + assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, + responseEntity.getStatusCode()); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/SearchProviderRestTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/SearchProviderRestTest.java index 6980753..c36ef6b 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/SearchProviderRestTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/SearchProviderRestTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,20 +19,21 @@ */ package org.onap.aai.rest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.att.eelf.configuration.EELFManager; -import org.junit.Test; -import org.springframework.http.*; -import org.springframework.web.util.UriComponentsBuilder; - -import java.util.Collections; - import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import com.att.eelf.configuration.EELFManager; + +import java.util.Collections; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.*; +import org.springframework.web.util.UriComponentsBuilder; + public class SearchProviderRestTest extends AbstractSpringRestTest { private static final Logger LOGGER = LoggerFactory.getLogger(SearchProviderRestTest.class); @@ -45,15 +46,18 @@ public class SearchProviderRestTest extends AbstractSpringRestTest { httpEntity = new HttpEntity(headers); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint) - .queryParam("key", "cloud-region.cloud-owner:test-aic") - .queryParam("include", "cloud-region"); + .queryParam("key", "cloud-region.cloud-owner:test-aic") + .queryParam("include", "cloud-region"); - ResponseEntity responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + ResponseEntity responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); - LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); + LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); assertNotNull("Response from /aai/latest/search is null", responseEntity); - assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); + assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, + responseEntity.getStatusCode()); } @Test @@ -64,19 +68,22 @@ public class SearchProviderRestTest extends AbstractSpringRestTest { httpEntity = new HttpEntity(headers); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint) - .queryParam("key", "cloud-region.cloud-owner:test-aic") - .queryParam("include", "cloud-region"); + .queryParam("key", "cloud-region.cloud-owner:test-aic") + .queryParam("include", "cloud-region"); - ResponseEntity responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + ResponseEntity responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); - LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); + LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); assertNotNull("Response from /aai/latest/search is null", responseEntity); - assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); + assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, + responseEntity.getStatusCode()); } @Test - public void testGenericQueryBypassTimeout(){ + public void testGenericQueryBypassTimeout() { headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); @@ -88,16 +95,18 @@ public class SearchProviderRestTest extends AbstractSpringRestTest { String endpoint = "/aai/latest/search/generic-query"; UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl + endpoint) - .queryParam("key", "cloud-region.cloud-owner:test-aic") - .queryParam("include", "cloud-region") - .queryParam("start-node-type", "cloud-region"); + .queryParam("key", "cloud-region.cloud-owner:test-aic") + .queryParam("include", "cloud-region").queryParam("start-node-type", "cloud-region"); - ResponseEntity responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); + ResponseEntity responseEntity = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, String.class); - LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), responseEntity.getBody()); + LOGGER.debug("Response for GET request with uri {} : {}", builder.toUriString(), + responseEntity.getBody()); assertNotNull("Response from /aai/latest/search is null", responseEntity); - assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, responseEntity.getStatusCode()); + assertEquals("Expected the response to be 400", HttpStatus.BAD_REQUEST, + responseEntity.getStatusCode()); assertThat(responseEntity.getBody().toString(), containsString("4009")); } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslContextTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslContextTest.java index e85e250..9c89964 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslContextTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslContextTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,17 +18,17 @@ * ============LICENSE_END========================================================= */ -package org.onap.aai.rest.dsl; +package org.onap.aai.rest.dsl; -import org.antlr.v4.runtime.ParserRuleContext; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; +import static org.junit.Assert.*; import java.util.Deque; import java.util.List; -import static org.junit.Assert.*; +import org.antlr.v4.runtime.ParserRuleContext; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; public class DslContextTest { DslContext dslContext; @@ -36,7 +36,7 @@ public class DslContextTest { @Before public void setUp() { - dslContext= new DslContext(); + dslContext = new DslContext(); dslContext.setCtx(null); } @@ -135,15 +135,13 @@ public class DslContextTest { } @Test - public void testSetValidationFlag() - { + public void testSetValidationFlag() { dslContext.setValidationFlag(true); Assert.assertTrue(dslContext.isValidationFlag()); } @Test - public void testUnionStartNodes() - { + public void testUnionStartNodes() { dslContext.setUnionStartNodes(null); assertNull(dslContext.getUnionStartNodes()); } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryBuilderTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryBuilderTest.java index fe75d80..159485f 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryBuilderTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryBuilderTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -24,35 +24,30 @@ import static org.junit.Assert.assertSame; import java.util.HashSet; -import org.onap.aai.introspection.Loader; import org.junit.Before; import org.junit.Test; import org.onap.aai.edges.EdgeIngestor; - - +import org.onap.aai.introspection.Loader; public class DslQueryBuilderTest { DslQueryBuilder dslQueryBuilder; - + @Before - public void setUp() - { - EdgeIngestor edgeIngestor= new EdgeIngestor(new HashSet<>()); - dslQueryBuilder= new DslQueryBuilder(edgeIngestor, null); + public void setUp() { + EdgeIngestor edgeIngestor = new EdgeIngestor(new HashSet<>()); + dslQueryBuilder = new DslQueryBuilder(edgeIngestor, null); } - + @Test - public void testQuery() - { - StringBuilder query= new StringBuilder(); + public void testQuery() { + StringBuilder query = new StringBuilder(); dslQueryBuilder.setQuery(query); assertSame(query, dslQueryBuilder.getQuery()); } - + @Test - public void testQueryException() - { - StringBuilder queryException= new StringBuilder(); + public void testQueryException() { + StringBuilder queryException = new StringBuilder(); dslQueryBuilder.setQueryException(queryException); assertSame(queryException, dslQueryBuilder.getQueryException()); } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryProcessorV1Test.java b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryProcessorV1Test.java index aa3e297..8d90b5e 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryProcessorV1Test.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryProcessorV1Test.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,582 +19,682 @@ */ package org.onap.aai.rest.dsl; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; + +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; -import org.junit.Ignore; import org.junit.rules.ExpectedException; import org.onap.aai.AAISetup; import org.onap.aai.exceptions.AAIException; import org.onap.aai.rest.enums.QueryVersion; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - /** * The Class DslMain. */ public class DslQueryProcessorV1Test extends AAISetup { - @Rule - public ExpectedException expectedEx = ExpectedException.none(); - - @Test - public void dbAliasTest() throws AAIException { - String aaiQuery = "logical-link* ('model-invariant-id','invid')"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'logical-link').getVerticesByProperty('model-invariant-id-local','invid')" - + ".store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void apostropheTest() throws AAIException { - String aaiQuery = "logical-link*('link-id','dsl\\'link')"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'logical-link').getVerticesByProperty('link-id','dsl\\'link')" - + ".store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void parseCancellationExceptionTest() throws AAIException { - boolean thrown = false; - String aaiQuery = "logical-link*('link-id','dsl\\'link)"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'logical-link').getVerticesByProperty('link-id','dsl\\'link')" - + ".store('x').cap('x').unfold().dedup()"; - - try { - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); - } catch (AAIException e) { - thrown = true; - } - assertTrue(thrown); - } - - @Test - public void cloudRegionFromVnf() throws AAIException { - String aaiQuery = "generic-vnf*('vnf-name','xyz') > [ vnfc* > vserver* > [pserver*, tenant* > cloud-region*], "+ - "vserver* > [pserver*, tenant* > cloud-region*] ]"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-name','xyz').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')." - +"createEdgeTraversal(EdgeType.COUSIN, 'vnfc','vserver').store('x').union(builder.newInstance().createEdgeTraversal" - +"(EdgeType.COUSIN, 'vserver','pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant')" - +".store('x').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region').store('x')),builder.newInstance().createEdgeTraversal" - +"(EdgeType.COUSIN, 'generic-vnf','vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver'" - +",'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').store('x').createEdgeTraversal" - +"(EdgeType.TREE, 'tenant','cloud-region').store('x'))).cap('x').unfold().dedup()"; - - - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void cloudRegionSites() throws AAIException { - String aaiQuery = "cloud-region*('cloud-owner','xyz') > complex*"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner'" - +",'xyz').store('x').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','complex').store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void pserverWithNoComplexTest() throws AAIException { - String aaiQuery = "pserver*('hostname','xyz')!(> complex)"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','xyz').where(builder.newInstance().not(" - +"builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void pserverWhereNotTest() throws AAIException { - String aaiQuery = "pserver('hostname','xyz')>vserver*!(> vnfc > configuration))"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','xyz').createEdgeTraversal" + - "(EdgeType.COUSIN, 'pserver','vserver').where(builder.newInstance().not(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN,"+ - " 'vserver','vnfc').createEdgeTraversal(EdgeType.COUSIN, 'vnfc','configuration'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void singleNode1() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coid')"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" - + ".store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void singleNodeLimit() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT 10"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" - + ".store('x').cap('x').unfold().dedup().limit(10)"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void specialCharacterTest() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coidhello:?_-)(!@#$%^&*+={}[]|/.<,') LIMIT 10"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coidhello:?_-)(!@#$%^&*+={}[]|/.<,')" - + ".store('x').cap('x').unfold().dedup().limit(10)"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void singleNodeLimitBlah() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT blah"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" - + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; - - expectedEx.expect(org.onap.aai.exceptions.AAIException.class); - expectedEx.expectMessage("DSL Syntax Error while processing the query"); - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - } - - @Test - public void singleNodeLimitNull() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT "; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" - + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; - - expectedEx.expect(org.onap.aai.exceptions.AAIException.class); - expectedEx.expectMessage("DSL Syntax Error while processing the query"); - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - } - - @Test - public void cloudRegion1Test() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coid')('cloud-region-id','cr id') LIMIT 10"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" - + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void cloudRegion_entitlementTest() throws AAIException { - - /* - A store within a where makes no sense - */ - String aaiQuery = "generic-vnf('vnf-id','vnfId') ( > vserver > tenant > cloud-region('cloud-region-id','One')) > entitlement*"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" - + ".getVerticesByProperty('cloud-region-id','One'))" - + ".createEdgeTraversal(EdgeType.TREE, 'generic-vnf','entitlement').store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void cloudRegion_entitlementTestWithLabels() throws AAIException { - - String aaiQuery = "generic-vnf('vnf-id','vnfId') (> ('tosca.relationships.HostedOn') vserver > ('org.onap.relationships.inventory.BelongsTo') tenant > ('org.onap.relationships.inventory.BelongsTo') cloud-region('cloud-region-id','One')) > ('org.onap.relationships.inventory.ComposedOf')service-instance*"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(" - + "builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','vserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).createEdgeTraversalWithLabels( 'vserver','tenant', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).createEdgeTraversalWithLabels( 'tenant','cloud-region', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo')))" - + ".getVerticesByProperty('cloud-region-id','One'))" - + ".createEdgeTraversalWithLabels( 'generic-vnf','service-instance', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.ComposedOf'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void complex_az_fromComplexTest() throws AAIException { - - String aaiQuery = "cloud-region('cloud-owner','coid')('cloud-region-id','crid') > [ availability-zone* , complex*]"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')" - + ".getVerticesByProperty('cloud-owner','coid').getVerticesByProperty('cloud-region-id','crid')" - + ".union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'cloud-region','availability-zone').store('x')" - + ",builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','complex').store('x')).cap('x').unfold().dedup()"; - - assertEquals(dslQuery, query); - } - - @Test - public void complex_az_fromComplexTestWithLabels() throws AAIException { - - String aaiQuery = "cloud-region('cloud-owner','coid')('cloud-region-id','crid') > [ ('org.onap.relationships.inventory.BelongsTo')availability-zone* , ('org.onap.relationships.inventory.LocatedIn')complex*]"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')" - + ".getVerticesByProperty('cloud-owner','coid').getVerticesByProperty('cloud-region-id','crid')" - + ".union(builder.newInstance().createEdgeTraversalWithLabels( 'cloud-region','availability-zone', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).store('x')" - + ",builder.newInstance().createEdgeTraversalWithLabels( 'cloud-region','complex', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.LocatedIn'))).store('x')).cap('x').unfold().dedup()"; - - assertEquals(dslQuery, query); - } - - @Test - public void cloudRegion_fromComplex1Test() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'complex').getVerticesByProperty('data-center-code','data-center-code-name')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x').cap('x').unfold().dedup()"; - String aaiQuery = "complex('data-center-code','data-center-code-name') > cloud-region*"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void cloudRegion_fromComplex2Test() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'complex').getVerticesByProperty('data-center-code','data-center-code-name')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').getVerticesByProperty('cloud-region-version','crv')" - + ".store('x').cap('x').unfold().dedup()"; - String aaiQuery = "complex('data-center-code','data-center-code-name') > cloud-region*('cloud-region-version','crv')"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void cloudRegion_fromNfTypeTest() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'image').getVerticesByProperty('application-vendor','F5')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'image','vserver')" - + ".where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver','generic-vnf').getVerticesByProperty('vnf-name','ZALL1MMSC03'))" - + ".createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" - + ".store('x').cap('x').unfold().dedup()"; - - String aaiQuery = "image('application-vendor','F5') > vserver (> generic-vnf('vnf-name','ZALL1MMSC03')) > tenant > cloud-region*"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(builderQuery, query); - } - - @Test - public void cloudRegion_fromNfTypeVendorVersionTest() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'image').getVerticesByProperty('application-vendor','vendor')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'image','vserver').where(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver','generic-vnf').getVerticesByProperty('nf-type','nfType')" - + ").createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" - + ".store('x').cap('x').unfold().dedup()"; - - String aaiQuery = "image('application-vendor','vendor') > vserver(> generic-vnf('nf-type', 'nfType') ) > tenant > cloud-region*"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void cloud_region_fromVnfTest() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vnfc','vserver').store('x')" - + ".createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').store('x')" - + ".createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region').store('x')" - + ".cap('x').unfold().dedup()"; - - String aaiQuery = "generic-vnf('vnf-id','vnfId') > vnfc* > vserver* > tenant* > cloud-region*"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void cloud_region_sitesTest() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')." - + "getVerticesByProperty('cloud-owner','co').store('x').createEdgeTraversal(EdgeType.COUSIN, " - + "'cloud-region','complex').store('x').cap('x').unfold().dedup()"; - - String aaiQuery = "cloud-region*('cloud-owner','co') > complex*"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void complex_fromVnf2Test() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" - + ").cap('x').unfold().dedup()"; - - String aaiQuery = "generic-vnf*('vnf-id','vnfId') > [ pserver* > complex*, " - + " vserver > pserver* > complex* " + "]"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void complex_fromVnfTest2() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x'))" - + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" - + ".cap('x').unfold().dedup()"; - - String aaiQuery = "generic-vnf*('vnf-id','vnfId') > [ pserver* , " - + " vserver > pserver* ] > complex*"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void fn_topology1Test() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'customer')" - + ".getVerticesByProperty('global-customer-id','a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb')" - + ".createEdgeTraversal(EdgeType.TREE, 'customer','service-subscription').getVerticesByProperty('service-subscription-id','Nimbus')" - + ".createEdgeTraversal(EdgeType.TREE, 'service-subscription','service-instance').getVerticesByProperty('service-instance-id','sid')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'service-instance','generic-vnf').store('x')" - + ".union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pnf').store('x')).cap('x').unfold().dedup()"; - - String aaiQuery = "customer('global-customer-id', 'a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb') > service-subscription('service-subscription-id', 'Nimbus') " - + " > service-instance('service-instance-id','sid') > generic-vnf* " - + " > [ vnfc* , vserver*, pserver* , pnf* ]"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void vnf_Dsl() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver')" - + ".getVerticesByProperty('hostname','hostname1'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'))).store('x').cap('x').unfold().dedup()"; - - String aaiQuery = "generic-vnf*('vnf-id','vnfId') (> [ pserver('hostname','hostname1'), " - + " vserver > pserver('hostname','hostname1')])"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void hasPropertyTest() throws AAIException { - String aaiQuery = "cloud-region* ('cloud-owner')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner').store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void hasPropertyValuesTest() throws AAIException { - String aaiQuery = "cloud-region* ('cloud-owner','cloud-owner1','cloud-owner2')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner', new ArrayList<>(Arrays.asList('cloud-owner1','cloud-owner2'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void hasNotPropertyValuesTest() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','cloud-owner1','cloud-owner2')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner', new ArrayList<>(Arrays.asList('cloud-owner1','cloud-owner2'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void hasNotPropertyNullValuesTest() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner',' ',' null ')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner', new ArrayList<>(Arrays.asList(' ',' null '))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Ignore - @Test - public void hasPropertyIntegerTest() throws AAIException { - String aaiQuery = "cloud-region('cloud-owner', 'att-nc')('cloud-region-id', 'MTN61a') > vlan-range > vlan-tag*('vlan-id-inner', 20)"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','att-nc').getVerticesByProperty('cloud-region-id','MTN61a')" - + ".createEdgeTraversal(EdgeType.TREE, 'cloud-region','vlan-range').createEdgeTraversal(EdgeType.TREE, 'vlan-range','vlan-tag').getVerticesByProperty('vlan-id-inner',20).store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void noEdgeRuleTest() throws AAIException { - String aaiQuery = "vserver('vserver-id','abc') > logical-link* > l-interface*"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'vserver').getVerticesByProperty('vserver-id','abc').createEdgeTraversal(EdgeType.TREE, 'vserver','logical-link').store('x').createEdgeTraversal('logical-link','l-interface').store('x')cap('x').unfold().dedup()"; - expectedEx.expect(org.onap.aai.exceptions.AAIException.class); - expectedEx.expectMessage("No EdgeRule found for passed nodeTypes: vserver, logical-link"); - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void multipleEdgeRuleTest() throws AAIException { - String aaiQuery = "vserver('vserver-id','abc') > l-interface* > lag-interface*"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'vserver').getVerticesByProperty('vserver-id','abc').createEdgeTraversal(EdgeType.TREE, 'vserver','l-interface').store('x').createEdgeTraversal( 'l-interface','lag-interface').store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void multipleEdgeRuleTestWithLabels() throws AAIException { - String aaiQuery = "vserver('vserver-id','abc') > l-interface* > ('org.onap.relationships.inventory.BelongsTo') lag-interface*"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'vserver').getVerticesByProperty('vserver-id','abc').createEdgeTraversal(EdgeType.TREE, 'vserver','l-interface').store('x').createEdgeTraversalWithLabels( 'l-interface','lag-interface', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void hasNotPropertyTest() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner').store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void overlyNestedQueryTest() throws AAIException { - String aaiQuery = "generic-vnf*('vnf-id','vnfId') (> [ pserver('hostname','hostname1'), vserver (> [ pserver('hostname','hostname1'), pserver('hostname','hostname1')])]) > vserver"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union" + - "(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').getVerticesByProperty('hostname','hostname1')," + - "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').where(builder.newInstance().union(builder.newInstance()" + - ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'),builder.newInstance()." + - "createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'))))).store('x').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void overlyNestedQueryTestWithLabels() throws AAIException { - String aaiQuery = "generic-vnf*('vnf-id','vnfId') (> [ ('tosca.relationships.HostedOn')pserver('hostname','hostname1'), ('tosca.relationships.HostedOn')vserver (> [ ('tosca.relationships.HostedOn')pserver('hostname','hostname1'), ('tosca.relationships.HostedOn')pserver('hostname','hostname1')])]) > ('org.onap.relationships.inventory.PartOf')allotted-resource"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union" + - "(builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1')," + - "builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','vserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).where(builder.newInstance().union(builder.newInstance()" + - ".createEdgeTraversalWithLabels( 'vserver','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1'),builder.newInstance()." + - "createEdgeTraversalWithLabels( 'vserver','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1'))))).store('x').createEdgeTraversalWithLabels( 'generic-vnf','allotted-resource', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.PartOf'))).cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void getPserverWithAnEdgeToComplexAndCloudRegion() throws AAIException { - String aaiQuery = "pserver*('prov-status')(> complex)(> cloud-region)"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('prov-status').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex')).where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','cloud-region')).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void getPserverWithAnEdgeToComplexButNotToCloudRegion() throws AAIException { - String aaiQuery = "pserver*('prov-status')(> complex)!(> cloud-region)"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('prov-status').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex')).where(builder.newInstance().not(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','cloud-region'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void nestedUnionQueryTest() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x'))" - + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" - + ".union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex','availability-zone')" - + ".createEdgeTraversal(EdgeType.TREE, 'availability-zone','cloud-region').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'complex','ctag-pool').store('x').union(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','availability-zone').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'availability-zone','complex').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','generic-vnf').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','availability-zone').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'availability-zone','complex').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','vpls-pe').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vpls-pe','complex').store('x'))" - + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x'))" - + ".createEdgeTraversal(EdgeType.TREE, 'cloud-region','tenant').store('x')" - + ".cap('x').unfold().dedup()"; - - String aaiQuery = "generic-vnf*('vnf-id','vnfId') > [ pserver* , " - + " vserver > pserver* ] > complex* > [ availability-zone > cloud-region*, cloud-region*, " + - " ctag-pool* > [ availability-zone* > complex* , generic-vnf* > availability-zone* > complex*, vpls-pe* > complex*] > cloud-region*] > tenant* " ; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void booleanPropertyValuesTest() throws AAIException { - String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint',true)"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByBooleanProperty('in-maint',true).store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void upperCaseBooleanPropertyValuesTest() throws AAIException { - String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint',TRUE)"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByBooleanProperty('in-maint',true).store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void booleanPropertyTest() throws AAIException { - String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByProperty('in-maint').store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test(expected = AAIException.class) - public void filterOnUnion_vserverFromTentantFromCloudRegion_BadRequest() throws AAIException { - String aaiQuery = "cloud-region('cloud-owner', 'test-aic')>[tenant*('tenant-id', 'tenant1'), tenant*('tenant-id', 'tenant2')]('tenant-name', 'tenant1')>[vserver*]"; - dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - } + @Rule + public ExpectedException expectedEx = ExpectedException.none(); + + @Test + public void dbAliasTest() throws AAIException { + String aaiQuery = "logical-link* ('model-invariant-id','invid')"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'logical-link').getVerticesByProperty('model-invariant-id-local','invid')" + + ".store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void apostropheTest() throws AAIException { + String aaiQuery = "logical-link*('link-id','dsl\\'link')"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'logical-link').getVerticesByProperty('link-id','dsl\\'link')" + + ".store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void parseCancellationExceptionTest() throws AAIException { + boolean thrown = false; + String aaiQuery = "logical-link*('link-id','dsl\\'link)"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'logical-link').getVerticesByProperty('link-id','dsl\\'link')" + + ".store('x').cap('x').unfold().dedup()"; + + try { + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + } catch (AAIException e) { + thrown = true; + } + assertTrue(thrown); + } + + @Test + public void cloudRegionFromVnf() throws AAIException { + String aaiQuery = + "generic-vnf*('vnf-name','xyz') > [ vnfc* > vserver* > [pserver*, tenant* > cloud-region*], " + + "vserver* > [pserver*, tenant* > cloud-region*] ]"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-name','xyz').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')." + + "createEdgeTraversal(EdgeType.COUSIN, 'vnfc','vserver').store('x').union(builder.newInstance().createEdgeTraversal" + + "(EdgeType.COUSIN, 'vserver','pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant')" + + ".store('x').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region').store('x')),builder.newInstance().createEdgeTraversal" + + "(EdgeType.COUSIN, 'generic-vnf','vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver'" + + ",'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').store('x').createEdgeTraversal" + + "(EdgeType.TREE, 'tenant','cloud-region').store('x'))).cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void cloudRegionSites() throws AAIException { + String aaiQuery = "cloud-region*('cloud-owner','xyz') > complex*"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner'" + + ",'xyz').store('x').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','complex').store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void pserverWithNoComplexTest() throws AAIException { + String aaiQuery = "pserver*('hostname','xyz')!(> complex)"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','xyz').where(builder.newInstance().not(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void pserverWhereNotTest() throws AAIException { + String aaiQuery = "pserver('hostname','xyz')>vserver*!(> vnfc > configuration))"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','xyz').createEdgeTraversal" + + "(EdgeType.COUSIN, 'pserver','vserver').where(builder.newInstance().not(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN," + + " 'vserver','vnfc').createEdgeTraversal(EdgeType.COUSIN, 'vnfc','configuration'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void singleNode1() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner','coid')"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" + + ".store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void singleNodeLimit() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT 10"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" + + ".store('x').cap('x').unfold().dedup().limit(10)"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void specialCharacterTest() throws AAIException { + String aaiQuery = + "cloud-region* !('cloud-owner','coidhello:?_-)(!@#$%^&*+={}[]|/.<,') LIMIT 10"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coidhello:?_-)(!@#$%^&*+={}[]|/.<,')" + + ".store('x').cap('x').unfold().dedup().limit(10)"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void singleNodeLimitBlah() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT blah"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" + + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; + + expectedEx.expect(org.onap.aai.exceptions.AAIException.class); + expectedEx.expectMessage("DSL Syntax Error while processing the query"); + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + } + + @Test + public void singleNodeLimitNull() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT "; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" + + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; + + expectedEx.expect(org.onap.aai.exceptions.AAIException.class); + expectedEx.expectMessage("DSL Syntax Error while processing the query"); + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + } + + @Test + public void cloudRegion1Test() throws AAIException { + String aaiQuery = + "cloud-region* !('cloud-owner','coid')('cloud-region-id','cr id') LIMIT 10"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" + + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void cloudRegion_entitlementTest() throws AAIException { + + /* + * A store within a where makes no sense + */ + String aaiQuery = + "generic-vnf('vnf-id','vnfId') ( > vserver > tenant > cloud-region('cloud-region-id','One')) > entitlement*"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" + + ".getVerticesByProperty('cloud-region-id','One'))" + + ".createEdgeTraversal(EdgeType.TREE, 'generic-vnf','entitlement').store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void cloudRegion_entitlementTestWithLabels() throws AAIException { + + String aaiQuery = + "generic-vnf('vnf-id','vnfId') (> ('tosca.relationships.HostedOn') vserver > ('org.onap.relationships.inventory.BelongsTo') tenant > ('org.onap.relationships.inventory.BelongsTo') cloud-region('cloud-region-id','One')) > ('org.onap.relationships.inventory.ComposedOf')service-instance*"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(" + + "builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','vserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).createEdgeTraversalWithLabels( 'vserver','tenant', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).createEdgeTraversalWithLabels( 'tenant','cloud-region', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo')))" + + ".getVerticesByProperty('cloud-region-id','One'))" + + ".createEdgeTraversalWithLabels( 'generic-vnf','service-instance', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.ComposedOf'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void complex_az_fromComplexTest() throws AAIException { + + String aaiQuery = + "cloud-region('cloud-owner','coid')('cloud-region-id','crid') > [ availability-zone* , complex*]"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')" + + ".getVerticesByProperty('cloud-owner','coid').getVerticesByProperty('cloud-region-id','crid')" + + ".union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'cloud-region','availability-zone').store('x')" + + ",builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','complex').store('x')).cap('x').unfold().dedup()"; + + assertEquals(dslQuery, query); + } + + @Test + public void complex_az_fromComplexTestWithLabels() throws AAIException { + + String aaiQuery = + "cloud-region('cloud-owner','coid')('cloud-region-id','crid') > [ ('org.onap.relationships.inventory.BelongsTo')availability-zone* , ('org.onap.relationships.inventory.LocatedIn')complex*]"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')" + + ".getVerticesByProperty('cloud-owner','coid').getVerticesByProperty('cloud-region-id','crid')" + + ".union(builder.newInstance().createEdgeTraversalWithLabels( 'cloud-region','availability-zone', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).store('x')" + + ",builder.newInstance().createEdgeTraversalWithLabels( 'cloud-region','complex', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.LocatedIn'))).store('x')).cap('x').unfold().dedup()"; + + assertEquals(dslQuery, query); + } + + @Test + public void cloudRegion_fromComplex1Test() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'complex').getVerticesByProperty('data-center-code','data-center-code-name')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x').cap('x').unfold().dedup()"; + String aaiQuery = "complex('data-center-code','data-center-code-name') > cloud-region*"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void cloudRegion_fromComplex2Test() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'complex').getVerticesByProperty('data-center-code','data-center-code-name')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').getVerticesByProperty('cloud-region-version','crv')" + + ".store('x').cap('x').unfold().dedup()"; + String aaiQuery = + "complex('data-center-code','data-center-code-name') > cloud-region*('cloud-region-version','crv')"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void cloudRegion_fromNfTypeTest() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'image').getVerticesByProperty('application-vendor','F5')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'image','vserver')" + + ".where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver','generic-vnf').getVerticesByProperty('vnf-name','ZALL1MMSC03'))" + + ".createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" + + ".store('x').cap('x').unfold().dedup()"; + + String aaiQuery = + "image('application-vendor','F5') > vserver (> generic-vnf('vnf-name','ZALL1MMSC03')) > tenant > cloud-region*"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(builderQuery, query); + } + + @Test + public void cloudRegion_fromNfTypeVendorVersionTest() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'image').getVerticesByProperty('application-vendor','vendor')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'image','vserver').where(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver','generic-vnf').getVerticesByProperty('nf-type','nfType')" + + ").createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" + + ".store('x').cap('x').unfold().dedup()"; + + String aaiQuery = + "image('application-vendor','vendor') > vserver(> generic-vnf('nf-type', 'nfType') ) > tenant > cloud-region*"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void cloud_region_fromVnfTest() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vnfc','vserver').store('x')" + + ".createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').store('x')" + + ".createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region').store('x')" + + ".cap('x').unfold().dedup()"; + + String aaiQuery = + "generic-vnf('vnf-id','vnfId') > vnfc* > vserver* > tenant* > cloud-region*"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void cloud_region_sitesTest() throws AAIException { + + String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')." + + "getVerticesByProperty('cloud-owner','co').store('x').createEdgeTraversal(EdgeType.COUSIN, " + + "'cloud-region','complex').store('x').cap('x').unfold().dedup()"; + + String aaiQuery = "cloud-region*('cloud-owner','co') > complex*"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void complex_fromVnf2Test() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" + + ").cap('x').unfold().dedup()"; + + String aaiQuery = "generic-vnf*('vnf-id','vnfId') > [ pserver* > complex*, " + + " vserver > pserver* > complex* " + "]"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void complex_fromVnfTest2() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x'))" + + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" + + ".cap('x').unfold().dedup()"; + + String aaiQuery = "generic-vnf*('vnf-id','vnfId') > [ pserver* , " + + " vserver > pserver* ] > complex*"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void fn_topology1Test() throws AAIException { + + String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'customer')" + + ".getVerticesByProperty('global-customer-id','a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb')" + + ".createEdgeTraversal(EdgeType.TREE, 'customer','service-subscription').getVerticesByProperty('service-subscription-id','Nimbus')" + + ".createEdgeTraversal(EdgeType.TREE, 'service-subscription','service-instance').getVerticesByProperty('service-instance-id','sid')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'service-instance','generic-vnf').store('x')" + + ".union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pnf').store('x')).cap('x').unfold().dedup()"; + + String aaiQuery = + "customer('global-customer-id', 'a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb') > service-subscription('service-subscription-id', 'Nimbus') " + + " > service-instance('service-instance-id','sid') > generic-vnf* " + + " > [ vnfc* , vserver*, pserver* , pnf* ]"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void vnf_Dsl() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver')" + + ".getVerticesByProperty('hostname','hostname1'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'))).store('x').cap('x').unfold().dedup()"; + + String aaiQuery = "generic-vnf*('vnf-id','vnfId') (> [ pserver('hostname','hostname1'), " + + " vserver > pserver('hostname','hostname1')])"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void hasPropertyTest() throws AAIException { + String aaiQuery = "cloud-region* ('cloud-owner')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner').store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void hasPropertyValuesTest() throws AAIException { + String aaiQuery = "cloud-region* ('cloud-owner','cloud-owner1','cloud-owner2')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner', new ArrayList<>(Arrays.asList('cloud-owner1','cloud-owner2'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void hasNotPropertyValuesTest() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner','cloud-owner1','cloud-owner2')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner', new ArrayList<>(Arrays.asList('cloud-owner1','cloud-owner2'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void hasNotPropertyNullValuesTest() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner',' ',' null ')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner', new ArrayList<>(Arrays.asList(' ',' null '))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Ignore + @Test + public void hasPropertyIntegerTest() throws AAIException { + String aaiQuery = + "cloud-region('cloud-owner', 'att-nc')('cloud-region-id', 'MTN61a') > vlan-range > vlan-tag*('vlan-id-inner', 20)"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','att-nc').getVerticesByProperty('cloud-region-id','MTN61a')" + + ".createEdgeTraversal(EdgeType.TREE, 'cloud-region','vlan-range').createEdgeTraversal(EdgeType.TREE, 'vlan-range','vlan-tag').getVerticesByProperty('vlan-id-inner',20).store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void noEdgeRuleTest() throws AAIException { + String aaiQuery = "vserver('vserver-id','abc') > logical-link* > l-interface*"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'vserver').getVerticesByProperty('vserver-id','abc').createEdgeTraversal(EdgeType.TREE, 'vserver','logical-link').store('x').createEdgeTraversal('logical-link','l-interface').store('x')cap('x').unfold().dedup()"; + expectedEx.expect(org.onap.aai.exceptions.AAIException.class); + expectedEx.expectMessage("No EdgeRule found for passed nodeTypes: vserver, logical-link"); + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void multipleEdgeRuleTest() throws AAIException { + String aaiQuery = "vserver('vserver-id','abc') > l-interface* > lag-interface*"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'vserver').getVerticesByProperty('vserver-id','abc').createEdgeTraversal(EdgeType.TREE, 'vserver','l-interface').store('x').createEdgeTraversal( 'l-interface','lag-interface').store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void multipleEdgeRuleTestWithLabels() throws AAIException { + String aaiQuery = + "vserver('vserver-id','abc') > l-interface* > ('org.onap.relationships.inventory.BelongsTo') lag-interface*"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'vserver').getVerticesByProperty('vserver-id','abc').createEdgeTraversal(EdgeType.TREE, 'vserver','l-interface').store('x').createEdgeTraversalWithLabels( 'l-interface','lag-interface', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void hasNotPropertyTest() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner').store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void overlyNestedQueryTest() throws AAIException { + String aaiQuery = + "generic-vnf*('vnf-id','vnfId') (> [ pserver('hostname','hostname1'), vserver (> [ pserver('hostname','hostname1'), pserver('hostname','hostname1')])]) > vserver"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union" + + "(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').getVerticesByProperty('hostname','hostname1')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').where(builder.newInstance().union(builder.newInstance()" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'),builder.newInstance()." + + "createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'))))).store('x').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void overlyNestedQueryTestWithLabels() throws AAIException { + String aaiQuery = + "generic-vnf*('vnf-id','vnfId') (> [ ('tosca.relationships.HostedOn')pserver('hostname','hostname1'), ('tosca.relationships.HostedOn')vserver (> [ ('tosca.relationships.HostedOn')pserver('hostname','hostname1'), ('tosca.relationships.HostedOn')pserver('hostname','hostname1')])]) > ('org.onap.relationships.inventory.PartOf')allotted-resource"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union" + + "(builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1')," + + "builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','vserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).where(builder.newInstance().union(builder.newInstance()" + + ".createEdgeTraversalWithLabels( 'vserver','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1'),builder.newInstance()." + + "createEdgeTraversalWithLabels( 'vserver','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1'))))).store('x').createEdgeTraversalWithLabels( 'generic-vnf','allotted-resource', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.PartOf'))).cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void getPserverWithAnEdgeToComplexAndCloudRegion() throws AAIException { + String aaiQuery = "pserver*('prov-status')(> complex)(> cloud-region)"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('prov-status').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex')).where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','cloud-region')).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void getPserverWithAnEdgeToComplexButNotToCloudRegion() throws AAIException { + String aaiQuery = "pserver*('prov-status')(> complex)!(> cloud-region)"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('prov-status').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex')).where(builder.newInstance().not(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','cloud-region'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void nestedUnionQueryTest() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x'))" + + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" + + ".union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex','availability-zone')" + + ".createEdgeTraversal(EdgeType.TREE, 'availability-zone','cloud-region').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'complex','ctag-pool').store('x').union(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','availability-zone').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'availability-zone','complex').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','generic-vnf').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','availability-zone').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'availability-zone','complex').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','vpls-pe').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vpls-pe','complex').store('x'))" + + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x'))" + + ".createEdgeTraversal(EdgeType.TREE, 'cloud-region','tenant').store('x')" + + ".cap('x').unfold().dedup()"; + + String aaiQuery = "generic-vnf*('vnf-id','vnfId') > [ pserver* , " + + " vserver > pserver* ] > complex* > [ availability-zone > cloud-region*, cloud-region*, " + + " ctag-pool* > [ availability-zone* > complex* , generic-vnf* > availability-zone* > complex*, vpls-pe* > complex*] > cloud-region*] > tenant* "; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void booleanPropertyValuesTest() throws AAIException { + String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint',true)"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByBooleanProperty('in-maint',true).store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void upperCaseBooleanPropertyValuesTest() throws AAIException { + String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint',TRUE)"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByBooleanProperty('in-maint',true).store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void booleanPropertyTest() throws AAIException { + String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByProperty('in-maint').store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test(expected = AAIException.class) + public void filterOnUnion_vserverFromTentantFromCloudRegion_BadRequest() throws AAIException { + String aaiQuery = + "cloud-region('cloud-owner', 'test-aic')>[tenant*('tenant-id', 'tenant1'), tenant*('tenant-id', 'tenant2')]('tenant-name', 'tenant1')>[vserver*]"; + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryProcessorV2Test.java b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryProcessorV2Test.java index 9ff42e0..6d3d69c 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryProcessorV2Test.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryProcessorV2Test.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.dsl; +import static org.junit.Assert.assertEquals; + import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; @@ -27,597 +29,704 @@ import org.onap.aai.AAISetup; import org.onap.aai.exceptions.AAIException; import org.onap.aai.rest.enums.QueryVersion; -import static org.junit.Assert.assertEquals; - /** * The Class DslMain. */ public class DslQueryProcessorV2Test extends AAISetup { - @Rule - public ExpectedException expectedEx = ExpectedException.none(); - - @Test - public void dbAliasTest() throws AAIException { - String aaiQuery = "logical-link* ('model-invariant-id','invid')"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'logical-link').getVerticesByProperty('model-invariant-id-local','invid')" - + ".store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - @Test - public void apostropheTest() throws AAIException { - String aaiQuery = "logical-link*('link-id','dsl\\'link')"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'logical-link').getVerticesByProperty('link-id','dsl\\'link')" - + ".store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void cloudRegionFromVnf() throws AAIException { - String aaiQuery = "generic-vnf*('vnf-name','xyz') [> vnfc* > vserver* [>pserver*, > tenant* > cloud-region*], "+ - "> vserver* [> pserver*, >tenant* > cloud-region*] ]"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-name','xyz').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')." - +"createEdgeTraversal(EdgeType.COUSIN, 'vnfc','vserver').store('x').union(builder.newInstance().createEdgeTraversal" - +"(EdgeType.COUSIN, 'vserver','pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant')" - +".store('x').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region').store('x')),builder.newInstance().createEdgeTraversal" - +"(EdgeType.COUSIN, 'generic-vnf','vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver'" - +",'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').store('x').createEdgeTraversal" - +"(EdgeType.TREE, 'tenant','cloud-region').store('x'))).cap('x').unfold().dedup()"; - - - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void cloudRegionFromVnfWithDirection() throws AAIException { - String aaiQuery = "generic-vnf*('vnf-name','xyz') [>> vnfc* >> vserver* [>>pserver*, >> tenant* >> cloud-region*], "+ - ">> vserver* [>> pserver*, >>tenant* >> cloud-region*] ]"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-name','xyz').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')." - +"createEdgeTraversal(EdgeType.COUSIN, 'vnfc','vserver').store('x').union(builder.newInstance().createEdgeTraversal" - +"(EdgeType.COUSIN, 'vserver','pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant')" - +".store('x').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region').store('x')),builder.newInstance().createEdgeTraversal" - +"(EdgeType.COUSIN, 'generic-vnf','vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver'" - +",'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').store('x').createEdgeTraversal" - +"(EdgeType.TREE, 'tenant','cloud-region').store('x'))).cap('x').unfold().dedup()"; - - - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - @Test - public void cloudRegionSites() throws AAIException { - String aaiQuery = "cloud-region*('cloud-owner','xyz') > complex*"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner'" - +",'xyz').store('x').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','complex').store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void pserverWithNoComplexTest() throws AAIException { - String aaiQuery = "pserver*('hostname','xyz')!(> complex)"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','xyz').where(builder.newInstance().not(" - +"builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void pserverWhereNotTest() throws AAIException { - String aaiQuery = "pserver('hostname','xyz')>vserver*!(> vnfc > configuration))"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','xyz').createEdgeTraversal" + - "(EdgeType.COUSIN, 'pserver','vserver').where(builder.newInstance().not(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN,"+ - " 'vserver','vnfc').createEdgeTraversal(EdgeType.COUSIN, 'vnfc','configuration'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void singleNode1() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coid')"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" - + ".store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void singleNodeLimit() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT 10"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" - + ".store('x').cap('x').unfold().dedup().limit(10)"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void specialCharacterTest() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coidhello:?_-)(!@#$%^&*+={}[]|/.<,') LIMIT 10"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coidhello:?_-)(!@#$%^&*+={}[]|/.<,')" - + ".store('x').cap('x').unfold().dedup().limit(10)"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void singleNodeLimitBlah() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT blah"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" - + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; - - expectedEx.expect(AAIException.class); - expectedEx.expectMessage("DSL Syntax Error while processing the query"); - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - } - - @Test - public void singleNodeLimitNull() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT "; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" - + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; - - expectedEx.expect(AAIException.class); - expectedEx.expectMessage("DSL Syntax Error while processing the query"); - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - } - - @Test - public void cloudRegion1Test() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','coid')('cloud-region-id','cr id') LIMIT 10"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" - + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void cloudRegion_entitlementTest() throws AAIException { - - /* - A store within a where makes no sense - */ - String aaiQuery = "generic-vnf('vnf-id','vnfId') ( > vserver > tenant > cloud-region('cloud-region-id','One')) > entitlement*"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" - + ".getVerticesByProperty('cloud-region-id','One'))" - + ".createEdgeTraversal(EdgeType.TREE, 'generic-vnf','entitlement').store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void cloudRegion_entitlementTestWithLabels() throws AAIException { - - String aaiQuery = "generic-vnf('vnf-id','vnfId') (> ('tosca.relationships.HostedOn') vserver > ('org.onap.relationships.inventory.BelongsTo') tenant > ('org.onap.relationships.inventory.BelongsTo') cloud-region('cloud-region-id','One')) > ('org.onap.relationships.inventory.ComposedOf')service-instance*"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(" - + "builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','vserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).createEdgeTraversalWithLabels( 'vserver','tenant', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).createEdgeTraversalWithLabels( 'tenant','cloud-region', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo')))" - + ".getVerticesByProperty('cloud-region-id','One'))" - + ".createEdgeTraversalWithLabels( 'generic-vnf','service-instance', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.ComposedOf'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void complex_az_fromComplexTest() throws AAIException { - - String aaiQuery = "cloud-region('cloud-owner','coid')('cloud-region-id','crid') [> availability-zone* ,> complex*]"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')" - + ".getVerticesByProperty('cloud-owner','coid').getVerticesByProperty('cloud-region-id','crid')" - + ".union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'cloud-region','availability-zone').store('x')" - + ",builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','complex').store('x')).cap('x').unfold().dedup()"; - - assertEquals(dslQuery, query); - } - - @Test - public void complex_az_fromComplexTestWithLabels() throws AAIException { - - String aaiQuery = "cloud-region('cloud-owner','coid')('cloud-region-id','crid') [> ('org.onap.relationships.inventory.BelongsTo')availability-zone* ,> ('org.onap.relationships.inventory.LocatedIn')complex*]"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')" - + ".getVerticesByProperty('cloud-owner','coid').getVerticesByProperty('cloud-region-id','crid')" - + ".union(builder.newInstance().createEdgeTraversalWithLabels( 'cloud-region','availability-zone', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).store('x')" - + ",builder.newInstance().createEdgeTraversalWithLabels( 'cloud-region','complex', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.LocatedIn'))).store('x')).cap('x').unfold().dedup()"; - - assertEquals(dslQuery, query); - } - - @Test - public void cloudRegion_fromComplex1Test() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'complex').getVerticesByProperty('data-center-code','data-center-code-name')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x').cap('x').unfold().dedup()"; - String aaiQuery = "complex('data-center-code','data-center-code-name') > cloud-region*"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void cloudRegion_fromComplex2Test() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'complex').getVerticesByProperty('data-center-code','data-center-code-name')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').getVerticesByProperty('cloud-region-version','crv')" - + ".store('x').cap('x').unfold().dedup()"; - String aaiQuery = "complex('data-center-code','data-center-code-name') > cloud-region*('cloud-region-version','crv')"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void cloudRegion_fromNfTypeTest() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'image').getVerticesByProperty('application-vendor','F5')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'image','vserver')" - + ".where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver','generic-vnf').getVerticesByProperty('vnf-name','ZALL1MMSC03'))" - + ".createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" - + ".store('x').cap('x').unfold().dedup()"; - - String aaiQuery = "image('application-vendor','F5') > vserver (> generic-vnf('vnf-name','ZALL1MMSC03')) > tenant > cloud-region*"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(builderQuery, query); - } - - @Test - public void cloudRegion_fromNfTypeVendorVersionTest() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'image').getVerticesByProperty('application-vendor','vendor')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'image','vserver').where(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver','generic-vnf').getVerticesByProperty('nf-type','nfType')" - + ").createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" - + ".store('x').cap('x').unfold().dedup()"; - - String aaiQuery = "image('application-vendor','vendor') > vserver(> generic-vnf('nf-type', 'nfType') ) > tenant > cloud-region*"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void cloud_region_fromVnfTest() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vnfc','vserver').store('x')" - + ".createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').store('x')" - + ".createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region').store('x')" - + ".cap('x').unfold().dedup()"; - - String aaiQuery = "generic-vnf('vnf-id','vnfId') > vnfc* > vserver* > tenant* > cloud-region*"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void cloud_region_sitesTest() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')." - + "getVerticesByProperty('cloud-owner','co').store('x').createEdgeTraversal(EdgeType.COUSIN, " - + "'cloud-region','complex').store('x').cap('x').unfold().dedup()"; - - String aaiQuery = "cloud-region*('cloud-owner','co') > complex*"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void complex_fromVnf2Test() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" - + ").cap('x').unfold().dedup()"; - - String aaiQuery = "generic-vnf*('vnf-id','vnfId') [ > pserver* > complex*, " - + " >vserver > pserver* > complex* " + "]"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void complex_fromVnfTest2() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x'))" - + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" - + ".cap('x').unfold().dedup()"; - - String aaiQuery = "generic-vnf*('vnf-id','vnfId') [> pserver* , " - + " > vserver > pserver* ] > complex*"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void fn_topology1Test() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'customer')" - + ".getVerticesByProperty('global-customer-id','a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb')" - + ".createEdgeTraversal(EdgeType.TREE, 'customer','service-subscription').getVerticesByProperty('service-subscription-id','Nimbus')" - + ".createEdgeTraversal(EdgeType.TREE, 'service-subscription','service-instance').getVerticesByProperty('service-instance-id','sid')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'service-instance','generic-vnf').store('x')" - + ".union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pnf').store('x')).cap('x').unfold().dedup()"; - - String aaiQuery = "customer('global-customer-id', 'a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb') > service-subscription('service-subscription-id', 'Nimbus') " - + " > service-instance('service-instance-id','sid') > generic-vnf* " - + " [> vnfc* ,> vserver*,> pserver* ,> pnf* ]"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void vnf_Dsl() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver')" - + ".getVerticesByProperty('hostname','hostname1'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'))).store('x').cap('x').unfold().dedup()"; - - String aaiQuery = "generic-vnf*('vnf-id','vnfId') ( [> pserver('hostname','hostname1'), " - + " > vserver > pserver('hostname','hostname1')])"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void hasPropertyTest() throws AAIException { - String aaiQuery = "cloud-region* ('cloud-owner')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner').store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void hasPropertyValuesTest() throws AAIException { - String aaiQuery = "cloud-region* ('cloud-owner','cloud-owner1','cloud-owner2')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner', new ArrayList<>(Arrays.asList('cloud-owner1','cloud-owner2'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void hasNotPropertyValuesTest() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner','cloud-owner1','cloud-owner2')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner', new ArrayList<>(Arrays.asList('cloud-owner1','cloud-owner2'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void hasNotPropertyNullValuesTest() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner',' ',' null ')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner', new ArrayList<>(Arrays.asList(' ',' null '))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Ignore - @Test - public void hasPropertyIntegerTest() throws AAIException { - String aaiQuery = "cloud-region('cloud-owner', 'att-nc')('cloud-region-id', 'MTN61a') > vlan-range > vlan-tag*('vlan-id-inner', 20)"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','att-nc').getVerticesByProperty('cloud-region-id','MTN61a')" - + ".createEdgeTraversal(EdgeType.TREE, 'cloud-region','vlan-range').createEdgeTraversal(EdgeType.TREE, 'vlan-range','vlan-tag').getVerticesByProperty('vlan-id-inner',20).store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void directionalityTest() throws AAIException { - String aaiQuery = "cloud-region('cloud-region-id','abc') >> complex* >> l3-network*"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-region-id','abc').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','complex').store('x').createEdgeTraversal(EdgeType.COUSIN, 'complex','l3-network').store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void enterSelectFilterTest() throws AAIException { - String aaiQuery = "cloud-region*('cloud-region-id','whp3a'){'cloud-region-id'}"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-region-id','whp3a').store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); - assertEquals(query, dslQuery); - } - - - @Ignore - @Test - public void returnSpecificPropsAndAllForDifferentVertices() throws AAIException { - String aaiQuery = "cloud-region{'cloud-owner'}('cloud-region-id','new-r111egion-111111') > [ l3-network*, vlan-range > vlan-tag*]"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-region-id','new-r111egion-111111').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','l3-network').store('x'),builder.newInstance()" - + ".createEdgeTraversal(EdgeType.TREE, 'cloud-region','vlan-range').createEdgeTraversal(EdgeType.TREE, 'vlan-range','vlan-tag').store('x')).cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); - assertEquals(query, dslQuery); - } - - @Test - public void groupingAttributesTestForAggregate() throws AAIException { - String aaiQuery = "cloud-region{'cloud-owner'}('cloud-owner','att-nc')('cloud-region-id','wah2a') > vip-ipv6-address-list > [subnet{'subnet-name'}, instance-group{'id'}]"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','att-nc').getVerticesByProperty('cloud-region-id','wah2a').store('x').createEdgeTraversal(EdgeType.TREE, 'cloud-region','vip-ipv6-address-list').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vip-ipv6-address-list','subnet').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vip-ipv6-address-list','instance-group').store('x')).cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); - assertEquals(query, dslQuery); - } - - @Test - public void multipleEdgeRuleTest() throws AAIException { - String aaiQuery = "vserver('vserver-id','abc') > l-interface* > lag-interface*"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'vserver').getVerticesByProperty('vserver-id','abc').createEdgeTraversal(EdgeType.TREE, 'vserver','l-interface').store('x').createEdgeTraversal( 'l-interface','lag-interface').store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void multipleEdgeRuleTestWithLabels() throws AAIException { - String aaiQuery = "vserver('vserver-id','abc') > l-interface* > ('org.onap.relationships.inventory.BelongsTo') lag-interface*"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'vserver').getVerticesByProperty('vserver-id','abc').createEdgeTraversal(EdgeType.TREE, 'vserver','l-interface').store('x').createEdgeTraversalWithLabels( 'l-interface','lag-interface', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void hasNotPropertyTest() throws AAIException { - String aaiQuery = "cloud-region* !('cloud-owner')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner').store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void overlyNestedQueryTest() throws AAIException { - //String aaiQuery = "generic-vnf*('vnf-id','vnfId') (> [ pserver('hostname','hostname1'), vserver (> [ pserver('hostname','hostname1'), pserver('hostname','hostname1')])]) > vserver"; - String aaiQuery = "generic-vnf*('vnf-id','vnfId') ( [> pserver('hostname','hostname1'), > vserver ( [> pserver('hostname','hostname1'), > pserver('hostname','hostname1')])]) > vserver"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union" + - "(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').getVerticesByProperty('hostname','hostname1')," + - "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').where(builder.newInstance().union(builder.newInstance()" + - ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'),builder.newInstance()." + - "createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'))))).store('x').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void overlyNestedQueryTestWithLabels() throws AAIException { - String aaiQuery = "generic-vnf*('vnf-id','vnfId') ( [> ('tosca.relationships.HostedOn')pserver('hostname','hostname1'),> ('tosca.relationships.HostedOn')vserver ( [> ('tosca.relationships.HostedOn')pserver('hostname','hostname1'),> ('tosca.relationships.HostedOn')pserver('hostname','hostname1')])]) > ('org.onap.relationships.inventory.PartOf')allotted-resource"; - - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union" + - "(builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1')," + - "builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','vserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).where(builder.newInstance().union(builder.newInstance()" + - ".createEdgeTraversalWithLabels( 'vserver','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1'),builder.newInstance()." + - "createEdgeTraversalWithLabels( 'vserver','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1'))))).store('x').createEdgeTraversalWithLabels( 'generic-vnf','allotted-resource', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.PartOf'))).cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void getPserverWithAnEdgeToComplexAndCloudRegion() throws AAIException { - String aaiQuery = "pserver*('prov-status')(> complex)(> cloud-region)"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('prov-status').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex')).where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','cloud-region')).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void getPserverWithAnEdgeToComplexButNotToCloudRegion() throws AAIException { - String aaiQuery = "pserver*('prov-status')(> complex)!(> cloud-region)"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('prov-status').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex')).where(builder.newInstance().not(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','cloud-region'))).store('x').cap('x').unfold().dedup()"; - - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void nestedUnionQueryTest() throws AAIException { - - String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x'))" - + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" - + ".union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex','availability-zone')" - + ".createEdgeTraversal(EdgeType.TREE, 'availability-zone','cloud-region').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'complex','ctag-pool').store('x').union(" - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','availability-zone').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'availability-zone','complex').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','generic-vnf').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','availability-zone').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'availability-zone','complex').store('x')," - + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','vpls-pe').store('x')" - + ".createEdgeTraversal(EdgeType.COUSIN, 'vpls-pe','complex').store('x'))" - + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x'))" - + ".createEdgeTraversal(EdgeType.TREE, 'cloud-region','tenant').store('x')" - + ".cap('x').unfold().dedup()"; - - String aaiQuery = "generic-vnf*('vnf-id','vnfId') [> pserver* , " - + " > vserver > pserver* ] > complex* [> availability-zone > cloud-region*,> cloud-region*, " + - " > ctag-pool* [ > availability-zone* > complex* , > generic-vnf* > availability-zone* > complex*,> vpls-pe* > complex*] > cloud-region*] > tenant* " ; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - - assertEquals(builderQuery, query); - } - - @Test - public void booleanPropertyValuesTest() throws AAIException { - String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint',true)"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByBooleanProperty('in-maint',true).store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void upperCaseBooleanPropertyValuesTest() throws AAIException { - String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint',TRUE)"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByBooleanProperty('in-maint',true).store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test - public void booleanPropertyTest() throws AAIException { - String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByProperty('in-maint').store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - assertEquals(dslQuery, query); - } - - @Test(expected = AAIException.class) - public void filterOnUnion_vserverFromTentantFromCloudRegion_BadRequest() throws AAIException { - String aaiQuery = "cloud-region('cloud-owner', 'test-aic')>[tenant*('tenant-id', 'tenant1'), tenant*('tenant-id', 'tenant2')]('tenant-name', 'tenant1')>[vserver*]"; - dslQueryProcessor.parseAaiQuery(QueryVersion.V2,aaiQuery).get("query").toString(); - } + @Rule + public ExpectedException expectedEx = ExpectedException.none(); + + @Test + public void dbAliasTest() throws AAIException { + String aaiQuery = "logical-link* ('model-invariant-id','invid')"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'logical-link').getVerticesByProperty('model-invariant-id-local','invid')" + + ".store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void apostropheTest() throws AAIException { + String aaiQuery = "logical-link*('link-id','dsl\\'link')"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'logical-link').getVerticesByProperty('link-id','dsl\\'link')" + + ".store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void cloudRegionFromVnf() throws AAIException { + String aaiQuery = + "generic-vnf*('vnf-name','xyz') [> vnfc* > vserver* [>pserver*, > tenant* > cloud-region*], " + + "> vserver* [> pserver*, >tenant* > cloud-region*] ]"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-name','xyz').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')." + + "createEdgeTraversal(EdgeType.COUSIN, 'vnfc','vserver').store('x').union(builder.newInstance().createEdgeTraversal" + + "(EdgeType.COUSIN, 'vserver','pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant')" + + ".store('x').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region').store('x')),builder.newInstance().createEdgeTraversal" + + "(EdgeType.COUSIN, 'generic-vnf','vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver'" + + ",'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').store('x').createEdgeTraversal" + + "(EdgeType.TREE, 'tenant','cloud-region').store('x'))).cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void cloudRegionFromVnfWithDirection() throws AAIException { + String aaiQuery = + "generic-vnf*('vnf-name','xyz') [>> vnfc* >> vserver* [>>pserver*, >> tenant* >> cloud-region*], " + + ">> vserver* [>> pserver*, >>tenant* >> cloud-region*] ]"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-name','xyz').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')." + + "createEdgeTraversal(EdgeType.COUSIN, 'vnfc','vserver').store('x').union(builder.newInstance().createEdgeTraversal" + + "(EdgeType.COUSIN, 'vserver','pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant')" + + ".store('x').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region').store('x')),builder.newInstance().createEdgeTraversal" + + "(EdgeType.COUSIN, 'generic-vnf','vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver'" + + ",'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').store('x').createEdgeTraversal" + + "(EdgeType.TREE, 'tenant','cloud-region').store('x'))).cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void cloudRegionSites() throws AAIException { + String aaiQuery = "cloud-region*('cloud-owner','xyz') > complex*"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner'" + + ",'xyz').store('x').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','complex').store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void pserverWithNoComplexTest() throws AAIException { + String aaiQuery = "pserver*('hostname','xyz')!(> complex)"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','xyz').where(builder.newInstance().not(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void pserverWhereNotTest() throws AAIException { + String aaiQuery = "pserver('hostname','xyz')>vserver*!(> vnfc > configuration))"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','xyz').createEdgeTraversal" + + "(EdgeType.COUSIN, 'pserver','vserver').where(builder.newInstance().not(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN," + + " 'vserver','vnfc').createEdgeTraversal(EdgeType.COUSIN, 'vnfc','configuration'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void singleNode1() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner','coid')"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" + + ".store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void singleNodeLimit() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT 10"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" + + ".store('x').cap('x').unfold().dedup().limit(10)"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void specialCharacterTest() throws AAIException { + String aaiQuery = + "cloud-region* !('cloud-owner','coidhello:?_-)(!@#$%^&*+={}[]|/.<,') LIMIT 10"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coidhello:?_-)(!@#$%^&*+={}[]|/.<,')" + + ".store('x').cap('x').unfold().dedup().limit(10)"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void singleNodeLimitBlah() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT blah"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" + + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; + + expectedEx.expect(AAIException.class); + expectedEx.expectMessage("DSL Syntax Error while processing the query"); + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + } + + @Test + public void singleNodeLimitNull() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner','coid') LIMIT "; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" + + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; + + expectedEx.expect(AAIException.class); + expectedEx.expectMessage("DSL Syntax Error while processing the query"); + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + } + + @Test + public void cloudRegion1Test() throws AAIException { + String aaiQuery = + "cloud-region* !('cloud-owner','coid')('cloud-region-id','cr id') LIMIT 10"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner','coid')" + + ".getVerticesByProperty('cloud-region-id','cr id').store('x').cap('x').unfold().dedup().limit(10)"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void cloudRegion_entitlementTest() throws AAIException { + + /* + * A store within a where makes no sense + */ + String aaiQuery = + "generic-vnf('vnf-id','vnfId') ( > vserver > tenant > cloud-region('cloud-region-id','One')) > entitlement*"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" + + ".getVerticesByProperty('cloud-region-id','One'))" + + ".createEdgeTraversal(EdgeType.TREE, 'generic-vnf','entitlement').store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void cloudRegion_entitlementTestWithLabels() throws AAIException { + + String aaiQuery = + "generic-vnf('vnf-id','vnfId') (> ('tosca.relationships.HostedOn') vserver > ('org.onap.relationships.inventory.BelongsTo') tenant > ('org.onap.relationships.inventory.BelongsTo') cloud-region('cloud-region-id','One')) > ('org.onap.relationships.inventory.ComposedOf')service-instance*"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(" + + "builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','vserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).createEdgeTraversalWithLabels( 'vserver','tenant', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).createEdgeTraversalWithLabels( 'tenant','cloud-region', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo')))" + + ".getVerticesByProperty('cloud-region-id','One'))" + + ".createEdgeTraversalWithLabels( 'generic-vnf','service-instance', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.ComposedOf'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void complex_az_fromComplexTest() throws AAIException { + + String aaiQuery = + "cloud-region('cloud-owner','coid')('cloud-region-id','crid') [> availability-zone* ,> complex*]"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')" + + ".getVerticesByProperty('cloud-owner','coid').getVerticesByProperty('cloud-region-id','crid')" + + ".union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'cloud-region','availability-zone').store('x')" + + ",builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','complex').store('x')).cap('x').unfold().dedup()"; + + assertEquals(dslQuery, query); + } + + @Test + public void complex_az_fromComplexTestWithLabels() throws AAIException { + + String aaiQuery = + "cloud-region('cloud-owner','coid')('cloud-region-id','crid') [> ('org.onap.relationships.inventory.BelongsTo')availability-zone* ,> ('org.onap.relationships.inventory.LocatedIn')complex*]"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')" + + ".getVerticesByProperty('cloud-owner','coid').getVerticesByProperty('cloud-region-id','crid')" + + ".union(builder.newInstance().createEdgeTraversalWithLabels( 'cloud-region','availability-zone', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).store('x')" + + ",builder.newInstance().createEdgeTraversalWithLabels( 'cloud-region','complex', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.LocatedIn'))).store('x')).cap('x').unfold().dedup()"; + + assertEquals(dslQuery, query); + } + + @Test + public void cloudRegion_fromComplex1Test() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'complex').getVerticesByProperty('data-center-code','data-center-code-name')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x').cap('x').unfold().dedup()"; + String aaiQuery = "complex('data-center-code','data-center-code-name') > cloud-region*"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void cloudRegion_fromComplex2Test() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'complex').getVerticesByProperty('data-center-code','data-center-code-name')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').getVerticesByProperty('cloud-region-version','crv')" + + ".store('x').cap('x').unfold().dedup()"; + String aaiQuery = + "complex('data-center-code','data-center-code-name') > cloud-region*('cloud-region-version','crv')"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void cloudRegion_fromNfTypeTest() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'image').getVerticesByProperty('application-vendor','F5')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'image','vserver')" + + ".where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver','generic-vnf').getVerticesByProperty('vnf-name','ZALL1MMSC03'))" + + ".createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" + + ".store('x').cap('x').unfold().dedup()"; + + String aaiQuery = + "image('application-vendor','F5') > vserver (> generic-vnf('vnf-name','ZALL1MMSC03')) > tenant > cloud-region*"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(builderQuery, query); + } + + @Test + public void cloudRegion_fromNfTypeVendorVersionTest() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'image').getVerticesByProperty('application-vendor','vendor')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'image','vserver').where(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver','generic-vnf').getVerticesByProperty('nf-type','nfType')" + + ").createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region')" + + ".store('x').cap('x').unfold().dedup()"; + + String aaiQuery = + "image('application-vendor','vendor') > vserver(> generic-vnf('nf-type', 'nfType') ) > tenant > cloud-region*"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void cloud_region_fromVnfTest() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vnfc','vserver').store('x')" + + ".createEdgeTraversal(EdgeType.TREE, 'vserver','tenant').store('x')" + + ".createEdgeTraversal(EdgeType.TREE, 'tenant','cloud-region').store('x')" + + ".cap('x').unfold().dedup()"; + + String aaiQuery = + "generic-vnf('vnf-id','vnfId') > vnfc* > vserver* > tenant* > cloud-region*"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void cloud_region_sitesTest() throws AAIException { + + String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region')." + + "getVerticesByProperty('cloud-owner','co').store('x').createEdgeTraversal(EdgeType.COUSIN, " + + "'cloud-region','complex').store('x').cap('x').unfold().dedup()"; + + String aaiQuery = "cloud-region*('cloud-owner','co') > complex*"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void complex_fromVnf2Test() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" + + ").cap('x').unfold().dedup()"; + + String aaiQuery = "generic-vnf*('vnf-id','vnfId') [ > pserver* > complex*, " + + " >vserver > pserver* > complex* " + "]"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void complex_fromVnfTest2() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x'))" + + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" + + ".cap('x').unfold().dedup()"; + + String aaiQuery = "generic-vnf*('vnf-id','vnfId') [> pserver* , " + + " > vserver > pserver* ] > complex*"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void fn_topology1Test() throws AAIException { + + String builderQuery = "builder.getVerticesByProperty('aai-node-type', 'customer')" + + ".getVerticesByProperty('global-customer-id','a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb')" + + ".createEdgeTraversal(EdgeType.TREE, 'customer','service-subscription').getVerticesByProperty('service-subscription-id','Nimbus')" + + ".createEdgeTraversal(EdgeType.TREE, 'service-subscription','service-instance').getVerticesByProperty('service-instance-id','sid')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'service-instance','generic-vnf').store('x')" + + ".union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vnfc').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pnf').store('x')).cap('x').unfold().dedup()"; + + String aaiQuery = + "customer('global-customer-id', 'a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb') > service-subscription('service-subscription-id', 'Nimbus') " + + " > service-instance('service-instance-id','sid') > generic-vnf* " + + " [> vnfc* ,> vserver*,> pserver* ,> pnf* ]"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void vnf_Dsl() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver')" + + ".getVerticesByProperty('hostname','hostname1'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'))).store('x').cap('x').unfold().dedup()"; + + String aaiQuery = "generic-vnf*('vnf-id','vnfId') ( [> pserver('hostname','hostname1'), " + + " > vserver > pserver('hostname','hostname1')])"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void hasPropertyTest() throws AAIException { + String aaiQuery = "cloud-region* ('cloud-owner')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner').store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void hasPropertyValuesTest() throws AAIException { + String aaiQuery = "cloud-region* ('cloud-owner','cloud-owner1','cloud-owner2')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner', new ArrayList<>(Arrays.asList('cloud-owner1','cloud-owner2'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void hasNotPropertyValuesTest() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner','cloud-owner1','cloud-owner2')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner', new ArrayList<>(Arrays.asList('cloud-owner1','cloud-owner2'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void hasNotPropertyNullValuesTest() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner',' ',' null ')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner', new ArrayList<>(Arrays.asList(' ',' null '))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Ignore + @Test + public void hasPropertyIntegerTest() throws AAIException { + String aaiQuery = + "cloud-region('cloud-owner', 'att-nc')('cloud-region-id', 'MTN61a') > vlan-range > vlan-tag*('vlan-id-inner', 20)"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','att-nc').getVerticesByProperty('cloud-region-id','MTN61a')" + + ".createEdgeTraversal(EdgeType.TREE, 'cloud-region','vlan-range').createEdgeTraversal(EdgeType.TREE, 'vlan-range','vlan-tag').getVerticesByProperty('vlan-id-inner',20).store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void directionalityTest() throws AAIException { + String aaiQuery = "cloud-region('cloud-region-id','abc') >> complex* >> l3-network*"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-region-id','abc').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','complex').store('x').createEdgeTraversal(EdgeType.COUSIN, 'complex','l3-network').store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void enterSelectFilterTest() throws AAIException { + String aaiQuery = "cloud-region*('cloud-region-id','whp3a'){'cloud-region-id'}"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-region-id','whp3a').store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(query, dslQuery); + } + + @Ignore + @Test + public void returnSpecificPropsAndAllForDifferentVertices() throws AAIException { + String aaiQuery = + "cloud-region{'cloud-owner'}('cloud-region-id','new-r111egion-111111') > [ l3-network*, vlan-range > vlan-tag*]"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-region-id','new-r111egion-111111').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','l3-network').store('x'),builder.newInstance()" + + ".createEdgeTraversal(EdgeType.TREE, 'cloud-region','vlan-range').createEdgeTraversal(EdgeType.TREE, 'vlan-range','vlan-tag').store('x')).cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(query, dslQuery); + } + + @Test + public void groupingAttributesTestForAggregate() throws AAIException { + String aaiQuery = + "cloud-region{'cloud-owner'}('cloud-owner','att-nc')('cloud-region-id','wah2a') > vip-ipv6-address-list > [subnet{'subnet-name'}, instance-group{'id'}]"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','att-nc').getVerticesByProperty('cloud-region-id','wah2a').store('x').createEdgeTraversal(EdgeType.TREE, 'cloud-region','vip-ipv6-address-list').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vip-ipv6-address-list','subnet').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vip-ipv6-address-list','instance-group').store('x')).cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(query, dslQuery); + } + + @Test + public void multipleEdgeRuleTest() throws AAIException { + String aaiQuery = "vserver('vserver-id','abc') > l-interface* > lag-interface*"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'vserver').getVerticesByProperty('vserver-id','abc').createEdgeTraversal(EdgeType.TREE, 'vserver','l-interface').store('x').createEdgeTraversal( 'l-interface','lag-interface').store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void multipleEdgeRuleTestWithLabels() throws AAIException { + String aaiQuery = + "vserver('vserver-id','abc') > l-interface* > ('org.onap.relationships.inventory.BelongsTo') lag-interface*"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'vserver').getVerticesByProperty('vserver-id','abc').createEdgeTraversal(EdgeType.TREE, 'vserver','l-interface').store('x').createEdgeTraversalWithLabels( 'l-interface','lag-interface', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.BelongsTo'))).store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void hasNotPropertyTest() throws AAIException { + String aaiQuery = "cloud-region* !('cloud-owner')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesExcludeByProperty('cloud-owner').store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void overlyNestedQueryTest() throws AAIException { + // String aaiQuery = "generic-vnf*('vnf-id','vnfId') (> [ pserver('hostname','hostname1'), + // vserver (> [ pserver('hostname','hostname1'), pserver('hostname','hostname1')])]) > + // vserver"; + String aaiQuery = + "generic-vnf*('vnf-id','vnfId') ( [> pserver('hostname','hostname1'), > vserver ( [> pserver('hostname','hostname1'), > pserver('hostname','hostname1')])]) > vserver"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union" + + "(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').getVerticesByProperty('hostname','hostname1')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').where(builder.newInstance().union(builder.newInstance()" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'),builder.newInstance()." + + "createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').getVerticesByProperty('hostname','hostname1'))))).store('x').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void overlyNestedQueryTestWithLabels() throws AAIException { + String aaiQuery = + "generic-vnf*('vnf-id','vnfId') ( [> ('tosca.relationships.HostedOn')pserver('hostname','hostname1'),> ('tosca.relationships.HostedOn')vserver ( [> ('tosca.relationships.HostedOn')pserver('hostname','hostname1'),> ('tosca.relationships.HostedOn')pserver('hostname','hostname1')])]) > ('org.onap.relationships.inventory.PartOf')allotted-resource"; + + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').where(builder.newInstance().union" + + "(builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1')," + + "builder.newInstance().createEdgeTraversalWithLabels( 'generic-vnf','vserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).where(builder.newInstance().union(builder.newInstance()" + + ".createEdgeTraversalWithLabels( 'vserver','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1'),builder.newInstance()." + + "createEdgeTraversalWithLabels( 'vserver','pserver', new ArrayList<>(Arrays.asList('tosca.relationships.HostedOn'))).getVerticesByProperty('hostname','hostname1'))))).store('x').createEdgeTraversalWithLabels( 'generic-vnf','allotted-resource', new ArrayList<>(Arrays.asList('org.onap.relationships.inventory.PartOf'))).cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void getPserverWithAnEdgeToComplexAndCloudRegion() throws AAIException { + String aaiQuery = "pserver*('prov-status')(> complex)(> cloud-region)"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('prov-status').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex')).where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','cloud-region')).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void getPserverWithAnEdgeToComplexButNotToCloudRegion() throws AAIException { + String aaiQuery = "pserver*('prov-status')(> complex)!(> cloud-region)"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('prov-status').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex')).where(builder.newInstance().not(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver','cloud-region'))).store('x').cap('x').unfold().dedup()"; + + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void nestedUnionQueryTest() throws AAIException { + + String builderQuery = + "builder.getVerticesByProperty('aai-node-type', 'generic-vnf').getVerticesByProperty('vnf-id','vnfId').store('x').union(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','pserver').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','vserver')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vserver','pserver').store('x'))" + + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','complex').store('x')" + + ".union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex','availability-zone')" + + ".createEdgeTraversal(EdgeType.TREE, 'availability-zone','cloud-region').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'complex','ctag-pool').store('x').union(" + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','availability-zone').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'availability-zone','complex').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','generic-vnf').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf','availability-zone').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'availability-zone','complex').store('x')," + + "builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'ctag-pool','vpls-pe').store('x')" + + ".createEdgeTraversal(EdgeType.COUSIN, 'vpls-pe','complex').store('x'))" + + ".createEdgeTraversal(EdgeType.COUSIN, 'complex','cloud-region').store('x'))" + + ".createEdgeTraversal(EdgeType.TREE, 'cloud-region','tenant').store('x')" + + ".cap('x').unfold().dedup()"; + + String aaiQuery = "generic-vnf*('vnf-id','vnfId') [> pserver* , " + + " > vserver > pserver* ] > complex* [> availability-zone > cloud-region*,> cloud-region*, " + + " > ctag-pool* [ > availability-zone* > complex* , > generic-vnf* > availability-zone* > complex*,> vpls-pe* > complex*] > cloud-region*] > tenant* "; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + + assertEquals(builderQuery, query); + } + + @Test + public void booleanPropertyValuesTest() throws AAIException { + String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint',true)"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByBooleanProperty('in-maint',true).store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void upperCaseBooleanPropertyValuesTest() throws AAIException { + String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint',TRUE)"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByBooleanProperty('in-maint',true).store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test + public void booleanPropertyTest() throws AAIException { + String aaiQuery = "cloud-region ('cloud-owner','cloud-owner1') > zone*('in-maint')"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','cloud-owner1').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region','zone').getVerticesByProperty('in-maint').store('x').cap('x').unfold().dedup()"; + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + assertEquals(dslQuery, query); + } + + @Test(expected = AAIException.class) + public void filterOnUnion_vserverFromTentantFromCloudRegion_BadRequest() throws AAIException { + String aaiQuery = + "cloud-region('cloud-owner', 'test-aic')>[tenant*('tenant-id', 'tenant1'), tenant*('tenant-id', 'tenant2')]('tenant-name', 'tenant1')>[vserver*]"; + dslQueryProcessor.parseAaiQuery(QueryVersion.V2, aaiQuery).get("query").toString(); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/EdgeLabelTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/EdgeLabelTest.java index 9664342..808d56b 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/EdgeLabelTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/EdgeLabelTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,12 +19,12 @@ */ package org.onap.aai.rest.dsl; +import static org.junit.Assert.*; + import org.junit.After; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.*; - public class EdgeLabelTest { private static EdgeLabel edgeLabel; @@ -32,7 +32,7 @@ public class EdgeLabelTest { @Before public void setUp() throws Exception { - edgeLabel = new EdgeLabel("label", true); + edgeLabel = new EdgeLabel("label", true); edgeLabel1 = new EdgeLabel("org.onap.relationships.inventory.Uses", false); } @@ -59,4 +59,4 @@ public class EdgeLabelTest { public void setExactMatch() { edgeLabel1.setExactMatch(false); } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/EdgeTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/EdgeTest.java index 4378085..77f5c55 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/EdgeTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/EdgeTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,20 +19,21 @@ */ package org.onap.aai.rest.dsl; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.onap.aai.rest.enums.EdgeDirection; +import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; -import static org.junit.Assert.*; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.rest.enums.EdgeDirection; public class EdgeTest { Edge edge; Edge edge2; + @Before public void setUp() throws Exception { EdgeDirection dir = EdgeDirection.OUT; @@ -76,4 +77,4 @@ public class EdgeTest { assertNotNull(edge.getDirection().toString()); assertNotNull(edge.toString()); } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/ProdDslTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/ProdDslTest.java index 8c52a31..a78bcde 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/ProdDslTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/ProdDslTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,40 +19,46 @@ */ package org.onap.aai.rest.dsl; -import org.junit.Test; +import static org.junit.Assert.assertEquals; + import org.junit.Ignore; +import org.junit.Test; import org.onap.aai.AAISetup; import org.onap.aai.exceptions.AAIException; import org.onap.aai.rest.enums.QueryVersion; -import static org.junit.Assert.assertEquals; - -//TODO: Change this to read queries and their builder equivalent from a file -//TODO: Add queries run by SEs +// TODO: Change this to read queries and their builder equivalent from a file +// TODO: Add queries run by SEs public class ProdDslTest extends AAISetup { @Ignore @Test public void msoQueryTest1() throws AAIException { - String aaiQuery = "cloud-region('cloud-owner', 'value')('cloud-region-id', 'value') > vlan-range > vlan-tag*('vlan-id-outer', '123')"; + String aaiQuery = + "cloud-region('cloud-owner', 'value')('cloud-region-id', 'value') > vlan-range > vlan-tag*('vlan-id-outer', '123')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','value')" + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner','value')" + ".getVerticesByProperty('cloud-region-id','value').createEdgeTraversal(EdgeType.TREE, 'cloud-region','vlan-range').createEdgeTraversal(EdgeType.TREE, 'vlan-range','vlan-tag')" + ".getVerticesByProperty('vlan-id-outer',123).store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); assertEquals(dslQuery, query); } @Test public void msoQueryTest2() throws AAIException { - String aaiQuery = "pserver('hostname', 'pserver-1') > p-interface > sriov-pf*('pf-pci-id', '0000:ee:00.0')"; + String aaiQuery = + "pserver('hostname', 'pserver-1') > p-interface > sriov-pf*('pf-pci-id', '0000:ee:00.0')"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','pserver-1')" + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','pserver-1')" + ".createEdgeTraversal(EdgeType.TREE, 'pserver','p-interface')" + ".createEdgeTraversal(EdgeType.TREE, 'p-interface','sriov-pf').getVerticesByProperty('pf-pci-id','0000:ee:00.0').store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); assertEquals(dslQuery, query); } @@ -60,39 +66,49 @@ public class ProdDslTest extends AAISetup { public void msoQueryTest3() throws AAIException { String aaiQuery = "l-interface ('interface-id', 'value') > sriov-vf > sriov-pf*"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'l-interface').getVerticesByProperty('interface-id','value')" + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'l-interface').getVerticesByProperty('interface-id','value')" + ".createEdgeTraversal(EdgeType.TREE, 'l-interface','sriov-vf')" + ".createEdgeTraversal(EdgeType.COUSIN, 'sriov-vf','sriov-pf').store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); assertEquals(dslQuery, query); } - //TODO : Get this from schema + // TODO : Get this from schema @Test public void msoQueryTest4() throws AAIException { - //String aaiQuery = "l-interface ('interface-id', 'value') > lag-interface('interface-name', 'bond1') > sriov-pf*"; - String aaiQuery = "l-interface ('interface-id', 'value') > lag-interface('interface-name', 'bond1') > p-interface > sriov-pf*"; + // String aaiQuery = "l-interface ('interface-id', 'value') > + // lag-interface('interface-name', 'bond1') > sriov-pf*"; + String aaiQuery = + "l-interface ('interface-id', 'value') > lag-interface('interface-name', 'bond1') > p-interface > sriov-pf*"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'l-interface').getVerticesByProperty('interface-id','value')" + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'l-interface').getVerticesByProperty('interface-id','value')" + ".createEdgeTraversal( 'l-interface','lag-interface').getVerticesByProperty('interface-name','bond1')" + ".createEdgeTraversal(EdgeType.COUSIN, 'lag-interface','p-interface').createEdgeTraversal(EdgeType.TREE, 'p-interface','sriov-pf').store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); assertEquals(dslQuery, query); } - //TODO : Get this from schema + // TODO : Get this from schema @Test public void msoQueryTest5() throws AAIException { - //String aaiQuery = "pserver ('hostname', 'value') > vserver ('vserver-name', 'value') > l-interface > vlan-tag*"; - String aaiQuery = "pserver ('hostname', 'value') > vserver ('vserver-name', 'value') > l-interface > cp > vlan-tag*"; - String dslQuery = "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','value')" + // String aaiQuery = "pserver ('hostname', 'value') > vserver ('vserver-name', 'value') > + // l-interface > vlan-tag*"; + String aaiQuery = + "pserver ('hostname', 'value') > vserver ('vserver-name', 'value') > l-interface > cp > vlan-tag*"; + String dslQuery = + "builder.getVerticesByProperty('aai-node-type', 'pserver').getVerticesByProperty('hostname','value')" + ".createEdgeTraversal(EdgeType.COUSIN, 'pserver','vserver').getVerticesByProperty('vserver-name','value')" + ".createEdgeTraversal(EdgeType.TREE, 'vserver','l-interface').createEdgeTraversal(EdgeType.COUSIN, 'l-interface','cp').createEdgeTraversal(EdgeType.COUSIN, 'cp','vlan-tag').store('x').cap('x').unfold().dedup()"; - String query = dslQueryProcessor.parseAaiQuery(QueryVersion.V1,aaiQuery).get("query").toString(); + String query = + dslQueryProcessor.parseAaiQuery(QueryVersion.V1, aaiQuery).get("query").toString(); assertEquals(dslQuery, query); } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/history/AbstractSpringHistoryRestTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/history/AbstractSpringHistoryRestTest.java index 1d2eac1..5e397dd 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/history/AbstractSpringHistoryRestTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/history/AbstractSpringHistoryRestTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,10 @@ */ package org.onap.aai.rest.history; +import java.io.UnsupportedEncodingException; +import java.util.Base64; +import java.util.Collections; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.JanusGraph; @@ -32,8 +36,8 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.nodes.NodeIngestor; import org.onap.aai.util.AAIConfig; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; import org.springframework.context.annotation.Import; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -44,18 +48,12 @@ import org.springframework.test.context.junit4.rules.SpringClassRule; import org.springframework.test.context.junit4.rules.SpringMethodRule; import org.springframework.web.client.RestTemplate; -import java.io.UnsupportedEncodingException; -import java.util.Base64; -import java.util.Collections; - -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = TraversalApp.class) @TestPropertySource( - locations = "classpath:application-test.properties", - properties = { - "history.enabled=true", - "history.truncate.window.days = " + Integer.MAX_VALUE - } -) + locations = "classpath:application-test.properties", + properties = {"history.enabled=true", "history.truncate.window.days = " + Integer.MAX_VALUE}) @ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @Import(TraversalTestConfiguration.class) public abstract class AbstractSpringHistoryRestTest { @@ -71,14 +69,14 @@ public abstract class AbstractSpringHistoryRestTest { @Autowired protected NodeIngestor nodeIngestor; - + @LocalServerPort protected int randomPort; protected HttpEntity httpEntity; protected String baseUrl; - protected HttpHeaders headers ; + protected HttpHeaders headers; @BeforeClass public static void setupConfig() throws AAIException { @@ -109,12 +107,12 @@ public abstract class AbstractSpringHistoryRestTest { /* * Inheritors please override this one */ - public void createTestGraph(){ - + public void createTestGraph() { + } @After - public void tearDown(){ + public void tearDown() { JanusGraph janusGraph = AAIGraph.getInstance().getGraph(); JanusGraphTransaction transaction = janusGraph.newTransaction(); @@ -123,12 +121,11 @@ public abstract class AbstractSpringHistoryRestTest { try { GraphTraversalSource g = transaction.traversal(); - g.V().toList() - .forEach(Vertex::remove); - } catch(Exception ex){ + g.V().toList().forEach(Vertex::remove); + } catch (Exception ex) { success = false; } finally { - if(success){ + if (success) { transaction.commit(); } else { transaction.rollback(); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/history/CQAllChildernFromPnfStateTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/history/CQAllChildernFromPnfStateTest.java index 7cf8138..472cffb 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/history/CQAllChildernFromPnfStateTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/history/CQAllChildernFromPnfStateTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,10 +19,18 @@ */ package org.onap.aai.rest.history; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.*; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.JanusGraphTransaction; @@ -37,210 +45,149 @@ import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.*; - -@Ignore("The state format requires the history schema to be loaded. " + - "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + - "This needs to be addressed.") +@Ignore("The state format requires the history schema to be loaded. " + + "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + + "This needs to be addressed.") public class CQAllChildernFromPnfStateTest extends AbstractSpringHistoryRestTest { - private static final Logger LOGGER = LoggerFactory.getLogger(CQAllChildernFromPnfStateTest.class); - - @Override - public void createTestGraph() { - JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); - boolean success = true; - try { - GraphTraversalSource g = transaction.traversal(); - - Vertex pnf1 = g.addV() - .property(AAIProperties.NODE_TYPE, "pnf", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.AAI_URI, "/network/pnfs/pnf/pnf-1", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.RESOURCE_VERSION, "100", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.START_TS, 100L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("pnf-name", "pnf-1", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("in-maint", false, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("pnf-id", "pnf-1-id", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .next(); - - Vertex pint1 = g.addV() - .property(AAIProperties.NODE_TYPE, "p-interface", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.AAI_URI, "/network/pnfs/pnf/pnf-1/p-interfaces/p-interface/pint-1", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.RESOURCE_VERSION, "100", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.START_TS, 100L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("interface-name", "pint-1", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .next(); - - Vertex lint1 = g.addV() - .property(AAIProperties.NODE_TYPE, "l-interface", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.AAI_URI, "/network/pnfs/pnf/pnf-1/p-interfaces/p-interface/pint-1/l-interfaces/l-interface/lint-1", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.RESOURCE_VERSION, "100", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.START_TS, 100L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("interface-name", "lint-1", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .next(); - - pint1.addEdge("tosca.relationships.network.BindsTo", pnf1, - "start-ts", 100L, - "private", false, - "aai-uuid", "e713ce2c-62d5-4555-a481-95619cb158aa", - "prevent-delete", "NONE", - "delete-other-v", "IN", - "source-of-truth", "JUNIT-EDGE-C", - "start-tx-id", "JUNIT-EDGE-C", - "contains-other-v", "IN"); - - lint1.addEdge("tosca.relationships.network.BindsTo", pint1, - "start-ts", 100L, - "private", false, - "aai-uuid", "e713ce2c-62d5-4555-a481-95619cb158ab", - "prevent-delete", "NONE", - "delete-other-v", "IN", - "source-of-truth", "JUNIT-EDGE-C", - "start-tx-id", "JUNIT-EDGE-C", - "contains-other-v", "IN"); - - } catch (Exception ex) { - success = false; - } finally { - if (success) { - transaction.commit(); - } else { - transaction.rollback(); - fail("Unable to setup the graph"); - } - } - } - - private JsonArray executeCustomQuery(String endpoint, String queryName, String... startUris) throws Exception { - JsonObject payload = new JsonObject(); - JsonArray start = new JsonArray(); - Arrays.stream(startUris).forEach(start::add); - payload.add("start", start); - payload.addProperty("query", "query/" + queryName); - httpEntity = new HttpEntity(payload.toString(), headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()).getAsJsonObject().getAsJsonArray("results"); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - return results; - } - - private JsonArray executeGremlin(String endpoint, String query) throws Exception { - JsonObject payload = new JsonObject(); - payload.addProperty("gremlin", query); - httpEntity = new HttpEntity(payload.toString(), headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()).getAsJsonObject().getAsJsonArray("results"); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - return results; - } - - private void verifyResultUris(JsonArray results, String... uris) { - Set<String> expected = new HashSet<>(Arrays.asList(uris)); - final Set<String> actualEquipType = new HashSet<>(); - for (JsonElement result : results) { - actualEquipType.add(result.getAsJsonObject().get("uri").getAsString()); - } - assertThat("Verify results uri's", actualEquipType, is(expected)); - } - - - @Test - public void pnfChildrenQueryTest() throws Exception { - JsonArray results = executeCustomQuery("/aai/v14/query?format=state", "allchildren-fromPnf", "/network/pnfs/pnf/pnf-1"); - verifyResultUris(results, "/network/pnfs/pnf/pnf-1", "/network/pnfs/pnf/pnf-1/p-interfaces/p-interface/pint-1", "/network/pnfs/pnf/pnf-1/p-interfaces/p-interface/pint-1/l-interfaces/l-interface/lint-1"); - } - + private static final Logger LOGGER = + LoggerFactory.getLogger(CQAllChildernFromPnfStateTest.class); + + @Override + public void createTestGraph() { + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + + Vertex pnf1 = g.addV() + .property(AAIProperties.NODE_TYPE, "pnf", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.AAI_URI, "/network/pnfs/pnf/pnf-1", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.START_TS, 100L) + .property(AAIProperties.RESOURCE_VERSION, "100", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.START_TS, 100L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("pnf-name", "pnf-1", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("in-maint", false, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("pnf-id", "pnf-1-id", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .next(); + + Vertex pint1 = g.addV() + .property(AAIProperties.NODE_TYPE, "p-interface", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.AAI_URI, + "/network/pnfs/pnf/pnf-1/p-interfaces/p-interface/pint-1", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.START_TS, 100L) + .property(AAIProperties.RESOURCE_VERSION, "100", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.START_TS, 100L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("interface-name", "pint-1", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .next(); + + Vertex lint1 = g.addV() + .property(AAIProperties.NODE_TYPE, "l-interface", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.AAI_URI, + "/network/pnfs/pnf/pnf-1/p-interfaces/p-interface/pint-1/l-interfaces/l-interface/lint-1", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.START_TS, 100L) + .property(AAIProperties.RESOURCE_VERSION, "100", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.START_TS, 100L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("interface-name", "lint-1", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .next(); + + pint1.addEdge("tosca.relationships.network.BindsTo", pnf1, "start-ts", 100L, "private", + false, "aai-uuid", "e713ce2c-62d5-4555-a481-95619cb158aa", "prevent-delete", "NONE", + "delete-other-v", "IN", "source-of-truth", "JUNIT-EDGE-C", "start-tx-id", + "JUNIT-EDGE-C", "contains-other-v", "IN"); + + lint1.addEdge("tosca.relationships.network.BindsTo", pint1, "start-ts", 100L, "private", + false, "aai-uuid", "e713ce2c-62d5-4555-a481-95619cb158ab", "prevent-delete", "NONE", + "delete-other-v", "IN", "source-of-truth", "JUNIT-EDGE-C", "start-tx-id", + "JUNIT-EDGE-C", "contains-other-v", "IN"); + + } catch (Exception ex) { + success = false; + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to setup the graph"); + } + } + } + + private JsonArray executeCustomQuery(String endpoint, String queryName, String... startUris) + throws Exception { + JsonObject payload = new JsonObject(); + JsonArray start = new JsonArray(); + Arrays.stream(startUris).forEach(start::add); + payload.add("start", start); + payload.addProperty("query", "query/" + queryName); + httpEntity = new HttpEntity(payload.toString(), headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()) + .getAsJsonObject().getAsJsonArray("results"); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + return results; + } + + private JsonArray executeGremlin(String endpoint, String query) throws Exception { + JsonObject payload = new JsonObject(); + payload.addProperty("gremlin", query); + httpEntity = new HttpEntity(payload.toString(), headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()) + .getAsJsonObject().getAsJsonArray("results"); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + return results; + } + + private void verifyResultUris(JsonArray results, String... uris) { + Set<String> expected = new HashSet<>(Arrays.asList(uris)); + final Set<String> actualEquipType = new HashSet<>(); + for (JsonElement result : results) { + actualEquipType.add(result.getAsJsonObject().get("uri").getAsString()); + } + assertThat("Verify results uri's", actualEquipType, is(expected)); + } + + @Test + public void pnfChildrenQueryTest() throws Exception { + JsonArray results = executeCustomQuery("/aai/v14/query?format=state", "allchildren-fromPnf", + "/network/pnfs/pnf/pnf-1"); + verifyResultUris(results, "/network/pnfs/pnf/pnf-1", + "/network/pnfs/pnf/pnf-1/p-interfaces/p-interface/pint-1", + "/network/pnfs/pnf/pnf-1/p-interfaces/p-interface/pint-1/l-interfaces/l-interface/lint-1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleEdgeTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleEdgeTest.java index 5b2c8da..d26eff2 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleEdgeTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleEdgeTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,10 +19,16 @@ */ package org.onap.aai.rest.history; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.*; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; + +import java.util.*; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.JanusGraphTransaction; @@ -38,439 +44,370 @@ import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import java.util.*; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.*; - -@Ignore("The lifecycle format requires the history schema to be loaded. " + - "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + - "This needs to be addressed.") +@Ignore("The lifecycle format requires the history schema to be loaded. " + + "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + + "This needs to be addressed.") public class DslConsumerHistoryLifecycleEdgeTest extends AbstractSpringHistoryRestTest { - private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumerHistoryLifecycleEdgeTest.class); - - @Override - public void createTestGraph() { - JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); - boolean success = true; - try { - GraphTraversalSource g = transaction.traversal(); - - Vertex pserver = g.addV().property(AAIProperties.NODE_TYPE, "pserver", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.AAI_URI, "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.RESOURCE_VERSION, "100", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property("hostname", "test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property("in-maint", false, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property("equip-type", "ps-type", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.START_TS, 100L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .next(); - Vertex complex = g.addV().property(AAIProperties.NODE_TYPE, "complex", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.AAI_URI, "/cloud-infrastructure/complexes/complex/test-complex-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.RESOURCE_VERSION, "100", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property("physical-location-id", "test-complex-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property("street", "200 S. Laurel Ave", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property("city", "Middletown", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property("state", "NJ", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property("zip", "11111", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.START_TS, 100L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C" , - AAIProperties.START_TS, 100L - ) - .next(); - - pserver.addEdge("org.onap.relationships.inventory.LocatedIn", - complex, - "start-ts", 100, - "private", false, - "aai-uuid", "edge1", - "end-source-of-truth", "JUNIT-E-D-1", - "end-tx-id", "JUNIT-E-D-1", - "end-ts", 300, - "prevent-delete", "IN", - "delete-other-v", "NONE", - "source-of-truth", "JUNIT-E-C-1", - "start-tx-id", "JUNIT-E-C-1", - "contains-other-v", "NONE" - ); - pserver.addEdge("org.onap.relationships.inventory.LocatedIn", - complex, - "start-ts", 500, - "private", false, - "aai-uuid", "edge2", - "end-source-of-truth", "JUNIT-E-D-2", - "end-tx-id", "JUNIT-E-D-2", - "end-ts", 700, - "prevent-delete", "IN", - "delete-other-v", "NONE", - "source-of-truth", "JUNIT-E-C-2", - "start-tx-id", "JUNIT-E-C-2", - "contains-other-v", "NONE" - ); - pserver.addEdge("org.onap.relationships.inventory.LocatedIn", - complex, - "start-ts", 900, - "private", false, - "aai-uuid", "edge3", - "end-source-of-truth", "JUNIT-E-D-3", - "end-tx-id", "JUNIT-E-D-3", - "end-ts", 1100, - "prevent-delete", "IN", - "delete-other-v", "NONE", - "source-of-truth", "JUNIT-E-C-3", - "start-tx-id", "JUNIT-E-C-3", - "contains-other-v", "NONE" - ); - pserver.addEdge("org.onap.relationships.inventory.LocatedIn", - complex, - "start-ts", 1300, - "private", false, - "aai-uuid", "edge3", - "prevent-delete", "IN", - "delete-other-v", "NONE", - "source-of-truth", "JUNIT-E-C-3", - "start-tx-id", "JUNIT-E-C-3", - "contains-other-v", "NONE" - ); - } catch (Exception ex) { - success = false; - } finally { - if (success) { - transaction.commit(); - } else { - transaction.rollback(); - fail("Unable to setup the graph"); - } - } - } - - private JsonArray getResultsForPserverLookupByHostname(String endpoint) throws Exception { - return getResultsForPserverLookupByHostnameAndAnother(endpoint, ""); - } - - private JsonArray getResultsForPserverLookupByHostnameAndAnother(String endpoint, String additionalFilterInParen) throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')" + additionalFilterInParen); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()).getAsJsonObject().getAsJsonArray("results"); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - - assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - return results; - } - - - private void verifyEquipTypeValues(JsonArray results, String... expectedEquipTypes) { - List<String> expected = Arrays.asList(expectedEquipTypes); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("value") && !property.getAsJsonObject().get("value").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("value").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type in lifecycle", actualEquipType, is(expected)); - } - - private void verifyEquipTypeSoTs(JsonArray results, String... expectedSTOs) { - List<String> expected = Arrays.asList(expectedSTOs); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("sot") && !property.getAsJsonObject().get("sot").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("sot").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type SoTs in lifecycle", actualEquipType, is(expected)); - } - - private void verifyEquipTypeTxId(JsonArray results, String... expectedSTOs) { - List<String> expected = Arrays.asList(expectedSTOs); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("tx-id") && !property.getAsJsonObject().get("tx-id").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("tx-id").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type tx-ids in lifecycle", actualEquipType, is(expected)); - } - - private void verifyEquipTypeTimestamps(JsonArray results, Long... expectedSTOs) { - List<Long> expected = Arrays.asList(expectedSTOs); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("timestamp") && !property.getAsJsonObject().get("timestamp").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("timestamp").getAsLong()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type timestamps in lifecycle", actualEquipType, is(expected)); - } - - private void verifyNodeTimestamps(JsonArray results, Long... nodeTimestamps) { - List<Long> expected = Arrays.asList(nodeTimestamps); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - result.getAsJsonObject().get("node-actions").getAsJsonArray().forEach(jsonElement -> - actualEquipType.add(jsonElement.getAsJsonObject().get("timestamp").getAsLong())); - } - assertThat("Verify node-changes timestamps in lifecycle", actualEquipType, is(expected)); - } - - private void verifyRelatedToCreatedTimestamps(JsonArray results, Long... edgeCreatedTimestamps) { - List<Long> expected = Arrays.asList(edgeCreatedTimestamps); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> { - if (jsonElement.getAsJsonObject().has("timestamp")) { - actualEquipType.add(jsonElement.getAsJsonObject().get("timestamp").getAsLong()); - } - }); - } - assertThat("Verify related-to createdtimestamps in lifecycle", actualEquipType, is(expected)); - } - - private void verifyRelatedToCreatedDeletedTimestamps(JsonArray results, Long... edgeDeletedTimestamps) { - List<Long> expected = Arrays.asList(edgeDeletedTimestamps); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> { - if (jsonElement.getAsJsonObject().has("end-timestamp")) { - actualEquipType.add(jsonElement.getAsJsonObject().get("end-timestamp").getAsLong()); - } - }); - } - assertThat("Verify related-to createdtimestamps in lifecycle", actualEquipType, is(expected)); - } - - private void verifyRelatedToCount(JsonArray results, int expectedSize) { - int actualSize = 0; - for (JsonElement result : results) { - actualSize += result.getAsJsonObject().get("related-to").getAsJsonArray().size(); - } - assertEquals("Verify related-to count", actualSize, expectedSize); - } - - private void verifyRelatedToTxId(JsonArray results) { - final Set<JsonObject> withTxId = new HashSet<>(); - int count = 0; - for (JsonElement result : results) { - count += result.getAsJsonObject().get("related-to").getAsJsonArray().size(); - result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> { - if (jsonElement.getAsJsonObject().has("tx-id")) { - withTxId.add(jsonElement.getAsJsonObject()); - } - if (jsonElement.getAsJsonObject().has("end-tx-id")) { - withTxId.add(jsonElement.getAsJsonObject()); - } - }); - } - assertEquals("Verify no related-to has end-tx-id in state", count, withTxId.size()); - } - - - @Test - public void lifecycleQueryStartTsBeforeCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-C"); - verifyEquipTypeTimestamps(results, 100L); - verifyNodeTimestamps(results, 100L); - verifyRelatedToCreatedTimestamps(results, 100L, 500L, 900L, 1300L); - verifyRelatedToCreatedDeletedTimestamps(results, 300L, 700L, 1100L); - verifyRelatedToCount(results, 4); - verifyRelatedToTxId(results); - } - - - - @Test - public void lifecycleQueryStartTsBeforeSecondEdgeCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=400"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results); - verifyEquipTypeSoTs(results); - verifyEquipTypeTxId(results); - verifyEquipTypeTimestamps(results); - verifyNodeTimestamps(results); - verifyRelatedToCreatedTimestamps(results, 500L, 900L, 1300L); - verifyRelatedToCreatedDeletedTimestamps(results, 700L, 1100L); - verifyRelatedToCount(results, 3); - verifyRelatedToTxId(results); - } - - @Test - public void lifecycleQueryStartTsAtSecondEdgeDeletionTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=700"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results); - verifyEquipTypeSoTs(results); - verifyEquipTypeTxId(results); - verifyEquipTypeTimestamps(results); - verifyNodeTimestamps(results); - verifyRelatedToCreatedTimestamps(results, 900L, 1300L); - verifyRelatedToCreatedDeletedTimestamps(results, 700L, 1100L); - verifyRelatedToCount(results, 3); - verifyRelatedToTxId(results); - } - - @Test - public void lifecycleQueryStartTsAfterSecondEdgeDeletionTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=800"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results); - verifyEquipTypeSoTs(results); - verifyEquipTypeTxId(results); - verifyEquipTypeTimestamps(results); - verifyNodeTimestamps(results); - verifyRelatedToCreatedTimestamps(results, 900L, 1300L); - verifyRelatedToCreatedDeletedTimestamps(results, 1100L); - verifyRelatedToCount(results, 2); - verifyRelatedToTxId(results); - } - - @Test - public void lifecycleQueryStartTsAtLastEdgeActionTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=1300"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results); - verifyEquipTypeSoTs(results); - verifyEquipTypeTxId(results); - verifyEquipTypeTimestamps(results); - verifyNodeTimestamps(results); - verifyRelatedToCreatedTimestamps(results, 1300L); - verifyRelatedToCreatedDeletedTimestamps(results); - verifyRelatedToCount(results, 1); - verifyRelatedToTxId(results); - } - - @Test - public void lifecycleQueryStartTsAfterLastEdgeActionTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=1400"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 0, results.size()); - - verifyEquipTypeValues(results); - verifyEquipTypeSoTs(results); - verifyEquipTypeTxId(results); - verifyEquipTypeTimestamps(results); - verifyNodeTimestamps(results); - verifyRelatedToCreatedTimestamps(results); - verifyRelatedToCreatedDeletedTimestamps(results); - verifyRelatedToCount(results, 0); - verifyRelatedToTxId(results); - } + private static final Logger LOGGER = + LoggerFactory.getLogger(DslConsumerHistoryLifecycleEdgeTest.class); + + @Override + public void createTestGraph() { + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + + Vertex pserver = g.addV() + .property(AAIProperties.NODE_TYPE, "pserver", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.AAI_URI, + "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.START_TS, 100L) + .property(AAIProperties.RESOURCE_VERSION, "100", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("hostname", "test-pserver-dsl", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("in-maint", false, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("equip-type", "ps-type", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.START_TS, 100L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .next(); + Vertex complex = g.addV() + .property(AAIProperties.NODE_TYPE, "complex", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.AAI_URI, + "/cloud-infrastructure/complexes/complex/test-complex-dsl", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.START_TS, 100L) + .property(AAIProperties.RESOURCE_VERSION, "100", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("physical-location-id", "test-complex-dsl", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("street", "200 S. Laurel Ave", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("city", "Middletown", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("state", "NJ", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("zip", "11111", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.START_TS, 100L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .next(); + + pserver.addEdge("org.onap.relationships.inventory.LocatedIn", complex, "start-ts", 100, + "private", false, "aai-uuid", "edge1", "end-source-of-truth", "JUNIT-E-D-1", + "end-tx-id", "JUNIT-E-D-1", "end-ts", 300, "prevent-delete", "IN", "delete-other-v", + "NONE", "source-of-truth", "JUNIT-E-C-1", "start-tx-id", "JUNIT-E-C-1", + "contains-other-v", "NONE"); + pserver.addEdge("org.onap.relationships.inventory.LocatedIn", complex, "start-ts", 500, + "private", false, "aai-uuid", "edge2", "end-source-of-truth", "JUNIT-E-D-2", + "end-tx-id", "JUNIT-E-D-2", "end-ts", 700, "prevent-delete", "IN", "delete-other-v", + "NONE", "source-of-truth", "JUNIT-E-C-2", "start-tx-id", "JUNIT-E-C-2", + "contains-other-v", "NONE"); + pserver.addEdge("org.onap.relationships.inventory.LocatedIn", complex, "start-ts", 900, + "private", false, "aai-uuid", "edge3", "end-source-of-truth", "JUNIT-E-D-3", + "end-tx-id", "JUNIT-E-D-3", "end-ts", 1100, "prevent-delete", "IN", + "delete-other-v", "NONE", "source-of-truth", "JUNIT-E-C-3", "start-tx-id", + "JUNIT-E-C-3", "contains-other-v", "NONE"); + pserver.addEdge("org.onap.relationships.inventory.LocatedIn", complex, "start-ts", 1300, + "private", false, "aai-uuid", "edge3", "prevent-delete", "IN", "delete-other-v", + "NONE", "source-of-truth", "JUNIT-E-C-3", "start-tx-id", "JUNIT-E-C-3", + "contains-other-v", "NONE"); + } catch (Exception ex) { + success = false; + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to setup the graph"); + } + } + } + + private JsonArray getResultsForPserverLookupByHostname(String endpoint) throws Exception { + return getResultsForPserverLookupByHostnameAndAnother(endpoint, ""); + } + + private JsonArray getResultsForPserverLookupByHostnameAndAnother(String endpoint, + String additionalFilterInParen) throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver*('hostname','test-pserver-dsl')" + additionalFilterInParen); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()) + .getAsJsonObject().getAsJsonArray("results"); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + + assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + return results; + } + + private void verifyEquipTypeValues(JsonArray results, String... expectedEquipTypes) { + List<String> expected = Arrays.asList(expectedEquipTypes); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("value") + && !property.getAsJsonObject().get("value").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("value").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type in lifecycle", actualEquipType, is(expected)); + } + + private void verifyEquipTypeSoTs(JsonArray results, String... expectedSTOs) { + List<String> expected = Arrays.asList(expectedSTOs); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("sot") + && !property.getAsJsonObject().get("sot").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("sot").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type SoTs in lifecycle", actualEquipType, is(expected)); + } + + private void verifyEquipTypeTxId(JsonArray results, String... expectedSTOs) { + List<String> expected = Arrays.asList(expectedSTOs); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("tx-id") + && !property.getAsJsonObject().get("tx-id").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("tx-id").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type tx-ids in lifecycle", actualEquipType, is(expected)); + } + + private void verifyEquipTypeTimestamps(JsonArray results, Long... expectedSTOs) { + List<Long> expected = Arrays.asList(expectedSTOs); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("timestamp") + && !property.getAsJsonObject().get("timestamp").isJsonNull()) { + actualEquipType + .add(property.getAsJsonObject().get("timestamp").getAsLong()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type timestamps in lifecycle", actualEquipType, is(expected)); + } + + private void verifyNodeTimestamps(JsonArray results, Long... nodeTimestamps) { + List<Long> expected = Arrays.asList(nodeTimestamps); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + result.getAsJsonObject().get("node-actions").getAsJsonArray() + .forEach(jsonElement -> actualEquipType + .add(jsonElement.getAsJsonObject().get("timestamp").getAsLong())); + } + assertThat("Verify node-changes timestamps in lifecycle", actualEquipType, is(expected)); + } + + private void verifyRelatedToCreatedTimestamps(JsonArray results, + Long... edgeCreatedTimestamps) { + List<Long> expected = Arrays.asList(edgeCreatedTimestamps); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> { + if (jsonElement.getAsJsonObject().has("timestamp")) { + actualEquipType.add(jsonElement.getAsJsonObject().get("timestamp").getAsLong()); + } + }); + } + assertThat("Verify related-to createdtimestamps in lifecycle", actualEquipType, + is(expected)); + } + + private void verifyRelatedToCreatedDeletedTimestamps(JsonArray results, + Long... edgeDeletedTimestamps) { + List<Long> expected = Arrays.asList(edgeDeletedTimestamps); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> { + if (jsonElement.getAsJsonObject().has("end-timestamp")) { + actualEquipType + .add(jsonElement.getAsJsonObject().get("end-timestamp").getAsLong()); + } + }); + } + assertThat("Verify related-to createdtimestamps in lifecycle", actualEquipType, + is(expected)); + } + + private void verifyRelatedToCount(JsonArray results, int expectedSize) { + int actualSize = 0; + for (JsonElement result : results) { + actualSize += result.getAsJsonObject().get("related-to").getAsJsonArray().size(); + } + assertEquals("Verify related-to count", actualSize, expectedSize); + } + + private void verifyRelatedToTxId(JsonArray results) { + final Set<JsonObject> withTxId = new HashSet<>(); + int count = 0; + for (JsonElement result : results) { + count += result.getAsJsonObject().get("related-to").getAsJsonArray().size(); + result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> { + if (jsonElement.getAsJsonObject().has("tx-id")) { + withTxId.add(jsonElement.getAsJsonObject()); + } + if (jsonElement.getAsJsonObject().has("end-tx-id")) { + withTxId.add(jsonElement.getAsJsonObject()); + } + }); + } + assertEquals("Verify no related-to has end-tx-id in state", count, withTxId.size()); + } + + @Test + public void lifecycleQueryStartTsBeforeCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-C"); + verifyEquipTypeTimestamps(results, 100L); + verifyNodeTimestamps(results, 100L); + verifyRelatedToCreatedTimestamps(results, 100L, 500L, 900L, 1300L); + verifyRelatedToCreatedDeletedTimestamps(results, 300L, 700L, 1100L); + verifyRelatedToCount(results, 4); + verifyRelatedToTxId(results); + } + + @Test + public void lifecycleQueryStartTsBeforeSecondEdgeCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=400"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results); + verifyEquipTypeSoTs(results); + verifyEquipTypeTxId(results); + verifyEquipTypeTimestamps(results); + verifyNodeTimestamps(results); + verifyRelatedToCreatedTimestamps(results, 500L, 900L, 1300L); + verifyRelatedToCreatedDeletedTimestamps(results, 700L, 1100L); + verifyRelatedToCount(results, 3); + verifyRelatedToTxId(results); + } + + @Test + public void lifecycleQueryStartTsAtSecondEdgeDeletionTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=700"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results); + verifyEquipTypeSoTs(results); + verifyEquipTypeTxId(results); + verifyEquipTypeTimestamps(results); + verifyNodeTimestamps(results); + verifyRelatedToCreatedTimestamps(results, 900L, 1300L); + verifyRelatedToCreatedDeletedTimestamps(results, 700L, 1100L); + verifyRelatedToCount(results, 3); + verifyRelatedToTxId(results); + } + + @Test + public void lifecycleQueryStartTsAfterSecondEdgeDeletionTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=800"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results); + verifyEquipTypeSoTs(results); + verifyEquipTypeTxId(results); + verifyEquipTypeTimestamps(results); + verifyNodeTimestamps(results); + verifyRelatedToCreatedTimestamps(results, 900L, 1300L); + verifyRelatedToCreatedDeletedTimestamps(results, 1100L); + verifyRelatedToCount(results, 2); + verifyRelatedToTxId(results); + } + + @Test + public void lifecycleQueryStartTsAtLastEdgeActionTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=1300"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results); + verifyEquipTypeSoTs(results); + verifyEquipTypeTxId(results); + verifyEquipTypeTimestamps(results); + verifyNodeTimestamps(results); + verifyRelatedToCreatedTimestamps(results, 1300L); + verifyRelatedToCreatedDeletedTimestamps(results); + verifyRelatedToCount(results, 1); + verifyRelatedToTxId(results); + } + + @Test + public void lifecycleQueryStartTsAfterLastEdgeActionTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=1400"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 0, results.size()); + + verifyEquipTypeValues(results); + verifyEquipTypeSoTs(results); + verifyEquipTypeTxId(results); + verifyEquipTypeTimestamps(results); + verifyNodeTimestamps(results); + verifyRelatedToCreatedTimestamps(results); + verifyRelatedToCreatedDeletedTimestamps(results); + verifyRelatedToCount(results, 0); + verifyRelatedToTxId(results); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleNodeDeletedThenRecreatedTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleNodeDeletedThenRecreatedTest.java index 25e9e84..dc794b8 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleNodeDeletedThenRecreatedTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleNodeDeletedThenRecreatedTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,9 +19,15 @@ */ package org.onap.aai.rest.history; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.*; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParser; + +import java.util.*; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.janusgraph.core.JanusGraphTransaction; import org.junit.Ignore; @@ -36,709 +42,668 @@ import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import java.util.*; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.*; - -@Ignore("The lifecycle format requires the history schema to be loaded. " + - "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + - "This needs to be addressed.") -public class DslConsumerHistoryLifecycleNodeDeletedThenRecreatedTest extends AbstractSpringHistoryRestTest { - - private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumerHistoryLifecycleNodeDeletedThenRecreatedTest.class); - - @Override - public void createTestGraph() { - JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); - boolean success = true; - try { - GraphTraversalSource g = transaction.traversal(); - /* - Pserver - - created pserver @ time 100 - - equip-type = first-ps-type - - update equip-type @ 500 - - equip-type = first-ps-type-update - - deleted pserver @ time 1000 - */ - g.addV().property(AAIProperties.NODE_TYPE, "pserver", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.AAI_URI, "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.RESOURCE_VERSION, "100", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U", - AAIProperties.END_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 500L - ) - .property(AAIProperties.RESOURCE_VERSION, "500", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", - AAIProperties.START_TX_ID, "JUNIT-U", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 500L, - AAIProperties.END_TS, 1000L - ) - .property("hostname", "test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property("in-maint", false, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property("equip-type", "first-ps-type", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U", - AAIProperties.END_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 500L - ) - .property("equip-type", "first-ps-type-update", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", - AAIProperties.START_TX_ID, "JUNIT-U", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 500L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-D", - AAIProperties.START_TX_ID, "JUNIT-D", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.START_TS, 100L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.END_TS, 1000L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-D", - AAIProperties.START_TX_ID, "JUNIT-D", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 1000L, - AAIProperties.END_TS, 1000L - ) - .next(); - - /* - Pserver - - created pserver @ time 10000 - - equip-type = second-ps-type - - delete equip-type @ 13000 - - recreate equip-type @ 15000 - - equip-type = second-ps-type-recreated - - update equip-type @ 17000 - - equip-type = second-ps-type-update - - delete equip-type @ 20000 - */ - g.addV().property(AAIProperties.NODE_TYPE, "pserver", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .property(AAIProperties.AAI_URI, "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .property(AAIProperties.RESOURCE_VERSION, "10000", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U-1", - AAIProperties.END_TX_ID, "JUNIT-U-1", - AAIProperties.START_TS, 10000L, - AAIProperties.END_TS, 13000L - ) - .property(AAIProperties.RESOURCE_VERSION, "13000", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U-1", - AAIProperties.START_TX_ID, "JUNIT-U-1", - AAIProperties.END_SOT, "JUNIT-U-2", - AAIProperties.END_TX_ID, "JUNIT-U-2", - AAIProperties.START_TS, 13000L, - AAIProperties.END_TS, 15000L - ) - .property(AAIProperties.RESOURCE_VERSION, "15000", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U-2", - AAIProperties.START_TX_ID, "JUNIT-U-2", - AAIProperties.END_SOT, "JUNIT-U-3", - AAIProperties.END_TX_ID, "JUNIT-U-3", - AAIProperties.START_TS, 15000L, - AAIProperties.END_TS, 17000L - ) - .property(AAIProperties.RESOURCE_VERSION, "17000", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U-3", - AAIProperties.START_TX_ID, "JUNIT-U-3", - AAIProperties.END_SOT, "JUNIT-U-4", - AAIProperties.END_TX_ID, "JUNIT-U-4", - AAIProperties.START_TS, 17000L, - AAIProperties.END_TS, 20000L - ) - .property(AAIProperties.RESOURCE_VERSION, "20000", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U-4", - AAIProperties.START_TX_ID, "JUNIT-U-4", - AAIProperties.START_TS, 20000L - ) - .property("hostname", "test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .property("in-maint", true, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .property("equip-type", "second-ps-type", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U-1", - AAIProperties.END_TX_ID, "JUNIT-U-1", - AAIProperties.START_TS, 10000L, - AAIProperties.END_TS, 13000L - ) - .property("equip-type", "second-ps-type-recreated", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U-2", - AAIProperties.START_TX_ID, "JUNIT-U-2", - AAIProperties.END_SOT, "JUNIT-U-3", - AAIProperties.END_TX_ID, "JUNIT-U-3", - AAIProperties.START_TS, 15000L, - AAIProperties.END_TS, 17000L - ) - .property("equip-type", "second-ps-type-update", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U-3", - AAIProperties.START_TX_ID, "JUNIT-U-3", - AAIProperties.START_TS, 17000L, - AAIProperties.END_SOT, "JUNIT-U-4", - AAIProperties.END_TX_ID, "JUNIT-U-4", - AAIProperties.END_TS, 20000L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .property(AAIProperties.START_TS, 10000L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .next(); - } catch (Exception ex) { - success = false; - } finally { - if (success) { - transaction.commit(); - } else { - transaction.rollback(); - fail("Unable to setup the graph"); - } - } - } - - private JsonArray getResultsForPserverLookupByHostname(String endpoint) throws Exception { - return getResultsForPserverLookupByHostnameAndAnother(endpoint, ""); - } - - private JsonArray getResultsForPserverLookupByHostnameAndAnother(String endpoint, String additionalFilterInParen) throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')" + additionalFilterInParen); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()).getAsJsonObject().getAsJsonArray("results"); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - - assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - return results; - } - - - private void verifyEquipTypeValues(JsonArray results, String... expectedEquipTypes) { - List<String> expected = Arrays.asList(expectedEquipTypes); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("value") && !property.getAsJsonObject().get("value").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("value").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type in lifecycle", actualEquipType, is(expected)); - } - - private void verifyEquipTypeSoTs(JsonArray results, String... expectedSTOs) { - List<String> expected = Arrays.asList(expectedSTOs); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("sot") && !property.getAsJsonObject().get("sot").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("sot").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type SoTs in lifecycle", actualEquipType, is(expected)); - } - - private void verifyEquipTypeTxId(JsonArray results, String... expectedSTOs) { - List<String> expected = Arrays.asList(expectedSTOs); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("tx-id") && !property.getAsJsonObject().get("tx-id").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("tx-id").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type tx-ids in lifecycle", actualEquipType, is(expected)); - } - - private void verifyEquipTypeTimestamps(JsonArray results, Long... expectedSTOs) { - List<Long> expected = Arrays.asList(expectedSTOs); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("timestamp") && !property.getAsJsonObject().get("timestamp").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("timestamp").getAsLong()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type timestamps in lifecycle", actualEquipType, is(expected)); - } - - private void verifyNodeTimestamps(JsonArray results, Long... nodeTimestamps) { - List<Long> expected = Arrays.asList(nodeTimestamps); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - result.getAsJsonObject().get("node-actions").getAsJsonArray().forEach(jsonElement -> - actualEquipType.add(jsonElement.getAsJsonObject().get("timestamp").getAsLong())); - } - assertThat("Verify node-changes timestamps in lifecycle", actualEquipType, is(expected)); - } - - private void verifyNodeSot(JsonArray results, String... nodeSots) { - List<String> expected = Arrays.asList(nodeSots); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - result.getAsJsonObject().get("node-actions").getAsJsonArray().forEach(jsonElement -> - actualEquipType.add(jsonElement.getAsJsonObject().get("sot").getAsString())); - } - assertThat("Verify node-changes sot in lifecycle", actualEquipType, is(expected)); - } - - - @Test - public void lifecycleQueryNoStartOrEndTsTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type", "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L, 100L); - verifyNodeTimestamps(results, 10000L, 1000L, 100L); - - - String equipType = "first-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 500L, 100L); - verifyNodeTimestamps(results, 1000L, 100L); - - equipType = "second-ps-type-recreated"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); - verifyNodeTimestamps(results, 10000L); - } - - - - @Test - public void lifecycleQueryStartTsBeforeCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type", "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L, 100L); - verifyNodeTimestamps(results, 10000L, 1000L, 100L); - - - String equipType = "first-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 500L, 100L); - verifyNodeTimestamps(results, 1000L, 100L); - - equipType = "second-ps-type-recreated"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); - verifyNodeTimestamps(results, 10000L); - } - - @Test - public void lifecycleQueryStartTsAtCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=100"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type", "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L, 100L); - verifyNodeTimestamps(results, 10000L, 1000L, 100L); - } - - @Test - public void lifecycleQueryStartTsAfterCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=300"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type", "first-ps-type-update"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L); - verifyNodeTimestamps(results, 10000L, 1000L); - } - - @Test - public void lifecycleQueryStartTsAtFirstUpdateTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=500"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type", "first-ps-type-update"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L); - verifyNodeTimestamps(results, 10000L, 1000L); - } - - @Test - public void lifecycleQueryStartTsAfterFirstUpdateTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=700"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); - verifyNodeTimestamps(results, 10000L, 1000L); - } - - @Test - public void lifecycleQueryStartTsAtFirstDeleteTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=1000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); - verifyNodeTimestamps(results, 10000L, 1000L); - } - - @Test - public void lifecycleQueryStartTsAfterFirstDeleteTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=5000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); - verifyNodeTimestamps(results, 10000L); - } - - @Test - public void lifecycleQueryStartTsAtSecondCreateTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=10000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); - verifyNodeTimestamps(results, 10000L); - } - - @Test - public void lifecycleQueryStartTsAfterSecondCreateTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=12000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L); - verifyNodeTimestamps(results); - } - - @Test - public void lifecycleQueryStartTsAtEquipTypeFirstDeleteOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=13000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L); - verifyNodeTimestamps(results); - } - - @Test - public void lifecycleQueryStartTsAfterEquipTypeFirstDeleteOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=14000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L); - verifyNodeTimestamps(results); - } - - @Test - public void lifecycleQueryStartTsAtEquipTypeRecreateOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=15000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L); - verifyNodeTimestamps(results); - } - - @Test - public void lifecycleQueryStartTsAfterEquipTypeRecreateOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=16000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3"); - verifyEquipTypeTimestamps(results, 20000L, 17000L); - verifyNodeTimestamps(results); - } - - @Test - public void lifecycleQueryStartTsAtEquipTypeUpdateOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=17000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3"); - verifyEquipTypeTimestamps(results, 20000L, 17000L); - verifyNodeTimestamps(results); - } - - @Test - public void lifecycleQueryStartTsAfterEquipTypeUpdateOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=19000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, new String[] {null}); - verifyEquipTypeSoTs(results, "JUNIT-U-4"); - verifyEquipTypeTxId(results, "JUNIT-U-4"); - verifyEquipTypeTimestamps(results, 20000L); - verifyNodeTimestamps(results); - } - - @Test - public void lifecycleQueryStartTsOnEquipTypeSecondDeleteOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=20000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, new String[] {null}); - verifyEquipTypeSoTs(results, "JUNIT-U-4"); - verifyEquipTypeTxId(results, "JUNIT-U-4"); - verifyEquipTypeTimestamps(results, 20000L); - verifyNodeTimestamps(results); - } - - @Test - public void lifecycleQueryStartTsAfterEquipTypeSecondDeleteOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=22000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 0, results.size()); - - verifyEquipTypeValues(results); - verifyEquipTypeSoTs(results); - verifyEquipTypeTxId(results); - verifyEquipTypeTimestamps(results); - verifyNodeTimestamps(results); - } - - @Test - public void lifecycleQueryStartTsBeforeCreationEndTimeAfterEquipTypeSecondDeleteOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50&endTs=22000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type", "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L, 100L); - verifyNodeTimestamps(results, 10000L, 1000L, 100L); - } - - @Test - public void lifecycleQueryStartTsBeforeCreationEndTimeAtEquipTypeSecondDeleteOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50&endTs=20000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type", "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L, 100L); - verifyNodeTimestamps(results, 10000L, 1000L, 100L); - } - - @Test - public void lifecycleQueryStartTsBeforeCreationEndTimeBeforeEquipTypeSecondDeleteOnSecondPsTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50&endTs=19000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "second-ps-type-update", "second-ps-type-recreated", null, "second-ps-type", "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 17000L, 15000L, 13000L, 10000L, 500L, 100L); - verifyNodeTimestamps(results, 10000L, 1000L, 100L); - } - - @Test - public void lifecycleQueryStartTsBeforeCreationEndTimeBeforeSecondPsCreateTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50&endTs=9000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 500L, 100L); - verifyNodeTimestamps(results, 1000L, 100L); - } - - @Test - public void verifyNodeActionsWithNoTimeRangeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - verifyNodeTimestamps(results, 10000L, 1000L, 100L); - verifyNodeSot(results, "JUNIT-C", "JUNIT-D", "JUNIT-C"); - } +@Ignore("The lifecycle format requires the history schema to be loaded. " + + "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + + "This needs to be addressed.") +public class DslConsumerHistoryLifecycleNodeDeletedThenRecreatedTest + extends AbstractSpringHistoryRestTest { + + private static final Logger LOGGER = + LoggerFactory.getLogger(DslConsumerHistoryLifecycleNodeDeletedThenRecreatedTest.class); + + @Override + public void createTestGraph() { + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + /* + * Pserver + * - created pserver @ time 100 + * - equip-type = first-ps-type + * - update equip-type @ 500 + * - equip-type = first-ps-type-update + * - deleted pserver @ time 1000 + */ + g.addV() + .property(AAIProperties.NODE_TYPE, "pserver", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.AAI_URI, + "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.END_SOT, "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", + AAIProperties.START_TS, 100L, AAIProperties.END_TS, 1000L) + .property(AAIProperties.RESOURCE_VERSION, "100", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-U", AAIProperties.END_TX_ID, "JUNIT-U", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 500L) + .property(AAIProperties.RESOURCE_VERSION, "500", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U", AAIProperties.START_TX_ID, "JUNIT-U", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 500L, + AAIProperties.END_TS, 1000L) + .property("hostname", "test-pserver-dsl", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property("in-maint", false, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property("equip-type", "first-ps-type", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-U", + AAIProperties.END_TX_ID, "JUNIT-U", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 500L) + .property("equip-type", "first-ps-type-update", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U", AAIProperties.START_TX_ID, "JUNIT-U", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 500L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.END_SOT, "JUNIT-D", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-D", AAIProperties.START_TX_ID, "JUNIT-D", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.START_TS, 100L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.END_TS, 1000L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-D", + AAIProperties.START_TX_ID, "JUNIT-D", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 1000L, + AAIProperties.END_TS, 1000L) + .next(); + + /* + * Pserver + * - created pserver @ time 10000 + * - equip-type = second-ps-type + * - delete equip-type @ 13000 + * - recreate equip-type @ 15000 + * - equip-type = second-ps-type-recreated + * - update equip-type @ 17000 + * - equip-type = second-ps-type-update + * - delete equip-type @ 20000 + */ + g.addV() + .property(AAIProperties.NODE_TYPE, "pserver", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 10000L) + .property(AAIProperties.AAI_URI, + "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.START_TS, 10000L) + .property(AAIProperties.RESOURCE_VERSION, "10000", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-U-1", AAIProperties.END_TX_ID, "JUNIT-U-1", AAIProperties.START_TS, + 10000L, AAIProperties.END_TS, 13000L) + .property(AAIProperties.RESOURCE_VERSION, "13000", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U-1", AAIProperties.START_TX_ID, "JUNIT-U-1", AAIProperties.END_SOT, + "JUNIT-U-2", AAIProperties.END_TX_ID, "JUNIT-U-2", AAIProperties.START_TS, + 13000L, AAIProperties.END_TS, 15000L) + .property(AAIProperties.RESOURCE_VERSION, "15000", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U-2", AAIProperties.START_TX_ID, "JUNIT-U-2", AAIProperties.END_SOT, + "JUNIT-U-3", AAIProperties.END_TX_ID, "JUNIT-U-3", AAIProperties.START_TS, + 15000L, AAIProperties.END_TS, 17000L) + .property(AAIProperties.RESOURCE_VERSION, "17000", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U-3", AAIProperties.START_TX_ID, "JUNIT-U-3", AAIProperties.END_SOT, + "JUNIT-U-4", AAIProperties.END_TX_ID, "JUNIT-U-4", AAIProperties.START_TS, + 17000L, AAIProperties.END_TS, 20000L) + .property(AAIProperties.RESOURCE_VERSION, "20000", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U-4", AAIProperties.START_TX_ID, "JUNIT-U-4", AAIProperties.START_TS, + 20000L) + .property("hostname", "test-pserver-dsl", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 10000L) + .property("in-maint", true, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 10000L) + .property("equip-type", "second-ps-type", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-U-1", + AAIProperties.END_TX_ID, "JUNIT-U-1", AAIProperties.START_TS, 10000L, + AAIProperties.END_TS, 13000L) + .property("equip-type", "second-ps-type-recreated", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U-2", AAIProperties.START_TX_ID, "JUNIT-U-2", AAIProperties.END_SOT, + "JUNIT-U-3", AAIProperties.END_TX_ID, "JUNIT-U-3", AAIProperties.START_TS, + 15000L, AAIProperties.END_TS, 17000L) + .property("equip-type", "second-ps-type-update", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U-3", AAIProperties.START_TX_ID, "JUNIT-U-3", AAIProperties.START_TS, + 17000L, AAIProperties.END_SOT, "JUNIT-U-4", AAIProperties.END_TX_ID, + "JUNIT-U-4", AAIProperties.END_TS, 20000L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 10000L) + .property(AAIProperties.START_TS, 10000L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 10000L) + .next(); + } catch (Exception ex) { + success = false; + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to setup the graph"); + } + } + } + + private JsonArray getResultsForPserverLookupByHostname(String endpoint) throws Exception { + return getResultsForPserverLookupByHostnameAndAnother(endpoint, ""); + } + + private JsonArray getResultsForPserverLookupByHostnameAndAnother(String endpoint, + String additionalFilterInParen) throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver*('hostname','test-pserver-dsl')" + additionalFilterInParen); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()) + .getAsJsonObject().getAsJsonArray("results"); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + + assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + return results; + } + + private void verifyEquipTypeValues(JsonArray results, String... expectedEquipTypes) { + List<String> expected = Arrays.asList(expectedEquipTypes); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("value") + && !property.getAsJsonObject().get("value").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("value").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type in lifecycle", actualEquipType, is(expected)); + } + + private void verifyEquipTypeSoTs(JsonArray results, String... expectedSTOs) { + List<String> expected = Arrays.asList(expectedSTOs); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("sot") + && !property.getAsJsonObject().get("sot").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("sot").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type SoTs in lifecycle", actualEquipType, is(expected)); + } + + private void verifyEquipTypeTxId(JsonArray results, String... expectedSTOs) { + List<String> expected = Arrays.asList(expectedSTOs); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("tx-id") + && !property.getAsJsonObject().get("tx-id").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("tx-id").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type tx-ids in lifecycle", actualEquipType, is(expected)); + } + + private void verifyEquipTypeTimestamps(JsonArray results, Long... expectedSTOs) { + List<Long> expected = Arrays.asList(expectedSTOs); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("timestamp") + && !property.getAsJsonObject().get("timestamp").isJsonNull()) { + actualEquipType + .add(property.getAsJsonObject().get("timestamp").getAsLong()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type timestamps in lifecycle", actualEquipType, is(expected)); + } + + private void verifyNodeTimestamps(JsonArray results, Long... nodeTimestamps) { + List<Long> expected = Arrays.asList(nodeTimestamps); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + result.getAsJsonObject().get("node-actions").getAsJsonArray() + .forEach(jsonElement -> actualEquipType + .add(jsonElement.getAsJsonObject().get("timestamp").getAsLong())); + } + assertThat("Verify node-changes timestamps in lifecycle", actualEquipType, is(expected)); + } + + private void verifyNodeSot(JsonArray results, String... nodeSots) { + List<String> expected = Arrays.asList(nodeSots); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + result.getAsJsonObject().get("node-actions").getAsJsonArray() + .forEach(jsonElement -> actualEquipType + .add(jsonElement.getAsJsonObject().get("sot").getAsString())); + } + assertThat("Verify node-changes sot in lifecycle", actualEquipType, is(expected)); + } + + @Test + public void lifecycleQueryNoStartOrEndTsTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type", "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L, 100L); + verifyNodeTimestamps(results, 10000L, 1000L, 100L); + + String equipType = "first-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 500L, 100L); + verifyNodeTimestamps(results, 1000L, 100L); + + equipType = "second-ps-type-recreated"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); + verifyNodeTimestamps(results, 10000L); + } + + @Test + public void lifecycleQueryStartTsBeforeCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type", "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L, 100L); + verifyNodeTimestamps(results, 10000L, 1000L, 100L); + + String equipType = "first-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 500L, 100L); + verifyNodeTimestamps(results, 1000L, 100L); + + equipType = "second-ps-type-recreated"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); + verifyNodeTimestamps(results, 10000L); + } + + @Test + public void lifecycleQueryStartTsAtCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=100"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type", "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L, 100L); + verifyNodeTimestamps(results, 10000L, 1000L, 100L); + } + + @Test + public void lifecycleQueryStartTsAfterCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=300"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type", "first-ps-type-update"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L); + verifyNodeTimestamps(results, 10000L, 1000L); + } + + @Test + public void lifecycleQueryStartTsAtFirstUpdateTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=500"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type", "first-ps-type-update"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L); + verifyNodeTimestamps(results, 10000L, 1000L); + } + + @Test + public void lifecycleQueryStartTsAfterFirstUpdateTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=700"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); + verifyNodeTimestamps(results, 10000L, 1000L); + } + + @Test + public void lifecycleQueryStartTsAtFirstDeleteTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=1000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); + verifyNodeTimestamps(results, 10000L, 1000L); + } + + @Test + public void lifecycleQueryStartTsAfterFirstDeleteTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=5000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); + verifyNodeTimestamps(results, 10000L); + } + + @Test + public void lifecycleQueryStartTsAtSecondCreateTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=10000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L); + verifyNodeTimestamps(results, 10000L); + } + + @Test + public void lifecycleQueryStartTsAfterSecondCreateTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=12000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L); + verifyNodeTimestamps(results); + } + + @Test + public void lifecycleQueryStartTsAtEquipTypeFirstDeleteOnSecondPsTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=13000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L); + verifyNodeTimestamps(results); + } + + @Test + public void lifecycleQueryStartTsAfterEquipTypeFirstDeleteOnSecondPsTimeTest() + throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=14000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L); + verifyNodeTimestamps(results); + } + + @Test + public void lifecycleQueryStartTsAtEquipTypeRecreateOnSecondPsTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=15000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L); + verifyNodeTimestamps(results); + } + + @Test + public void lifecycleQueryStartTsAfterEquipTypeRecreateOnSecondPsTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=16000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3"); + verifyEquipTypeTimestamps(results, 20000L, 17000L); + verifyNodeTimestamps(results); + } + + @Test + public void lifecycleQueryStartTsAtEquipTypeUpdateOnSecondPsTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=17000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3"); + verifyEquipTypeTimestamps(results, 20000L, 17000L); + verifyNodeTimestamps(results); + } + + @Test + public void lifecycleQueryStartTsAfterEquipTypeUpdateOnSecondPsTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=19000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, new String[] {null}); + verifyEquipTypeSoTs(results, "JUNIT-U-4"); + verifyEquipTypeTxId(results, "JUNIT-U-4"); + verifyEquipTypeTimestamps(results, 20000L); + verifyNodeTimestamps(results); + } + + @Test + public void lifecycleQueryStartTsOnEquipTypeSecondDeleteOnSecondPsTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=20000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, new String[] {null}); + verifyEquipTypeSoTs(results, "JUNIT-U-4"); + verifyEquipTypeTxId(results, "JUNIT-U-4"); + verifyEquipTypeTimestamps(results, 20000L); + verifyNodeTimestamps(results); + } + + @Test + public void lifecycleQueryStartTsAfterEquipTypeSecondDeleteOnSecondPsTimeTest() + throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=22000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 0, results.size()); + + verifyEquipTypeValues(results); + verifyEquipTypeSoTs(results); + verifyEquipTypeTxId(results); + verifyEquipTypeTimestamps(results); + verifyNodeTimestamps(results); + } + + @Test + public void lifecycleQueryStartTsBeforeCreationEndTimeAfterEquipTypeSecondDeleteOnSecondPsTimeTest() + throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50&endTs=22000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type", "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L, 100L); + verifyNodeTimestamps(results, 10000L, 1000L, 100L); + } + + @Test + public void lifecycleQueryStartTsBeforeCreationEndTimeAtEquipTypeSecondDeleteOnSecondPsTimeTest() + throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50&endTs=20000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, null, "second-ps-type-update", "second-ps-type-recreated", + null, "second-ps-type", "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-4", "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", + "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 20000L, 17000L, 15000L, 13000L, 10000L, 500L, 100L); + verifyNodeTimestamps(results, 10000L, 1000L, 100L); + } + + @Test + public void lifecycleQueryStartTsBeforeCreationEndTimeBeforeEquipTypeSecondDeleteOnSecondPsTimeTest() + throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50&endTs=19000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "second-ps-type-update", "second-ps-type-recreated", null, + "second-ps-type", "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", + "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U-3", "JUNIT-U-2", "JUNIT-U-1", "JUNIT-C", "JUNIT-U", + "JUNIT-C"); + verifyEquipTypeTimestamps(results, 17000L, 15000L, 13000L, 10000L, 500L, 100L); + verifyNodeTimestamps(results, 10000L, 1000L, 100L); + } + + @Test + public void lifecycleQueryStartTsBeforeCreationEndTimeBeforeSecondPsCreateTimeTest() + throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50&endTs=9000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 500L, 100L); + verifyNodeTimestamps(results, 1000L, 100L); + } + + @Test + public void verifyNodeActionsWithNoTimeRangeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + verifyNodeTimestamps(results, 10000L, 1000L, 100L); + verifyNodeSot(results, "JUNIT-C", "JUNIT-D", "JUNIT-C"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleSingleNodeTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleSingleNodeTest.java index e59573d..6d1a36c 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleSingleNodeTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryLifecycleSingleNodeTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,9 +19,15 @@ */ package org.onap.aai.rest.history; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.*; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParser; + +import java.util.*; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.janusgraph.core.JanusGraphTransaction; import org.junit.Ignore; @@ -36,432 +42,404 @@ import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import java.util.*; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.*; - -@Ignore("The lifecycle format requires the history schema to be loaded. " + - "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + - "This needs to be addressed.") +@Ignore("The lifecycle format requires the history schema to be loaded. " + + "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + + "This needs to be addressed.") public class DslConsumerHistoryLifecycleSingleNodeTest extends AbstractSpringHistoryRestTest { - private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumerHistoryLifecycleSingleNodeTest.class); - - @Override - public void createTestGraph() { - JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); - boolean success = true; - try { - GraphTraversalSource g = transaction.traversal(); - /* - Pserver - - created pserver @ time 100 - - equip-type = first-ps-type - - update equip-type @ 500 - - equip-type = first-ps-type-update - - deleted pserver @ time 1000 - */ - g.addV().property(AAIProperties.NODE_TYPE, "pserver", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.AAI_URI, "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.RESOURCE_VERSION, "100", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U", - AAIProperties.END_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 500L - ) - .property(AAIProperties.RESOURCE_VERSION, "500", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", - AAIProperties.START_TX_ID, "JUNIT-U", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 500L, - AAIProperties.END_TS, 1000L - ) - .property("hostname", "test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property("in-maint", false, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property("equip-type", "first-ps-type", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U", - AAIProperties.END_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 500L - ) - .property("equip-type", "first-ps-type-update", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", - AAIProperties.START_TX_ID, "JUNIT-U", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 500L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-D", - AAIProperties.START_TX_ID, "JUNIT-D", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.START_TS, 100L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.END_TS, 1000L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-D", - AAIProperties.START_TX_ID, "JUNIT-D", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 1000L, - AAIProperties.END_TS, 1000L - ) - .next(); - - } catch (Exception ex) { - success = false; - } finally { - if (success) { - transaction.commit(); - } else { - transaction.rollback(); - fail("Unable to setup the graph"); - } - } - } - - private JsonArray getResultsForPserverLookupByHostname(String endpoint) throws Exception { - return getResultsForPserverLookupByHostnameAndAnother(endpoint, ""); - } - - private JsonArray getResultsForPserverLookupByHostnameAndAnother(String endpoint, String additionalFilterInParen) throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')" + additionalFilterInParen); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()).getAsJsonObject().getAsJsonArray("results"); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - - assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - return results; - } - - - private void verifyEquipTypeValues(JsonArray results, String... expectedEquipTypes) { - List<String> expected = Arrays.asList(expectedEquipTypes); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("value") && !property.getAsJsonObject().get("value").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("value").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type in lifecycle", actualEquipType, is(expected)); - } - - private void verifyEquipTypeSoTs(JsonArray results, String... expectedSTOs) { - List<String> expected = Arrays.asList(expectedSTOs); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("sot") && !property.getAsJsonObject().get("sot").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("sot").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type SoTs in lifecycle", actualEquipType, is(expected)); - } - - private void verifyEquipTypeTxId(JsonArray results, String... expectedSTOs) { - List<String> expected = Arrays.asList(expectedSTOs); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("tx-id") && !property.getAsJsonObject().get("tx-id").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("tx-id").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type tx-ids in lifecycle", actualEquipType, is(expected)); - } - - private void verifyEquipTypeTimestamps(JsonArray results, Long... expectedSTOs) { - List<Long> expected = Arrays.asList(expectedSTOs); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("timestamp") && !property.getAsJsonObject().get("timestamp").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("timestamp").getAsLong()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type timestamps in lifecycle", actualEquipType, is(expected)); - } - - private void verifyNodeTimestamps(JsonArray results, Long... nodeTimestamps) { - List<Long> expected = Arrays.asList(nodeTimestamps); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - result.getAsJsonObject().get("node-actions").getAsJsonArray().forEach(jsonElement -> - actualEquipType.add(jsonElement.getAsJsonObject().get("timestamp").getAsLong())); - } - assertThat("Verify node-changes timestamps in lifecycle", actualEquipType, is(expected)); - } - - - @Test - public void lifecycleQueryNoStartOrEndTsTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 500L, 100L); - verifyNodeTimestamps(results, 1000L, 100L); - - - String equipType = "first-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 500L, 100L); - verifyNodeTimestamps(results, 1000L, 100L); - - equipType = "other-ps-type-recreated"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } - - - - @Test - public void lifecycleQueryStartTsBeforeCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 500L, 100L); - verifyNodeTimestamps(results, 1000L, 100L); - - - String equipType = "first-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 500L, 100L); - verifyNodeTimestamps(results, 1000L, 100L); - - equipType = "other-ps-type-recreated"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } - - @Test - public void lifecycleQueryStartTsAtCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=100"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 500L, 100L); - verifyNodeTimestamps(results, 1000L, 100L); - - - String equipType = "first-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); - verifyEquipTypeTimestamps(results, 500L, 100L); - verifyNodeTimestamps(results, 1000L, 100L); - - equipType = "other-ps-type-recreated"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } - - @Test - public void lifecycleQueryStartTsAfterCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=300"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "first-ps-type-update"); - verifyEquipTypeSoTs(results, "JUNIT-U"); - verifyEquipTypeTxId(results, "JUNIT-U"); - verifyEquipTypeTimestamps(results, 500L); - verifyNodeTimestamps(results, 1000L); - - - String equipType = "first-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update"); - verifyEquipTypeSoTs(results, "JUNIT-U"); - verifyEquipTypeTxId(results, "JUNIT-U"); - verifyEquipTypeTimestamps(results, 500L); - verifyNodeTimestamps(results, 1000L); - - equipType = "other-ps-type-recreated"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } - - @Test - public void lifecycleQueryStartTsAtUpdateTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=500"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "first-ps-type-update"); - verifyEquipTypeSoTs(results, "JUNIT-U"); - verifyEquipTypeTxId(results, "JUNIT-U"); - verifyEquipTypeTimestamps(results, 500L); - verifyNodeTimestamps(results, 1000L); - - - String equipType = "first-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update"); - verifyEquipTypeSoTs(results, "JUNIT-U"); - verifyEquipTypeTxId(results, "JUNIT-U"); - verifyEquipTypeTimestamps(results, 500L); - verifyNodeTimestamps(results, 1000L); - - equipType = "other-ps-type-recreated"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } - - @Test - public void lifecycleQueryStartTsAfterUpdateTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=700"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results); - verifyEquipTypeSoTs(results); - verifyEquipTypeTxId(results); - verifyEquipTypeTimestamps(results); - verifyNodeTimestamps(results, 1000L); - - - String equipType = "first-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - equipType = "other-ps-type-recreated"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } - - @Test - public void lifecycleQueryStartTsAtDeleteTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=1000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - assertEquals("properties size should be 0", results.get(0).getAsJsonObject().get("properties").getAsJsonArray().size(), 0); - - String equipType = "first-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } - - @Test - public void lifecycleQueryStartTsAfterDeleteTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=5000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 0, results.size()); - - String equipType = "first-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - equipType = "other-ps-type-recreated"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } + private static final Logger LOGGER = + LoggerFactory.getLogger(DslConsumerHistoryLifecycleSingleNodeTest.class); + + @Override + public void createTestGraph() { + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + /* + * Pserver + * - created pserver @ time 100 + * - equip-type = first-ps-type + * - update equip-type @ 500 + * - equip-type = first-ps-type-update + * - deleted pserver @ time 1000 + */ + g.addV() + .property(AAIProperties.NODE_TYPE, "pserver", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.AAI_URI, + "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.END_SOT, "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", + AAIProperties.START_TS, 100L, AAIProperties.END_TS, 1000L) + .property(AAIProperties.RESOURCE_VERSION, "100", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-U", AAIProperties.END_TX_ID, "JUNIT-U", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 500L) + .property(AAIProperties.RESOURCE_VERSION, "500", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U", AAIProperties.START_TX_ID, "JUNIT-U", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 500L, + AAIProperties.END_TS, 1000L) + .property("hostname", "test-pserver-dsl", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property("in-maint", false, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property("equip-type", "first-ps-type", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-U", + AAIProperties.END_TX_ID, "JUNIT-U", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 500L) + .property("equip-type", "first-ps-type-update", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U", AAIProperties.START_TX_ID, "JUNIT-U", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 500L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.END_SOT, "JUNIT-D", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-D", AAIProperties.START_TX_ID, "JUNIT-D", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.START_TS, 100L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.END_TS, 1000L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-D", + AAIProperties.START_TX_ID, "JUNIT-D", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 1000L, + AAIProperties.END_TS, 1000L) + .next(); + + } catch (Exception ex) { + success = false; + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to setup the graph"); + } + } + } + + private JsonArray getResultsForPserverLookupByHostname(String endpoint) throws Exception { + return getResultsForPserverLookupByHostnameAndAnother(endpoint, ""); + } + + private JsonArray getResultsForPserverLookupByHostnameAndAnother(String endpoint, + String additionalFilterInParen) throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver*('hostname','test-pserver-dsl')" + additionalFilterInParen); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()) + .getAsJsonObject().getAsJsonArray("results"); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + + assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + return results; + } + + private void verifyEquipTypeValues(JsonArray results, String... expectedEquipTypes) { + List<String> expected = Arrays.asList(expectedEquipTypes); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("value") + && !property.getAsJsonObject().get("value").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("value").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type in lifecycle", actualEquipType, is(expected)); + } + + private void verifyEquipTypeSoTs(JsonArray results, String... expectedSTOs) { + List<String> expected = Arrays.asList(expectedSTOs); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("sot") + && !property.getAsJsonObject().get("sot").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("sot").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type SoTs in lifecycle", actualEquipType, is(expected)); + } + + private void verifyEquipTypeTxId(JsonArray results, String... expectedSTOs) { + List<String> expected = Arrays.asList(expectedSTOs); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("tx-id") + && !property.getAsJsonObject().get("tx-id").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("tx-id").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type tx-ids in lifecycle", actualEquipType, is(expected)); + } + + private void verifyEquipTypeTimestamps(JsonArray results, Long... expectedSTOs) { + List<Long> expected = Arrays.asList(expectedSTOs); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("timestamp") + && !property.getAsJsonObject().get("timestamp").isJsonNull()) { + actualEquipType + .add(property.getAsJsonObject().get("timestamp").getAsLong()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type timestamps in lifecycle", actualEquipType, is(expected)); + } + + private void verifyNodeTimestamps(JsonArray results, Long... nodeTimestamps) { + List<Long> expected = Arrays.asList(nodeTimestamps); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + result.getAsJsonObject().get("node-actions").getAsJsonArray() + .forEach(jsonElement -> actualEquipType + .add(jsonElement.getAsJsonObject().get("timestamp").getAsLong())); + } + assertThat("Verify node-changes timestamps in lifecycle", actualEquipType, is(expected)); + } + + @Test + public void lifecycleQueryNoStartOrEndTsTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 500L, 100L); + verifyNodeTimestamps(results, 1000L, 100L); + + String equipType = "first-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 500L, 100L); + verifyNodeTimestamps(results, 1000L, 100L); + + equipType = "other-ps-type-recreated"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + } + + @Test + public void lifecycleQueryStartTsBeforeCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=50"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 500L, 100L); + verifyNodeTimestamps(results, 1000L, 100L); + + String equipType = "first-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 500L, 100L); + verifyNodeTimestamps(results, 1000L, 100L); + + equipType = "other-ps-type-recreated"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + } + + @Test + public void lifecycleQueryStartTsAtCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=100"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 500L, 100L); + verifyNodeTimestamps(results, 1000L, 100L); + + String equipType = "first-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update", "first-ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTxId(results, "JUNIT-U", "JUNIT-C"); + verifyEquipTypeTimestamps(results, 500L, 100L); + verifyNodeTimestamps(results, 1000L, 100L); + + equipType = "other-ps-type-recreated"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + } + + @Test + public void lifecycleQueryStartTsAfterCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=300"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "first-ps-type-update"); + verifyEquipTypeSoTs(results, "JUNIT-U"); + verifyEquipTypeTxId(results, "JUNIT-U"); + verifyEquipTypeTimestamps(results, 500L); + verifyNodeTimestamps(results, 1000L); + + String equipType = "first-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update"); + verifyEquipTypeSoTs(results, "JUNIT-U"); + verifyEquipTypeTxId(results, "JUNIT-U"); + verifyEquipTypeTimestamps(results, 500L); + verifyNodeTimestamps(results, 1000L); + + equipType = "other-ps-type-recreated"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + } + + @Test + public void lifecycleQueryStartTsAtUpdateTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=500"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "first-ps-type-update"); + verifyEquipTypeSoTs(results, "JUNIT-U"); + verifyEquipTypeTxId(results, "JUNIT-U"); + verifyEquipTypeTimestamps(results, 500L); + verifyNodeTimestamps(results, 1000L); + + String equipType = "first-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update"); + verifyEquipTypeSoTs(results, "JUNIT-U"); + verifyEquipTypeTxId(results, "JUNIT-U"); + verifyEquipTypeTimestamps(results, 500L); + verifyNodeTimestamps(results, 1000L); + + equipType = "other-ps-type-recreated"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + } + + @Test + public void lifecycleQueryStartTsAfterUpdateTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=700"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results); + verifyEquipTypeSoTs(results); + verifyEquipTypeTxId(results); + verifyEquipTypeTimestamps(results); + verifyNodeTimestamps(results, 1000L); + + String equipType = "first-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + equipType = "other-ps-type-recreated"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + } + + @Test + public void lifecycleQueryStartTsAtDeleteTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=1000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + assertEquals("properties size should be 0", + results.get(0).getAsJsonObject().get("properties").getAsJsonArray().size(), 0); + + String equipType = "first-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + } + + @Test + public void lifecycleQueryStartTsAfterDeleteTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=lifecycle&startTs=5000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 0, results.size()); + + String equipType = "first-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + equipType = "other-ps-type-recreated"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryStateEdgeTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryStateEdgeTest.java index 4e122dc..6b9815c 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryStateEdgeTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryStateEdgeTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,10 +19,16 @@ */ package org.onap.aai.rest.history; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.*; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; + +import java.util.*; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.janusgraph.core.JanusGraphTransaction; @@ -38,439 +44,372 @@ import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import java.util.*; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.*; - -@Ignore("The state format requires the history schema to be loaded. " + - "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + - "This needs to be addressed.") +@Ignore("The state format requires the history schema to be loaded. " + + "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + + "This needs to be addressed.") public class DslConsumerHistoryStateEdgeTest extends AbstractSpringHistoryRestTest { - private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumerHistoryStateEdgeTest.class); - - @Override - public void createTestGraph() { - JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); - boolean success = true; - try { - GraphTraversalSource g = transaction.traversal(); - - Vertex pserver = g.addV().property(AAIProperties.NODE_TYPE, "pserver", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.AAI_URI, "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.RESOURCE_VERSION, "100", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("hostname", "test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("in-maint", false, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("equip-type", "ps-type", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.START_TS, 100L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .next(); - Vertex complex = g.addV().property(AAIProperties.NODE_TYPE, "complex", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.AAI_URI, "/cloud-infrastructure/complexes/complex/test-complex-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.RESOURCE_VERSION, "100", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("physical-location-id", "test-complex-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("street", "200 S. Laurel Ave", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("city", "Middletown", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("state", "NJ", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property("zip", "11111", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .property(AAIProperties.START_TS, 100L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 100L - ) - .next(); - - pserver.addEdge("org.onap.relationships.inventory.LocatedIn", - complex, - "start-ts", 100, - "private", false, - "aai-uuid", "edge1", - "end-source-of-truth", "JUNIT-E-D-1", - "end-tx-id", "JUNIT-E-D-1", - "end-ts", 300, - "prevent-delete", "IN", - "delete-other-v", "NONE", - "source-of-truth", "JUNIT-E-C-1", - "start-tx-id", "JUNIT-E-C-1", - "contains-other-v", "NONE" - ); - pserver.addEdge("org.onap.relationships.inventory.LocatedIn", - complex, - "start-ts", 500, - "private", false, - "aai-uuid", "edge2", - "end-source-of-truth", "JUNIT-E-D-2", - "end-tx-id", "JUNIT-E-D-2", - "end-ts", 700, - "prevent-delete", "IN", - "delete-other-v", "NONE", - "source-of-truth", "JUNIT-E-C-2", - "start-tx-id", "JUNIT-E-C-2", - "contains-other-v", "NONE" - ); - pserver.addEdge("org.onap.relationships.inventory.LocatedIn", - complex, - "start-ts", 900, - "private", false, - "aai-uuid", "edge3", - "end-source-of-truth", "JUNIT-E-D-3", - "end-tx-id", "JUNIT-E-D-3", - "end-ts", 1100, - "prevent-delete", "IN", - "delete-other-v", "NONE", - "source-of-truth", "JUNIT-E-C-3", - "start-tx-id", "JUNIT-E-C-3", - "contains-other-v", "NONE" - ); - pserver.addEdge("org.onap.relationships.inventory.LocatedIn", - complex, - "start-ts", 1300, - "private", false, - "aai-uuid", "edge3", - "prevent-delete", "IN", - "delete-other-v", "NONE", - "source-of-truth", "JUNIT-E-C-3", - "start-tx-id", "JUNIT-E-C-3", - "contains-other-v", "NONE" - ); - } catch (Exception ex) { - success = false; - } finally { - if (success) { - transaction.commit(); - } else { - transaction.rollback(); - fail("Unable to setup the graph"); - } - } - } - - private JsonArray getResultsForPserverLookupByHostname(String endpoint) throws Exception { - return getResultsForPserverLookupByHostnameAndAnother(endpoint, ""); - } - - private JsonArray getResultsForPserverLookupByHostnameAndAnother(String endpoint, String additionalFilterInParen) throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')" + additionalFilterInParen); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()).getAsJsonObject().getAsJsonArray("results"); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - - assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - return results; - } - - - private void verifyEquipTypeValues(JsonArray results, String... expectedEquipTypes) { - List<String> expected = Arrays.asList(expectedEquipTypes); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - assertFalse("State format properties should not have end timestamps", - property.getAsJsonObject().has("end-timestamp")); - if (property.getAsJsonObject().has("value") && !property.getAsJsonObject().get("value").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("value").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type in state", actualEquipType, is(expected)); - } - - private void verifyEquipTypeSoTs(JsonArray results, String... expectedSTOs) { - List<String> expected = Arrays.asList(expectedSTOs); - final List<String> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("sot") && !property.getAsJsonObject().get("sot").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("sot").getAsString()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type SoTs in state", actualEquipType, is(expected)); - } - - private void verifyEquipTypeTimestamps(JsonArray results, Long... expectedSTOs) { - List<Long> expected = Arrays.asList(expectedSTOs); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - if (property.getAsJsonObject().has("timestamp") && !property.getAsJsonObject().get("timestamp").isJsonNull()) { - actualEquipType.add(property.getAsJsonObject().get("timestamp").getAsLong()); - } else { - actualEquipType.add(null); - } - } - } - } - assertThat("Verify equip-type timestamps in state", actualEquipType, is(expected)); - } - - private void verifyRelatedToCreatedTimestamps(JsonArray results, Long... edgeCreatedTimestamps) { - List<Long> expected = Arrays.asList(edgeCreatedTimestamps); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> - actualEquipType.add(jsonElement.getAsJsonObject().get("timestamp").getAsLong())); - } - assertThat("Verify related-to createdtimestamps in state", actualEquipType, is(expected)); - } - - private void verifyRelatedToCreatedDeletedTimestamps(JsonArray results, Long... edgeDeletedTimestamps) { - List<Long> expected = Arrays.asList(edgeDeletedTimestamps); - final List<Long> actualEquipType = new ArrayList<>(); - for (JsonElement result : results) { - result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> { - if (jsonElement.getAsJsonObject().has("end-timestamp")) { - actualEquipType.add(jsonElement.getAsJsonObject().get("end-timestamp").getAsLong()); - } - }); - } - assertThat("Verify related-to created timestamps in state", actualEquipType, is(expected)); - } - - private void verifyRelatedToCount(JsonArray results, int expectedSize) { - int actualSize = 0; - for (JsonElement result : results) { - actualSize += result.getAsJsonObject().get("related-to").getAsJsonArray().size(); - } - assertEquals("Verify related-to count", actualSize, expectedSize); - } - - private void verifyAllPropsTxIds(JsonArray results) { - final Set<String> propMissingCreatedTxId = new HashSet<>(); - final Set<String> propContainingEndTxId = new HashSet<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (!property.getAsJsonObject().has("tx-id")) { - propMissingCreatedTxId.add(property.getAsJsonObject().get("key").getAsString()); - } - if (property.getAsJsonObject().has("end-tx-id")) { - propContainingEndTxId.add(property.getAsJsonObject().get("key").getAsString()); - } - } - } - - assertThat("Verify no prop is missing tx-id in state", propMissingCreatedTxId, is(Collections.EMPTY_SET)); - assertThat("Verify no prop has end-tx-id in state", propContainingEndTxId, is(Collections.EMPTY_SET)); - } - - private void verifyRelatedToCreatedTxId(JsonArray results) { - final Set<JsonObject> edgeMissingCreatedTxId = new HashSet<>(); - final Set<JsonObject> edgeContainingEndTxId = new HashSet<>(); - for (JsonElement result : results) { - result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> { - if (!jsonElement.getAsJsonObject().has("tx-id")) { - edgeMissingCreatedTxId.add(jsonElement.getAsJsonObject()); - } - if (jsonElement.getAsJsonObject().has("end-tx-id")) { - edgeContainingEndTxId.add(jsonElement.getAsJsonObject()); - } - }); - } - assertThat("Verify no related-to is missing tx-id in state", edgeMissingCreatedTxId, is(Collections.EMPTY_SET)); - assertThat("Verify no related-to has end-tx-id in state", edgeContainingEndTxId, is(Collections.EMPTY_SET)); - } - - @Test - public void stateQueryStartTsBeforeCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state&startTs=50"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 0, results.size()); - - verifyEquipTypeValues(results); - verifyEquipTypeSoTs(results); - verifyEquipTypeTimestamps(results); - verifyRelatedToCreatedTimestamps(results); - verifyRelatedToCreatedDeletedTimestamps(results); - verifyRelatedToCount(results, 0); - verifyAllPropsTxIds(results); - verifyRelatedToCreatedTxId(results); - } - - - - @Test - public void stateQueryStartTsBeforeSecondEdgeCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state&startTs=400"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-C"); - verifyEquipTypeTimestamps(results, 100L); - verifyRelatedToCreatedTimestamps(results); - verifyRelatedToCreatedDeletedTimestamps(results); - verifyRelatedToCount(results, 0); - verifyAllPropsTxIds(results); - verifyRelatedToCreatedTxId(results); - } - - @Test - public void stateQueryStartTsAfterSecondEdgeCreationTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state&startTs=600"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-C"); - verifyEquipTypeTimestamps(results, 100L); - verifyRelatedToCreatedTimestamps(results, 500L); - verifyRelatedToCreatedDeletedTimestamps(results); - verifyRelatedToCount(results, 1); - verifyAllPropsTxIds(results); - verifyRelatedToCreatedTxId(results); - } - - @Test - public void stateQueryStartTsAtSecondEdgeDeletionTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state&startTs=700"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-C"); - verifyEquipTypeTimestamps(results, 100L); - verifyRelatedToCreatedTimestamps(results); - verifyRelatedToCreatedDeletedTimestamps(results); - verifyRelatedToCount(results, 0); - verifyAllPropsTxIds(results); - verifyRelatedToCreatedTxId(results); - } - - @Test - public void stateQueryStartTsAfterSecondEdgeDeletionTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state&startTs=800"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-C"); - verifyEquipTypeTimestamps(results, 100L); - verifyRelatedToCreatedTimestamps(results); - verifyRelatedToCreatedDeletedTimestamps(results); - verifyRelatedToCount(results, 0); - verifyAllPropsTxIds(results); - verifyRelatedToCreatedTxId(results); - } - - @Test - public void stateQueryStartTsAtLastEdgeActionTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state&startTs=1300"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-C"); - verifyEquipTypeTimestamps(results, 100L); - verifyRelatedToCreatedTimestamps(results, 1300L); - verifyRelatedToCreatedDeletedTimestamps(results); - verifyRelatedToCount(results, 1); - verifyAllPropsTxIds(results); - verifyRelatedToCreatedTxId(results); - } - - @Test - public void stateQueryStartTsAfterLastEdgeActionTimeTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state&startTs=1400"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals("Result size", 1, results.size()); - - verifyEquipTypeValues(results, "ps-type"); - verifyEquipTypeSoTs(results, "JUNIT-C"); - verifyEquipTypeTimestamps(results, 100L); - verifyRelatedToCreatedTimestamps(results, 1300L); - verifyRelatedToCreatedDeletedTimestamps(results); - verifyRelatedToCount(results, 1); - verifyAllPropsTxIds(results); - verifyRelatedToCreatedTxId(results); - } + private static final Logger LOGGER = + LoggerFactory.getLogger(DslConsumerHistoryStateEdgeTest.class); + + @Override + public void createTestGraph() { + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + + Vertex pserver = g.addV() + .property(AAIProperties.NODE_TYPE, "pserver", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.AAI_URI, + "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.START_TS, 100L) + .property(AAIProperties.RESOURCE_VERSION, "100", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("hostname", "test-pserver-dsl", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("in-maint", false, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("equip-type", "ps-type", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.START_TS, 100L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .next(); + Vertex complex = g.addV() + .property(AAIProperties.NODE_TYPE, "complex", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.AAI_URI, + "/cloud-infrastructure/complexes/complex/test-complex-dsl", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.START_TS, 100L) + .property(AAIProperties.RESOURCE_VERSION, "100", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("physical-location-id", "test-complex-dsl", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("street", "200 S. Laurel Ave", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("city", "Middletown", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("state", "NJ", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property("zip", "11111", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .property(AAIProperties.START_TS, 100L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 100L) + .next(); + + pserver.addEdge("org.onap.relationships.inventory.LocatedIn", complex, "start-ts", 100, + "private", false, "aai-uuid", "edge1", "end-source-of-truth", "JUNIT-E-D-1", + "end-tx-id", "JUNIT-E-D-1", "end-ts", 300, "prevent-delete", "IN", "delete-other-v", + "NONE", "source-of-truth", "JUNIT-E-C-1", "start-tx-id", "JUNIT-E-C-1", + "contains-other-v", "NONE"); + pserver.addEdge("org.onap.relationships.inventory.LocatedIn", complex, "start-ts", 500, + "private", false, "aai-uuid", "edge2", "end-source-of-truth", "JUNIT-E-D-2", + "end-tx-id", "JUNIT-E-D-2", "end-ts", 700, "prevent-delete", "IN", "delete-other-v", + "NONE", "source-of-truth", "JUNIT-E-C-2", "start-tx-id", "JUNIT-E-C-2", + "contains-other-v", "NONE"); + pserver.addEdge("org.onap.relationships.inventory.LocatedIn", complex, "start-ts", 900, + "private", false, "aai-uuid", "edge3", "end-source-of-truth", "JUNIT-E-D-3", + "end-tx-id", "JUNIT-E-D-3", "end-ts", 1100, "prevent-delete", "IN", + "delete-other-v", "NONE", "source-of-truth", "JUNIT-E-C-3", "start-tx-id", + "JUNIT-E-C-3", "contains-other-v", "NONE"); + pserver.addEdge("org.onap.relationships.inventory.LocatedIn", complex, "start-ts", 1300, + "private", false, "aai-uuid", "edge3", "prevent-delete", "IN", "delete-other-v", + "NONE", "source-of-truth", "JUNIT-E-C-3", "start-tx-id", "JUNIT-E-C-3", + "contains-other-v", "NONE"); + } catch (Exception ex) { + success = false; + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to setup the graph"); + } + } + } + + private JsonArray getResultsForPserverLookupByHostname(String endpoint) throws Exception { + return getResultsForPserverLookupByHostnameAndAnother(endpoint, ""); + } + + private JsonArray getResultsForPserverLookupByHostnameAndAnother(String endpoint, + String additionalFilterInParen) throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver*('hostname','test-pserver-dsl')" + additionalFilterInParen); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()) + .getAsJsonObject().getAsJsonArray("results"); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + + assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + return results; + } + + private void verifyEquipTypeValues(JsonArray results, String... expectedEquipTypes) { + List<String> expected = Arrays.asList(expectedEquipTypes); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + assertFalse("State format properties should not have end timestamps", + property.getAsJsonObject().has("end-timestamp")); + if (property.getAsJsonObject().has("value") + && !property.getAsJsonObject().get("value").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("value").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type in state", actualEquipType, is(expected)); + } + + private void verifyEquipTypeSoTs(JsonArray results, String... expectedSTOs) { + List<String> expected = Arrays.asList(expectedSTOs); + final List<String> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("sot") + && !property.getAsJsonObject().get("sot").isJsonNull()) { + actualEquipType.add(property.getAsJsonObject().get("sot").getAsString()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type SoTs in state", actualEquipType, is(expected)); + } + + private void verifyEquipTypeTimestamps(JsonArray results, Long... expectedSTOs) { + List<Long> expected = Arrays.asList(expectedSTOs); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + if (property.getAsJsonObject().has("timestamp") + && !property.getAsJsonObject().get("timestamp").isJsonNull()) { + actualEquipType + .add(property.getAsJsonObject().get("timestamp").getAsLong()); + } else { + actualEquipType.add(null); + } + } + } + } + assertThat("Verify equip-type timestamps in state", actualEquipType, is(expected)); + } + + private void verifyRelatedToCreatedTimestamps(JsonArray results, + Long... edgeCreatedTimestamps) { + List<Long> expected = Arrays.asList(edgeCreatedTimestamps); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + result.getAsJsonObject().get("related-to").getAsJsonArray() + .forEach(jsonElement -> actualEquipType + .add(jsonElement.getAsJsonObject().get("timestamp").getAsLong())); + } + assertThat("Verify related-to createdtimestamps in state", actualEquipType, is(expected)); + } + + private void verifyRelatedToCreatedDeletedTimestamps(JsonArray results, + Long... edgeDeletedTimestamps) { + List<Long> expected = Arrays.asList(edgeDeletedTimestamps); + final List<Long> actualEquipType = new ArrayList<>(); + for (JsonElement result : results) { + result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> { + if (jsonElement.getAsJsonObject().has("end-timestamp")) { + actualEquipType + .add(jsonElement.getAsJsonObject().get("end-timestamp").getAsLong()); + } + }); + } + assertThat("Verify related-to created timestamps in state", actualEquipType, is(expected)); + } + + private void verifyRelatedToCount(JsonArray results, int expectedSize) { + int actualSize = 0; + for (JsonElement result : results) { + actualSize += result.getAsJsonObject().get("related-to").getAsJsonArray().size(); + } + assertEquals("Verify related-to count", actualSize, expectedSize); + } + + private void verifyAllPropsTxIds(JsonArray results) { + final Set<String> propMissingCreatedTxId = new HashSet<>(); + final Set<String> propContainingEndTxId = new HashSet<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (!property.getAsJsonObject().has("tx-id")) { + propMissingCreatedTxId.add(property.getAsJsonObject().get("key").getAsString()); + } + if (property.getAsJsonObject().has("end-tx-id")) { + propContainingEndTxId.add(property.getAsJsonObject().get("key").getAsString()); + } + } + } + + assertThat("Verify no prop is missing tx-id in state", propMissingCreatedTxId, + is(Collections.EMPTY_SET)); + assertThat("Verify no prop has end-tx-id in state", propContainingEndTxId, + is(Collections.EMPTY_SET)); + } + + private void verifyRelatedToCreatedTxId(JsonArray results) { + final Set<JsonObject> edgeMissingCreatedTxId = new HashSet<>(); + final Set<JsonObject> edgeContainingEndTxId = new HashSet<>(); + for (JsonElement result : results) { + result.getAsJsonObject().get("related-to").getAsJsonArray().forEach(jsonElement -> { + if (!jsonElement.getAsJsonObject().has("tx-id")) { + edgeMissingCreatedTxId.add(jsonElement.getAsJsonObject()); + } + if (jsonElement.getAsJsonObject().has("end-tx-id")) { + edgeContainingEndTxId.add(jsonElement.getAsJsonObject()); + } + }); + } + assertThat("Verify no related-to is missing tx-id in state", edgeMissingCreatedTxId, + is(Collections.EMPTY_SET)); + assertThat("Verify no related-to has end-tx-id in state", edgeContainingEndTxId, + is(Collections.EMPTY_SET)); + } + + @Test + public void stateQueryStartTsBeforeCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state&startTs=50"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 0, results.size()); + + verifyEquipTypeValues(results); + verifyEquipTypeSoTs(results); + verifyEquipTypeTimestamps(results); + verifyRelatedToCreatedTimestamps(results); + verifyRelatedToCreatedDeletedTimestamps(results); + verifyRelatedToCount(results, 0); + verifyAllPropsTxIds(results); + verifyRelatedToCreatedTxId(results); + } + + @Test + public void stateQueryStartTsBeforeSecondEdgeCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state&startTs=400"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-C"); + verifyEquipTypeTimestamps(results, 100L); + verifyRelatedToCreatedTimestamps(results); + verifyRelatedToCreatedDeletedTimestamps(results); + verifyRelatedToCount(results, 0); + verifyAllPropsTxIds(results); + verifyRelatedToCreatedTxId(results); + } + + @Test + public void stateQueryStartTsAfterSecondEdgeCreationTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state&startTs=600"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-C"); + verifyEquipTypeTimestamps(results, 100L); + verifyRelatedToCreatedTimestamps(results, 500L); + verifyRelatedToCreatedDeletedTimestamps(results); + verifyRelatedToCount(results, 1); + verifyAllPropsTxIds(results); + verifyRelatedToCreatedTxId(results); + } + + @Test + public void stateQueryStartTsAtSecondEdgeDeletionTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state&startTs=700"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-C"); + verifyEquipTypeTimestamps(results, 100L); + verifyRelatedToCreatedTimestamps(results); + verifyRelatedToCreatedDeletedTimestamps(results); + verifyRelatedToCount(results, 0); + verifyAllPropsTxIds(results); + verifyRelatedToCreatedTxId(results); + } + + @Test + public void stateQueryStartTsAfterSecondEdgeDeletionTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state&startTs=800"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-C"); + verifyEquipTypeTimestamps(results, 100L); + verifyRelatedToCreatedTimestamps(results); + verifyRelatedToCreatedDeletedTimestamps(results); + verifyRelatedToCount(results, 0); + verifyAllPropsTxIds(results); + verifyRelatedToCreatedTxId(results); + } + + @Test + public void stateQueryStartTsAtLastEdgeActionTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state&startTs=1300"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-C"); + verifyEquipTypeTimestamps(results, 100L); + verifyRelatedToCreatedTimestamps(results, 1300L); + verifyRelatedToCreatedDeletedTimestamps(results); + verifyRelatedToCount(results, 1); + verifyAllPropsTxIds(results); + verifyRelatedToCreatedTxId(results); + } + + @Test + public void stateQueryStartTsAfterLastEdgeActionTimeTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state&startTs=1400"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals("Result size", 1, results.size()); + + verifyEquipTypeValues(results, "ps-type"); + verifyEquipTypeSoTs(results, "JUNIT-C"); + verifyEquipTypeTimestamps(results, 100L); + verifyRelatedToCreatedTimestamps(results, 1300L); + verifyRelatedToCreatedDeletedTimestamps(results); + verifyRelatedToCount(results, 1); + verifyAllPropsTxIds(results); + verifyRelatedToCreatedTxId(results); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryStateTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryStateTest.java index bb9584e..5b08d83 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryStateTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/history/DslConsumerHistoryStateTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,9 +19,15 @@ */ package org.onap.aai.rest.history; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.*; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParser; + +import java.util.*; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.janusgraph.core.JanusGraphTransaction; import org.junit.Ignore; @@ -36,735 +42,704 @@ import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import java.util.*; - -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.*; - -@Ignore("The state format requires the history schema to be loaded. " + - "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + - "This needs to be addressed.") +@Ignore("The state format requires the history schema to be loaded. " + + "Because aaigraph is a singleton its very complicated to have 2 different schemas loaded for testing. " + + "This needs to be addressed.") public class DslConsumerHistoryStateTest extends AbstractSpringHistoryRestTest { - private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumerHistoryStateTest.class); - - @Override - public void createTestGraph() { - JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); - boolean success = true; - try { - GraphTraversalSource g = transaction.traversal(); - /* - Pserver - - created @ time 100 - - update in-maint/equip-type @ 500 - - deleted @ time 1000 - */ - g.addV().property(AAIProperties.NODE_TYPE, "pserver", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.AAI_URI, "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.RESOURCE_VERSION, "100", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U", - AAIProperties.END_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 500L - ) - .property(AAIProperties.RESOURCE_VERSION, "500", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", - AAIProperties.START_TX_ID, "JUNIT-U", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 500L, - AAIProperties.END_TS, 1000L - ) - .property("hostname", "test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property("in-maint", false, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U", - AAIProperties.END_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 500L - ) - .property("in-maint", true, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", - AAIProperties.START_TX_ID, "JUNIT-U", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 500L, - AAIProperties.END_TS, 1000L - ) - .property("equip-type", "first-ps-type", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U", - AAIProperties.END_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 500L - ) - .property("equip-type", "first-ps-type-update", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", - AAIProperties.START_TX_ID, "JUNIT-U", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 500L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-D", - AAIProperties.START_TX_ID, "JUNIT-D", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.START_TS, 100L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 100L, - AAIProperties.END_TS, 1000L - ) - .property(AAIProperties.END_TS, 1000L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-D", - AAIProperties.START_TX_ID, "JUNIT-D", - AAIProperties.END_SOT, "JUNIT-D", - AAIProperties.END_TX_ID, "JUNIT-D", - AAIProperties.START_TS, 1000L, - AAIProperties.END_TS, 1000L - ) - .next(); - - /* - Pserver - - created @ time 10000 - - update in-maint/equip-type @ 15000 - */ - g.addV().property(AAIProperties.NODE_TYPE, "pserver", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .property(AAIProperties.AAI_URI, "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .property(AAIProperties.RESOURCE_VERSION, "10000", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U", - AAIProperties.END_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 10000L, - AAIProperties.END_TS, 15000L - ) - .property(AAIProperties.RESOURCE_VERSION, "15000", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", - AAIProperties.START_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 15000 - ) - .property("hostname", "test-pserver-dsl", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .property("in-maint", true, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U", - AAIProperties.END_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 10000L, - AAIProperties.END_TS, 15000L - ) - .property("in-maint", false, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", - AAIProperties.START_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 15000L - ) - .property("equip-type", "second-ps-type", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.END_SOT, "JUNIT-U", - AAIProperties.END_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 10000L, - AAIProperties.END_TS, 15000L - ) - .property("equip-type", "second-ps-type-update", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", - AAIProperties.START_TX_ID, "JUNIT-U", - AAIProperties.START_TS, 15000L - ) - .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .property(AAIProperties.START_TS, 10000L, - AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", - AAIProperties.START_TX_ID, "JUNIT-C", - AAIProperties.START_TS, 10000L - ) - .next(); - } catch (Exception ex) { - success = false; - } finally { - if (success) { - transaction.commit(); - } else { - transaction.rollback(); - fail("Unable to setup the graph"); - } - } - } - - private JsonArray getResultsForPserverLookupByHostname(String endpoint) throws Exception { - return getResultsForPserverLookupByHostnameAndAnother(endpoint, ""); - } - - private JsonArray getResultsForPserverLookupByHostnameAndAnother(String endpoint, String additionalFilterInParen) throws Exception { - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pserver*('hostname','test-pserver-dsl')" + additionalFilterInParen); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - httpEntity = new HttpEntity(payload, headers); - ResponseEntity responseEntity = restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); - JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()).getAsJsonObject().getAsJsonArray("results"); - LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, responseEntity.getBody()); - - assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); - assertEquals("Expected the response to be 200", HttpStatus.OK, responseEntity.getStatusCode()); - return results; - } - - private void verifyEquipTypeValues(JsonArray results, String... equipType) { - Set<String> expectedEquipTypes = new HashSet<>(Arrays.asList(equipType)); - final Set<String> actualEquipType = new HashSet<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - assertFalse("State format properties should not have end timestamps", - property.getAsJsonObject().has("end-timestamp")); - if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { - actualEquipType.add(property.getAsJsonObject().get("value").getAsString()); - } - } - } - assertThat("Verify equip-type in state", actualEquipType, is(expectedEquipTypes)); - } - - - private void verifyAllPropsTxIds(JsonArray results) { - final Set<String> propMissingCreatedTxId = new HashSet<>(); - final Set<String> propContainingEndTxId = new HashSet<>(); - for (JsonElement result : results) { - for (JsonElement property : result.getAsJsonObject().get("properties").getAsJsonArray()) { - if (!property.getAsJsonObject().has("tx-id")) { - propMissingCreatedTxId.add(property.getAsJsonObject().get("key").getAsString()); - } - if (property.getAsJsonObject().has("end-tx-id")) { - propContainingEndTxId.add(property.getAsJsonObject().get("key").getAsString()); - } - } - } - - assertThat("Verify no prop is missing tx-id in state", propMissingCreatedTxId, is(Collections.EMPTY_SET)); - assertThat("Verify no prop has end-tx-id in state", propContainingEndTxId, is(Collections.EMPTY_SET)); - } - - @Test - public void stateQueryBeforeCreationTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=50"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(0, results.size()); - } - - @Test - public void stateQueryAtCreationTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=100"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "first-ps-type"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAfterCreationTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=200"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "first-ps-type"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAtUpdateTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=500"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAfterUpdateTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=700"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAtDeletionTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=1000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(0, results.size()); - } - - @Test - public void stateQueryAfterDeletionTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=2000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(0, results.size()); - } - - // WITH endTs=startTs - @Test - public void stateQueryBeforeCreationWithEndTsTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=50&endTs=50"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(0, results.size()); - } - - @Test - public void stateQueryAtCreationTimeWithEndTsTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=100&endTs=100"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "first-ps-type"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAfterCreationTimeWithEndTsTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=200&endTs=200"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "first-ps-type"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAtUpdateTimeWithEndTsTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=500&endTs=500"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAfterUpdateTimeWithEndTsTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=700&endTs=700"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "first-ps-type-update"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAtDeletionTimeWithEndTsTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=1000&endTs=1000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(0, results.size()); - } - - @Test - public void stateQueryAfterDeletionTimeWithEndTsTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=2000&endTs=2000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(0, results.size()); - } - - // Second pserver - - @Test - public void stateQueryBeforeSecondCreationTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=9000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(0, results.size()); - } - - @Test - public void stateQueryAtSecondCreationTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=10000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "second-ps-type"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAfterSecondCreationTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=12000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "second-ps-type"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAtUpdateAfterSecondCreationTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=15000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "second-ps-type-update"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryAfterUpdateAfterSecondCreationTimeTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=17000"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "second-ps-type-update"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryNoTimestampTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state"; - JsonArray results = getResultsForPserverLookupByHostname(endpoint); - assertEquals(1, results.size()); - verifyEquipTypeValues(results, "second-ps-type-update"); - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryNoTimestampWithEquipTypeFilterTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - - verifyEquipTypeValues(results, equipType); - - verifyAllPropsTxIds(results); - } - - @Test - public void stateQueryTimestampBeforeFirstCreateWithEquipTypeFilterTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state&startTs=50"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - } - - @Test - public void stateQueryTimestampAtFirstCreateWithEquipTypeFilterTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state&startTs=100"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); - - verifyEquipTypeValues(results, equipType); - - verifyAllPropsTxIds(results); - - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); - - } - - @Test - public void stateQueryTimestampAfterFirstCreateWithEquipTypeFilterTest() throws Exception { - - String endpoint = "/aai/v14/dsl?format=state&startTs=200"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); + private static final Logger LOGGER = LoggerFactory.getLogger(DslConsumerHistoryStateTest.class); + + @Override + public void createTestGraph() { + JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); + boolean success = true; + try { + GraphTraversalSource g = transaction.traversal(); + /* + * Pserver + * - created @ time 100 + * - update in-maint/equip-type @ 500 + * - deleted @ time 1000 + */ + g.addV() + .property(AAIProperties.NODE_TYPE, "pserver", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.AAI_URI, + "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.END_SOT, "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", + AAIProperties.START_TS, 100L, AAIProperties.END_TS, 1000L) + .property(AAIProperties.RESOURCE_VERSION, "100", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-U", AAIProperties.END_TX_ID, "JUNIT-U", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 500L) + .property(AAIProperties.RESOURCE_VERSION, "500", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U", AAIProperties.START_TX_ID, "JUNIT-U", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 500L, + AAIProperties.END_TS, 1000L) + .property("hostname", "test-pserver-dsl", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property("in-maint", false, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-U", + AAIProperties.END_TX_ID, "JUNIT-U", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 500L) + .property("in-maint", true, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", + AAIProperties.START_TX_ID, "JUNIT-U", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 500L, + AAIProperties.END_TS, 1000L) + .property("equip-type", "first-ps-type", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-U", + AAIProperties.END_TX_ID, "JUNIT-U", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 500L) + .property("equip-type", "first-ps-type-update", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U", AAIProperties.START_TX_ID, "JUNIT-U", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 500L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.END_SOT, "JUNIT-D", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-D", AAIProperties.START_TX_ID, "JUNIT-D", AAIProperties.END_SOT, + "JUNIT-D", AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.START_TS, 100L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 100L, + AAIProperties.END_TS, 1000L) + .property(AAIProperties.END_TS, 1000L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-D", + AAIProperties.START_TX_ID, "JUNIT-D", AAIProperties.END_SOT, "JUNIT-D", + AAIProperties.END_TX_ID, "JUNIT-D", AAIProperties.START_TS, 1000L, + AAIProperties.END_TS, 1000L) + .next(); + + /* + * Pserver + * - created @ time 10000 + * - update in-maint/equip-type @ 15000 + */ + g.addV() + .property(AAIProperties.NODE_TYPE, "pserver", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 10000L) + .property(AAIProperties.AAI_URI, + "/cloud-infrastructure/pservers/pserver/test-pserver-dsl", + AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", + AAIProperties.START_TS, 10000L) + .property(AAIProperties.RESOURCE_VERSION, "10000", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, + "JUNIT-U", AAIProperties.END_TX_ID, "JUNIT-U", AAIProperties.START_TS, 10000L, + AAIProperties.END_TS, 15000L) + .property(AAIProperties.RESOURCE_VERSION, "15000", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U", AAIProperties.START_TX_ID, "JUNIT-U", AAIProperties.START_TS, 15000) + .property("hostname", "test-pserver-dsl", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 10000L) + .property("in-maint", true, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-U", + AAIProperties.END_TX_ID, "JUNIT-U", AAIProperties.START_TS, 10000L, + AAIProperties.END_TS, 15000L) + .property("in-maint", false, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-U", + AAIProperties.START_TX_ID, "JUNIT-U", AAIProperties.START_TS, 15000L) + .property("equip-type", "second-ps-type", AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.END_SOT, "JUNIT-U", + AAIProperties.END_TX_ID, "JUNIT-U", AAIProperties.START_TS, 10000L, + AAIProperties.END_TS, 15000L) + .property("equip-type", "second-ps-type-update", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-U", AAIProperties.START_TX_ID, "JUNIT-U", AAIProperties.START_TS, 15000L) + .property(AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", AAIProperties.SOURCE_OF_TRUTH, + "JUNIT-C", AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 10000L) + .property(AAIProperties.START_TS, 10000L, AAIProperties.SOURCE_OF_TRUTH, "JUNIT-C", + AAIProperties.START_TX_ID, "JUNIT-C", AAIProperties.START_TS, 10000L) + .next(); + } catch (Exception ex) { + success = false; + } finally { + if (success) { + transaction.commit(); + } else { + transaction.rollback(); + fail("Unable to setup the graph"); + } + } + } + + private JsonArray getResultsForPserverLookupByHostname(String endpoint) throws Exception { + return getResultsForPserverLookupByHostnameAndAnother(endpoint, ""); + } + + private JsonArray getResultsForPserverLookupByHostnameAndAnother(String endpoint, + String additionalFilterInParen) throws Exception { + Map<String, String> dslQueryMap = new HashMap<>(); + dslQueryMap.put("dsl-query", + "pserver*('hostname','test-pserver-dsl')" + additionalFilterInParen); + String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); + httpEntity = new HttpEntity(payload, headers); + ResponseEntity responseEntity = + restTemplate.exchange(baseUrl + endpoint, HttpMethod.PUT, httpEntity, String.class); + JsonArray results = new JsonParser().parse(responseEntity.getBody().toString()) + .getAsJsonObject().getAsJsonArray("results"); + LOGGER.debug("Response for PUT request with uri {} : {}", baseUrl + endpoint, + responseEntity.getBody()); + + assertNotNull("Response from /aai/v14/dsl is not null", responseEntity); + assertEquals("Expected the response to be 200", HttpStatus.OK, + responseEntity.getStatusCode()); + return results; + } + + private void verifyEquipTypeValues(JsonArray results, String... equipType) { + Set<String> expectedEquipTypes = new HashSet<>(Arrays.asList(equipType)); + final Set<String> actualEquipType = new HashSet<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + assertFalse("State format properties should not have end timestamps", + property.getAsJsonObject().has("end-timestamp")); + if (property.getAsJsonObject().get("key").getAsString().equals("equip-type")) { + actualEquipType.add(property.getAsJsonObject().get("value").getAsString()); + } + } + } + assertThat("Verify equip-type in state", actualEquipType, is(expectedEquipTypes)); + } + + private void verifyAllPropsTxIds(JsonArray results) { + final Set<String> propMissingCreatedTxId = new HashSet<>(); + final Set<String> propContainingEndTxId = new HashSet<>(); + for (JsonElement result : results) { + for (JsonElement property : result.getAsJsonObject().get("properties") + .getAsJsonArray()) { + if (!property.getAsJsonObject().has("tx-id")) { + propMissingCreatedTxId.add(property.getAsJsonObject().get("key").getAsString()); + } + if (property.getAsJsonObject().has("end-tx-id")) { + propContainingEndTxId.add(property.getAsJsonObject().get("key").getAsString()); + } + } + } + + assertThat("Verify no prop is missing tx-id in state", propMissingCreatedTxId, + is(Collections.EMPTY_SET)); + assertThat("Verify no prop has end-tx-id in state", propContainingEndTxId, + is(Collections.EMPTY_SET)); + } + + @Test + public void stateQueryBeforeCreationTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=50"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(0, results.size()); + } + + @Test + public void stateQueryAtCreationTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=100"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "first-ps-type"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAfterCreationTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=200"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "first-ps-type"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAtUpdateTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=500"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAfterUpdateTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=700"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAtDeletionTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=1000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(0, results.size()); + } + + @Test + public void stateQueryAfterDeletionTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=2000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(0, results.size()); + } + + // WITH endTs=startTs + @Test + public void stateQueryBeforeCreationWithEndTsTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=50&endTs=50"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(0, results.size()); + } + + @Test + public void stateQueryAtCreationTimeWithEndTsTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=100&endTs=100"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "first-ps-type"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAfterCreationTimeWithEndTsTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=200&endTs=200"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "first-ps-type"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAtUpdateTimeWithEndTsTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=500&endTs=500"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAfterUpdateTimeWithEndTsTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=700&endTs=700"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "first-ps-type-update"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAtDeletionTimeWithEndTsTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=1000&endTs=1000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(0, results.size()); + } + + @Test + public void stateQueryAfterDeletionTimeWithEndTsTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=2000&endTs=2000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(0, results.size()); + } + + // Second pserver + + @Test + public void stateQueryBeforeSecondCreationTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=9000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(0, results.size()); + } + + @Test + public void stateQueryAtSecondCreationTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=10000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "second-ps-type"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAfterSecondCreationTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=12000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "second-ps-type"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAtUpdateAfterSecondCreationTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=15000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "second-ps-type-update"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryAfterUpdateAfterSecondCreationTimeTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state&startTs=17000"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "second-ps-type-update"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryNoTimestampTest() throws Exception { + String endpoint = "/aai/v14/dsl?format=state"; + JsonArray results = getResultsForPserverLookupByHostname(endpoint); + assertEquals(1, results.size()); + verifyEquipTypeValues(results, "second-ps-type-update"); + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryNoTimestampWithEquipTypeFilterTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + + verifyEquipTypeValues(results, equipType); + + verifyAllPropsTxIds(results); + } + + @Test + public void stateQueryTimestampBeforeFirstCreateWithEquipTypeFilterTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state&startTs=50"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + } + + @Test + public void stateQueryTimestampAtFirstCreateWithEquipTypeFilterTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state&startTs=100"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); + + verifyEquipTypeValues(results, equipType); + + verifyAllPropsTxIds(results); + + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); + + } + + @Test + public void stateQueryTimestampAfterFirstCreateWithEquipTypeFilterTest() throws Exception { + + String endpoint = "/aai/v14/dsl?format=state&startTs=200"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, equipType); + verifyEquipTypeValues(results, equipType); - verifyAllPropsTxIds(results); + verifyAllPropsTxIds(results); - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } + } - @Test - public void stateQueryTimestampAtFirstUpdateWithEquipTypeFilterTest() throws Exception { + @Test + public void stateQueryTimestampAtFirstUpdateWithEquipTypeFilterTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=500"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + String endpoint = "/aai/v14/dsl?format=state&startTs=500"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, equipType); + verifyEquipTypeValues(results, equipType); - verifyAllPropsTxIds(results); + verifyAllPropsTxIds(results); - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } + } - @Test - public void stateQueryTimestampAfterFirstUpdateWithEquipTypeFilterTest() throws Exception { + @Test + public void stateQueryTimestampAfterFirstUpdateWithEquipTypeFilterTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=700"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + String endpoint = "/aai/v14/dsl?format=state&startTs=700"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, equipType); + verifyEquipTypeValues(results, equipType); - verifyAllPropsTxIds(results); + verifyAllPropsTxIds(results); - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } + } - @Test - public void stateQueryTimestampAtFirstDeleteWithEquipTypeFilterTest() throws Exception { + @Test + public void stateQueryTimestampAtFirstDeleteWithEquipTypeFilterTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=1000"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + String endpoint = "/aai/v14/dsl?format=state&startTs=1000"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } + } - @Test - public void stateQueryTimestampAfterFirstDeleteWithEquipTypeFilterTest() throws Exception { + @Test + public void stateQueryTimestampAfterFirstDeleteWithEquipTypeFilterTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=5000"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + String endpoint = "/aai/v14/dsl?format=state&startTs=5000"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } + } - @Test - public void stateQueryTimestampAtSecondCreateWithEquipTypeFilterTest() throws Exception { + @Test + public void stateQueryTimestampAtSecondCreateWithEquipTypeFilterTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=10000"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + String endpoint = "/aai/v14/dsl?format=state&startTs=10000"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, equipType); + verifyEquipTypeValues(results, equipType); - verifyAllPropsTxIds(results); + verifyAllPropsTxIds(results); - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } + } - @Test - public void stateQueryTimestampAfterSecondCreateWithEquipTypeFilterTest() throws Exception { + @Test + public void stateQueryTimestampAfterSecondCreateWithEquipTypeFilterTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=12000"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + String endpoint = "/aai/v14/dsl?format=state&startTs=12000"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, equipType); + verifyEquipTypeValues(results, equipType); - verifyAllPropsTxIds(results); + verifyAllPropsTxIds(results); - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - } + } - @Test - public void stateQueryTimestampAtSecondUpdateWithEquipTypeFilterTest() throws Exception { + @Test + public void stateQueryTimestampAtSecondUpdateWithEquipTypeFilterTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=15000"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + String endpoint = "/aai/v14/dsl?format=state&startTs=15000"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, equipType); + verifyEquipTypeValues(results, equipType); - verifyAllPropsTxIds(results); + verifyAllPropsTxIds(results); - } + } - @Test - public void stateQueryTimestampAfterSecondUpdateWithEquipTypeFilterTest() throws Exception { + @Test + public void stateQueryTimestampAfterSecondUpdateWithEquipTypeFilterTest() throws Exception { - String endpoint = "/aai/v14/dsl?format=state&startTs=15000"; - String equipType = "first-ps-type"; - JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + String endpoint = "/aai/v14/dsl?format=state&startTs=15000"; + String equipType = "first-ps-type"; + JsonArray results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "first-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "first-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 0, results.size()); + equipType = "second-ps-type"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 0, results.size()); - equipType = "second-ps-type-update"; - results = getResultsForPserverLookupByHostnameAndAnother(endpoint, "('equip-type','" + equipType + "')"); - assertEquals("Filter equip-type on " + equipType, 1, results.size()); + equipType = "second-ps-type-update"; + results = getResultsForPserverLookupByHostnameAndAnother(endpoint, + "('equip-type','" + equipType + "')"); + assertEquals("Filter equip-type on " + equipType, 1, results.size()); - verifyEquipTypeValues(results, equipType); + verifyEquipTypeValues(results, equipType); - verifyAllPropsTxIds(results); + verifyAllPropsTxIds(results); - } + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/retired/RetiredConsumerSpringTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/retired/RetiredConsumerSpringTest.java index 46e4a35..bd62e71 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/retired/RetiredConsumerSpringTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/retired/RetiredConsumerSpringTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,20 +19,21 @@ */ package org.onap.aai.rest.retired; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.junit.Assert.assertEquals; + import com.att.eelf.configuration.EELFManager; + +import java.util.HashMap; +import java.util.Map; + import org.junit.Test; import org.onap.aai.rest.AbstractSpringRestTest; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.Assert.assertEquals; - public class RetiredConsumerSpringTest extends AbstractSpringRestTest { private static final Logger LOGGER = LoggerFactory.getLogger(RetiredConsumerSpringTest.class); @@ -40,7 +41,7 @@ public class RetiredConsumerSpringTest extends AbstractSpringRestTest { private Map<String, HttpStatus> httpStatusMap; @Test - public void testOldVersionsEndpointReturnRetired(){ + public void testOldVersionsEndpointReturnRetired() { setupOldVersions(); executeRestCalls(); } @@ -48,8 +49,10 @@ public class RetiredConsumerSpringTest extends AbstractSpringRestTest { protected void executeRestCalls() { httpStatusMap.forEach((url, status) -> { ResponseEntity responseEntity; - responseEntity = restTemplate.exchange(baseUrl + url, HttpMethod.GET, httpEntity, String.class); - LOGGER.debug("For url {} expected status {} actual status {} and body {}", url, status, responseEntity.getStatusCodeValue(), responseEntity.getBody()); + responseEntity = + restTemplate.exchange(baseUrl + url, HttpMethod.GET, httpEntity, String.class); + LOGGER.debug("For url {} expected status {} actual status {} and body {}", url, status, + responseEntity.getStatusCodeValue(), responseEntity.getBody()); assertEquals(status, responseEntity.getStatusCode()); }); } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/AccessServiceFromServiceInstanceTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/AccessServiceFromServiceInstanceTest.java index 8275959..81d80bf 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/AccessServiceFromServiceInstanceTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/AccessServiceFromServiceInstanceTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -33,61 +33,83 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class AccessServiceFromServiceInstanceTest extends QueryTest { - public AccessServiceFromServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { - super(); + public AccessServiceFromServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { + super(); } @Test public void test() { - super.run(); + super.run(); } @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex serviceSubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", "service-subscription", "service-type", "service-subcription-1"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", "customer", "global-customer-id", "customer-id-1", "subscriber-name", "customer-name1", "subscriber-type", "customer-type1"); - Vertex forwardingPath = graph.addVertex(T.label, "forwarding-path", T.id, "4", "aai-node-type", "forwarding-path", "forwarding-path-id", "forwarding-path-id-1", "forwarding-path-name", "forwarding-path-name-1"); - Vertex configuration = graph.addVertex(T.label, "configuration", T.id, "5", "aai-node-type", "configuration", "configuration-id", "configuration-1", "configuration-type", "configuration-type-1", "configuration-sub-type", "configuration-sub-type-1"); - Vertex evc = graph.addVertex(T.label, "evc", T.id, "6", "aai-node-type", "evc", "evc-id", "evc-1"); - Vertex forwarder = graph.addVertex(T.label, "forwarder", T.id,"7", "aai-node-type", "forwarder", "sequence", "forwarder-1"); - Vertex forwarderEvc = graph.addVertex(T.label, "forwarder-evc", T.id, "8", "aai-node-type", "forwarder-evc", "forwarder-evc-id", "forwarder-evc-1"); - Vertex pInterface = graph.addVertex(T.label, "p-interface", T.id, "9", "aai-node-type", "p-interface", "interface-name", "p-interface-1"); - Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "10", "aai-node-type", "pnf", "pnf-name", "pnf1name"); - Vertex lagInterface = graph.addVertex(T.label, "lag-interface", T.id, "11", "aai-node-type", "lag-interface","interface-name", "lagint1"); - Vertex logicalLink = graph.addVertex(T.label, "logical-link", T.id, "12", "aai-node-type", "logical-link", "link-name", "logical-link-1", "link-type", "LAG"); - Vertex badLogicalLink = graph.addVertex(T.label, "logical-link", T.id, "13", "aai-node-type", "logical-link", "link-name", "logical-link-bad", "link-type", "BAD"); - Vertex wrongInterfaceOne = graph.addVertex(T.label, "l-interface", T.id, "14", "aai-node-type", "l-interface", "interface-name", "wrong-interface-1"); - Vertex wrongInterfaceTwo = graph.addVertex(T.label, "l-interface", T.id, "15", "aai-node-type", "l-interface", "interface-name", "wrong-interface-2"); - Vertex wrongInterfaceThree = graph.addVertex(T.label, "l-interface", T.id, "16", "aai-node-type", "l-interface", "interface-name", "wrong-interface-3"); - Vertex wrongInterfaceFour = graph.addVertex(T.label, "l-interface", T.id, "17", "aai-node-type", "l-interface", "interface-name", "wrong-interface-4"); - Vertex vlanMapping = graph.addVertex(T.label, "vlan-mapping", T.id, "18", "aai-node-type", "vlan-mapping", "vlan-mapping-id", "vlan-mapping-1"); - + // Set up the test graph + Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex serviceSubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-type", "service-subcription-1"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", + "customer", "global-customer-id", "customer-id-1", "subscriber-name", "customer-name1", + "subscriber-type", "customer-type1"); + Vertex forwardingPath = graph.addVertex(T.label, "forwarding-path", T.id, "4", + "aai-node-type", "forwarding-path", "forwarding-path-id", "forwarding-path-id-1", + "forwarding-path-name", "forwarding-path-name-1"); + Vertex configuration = graph.addVertex(T.label, "configuration", T.id, "5", "aai-node-type", + "configuration", "configuration-id", "configuration-1", "configuration-type", + "configuration-type-1", "configuration-sub-type", "configuration-sub-type-1"); + Vertex evc = + graph.addVertex(T.label, "evc", T.id, "6", "aai-node-type", "evc", "evc-id", "evc-1"); + Vertex forwarder = graph.addVertex(T.label, "forwarder", T.id, "7", "aai-node-type", + "forwarder", "sequence", "forwarder-1"); + Vertex forwarderEvc = graph.addVertex(T.label, "forwarder-evc", T.id, "8", "aai-node-type", + "forwarder-evc", "forwarder-evc-id", "forwarder-evc-1"); + Vertex pInterface = graph.addVertex(T.label, "p-interface", T.id, "9", "aai-node-type", + "p-interface", "interface-name", "p-interface-1"); + Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "10", "aai-node-type", "pnf", "pnf-name", + "pnf1name"); + Vertex lagInterface = graph.addVertex(T.label, "lag-interface", T.id, "11", "aai-node-type", + "lag-interface", "interface-name", "lagint1"); + Vertex logicalLink = graph.addVertex(T.label, "logical-link", T.id, "12", "aai-node-type", + "logical-link", "link-name", "logical-link-1", "link-type", "LAG"); + Vertex badLogicalLink = graph.addVertex(T.label, "logical-link", T.id, "13", + "aai-node-type", "logical-link", "link-name", "logical-link-bad", "link-type", "BAD"); + Vertex wrongInterfaceOne = graph.addVertex(T.label, "l-interface", T.id, "14", + "aai-node-type", "l-interface", "interface-name", "wrong-interface-1"); + Vertex wrongInterfaceTwo = graph.addVertex(T.label, "l-interface", T.id, "15", + "aai-node-type", "l-interface", "interface-name", "wrong-interface-2"); + Vertex wrongInterfaceThree = graph.addVertex(T.label, "l-interface", T.id, "16", + "aai-node-type", "l-interface", "interface-name", "wrong-interface-3"); + Vertex wrongInterfaceFour = graph.addVertex(T.label, "l-interface", T.id, "17", + "aai-node-type", "l-interface", "interface-name", "wrong-interface-4"); + Vertex vlanMapping = graph.addVertex(T.label, "vlan-mapping", T.id, "18", "aai-node-type", + "vlan-mapping", "vlan-mapping-id", "vlan-mapping-1"); + GraphTraversalSource g = graph.traversal(); - + rules.addTreeEdge(g, serviceInstance, serviceSubscription); rules.addTreeEdge(g, serviceSubscription, customer); - rules.addEdge(g, serviceInstance,forwardingPath); + rules.addEdge(g, serviceInstance, forwardingPath); rules.addEdge(g, forwardingPath, configuration); - rules.addTreeEdge(g, configuration,evc); - rules.addTreeEdge(g, forwardingPath,forwarder); + rules.addTreeEdge(g, configuration, evc); + rules.addTreeEdge(g, forwardingPath, forwarder); rules.addEdge(g, forwarder, configuration); - rules.addTreeEdge(g, configuration,forwarderEvc); - rules.addTreeEdge(g, vlanMapping,forwarderEvc); + rules.addTreeEdge(g, configuration, forwarderEvc); + rules.addTreeEdge(g, vlanMapping, forwarderEvc); rules.addEdge(g, forwarder, pInterface); - rules.addTreeEdge(g, pnf,pInterface); + rules.addTreeEdge(g, pnf, pInterface); rules.addEdge(g, forwarder, lagInterface); - rules.addTreeEdge(g, lagInterface,pnf); - rules.addEdge(g, logicalLink,lagInterface); - - //incorrect nodes + rules.addTreeEdge(g, lagInterface, pnf); + rules.addEdge(g, logicalLink, lagInterface); + + // incorrect nodes rules.addEdge(g, badLogicalLink, lagInterface); rules.addEdge(g, configuration, wrongInterfaceOne); rules.addEdge(g, forwarder, wrongInterfaceTwo); rules.addTreeEdge(g, pInterface, wrongInterfaceThree); - rules.addTreeEdge(g, lagInterface, wrongInterfaceFour); - + rules.addTreeEdge(g, lagInterface, wrongInterfaceFour); + expectedResult.add(serviceInstance); expectedResult.add(serviceSubscription); expectedResult.add(customer); @@ -101,24 +123,28 @@ public class AccessServiceFromServiceInstanceTest extends QueryTest { expectedResult.add(pnf); expectedResult.add(lagInterface); expectedResult.add(logicalLink); - + } @Override protected String getQueryName() { - return "access-service-fromServiceInstance"; + return "access-service-fromServiceInstance"; } @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "customer").has("global-customer-id", "customer-id-1").in("org.onap.relationships.inventory.BelongsTo") - .has("aai-node-type", "service-subscription").has("service-type", "service-subcription-1").in("org.onap.relationships.inventory.BelongsTo") - .has("aai-node-type", "service-instance").has("service-instance-id", "service-instance-id-1"); + g.has("aai-node-type", "customer").has("global-customer-id", "customer-id-1") + .in("org.onap.relationships.inventory.BelongsTo") + .has("aai-node-type", "service-subscription") + .has("service-type", "service-subcription-1") + .in("org.onap.relationships.inventory.BelongsTo") + .has("aai-node-type", "service-instance") + .has("service-instance-id", "service-instance-id-1"); } @Override protected void addParam(Map<String, Object> params) { - return; + return; } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/AvailabilityZoneAndComplexfromCloudRegionQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/AvailabilityZoneAndComplexfromCloudRegionQueryTest.java index 7ce6f9b..2f5788b 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/AvailabilityZoneAndComplexfromCloudRegionQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/AvailabilityZoneAndComplexfromCloudRegionQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,47 +30,60 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class AvailabilityZoneAndComplexfromCloudRegionQueryTest extends QueryTest { - public AvailabilityZoneAndComplexfromCloudRegionQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public AvailabilityZoneAndComplexfromCloudRegionQueryTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "0", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-owner", "cloud-owner-1"); - Vertex availibityzone = graph.addVertex(T.label, "availability-zone", T.id, "1", "aai-node-type", "availability-zone", "availability-zone-name", "az-name-1", "hypervisor-type", "hypervisortype-1"); - Vertex complex = graph.addVertex(T.label, "complex", T.id, "2", "aai-node-type", "complex", "physical-location-id", "physical-location-id-1","country","country1"); - - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-10", "cloud-owner", "cloud-owner-10"); - Vertex availibityzone1 = graph.addVertex(T.label, "availability-zone", T.id, "4", "aai-node-type", "availability-zone", "availability-zone-name", "az-name-10", "hypervisor-type", "hypervisortype-10"); - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "5", "aai-node-type", "complex", "physical-location-id", "physical-location-id-20","country","country20"); - - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, cloudregion, availibityzone); - rules.addEdge(g, cloudregion,complex); - - rules.addTreeEdge(g, cloudregion1, availibityzone1); - rules.addEdge(g, cloudregion1,complex1); - - expectedResult.add(availibityzone); - expectedResult.add(complex); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - @Override - protected String getQueryName() { - return "availabilityZoneAndComplex-fromCloudRegion"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type","cloud-region").has("cloud-owner","cloud-owner-1").has("cloud-region-id","cloud-region-id-1"); - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "0", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-owner", "cloud-owner-1"); + Vertex availibityzone = graph.addVertex(T.label, "availability-zone", T.id, "1", + "aai-node-type", "availability-zone", "availability-zone-name", "az-name-1", + "hypervisor-type", "hypervisortype-1"); + Vertex complex = graph.addVertex(T.label, "complex", T.id, "2", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1", "country", "country1"); + + Vertex cloudregion1 = + graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-10", "cloud-owner", "cloud-owner-10"); + Vertex availibityzone1 = graph.addVertex(T.label, "availability-zone", T.id, "4", + "aai-node-type", "availability-zone", "availability-zone-name", "az-name-10", + "hypervisor-type", "hypervisortype-10"); + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "5", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-20", "country", "country20"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, cloudregion, availibityzone); + rules.addEdge(g, cloudregion, complex); + + rules.addTreeEdge(g, cloudregion1, availibityzone1); + rules.addEdge(g, cloudregion1, complex1); + + expectedResult.add(availibityzone); + expectedResult.add(complex); + } + + @Override + protected String getQueryName() { + return "availabilityZoneAndComplex-fromCloudRegion"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "cloud-region").has("cloud-owner", "cloud-owner-1") + .has("cloud-region-id", "cloud-region-id-1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/ClosedLoopQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/ClosedLoopQueryTest.java index 821836a..3b610f1 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/ClosedLoopQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/ClosedLoopQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,74 +30,87 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class ClosedLoopQueryTest extends QueryTest { - public ClosedLoopQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver", "vserver-id", "vserver-id-1","vserver-name","vserver-name-1"); - Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1"); - - Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "3", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1"); - Vertex vfModule = graph.addVertex(T.label, "vf-module", T.id, "4", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-1"); - - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "5", "aai-node-type", "tenant", "tenant-id", "tenantid01", "tenant-name", "tenantName01"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "6", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); - - - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", "vserver-id", "vserver-id-2","vserver-name","vserver-name-1"); - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-2"); - - Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "9", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2"); - Vertex vfModule1 = graph.addVertex(T.label, "vf-module", T.id, "10", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-2"); - - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "11", "aai-node-type", "tenant", "tenant-id", "tenantid01", "tenant-name", "tenantName02"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "12", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-1"); - - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, vserver, gnvf); - rules.addEdge(g, gnvf, serviceInstance); - rules.addTreeEdge(g, gnvf, vfModule); - rules.addTreeEdge(g, vserver,tenant); - rules.addTreeEdge(g, tenant,cloudregion); - - //Not expected in result - rules.addEdge(g, vserver1, gnvf1); - rules.addEdge(g, gnvf1, serviceInstance1); - rules.addTreeEdge(g, gnvf1, vfModule1); - rules.addTreeEdge(g, vserver1,tenant1); - rules.addTreeEdge(g, tenant1,cloudregion1); - //Not expected in result - - expectedResult.add(vserver); - expectedResult.add(gnvf); - expectedResult.add(serviceInstance); - expectedResult.add(vfModule); - expectedResult.add(tenant); - expectedResult.add(cloudregion); - - } - - @Override - protected String getQueryName() { - return "closed-loop"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "vserver").has("vserver-id", "vserver-id-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public ClosedLoopQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1"); + + Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "3", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1"); + Vertex vfModule = graph.addVertex(T.label, "vf-module", T.id, "4", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-1"); + + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "5", "aai-node-type", "tenant", + "tenant-id", "tenantid01", "tenant-name", "tenantName01"); + Vertex cloudregion = + graph.addVertex(T.label, "cloud-region", T.id, "6", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); + + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", + "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-1"); + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2"); + + Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "9", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2"); + Vertex vfModule1 = graph.addVertex(T.label, "vf-module", T.id, "10", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-2"); + + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "11", "aai-node-type", "tenant", + "tenant-id", "tenantid01", "tenant-name", "tenantName02"); + Vertex cloudregion1 = + graph.addVertex(T.label, "cloud-region", T.id, "12", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-1"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, vserver, gnvf); + rules.addEdge(g, gnvf, serviceInstance); + rules.addTreeEdge(g, gnvf, vfModule); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + + // Not expected in result + rules.addEdge(g, vserver1, gnvf1); + rules.addEdge(g, gnvf1, serviceInstance1); + rules.addTreeEdge(g, gnvf1, vfModule1); + rules.addTreeEdge(g, vserver1, tenant1); + rules.addTreeEdge(g, tenant1, cloudregion1); + // Not expected in result + + expectedResult.add(vserver); + expectedResult.add(gnvf); + expectedResult.add(serviceInstance); + expectedResult.add(vfModule); + expectedResult.add(tenant); + expectedResult.add(cloudregion); + + } + + @Override + protected String getQueryName() { + return "closed-loop"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "vserver").has("vserver-id", "vserver-id-1"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionAndSourceFromConfigurationQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionAndSourceFromConfigurationQueryTest.java index 87e421d..43ddca7 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionAndSourceFromConfigurationQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionAndSourceFromConfigurationQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,72 +31,86 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class CloudRegionAndSourceFromConfigurationQueryTest extends QueryTest { - public CloudRegionAndSourceFromConfigurationQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void test() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex config = graph.addVertex(T.label, "configuration", T.id, "0", "aai-node-type", "configuration", "configuration-id", "configuration"); - Vertex logicalLink = graph.addVertex(T.label, "l", T.id, "1", "aai-node-type", "logical-link", "link-name", "link-name-0"); - Vertex lInterface = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", "interface-name", "interface-name-0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserver-id-0", "vserver-name", "vserver-name-0"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", "tenant-id", "tenantid01", "tenant-name", "tenantName01"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-0", "cloud-region-owner", "cloud-owner-name-0","cloud-region-version","cloud-region-version-0"); - - Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "6", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-0", "vf-module-name", "vf-module-name0"); - Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-0", "vnf-name", "vnf-name-0"); - - - Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", "l-interface", "interface-name", "interface-name-1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "13", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "14", "aai-node-type", "tenant", "tenant-id", "tenantid11", "tenant-name", "tenantName11"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "15", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1","cloud-region-version","cloud-region-version-1"); - - Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "16", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "17", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); - - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, config, logicalLink); - rules.addEdge(g, logicalLink, lInterface,"org.onap.relationships.inventory.Source"); - rules.addTreeEdge(g, lInterface, vserver); - rules.addTreeEdge(g, vserver, tenant); - rules.addTreeEdge(g, tenant, cloudregion); - rules.addEdge(g, vserver, vfmodule); - rules.addTreeEdge(g, vfmodule, gnvf); - - rules.addEdge(g, logicalLink, lInterface1,"tosca.relationships.network.LinksTo");//false - rules.addTreeEdge(g, lInterface1, vserver1);//false - rules.addTreeEdge(g, vserver1, tenant1);//false - rules.addTreeEdge(g, tenant1, cloudregion1);//false - rules.addEdge(g, vserver1, vfmodule1);//false - rules.addTreeEdge(g, vfmodule1, gnvf1);//false - - - expectedResult.add(cloudregion); - expectedResult.add(gnvf); - } - - @Override - protected String getQueryName() { - return "cloud-region-and-source-FromConfiguration"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "configuration").has("configuration-id", "configuration"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public CloudRegionAndSourceFromConfigurationQueryTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void test() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex config = graph.addVertex(T.label, "configuration", T.id, "0", "aai-node-type", + "configuration", "configuration-id", "configuration"); + Vertex logicalLink = graph.addVertex(T.label, "l", T.id, "1", "aai-node-type", + "logical-link", "link-name", "link-name-0"); + Vertex lInterface = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", + "l-interface", "interface-name", "interface-name-0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserver-id-0", "vserver-name", "vserver-name-0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", + "tenant-id", "tenantid01", "tenant-name", "tenantName01"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-0", "cloud-region-owner", + "cloud-owner-name-0", "cloud-region-version", "cloud-region-version-0"); + + Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "6", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-0", "vf-module-name", "vf-module-name0"); + Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-0", "vnf-name", "vnf-name-0"); + + Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", + "l-interface", "interface-name", "interface-name-1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "13", "aai-node-type", + "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "14", "aai-node-type", "tenant", + "tenant-id", "tenantid11", "tenant-name", "tenantName11"); + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "15", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", + "cloud-owner-name-1", "cloud-region-version", "cloud-region-version-1"); + + Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "16", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "17", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, config, logicalLink); + rules.addEdge(g, logicalLink, lInterface, "org.onap.relationships.inventory.Source"); + rules.addTreeEdge(g, lInterface, vserver); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addEdge(g, vserver, vfmodule); + rules.addTreeEdge(g, vfmodule, gnvf); + + rules.addEdge(g, logicalLink, lInterface1, "tosca.relationships.network.LinksTo");// false + rules.addTreeEdge(g, lInterface1, vserver1);// false + rules.addTreeEdge(g, vserver1, tenant1);// false + rules.addTreeEdge(g, tenant1, cloudregion1);// false + rules.addEdge(g, vserver1, vfmodule1);// false + rules.addTreeEdge(g, vfmodule1, gnvf1);// false + + expectedResult.add(cloudregion); + expectedResult.add(gnvf); + } + + @Override + protected String getQueryName() { + return "cloud-region-and-source-FromConfiguration"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "configuration").has("configuration-id", "configuration"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeQueryTest.java index 1cf94ca..f3a8352 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,53 +26,67 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class CloudRegionFromNfTypeQueryTest extends QueryTest { - public CloudRegionFromNfTypeQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //set up test graph - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnfid01", "nf-type", "sample-nf-type"); - Vertex cloudregion0 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", "cloud-region-id", "regionid00", "cloud-region-owner", "cloudOwnername00"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", "tenant-id", "tenantid01", "tenant-name", "tenantName01"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "5", "aai-node-type", "vserver", "vserver-id", "vserverid01"); - - Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", "generic-vnf", "vnf-id", "vnfid02", "nf-type", "ex-nf-type"); - Vertex cloudregion3 = graph.addVertex(T.label, "cloud-region", T.id, "9", "aai-node-type", "cloud-region", "cloud-region-id", "regionid03", "cloud-region-owner", "cloudOwnername03"); - Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "10", "aai-node-type", "tenant", "tenant-id", "tenantid02", "tenant-name", "tenantName02"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", "vserver-id", "vserverid02"); - - GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(g, tenant, cloudregion0); - rules.addTreeEdge(g, vserver1, tenant); - rules.addEdge(g, genericvnf, vserver1); - - rules.addTreeEdge(g, tenant2, cloudregion3); - rules.addTreeEdge(g, vserver2, tenant2); - rules.addEdge(g, genericvnf2, vserver2); - - expectedResult.add(cloudregion0); - } - @Override - protected String getQueryName() { - return "cloudRegion-fromNfType"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("nf-type", "sample-nf-type"); - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public CloudRegionFromNfTypeQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // set up test graph + Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid01", "nf-type", "sample-nf-type"); + Vertex cloudregion0 = + graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", + "cloud-region-id", "regionid00", "cloud-region-owner", "cloudOwnername00"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", + "tenant-id", "tenantid01", "tenant-name", "tenantName01"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "5", "aai-node-type", "vserver", + "vserver-id", "vserverid01"); + + Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid02", "nf-type", "ex-nf-type"); + Vertex cloudregion3 = + graph.addVertex(T.label, "cloud-region", T.id, "9", "aai-node-type", "cloud-region", + "cloud-region-id", "regionid03", "cloud-region-owner", "cloudOwnername03"); + Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "10", "aai-node-type", "tenant", + "tenant-id", "tenantid02", "tenant-name", "tenantName02"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", + "vserver", "vserver-id", "vserverid02"); + + GraphTraversalSource g = graph.traversal(); + + rules.addTreeEdge(g, tenant, cloudregion0); + rules.addTreeEdge(g, vserver1, tenant); + rules.addEdge(g, genericvnf, vserver1); + + rules.addTreeEdge(g, tenant2, cloudregion3); + rules.addTreeEdge(g, vserver2, tenant2); + rules.addEdge(g, genericvnf2, vserver2); + + expectedResult.add(cloudregion0); + } + + @Override + protected String getQueryName() { + return "cloudRegion-fromNfType"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("nf-type", "sample-nf-type"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeVendorVersionTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeVendorVersionTest.java index bc4488d..cdc28b7 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeVendorVersionTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeVendorVersionTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,68 +31,87 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class CloudRegionFromNfTypeVendorVersionTest extends QueryTest { - public CloudRegionFromNfTypeVendorVersionTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex image1 = graph.addVertex(T.label, "image", T.id, "10", "aai-node-type", "image", - "image-id", "image1", "image-name", "imageName1", "image-os-distro", "boopOS", "image-os-version", "1.0", "image-selflink", "self/link", - "application-vendor","vendor1"); - - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "20", "aai-node-type", "vserver", "vserver-id", "vserverid01"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "21", "aai-node-type", "vserver", "vserver-id", "vserverid02"); - Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "22", "aai-node-type", "vserver", "vserver-id", "vserverid03"); - - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "30", "aai-node-type", "tenant", "tenant-id", "tenantid01", "tenant-name", "tenantName01"); - Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "31", "aai-node-type", "tenant", "tenant-id", "tenantid02", "tenant-name", "tenantName02"); - Vertex tenant3 = graph.addVertex(T.label, "tenant", T.id, "32", "aai-node-type", "tenant", "tenant-id", "tenantid03", "tenant-name", "tenantName03"); - - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "40", "aai-node-type", "generic-vnf", "vnf-id", "genvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); - Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "41", "aai-node-type", "generic-vnf", "vnf-id", "genvnf2", "vnf-name", "genvnfname2", "nf-type", "wrong-nf-type"); - - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "50", "aai-node-type", "cloud-region", "cloud-region-id", "cloudreg1", "cloud-region-owner", "cloudOwnername00"); - Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "51", "aai-node-type", "cloud-region", "cloud-region-id", "cloudreg2", "cloud-region-owner", "cloudOwnername01"); - Vertex cloudregion3 = graph.addVertex(T.label, "cloud-region", T.id, "52", "aai-node-type", "cloud-region", "cloud-region-id", "cloudreg3", "cloud-region-owner", "cloudOwnername02"); - - GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(g, cloudregion1, tenant1); - rules.addTreeEdge(g, cloudregion2, tenant2); - rules.addTreeEdge(g, cloudregion3, tenant3); - rules.addTreeEdge(g, tenant1, vserver1); - rules.addTreeEdge(g, tenant2, vserver2); - rules.addTreeEdge(g, tenant3, vserver3); - rules.addEdge(g, genericvnf1, vserver1); - rules.addEdge(g, genericvnf2, vserver2); - rules.addEdge(g, genericvnf1, vserver3); - rules.addEdge(g, vserver1, image1); - rules.addEdge(g, vserver2, image1); - rules.addEdge(g, vserver3, image1); - - expectedResult.add(cloudregion1); - expectedResult.add(cloudregion3); - } - - @Override - protected String getQueryName() { - return "cloudRegion-fromNfTypeVendorVersion"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type","image").has("application-vendor","vendor1"); //TODO another test w the optional param too - } - - @Override - protected void addParam(Map<String, Object> params) { - params.put("nfType", "sample-nf-type"); - } + public CloudRegionFromNfTypeVendorVersionTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex image1 = graph.addVertex(T.label, "image", T.id, "10", "aai-node-type", "image", + "image-id", "image1", "image-name", "imageName1", "image-os-distro", "boopOS", + "image-os-version", "1.0", "image-selflink", "self/link", "application-vendor", + "vendor1"); + + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "20", "aai-node-type", + "vserver", "vserver-id", "vserverid01"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "21", "aai-node-type", + "vserver", "vserver-id", "vserverid02"); + Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "22", "aai-node-type", + "vserver", "vserver-id", "vserverid03"); + + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "30", "aai-node-type", "tenant", + "tenant-id", "tenantid01", "tenant-name", "tenantName01"); + Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "31", "aai-node-type", "tenant", + "tenant-id", "tenantid02", "tenant-name", "tenantName02"); + Vertex tenant3 = graph.addVertex(T.label, "tenant", T.id, "32", "aai-node-type", "tenant", + "tenant-id", "tenantid03", "tenant-name", "tenantName03"); + + Vertex genericvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "40", "aai-node-type", "generic-vnf", + "vnf-id", "genvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); + Vertex genericvnf2 = + graph.addVertex(T.label, "generic-vnf", T.id, "41", "aai-node-type", "generic-vnf", + "vnf-id", "genvnf2", "vnf-name", "genvnfname2", "nf-type", "wrong-nf-type"); + + Vertex cloudregion1 = + graph.addVertex(T.label, "cloud-region", T.id, "50", "aai-node-type", "cloud-region", + "cloud-region-id", "cloudreg1", "cloud-region-owner", "cloudOwnername00"); + Vertex cloudregion2 = + graph.addVertex(T.label, "cloud-region", T.id, "51", "aai-node-type", "cloud-region", + "cloud-region-id", "cloudreg2", "cloud-region-owner", "cloudOwnername01"); + Vertex cloudregion3 = + graph.addVertex(T.label, "cloud-region", T.id, "52", "aai-node-type", "cloud-region", + "cloud-region-id", "cloudreg3", "cloud-region-owner", "cloudOwnername02"); + + GraphTraversalSource g = graph.traversal(); + + rules.addTreeEdge(g, cloudregion1, tenant1); + rules.addTreeEdge(g, cloudregion2, tenant2); + rules.addTreeEdge(g, cloudregion3, tenant3); + rules.addTreeEdge(g, tenant1, vserver1); + rules.addTreeEdge(g, tenant2, vserver2); + rules.addTreeEdge(g, tenant3, vserver3); + rules.addEdge(g, genericvnf1, vserver1); + rules.addEdge(g, genericvnf2, vserver2); + rules.addEdge(g, genericvnf1, vserver3); + rules.addEdge(g, vserver1, image1); + rules.addEdge(g, vserver2, image1); + rules.addEdge(g, vserver3, image1); + + expectedResult.add(cloudregion1); + expectedResult.add(cloudregion3); + } + + @Override + protected String getQueryName() { + return "cloudRegion-fromNfTypeVendorVersion"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "image").has("application-vendor", "vendor1"); // TODO another test w + // the optional param + // too + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("nfType", "sample-nf-type"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeVendorVersion_withOptionalTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeVendorVersion_withOptionalTest.java index 8726a71..5944096 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeVendorVersion_withOptionalTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromNfTypeVendorVersion_withOptionalTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,72 +31,91 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class CloudRegionFromNfTypeVendorVersion_withOptionalTest extends QueryTest { - public CloudRegionFromNfTypeVendorVersion_withOptionalTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex image1 = graph.addVertex(T.label, "image", T.id, "10", "aai-node-type", "image", - "image-id", "image1", "image-name", "imageName1", "image-os-distro", "boopOS", "image-os-version", "1.0", "image-selflink", "self/link", - "application-vendor","vendor1","application-version","1.0"); - Vertex image2 = graph.addVertex(T.label, "image", T.id, "11", "aai-node-type", "image", - "image-id", "image2", "image-name", "imageName2", "image-os-distro", "boopOS", "image-os-version", "1.0", "image-selflink", "self/link", - "application-vendor","vendor1","application-version","2.1"); - Vertex image3 = graph.addVertex(T.label, "image", T.id, "12", "aai-node-type", "image", - "image-id", "image3", "image-name", "imageName3", "image-os-distro", "boopOS", "image-os-version", "1.0", "image-selflink", "self/link", - "application-vendor","wrongVendor","application-version","1.0"); - - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "20", "aai-node-type", "vserver", "vserver-id", "vserverid01"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "21", "aai-node-type", "vserver", "vserver-id", "vserverid02"); - Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "22", "aai-node-type", "vserver", "vserver-id", "vserverid03"); - - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "30", "aai-node-type", "tenant", "tenant-id", "tenantid01", "tenant-name", "tenantName01"); - Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "31", "aai-node-type", "tenant", "tenant-id", "tenantid02", "tenant-name", "tenantName02"); - Vertex tenant3 = graph.addVertex(T.label, "tenant", T.id, "32", "aai-node-type", "tenant", "tenant-id", "tenantid03", "tenant-name", "tenantName03"); - - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "40", "aai-node-type", "generic-vnf", "vnf-id", "genvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); - - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "50", "aai-node-type", "cloud-region", "cloud-region-id", "cloudreg1", "cloud-region-owner", "cloudOwnername00"); - Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "51", "aai-node-type", "cloud-region", "cloud-region-id", "cloudreg2", "cloud-region-owner", "cloudOwnername01"); - Vertex cloudregion3 = graph.addVertex(T.label, "cloud-region", T.id, "52", "aai-node-type", "cloud-region", "cloud-region-id", "cloudreg3", "cloud-region-owner", "cloudOwnername02"); - - GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(g, cloudregion1, tenant1); - rules.addTreeEdge(g, cloudregion2, tenant2); - rules.addTreeEdge(g, cloudregion3, tenant3); - rules.addTreeEdge(g, tenant1, vserver1); - rules.addTreeEdge(g, tenant2, vserver2); - rules.addTreeEdge(g, tenant3, vserver3); - rules.addEdge(g, genericvnf1, vserver1); - rules.addEdge(g, genericvnf1, vserver2); - rules.addEdge(g, genericvnf1, vserver3); - rules.addEdge(g, vserver1, image1); - rules.addEdge(g, vserver2, image2); - rules.addEdge(g, vserver3, image3); - - expectedResult.add(cloudregion1); - } - - @Override - protected String getQueryName() { - return "cloudRegion-fromNfTypeVendorVersion"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type","image").has("application-vendor","vendor1").has("application-version","1.0"); - } - - @Override - protected void addParam(Map<String, Object> params) { - params.put("nfType", "sample-nf-type"); - } + public CloudRegionFromNfTypeVendorVersion_withOptionalTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex image1 = graph.addVertex(T.label, "image", T.id, "10", "aai-node-type", "image", + "image-id", "image1", "image-name", "imageName1", "image-os-distro", "boopOS", + "image-os-version", "1.0", "image-selflink", "self/link", "application-vendor", + "vendor1", "application-version", "1.0"); + Vertex image2 = graph.addVertex(T.label, "image", T.id, "11", "aai-node-type", "image", + "image-id", "image2", "image-name", "imageName2", "image-os-distro", "boopOS", + "image-os-version", "1.0", "image-selflink", "self/link", "application-vendor", + "vendor1", "application-version", "2.1"); + Vertex image3 = graph.addVertex(T.label, "image", T.id, "12", "aai-node-type", "image", + "image-id", "image3", "image-name", "imageName3", "image-os-distro", "boopOS", + "image-os-version", "1.0", "image-selflink", "self/link", "application-vendor", + "wrongVendor", "application-version", "1.0"); + + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "20", "aai-node-type", + "vserver", "vserver-id", "vserverid01"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "21", "aai-node-type", + "vserver", "vserver-id", "vserverid02"); + Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "22", "aai-node-type", + "vserver", "vserver-id", "vserverid03"); + + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "30", "aai-node-type", "tenant", + "tenant-id", "tenantid01", "tenant-name", "tenantName01"); + Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "31", "aai-node-type", "tenant", + "tenant-id", "tenantid02", "tenant-name", "tenantName02"); + Vertex tenant3 = graph.addVertex(T.label, "tenant", T.id, "32", "aai-node-type", "tenant", + "tenant-id", "tenantid03", "tenant-name", "tenantName03"); + + Vertex genericvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "40", "aai-node-type", "generic-vnf", + "vnf-id", "genvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); + + Vertex cloudregion1 = + graph.addVertex(T.label, "cloud-region", T.id, "50", "aai-node-type", "cloud-region", + "cloud-region-id", "cloudreg1", "cloud-region-owner", "cloudOwnername00"); + Vertex cloudregion2 = + graph.addVertex(T.label, "cloud-region", T.id, "51", "aai-node-type", "cloud-region", + "cloud-region-id", "cloudreg2", "cloud-region-owner", "cloudOwnername01"); + Vertex cloudregion3 = + graph.addVertex(T.label, "cloud-region", T.id, "52", "aai-node-type", "cloud-region", + "cloud-region-id", "cloudreg3", "cloud-region-owner", "cloudOwnername02"); + + GraphTraversalSource g = graph.traversal(); + + rules.addTreeEdge(g, cloudregion1, tenant1); + rules.addTreeEdge(g, cloudregion2, tenant2); + rules.addTreeEdge(g, cloudregion3, tenant3); + rules.addTreeEdge(g, tenant1, vserver1); + rules.addTreeEdge(g, tenant2, vserver2); + rules.addTreeEdge(g, tenant3, vserver3); + rules.addEdge(g, genericvnf1, vserver1); + rules.addEdge(g, genericvnf1, vserver2); + rules.addEdge(g, genericvnf1, vserver3); + rules.addEdge(g, vserver1, image1); + rules.addEdge(g, vserver2, image2); + rules.addEdge(g, vserver3, image3); + + expectedResult.add(cloudregion1); + } + + @Override + protected String getQueryName() { + return "cloudRegion-fromNfTypeVendorVersion"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "image").has("application-vendor", "vendor1") + .has("application-version", "1.0"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("nfType", "sample-nf-type"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromVnfTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromVnfTest.java index d364f34..087abac 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromVnfTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromVnfTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -33,67 +33,74 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class CloudRegionFromVnfTest extends QueryTest { - public CloudRegionFromVnfTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public CloudRegionFromVnfTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf", "vnf-id", "gvId", "vnf-name", "name", "vnf-type", "type"); - Vertex vnfc = graph.addVertex(T.id, "10", "aai-node-type", "vnfc", - "vnfc-name", "vnfcName1", "nfc-naming-code", "blue", "nfc-function", "correct-function"); - Vertex vserv = graph.addVertex(T.id, "20", "aai-node-type", "vserver", - "vserver-id", "vservId", "vserver-name", "vservName", "vserver-selflink", "me/self"); - Vertex cr = graph.addVertex(T.id, "30", "aai-node-type", "cloud-region", "cloud-owner", "some guy", "cloud-region-id", "crId"); - Vertex tenant = graph.addVertex(T.id, "40", "aai-node-type", "tenant", "tenant-id", "ten1", "tenant-name", "tenName"); - Vertex pserv = graph.addVertex(T.id, "50", "aai-node-type", "pserver", "hostname", "hostname1", "in-maint", "false"); - Vertex vserv2 = graph.addVertex(T.id, "60", "aai-node-type", "vserver", - "vserver-id", "vservId2", "vserver-name", "vservName2", "vserver-selflink", "me/self"); - Vertex pserv2 = graph.addVertex(T.id, "70", "aai-node-type", "pserver", "hostname", "hostname2", "in-maint", "false"); - Vertex tenant2 = graph.addVertex(T.id, "80", "aai-node-type", "tenant", "tenant-id", "ten2", "tenant-name", "tenName2"); - Vertex cr2 = graph.addVertex(T.id, "90", "aai-node-type", "cloud-region", "cloud-owner", "some guy2", "cloud-region-id", "crId2"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, gv, vnfc); - rules.addEdge(g, vnfc, vserv); - rules.addEdge(g, vserv, pserv); - rules.addTreeEdge(g, cr, tenant); - rules.addTreeEdge(g, tenant, vserv); - rules.addEdge(g, gv, vserv2); - rules.addEdge(g, vserv2, pserv2); - rules.addTreeEdge(g, vserv2, tenant2); - rules.addTreeEdge(g, tenant2, cr2); - - expectedResult.add(gv); - expectedResult.add(cr); - expectedResult.add(tenant); - expectedResult.add(vnfc); - expectedResult.add(vserv); - expectedResult.add(pserv); - expectedResult.add(cr2); - expectedResult.add(tenant2); - expectedResult.add(vserv2); - expectedResult.add(pserv2); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf", "vnf-id", "gvId", + "vnf-name", "name", "vnf-type", "type"); + Vertex vnfc = graph.addVertex(T.id, "10", "aai-node-type", "vnfc", "vnfc-name", "vnfcName1", + "nfc-naming-code", "blue", "nfc-function", "correct-function"); + Vertex vserv = graph.addVertex(T.id, "20", "aai-node-type", "vserver", "vserver-id", + "vservId", "vserver-name", "vservName", "vserver-selflink", "me/self"); + Vertex cr = graph.addVertex(T.id, "30", "aai-node-type", "cloud-region", "cloud-owner", + "some guy", "cloud-region-id", "crId"); + Vertex tenant = graph.addVertex(T.id, "40", "aai-node-type", "tenant", "tenant-id", "ten1", + "tenant-name", "tenName"); + Vertex pserv = graph.addVertex(T.id, "50", "aai-node-type", "pserver", "hostname", + "hostname1", "in-maint", "false"); + Vertex vserv2 = graph.addVertex(T.id, "60", "aai-node-type", "vserver", "vserver-id", + "vservId2", "vserver-name", "vservName2", "vserver-selflink", "me/self"); + Vertex pserv2 = graph.addVertex(T.id, "70", "aai-node-type", "pserver", "hostname", + "hostname2", "in-maint", "false"); + Vertex tenant2 = graph.addVertex(T.id, "80", "aai-node-type", "tenant", "tenant-id", "ten2", + "tenant-name", "tenName2"); + Vertex cr2 = graph.addVertex(T.id, "90", "aai-node-type", "cloud-region", "cloud-owner", + "some guy2", "cloud-region-id", "crId2"); - @Override - protected String getQueryName() { - return "cloud-region-fromVnf"; - } + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, gv, vnfc); + rules.addEdge(g, vnfc, vserv); + rules.addEdge(g, vserv, pserv); + rules.addTreeEdge(g, cr, tenant); + rules.addTreeEdge(g, tenant, vserv); + rules.addEdge(g, gv, vserv2); + rules.addEdge(g, vserv2, pserv2); + rules.addTreeEdge(g, vserv2, tenant2); + rules.addTreeEdge(g, tenant2, cr2); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("vnf-id", "gvId"); - } + expectedResult.add(gv); + expectedResult.add(cr); + expectedResult.add(tenant); + expectedResult.add(vnfc); + expectedResult.add(vserv); + expectedResult.add(pserv); + expectedResult.add(cr2); + expectedResult.add(tenant2); + expectedResult.add(vserv2); + expectedResult.add(pserv2); + } - @Override - protected void addParam(Map<String, Object> params) { - // N/A for this query - } + @Override + protected String getQueryName() { + return "cloud-region-fromVnf"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("vnf-id", "gvId"); + } + + @Override + protected void addParam(Map<String, Object> params) { + // N/A for this query + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionSitesQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionSitesQueryTest.java index c1f3474..390ef22 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionSitesQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionSitesQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,59 +26,65 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class CloudRegionSitesQueryTest extends QueryTest { - public CloudRegionSitesQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } + public CloudRegionSitesQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex region1 = graph.addVertex(T.label, "cloud-region", T.id, "0", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner1"); + Vertex region2 = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner1"); + Vertex region3 = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner1"); + Vertex region4 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner2"); + Vertex complex1 = + graph.addVertex(T.label, "complex", T.id, "4", "aai-node-type", "complex"); + Vertex complex2 = + graph.addVertex(T.label, "complex", T.id, "5", "aai-node-type", "complex"); + Vertex complex3 = + graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, region1, complex1); + rules.addEdge(g, region2, complex1); + rules.addEdge(g, region3, complex2); + rules.addEdge(g, region4, complex3); - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex region1 = graph.addVertex(T.label, "cloud-region", T.id, "0", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner1"); - Vertex region2 = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner1"); - Vertex region3 = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner1"); - Vertex region4 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner2"); - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "4", "aai-node-type", "complex"); - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "5", "aai-node-type", "complex"); - Vertex complex3 = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex"); + expectedResult.add(region1); + expectedResult.add(region2); + expectedResult.add(region3); + expectedResult.add(complex1); + expectedResult.add(complex2); - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, region1, complex1); - rules.addEdge(g, region2, complex1); - rules.addEdge(g, region3, complex2); - rules.addEdge(g, region4, complex3); + } - expectedResult.add(region1); - expectedResult.add(region2); - expectedResult.add(region3); - expectedResult.add(complex1); - expectedResult.add(complex2); - - } + @Override + protected String getQueryName() { + return "cloud-region-sites"; + } - @Override - protected String getQueryName() { - return "cloud-region-sites"; - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "cloud-region"); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "cloud-region"); - - } + } - @Override - protected void addParam(Map<String, Object> params) { - params.put("owner", "cloudOwner1"); - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("owner", "cloudOwner1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionfromCountryCloudRegionVersionQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionfromCountryCloudRegionVersionQueryTest.java index 1ad6663..b0c697f 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionfromCountryCloudRegionVersionQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionfromCountryCloudRegionVersionQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,50 +26,57 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class CloudRegionfromCountryCloudRegionVersionQueryTest extends QueryTest { - public CloudRegionfromCountryCloudRegionVersionQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public CloudRegionfromCountryCloudRegionVersionQueryTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1", "country", "country1"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", + "cloud-owner-name-1", "cloud-region-version", "cloud-region-version-1"); + + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "2", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-2", "country", "country2"); + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", + "cloud-owner-name-2", "cloud-region-version", "cloud-region-version-2"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, complex, cloudregion); + + rules.addEdge(g, complex1, cloudregion1); + + expectedResult.add(cloudregion); + + } + + @Override + protected String getQueryName() { + return "cloudRegion-fromCountryCloudRegionVersion"; + } - @Test - public void run() { - super.run(); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "complex").has("country", "country1"); - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", "physical-location-id", "physical-location-id-1","country","country1"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1","cloud-region-version","cloud-region-version-1"); - - - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "2", "aai-node-type", "complex", "physical-location-id", "physical-location-id-2","country","country2"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2","cloud-region-version","cloud-region-version-2"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, complex,cloudregion); - - rules.addEdge(g, complex1,cloudregion1); - - expectedResult.add(cloudregion); - - } + } - @Override - protected String getQueryName() { - return "cloudRegion-fromCountryCloudRegionVersion"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "complex").has("country", "country1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - params.put("cloudRegionVersion", "cloud-region-version-1"); - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("cloudRegionVersion", "cloud-region-version-1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionfromCountryQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionfromCountryQueryTest.java index 38a20a1..1e5c751 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionfromCountryQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionfromCountryQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,50 +26,56 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class CloudRegionfromCountryQueryTest extends QueryTest { - public CloudRegionfromCountryQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public CloudRegionfromCountryQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1"); + Vertex cloudregion = + graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); + + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "2", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-2"); + Vertex cloudregion1 = + graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, complex, cloudregion); + + rules.addEdge(g, complex1, cloudregion1); + + expectedResult.add(cloudregion); + + } + + @Override + protected String getQueryName() { + return "cloudRegion-fromCountry"; + } - @Test - public void run() { - super.run(); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("physical-location-id", "physical-location-id-1"); - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", "physical-location-id", "physical-location-id-1"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); - - - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "2", "aai-node-type", "complex", "physical-location-id", "physical-location-id-2"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, complex,cloudregion); - - rules.addEdge(g, complex1,cloudregion1); - - expectedResult.add(cloudregion); - - } + } - @Override - protected String getQueryName() { - return "cloudRegion-fromCountry"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("physical-location-id", "physical-location-id-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionsByGenericVnfHGPairsTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionsByGenericVnfHGPairsTest.java index 1bfff46..9bf61e2 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionsByGenericVnfHGPairsTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionsByGenericVnfHGPairsTest.java @@ -10,7 +10,7 @@ package org.onap.aai.rest.search; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -34,176 +34,192 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -public class CloudRegionsByGenericVnfHGPairsTest extends LinkedHashMapQueryTest{ - - public CloudRegionsByGenericVnfHGPairsTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void test() { - super.run(); - String expectedServiceInstanceUri = "service-instance-id1"; - String[] expectedCloudRegions = {"c1oud-region-1","c1oud-region-3","c1oud-region-4"}; - String[] actualCloudRegions = new String[3]; - assertEquals("Number of results is correct", hashMapList.size(), 3); - for(int i = 0; i < hashMapList.size(); i++) { - LinkedHashMap currentMap = hashMapList.get(i); - assertEquals("Result " + i + " has correct service-instance", - currentMap.get("a").toString(), expectedServiceInstanceUri); - actualCloudRegions[i] = currentMap.get("b").toString(); - } - Arrays.sort(expectedCloudRegions); - Arrays.sort(actualCloudRegions); - assertTrue("Cloud regions are correct", Arrays.equals(actualCloudRegions, expectedCloudRegions)); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - // Set up the test graph - Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "0", "aai-node-type", - "service-subscription", "service-type", "DHV"); - Vertex servicesubscription1 = graph.addVertex(T.label, "service-subscription", T.id, "1", "aai-node-type", - "service-subscription", "service-type", "HNGATEWAY"); - Vertex servicesubscription2 = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", - "service-subscription", "service-type", "service-type-2"); - - Vertex servicesubscription3 = graph.addVertex(T.label, "service-subscription", T.id, "3", "aai-node-type", - "service-subscription", "service-type", "HNGATEWAY"); - Vertex servicesubscription4 = graph.addVertex(T.label, "service-subscription", T.id, "4", "aai-node-type", - "service-subscription", "service-type", "HNGATEWAY"); - Vertex servicesubscription5 = graph.addVertex(T.label, "service-subscription", T.id, "5", "aai-node-type", - "service-subscription", "service-type", "HNGATEWAY"); - - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "6", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id1", "aai-uri", "service-instance-id1"); - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "7", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id2", "aai-uri", "service-instance-id2"); - Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "8", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id3", "aai-uri", "service-instance-id3"); - Vertex serviceinstance3 = graph.addVertex(T.label, "service-instance", T.id, "9", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id4", "aai-uri", "service-instance-id4"); - - Vertex serviceinstance4 = graph.addVertex(T.label, "service-instance", T.id, "10", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id5", "aai-uri", "service-instance-id5"); - Vertex serviceinstance5 = graph.addVertex(T.label, "service-instance", T.id, "11", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id6", "aai-uri", "service-instance-id6"); - Vertex serviceinstance6 = graph.addVertex(T.label, "service-instance", T.id, "12", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id7", "aai-uri", "service-instance-id7"); - - Vertex serviceinstance7 = graph.addVertex(T.label, "service-instance", T.id, "13", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id8", "aai-uri", "service-instance-id8"); - Vertex serviceinstance8 = graph.addVertex(T.label, "service-instance", T.id, "14", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id9", "aai-uri", "service-instance-id9"); - Vertex serviceinstance9 = graph.addVertex(T.label, "service-instance", T.id, "15", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id10", "aai-uri", "service-instance-id10"); - - Vertex allottedresource = graph.addVertex(T.label, "allotted-resource", T.id, "16", "aai-node-type", - "allotted-resource"); - Vertex allottedresource1 = graph.addVertex(T.label, "allotted-resource", T.id, "17", "aai-node-type", - "allotted-resource"); - Vertex allottedresource2 = graph.addVertex(T.label, "allotted-resource", T.id, "18", "aai-node-type", - "allotted-resource"); - Vertex allottedresource3 = graph.addVertex(T.label, "allotted-resource", T.id, "35", "aai-node-type", - "allotted-resource"); - - Vertex gvnf = graph.addVertex(T.label, "generic-vnf", T.id, "19", "aai-node-type", "generic-vnf", "vnf-id", - "vnf-id-0", "vnf-type", "HG"); - Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf", "vnf-id", - "vnf-id-1", "vnf-type", "vnf-type-1"); - Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "21", "aai-node-type", "generic-vnf", "vnf-id", - "vnf-id-2", "vnf-type", "HG"); - Vertex gvnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "22", "aai-node-type", "generic-vnf", "vnf-id", - "vnf-id-2", "vnf-type", "HG"); - Vertex gvnf4 = graph.addVertex(T.label, "generic-vnf", T.id, "36", "aai-node-type", "generic-vnf", "vnf-id", - "vnf-id-2", "vnf-type", "HP"); - - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "23", "aai-node-type", "vserver"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "24", "aai-node-type", "vserver"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "25", "aai-node-type", "vserver"); - Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "26", "aai-node-type", "vserver"); - Vertex vserver4 = graph.addVertex(T.label, "vserver", T.id, "38", "aai-node-type", "vserver"); - - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "27", "aai-node-type", "tenant"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "28", "aai-node-type", "tenant"); - Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "29", "aai-node-type", "tenant"); - Vertex tenant3 = graph.addVertex(T.label, "tenant", T.id, "30", "aai-node-type", "tenant"); - Vertex tenant4 = graph.addVertex(T.label, "tenant", T.id, "39", "aai-node-type", "tenant"); - - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "31", "aai-node-type", "cloud-region", - "aai-uri", "c1oud-region-1"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "32", "aai-node-type", "cloud-region", - "aai-uri", "c1oud-region-2"); - Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "33", "aai-node-type", "cloud-region", - "aai-uri", "c1oud-region-3"); - Vertex cloudregion3 = graph.addVertex(T.label, "cloud-region", T.id, "34", "aai-node-type", "cloud-region", - "aai-uri", "c1oud-region-4"); - Vertex cloudregion4 = graph.addVertex(T.label, "cloud-region", T.id, "40", "aai-node-type", "cloud-region", - "aai-uri", "c1oud-region-5"); - - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, servicesubscription, serviceinstance); - - rules.addEdge(g, serviceinstance, allottedresource); - rules.addEdge(g, serviceinstance, allottedresource1); - rules.addEdge(g, serviceinstance, allottedresource2); - rules.addEdge(g, serviceinstance, allottedresource3); - - rules.addTreeEdge(g, allottedresource, serviceinstance1); - rules.addTreeEdge(g, serviceinstance1, servicesubscription1); - rules.addTreeEdge(g, servicesubscription1, serviceinstance2); - rules.addEdge(g, serviceinstance2, gvnf); - rules.addEdge(g, gvnf, vserver); - rules.addTreeEdge(g, vserver, tenant); - rules.addTreeEdge(g, tenant, cloudregion); - - rules.addTreeEdge(g, allottedresource1, serviceinstance4); - rules.addTreeEdge(g, serviceinstance4, servicesubscription3); - rules.addTreeEdge(g, servicesubscription3, serviceinstance5); - rules.addEdge(g, serviceinstance5, gvnf2); - rules.addEdge(g, gvnf2, vserver2); - rules.addTreeEdge(g, vserver2, tenant2); - rules.addTreeEdge(g, tenant2, cloudregion2); - - rules.addTreeEdge(g, allottedresource2, serviceinstance6); - rules.addTreeEdge(g, serviceinstance6, servicesubscription4); - rules.addTreeEdge(g, servicesubscription4, serviceinstance7); - rules.addEdge(g, serviceinstance7, gvnf3); - rules.addEdge(g, gvnf3, vserver3); - rules.addTreeEdge(g, vserver3, tenant3); - rules.addTreeEdge(g, tenant3, cloudregion3); - - rules.addTreeEdge(g, allottedresource3, serviceinstance8); - rules.addTreeEdge(g, serviceinstance8, servicesubscription5); - rules.addTreeEdge(g, servicesubscription5, serviceinstance9); - rules.addEdge(g, serviceinstance9, gvnf4); - rules.addEdge(g, gvnf4, vserver4); - rules.addTreeEdge(g, vserver4, tenant4); - rules.addTreeEdge(g, tenant4, cloudregion4);// Not expected in output as vnf-type is not HG - - - rules.addTreeEdge(g, servicesubscription2, serviceinstance3); - rules.addEdge(g, serviceinstance3, allottedresource); - rules.addEdge(g, serviceinstance2, gvnf1); - rules.addEdge(g, gvnf1, vserver1); - rules.addTreeEdge(g, vserver1, tenant1); - rules.addTreeEdge(g, tenant1, cloudregion1);// Not expected in output as service-subscription is not DHV - - } - - @Override - protected String getQueryName() { - return "cloud-regions-by-generic-vnf-HG-pairs"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-subscription").has("service-type", "DHV"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } +public class CloudRegionsByGenericVnfHGPairsTest extends LinkedHashMapQueryTest { + + public CloudRegionsByGenericVnfHGPairsTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void test() { + super.run(); + String expectedServiceInstanceUri = "service-instance-id1"; + String[] expectedCloudRegions = {"c1oud-region-1", "c1oud-region-3", "c1oud-region-4"}; + String[] actualCloudRegions = new String[3]; + assertEquals("Number of results is correct", hashMapList.size(), 3); + for (int i = 0; i < hashMapList.size(); i++) { + LinkedHashMap currentMap = hashMapList.get(i); + assertEquals("Result " + i + " has correct service-instance", + currentMap.get("a").toString(), expectedServiceInstanceUri); + actualCloudRegions[i] = currentMap.get("b").toString(); + } + Arrays.sort(expectedCloudRegions); + Arrays.sort(actualCloudRegions); + assertTrue("Cloud regions are correct", + Arrays.equals(actualCloudRegions, expectedCloudRegions)); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "0", + "aai-node-type", "service-subscription", "service-type", "DHV"); + Vertex servicesubscription1 = graph.addVertex(T.label, "service-subscription", T.id, "1", + "aai-node-type", "service-subscription", "service-type", "HNGATEWAY"); + Vertex servicesubscription2 = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-type", "service-type-2"); + + Vertex servicesubscription3 = graph.addVertex(T.label, "service-subscription", T.id, "3", + "aai-node-type", "service-subscription", "service-type", "HNGATEWAY"); + Vertex servicesubscription4 = graph.addVertex(T.label, "service-subscription", T.id, "4", + "aai-node-type", "service-subscription", "service-type", "HNGATEWAY"); + Vertex servicesubscription5 = graph.addVertex(T.label, "service-subscription", T.id, "5", + "aai-node-type", "service-subscription", "service-type", "HNGATEWAY"); + + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "6", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id1", + "aai-uri", "service-instance-id1"); + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "7", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id2", + "aai-uri", "service-instance-id2"); + Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "8", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id3", + "aai-uri", "service-instance-id3"); + Vertex serviceinstance3 = graph.addVertex(T.label, "service-instance", T.id, "9", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id4", + "aai-uri", "service-instance-id4"); + + Vertex serviceinstance4 = graph.addVertex(T.label, "service-instance", T.id, "10", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id5", + "aai-uri", "service-instance-id5"); + Vertex serviceinstance5 = graph.addVertex(T.label, "service-instance", T.id, "11", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id6", + "aai-uri", "service-instance-id6"); + Vertex serviceinstance6 = graph.addVertex(T.label, "service-instance", T.id, "12", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id7", + "aai-uri", "service-instance-id7"); + + Vertex serviceinstance7 = graph.addVertex(T.label, "service-instance", T.id, "13", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id8", + "aai-uri", "service-instance-id8"); + Vertex serviceinstance8 = graph.addVertex(T.label, "service-instance", T.id, "14", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id9", + "aai-uri", "service-instance-id9"); + Vertex serviceinstance9 = graph.addVertex(T.label, "service-instance", T.id, "15", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id10", + "aai-uri", "service-instance-id10"); + + Vertex allottedresource = graph.addVertex(T.label, "allotted-resource", T.id, "16", + "aai-node-type", "allotted-resource"); + Vertex allottedresource1 = graph.addVertex(T.label, "allotted-resource", T.id, "17", + "aai-node-type", "allotted-resource"); + Vertex allottedresource2 = graph.addVertex(T.label, "allotted-resource", T.id, "18", + "aai-node-type", "allotted-resource"); + Vertex allottedresource3 = graph.addVertex(T.label, "allotted-resource", T.id, "35", + "aai-node-type", "allotted-resource"); + + Vertex gvnf = graph.addVertex(T.label, "generic-vnf", T.id, "19", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-0", "vnf-type", "HG"); + Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-type", "vnf-type-1"); + Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "21", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2", "vnf-type", "HG"); + Vertex gvnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "22", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2", "vnf-type", "HG"); + Vertex gvnf4 = graph.addVertex(T.label, "generic-vnf", T.id, "36", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2", "vnf-type", "HP"); + + Vertex vserver = + graph.addVertex(T.label, "vserver", T.id, "23", "aai-node-type", "vserver"); + Vertex vserver1 = + graph.addVertex(T.label, "vserver", T.id, "24", "aai-node-type", "vserver"); + Vertex vserver2 = + graph.addVertex(T.label, "vserver", T.id, "25", "aai-node-type", "vserver"); + Vertex vserver3 = + graph.addVertex(T.label, "vserver", T.id, "26", "aai-node-type", "vserver"); + Vertex vserver4 = + graph.addVertex(T.label, "vserver", T.id, "38", "aai-node-type", "vserver"); + + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "27", "aai-node-type", "tenant"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "28", "aai-node-type", "tenant"); + Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "29", "aai-node-type", "tenant"); + Vertex tenant3 = graph.addVertex(T.label, "tenant", T.id, "30", "aai-node-type", "tenant"); + Vertex tenant4 = graph.addVertex(T.label, "tenant", T.id, "39", "aai-node-type", "tenant"); + + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "31", "aai-node-type", + "cloud-region", "aai-uri", "c1oud-region-1"); + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "32", "aai-node-type", + "cloud-region", "aai-uri", "c1oud-region-2"); + Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "33", "aai-node-type", + "cloud-region", "aai-uri", "c1oud-region-3"); + Vertex cloudregion3 = graph.addVertex(T.label, "cloud-region", T.id, "34", "aai-node-type", + "cloud-region", "aai-uri", "c1oud-region-4"); + Vertex cloudregion4 = graph.addVertex(T.label, "cloud-region", T.id, "40", "aai-node-type", + "cloud-region", "aai-uri", "c1oud-region-5"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, servicesubscription, serviceinstance); + + rules.addEdge(g, serviceinstance, allottedresource); + rules.addEdge(g, serviceinstance, allottedresource1); + rules.addEdge(g, serviceinstance, allottedresource2); + rules.addEdge(g, serviceinstance, allottedresource3); + + rules.addTreeEdge(g, allottedresource, serviceinstance1); + rules.addTreeEdge(g, serviceinstance1, servicesubscription1); + rules.addTreeEdge(g, servicesubscription1, serviceinstance2); + rules.addEdge(g, serviceinstance2, gvnf); + rules.addEdge(g, gvnf, vserver); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + + rules.addTreeEdge(g, allottedresource1, serviceinstance4); + rules.addTreeEdge(g, serviceinstance4, servicesubscription3); + rules.addTreeEdge(g, servicesubscription3, serviceinstance5); + rules.addEdge(g, serviceinstance5, gvnf2); + rules.addEdge(g, gvnf2, vserver2); + rules.addTreeEdge(g, vserver2, tenant2); + rules.addTreeEdge(g, tenant2, cloudregion2); + + rules.addTreeEdge(g, allottedresource2, serviceinstance6); + rules.addTreeEdge(g, serviceinstance6, servicesubscription4); + rules.addTreeEdge(g, servicesubscription4, serviceinstance7); + rules.addEdge(g, serviceinstance7, gvnf3); + rules.addEdge(g, gvnf3, vserver3); + rules.addTreeEdge(g, vserver3, tenant3); + rules.addTreeEdge(g, tenant3, cloudregion3); + + rules.addTreeEdge(g, allottedresource3, serviceinstance8); + rules.addTreeEdge(g, serviceinstance8, servicesubscription5); + rules.addTreeEdge(g, servicesubscription5, serviceinstance9); + rules.addEdge(g, serviceinstance9, gvnf4); + rules.addEdge(g, gvnf4, vserver4); + rules.addTreeEdge(g, vserver4, tenant4); + rules.addTreeEdge(g, tenant4, cloudregion4);// Not expected in output as vnf-type is not HG + + rules.addTreeEdge(g, servicesubscription2, serviceinstance3); + rules.addEdge(g, serviceinstance3, allottedresource); + rules.addEdge(g, serviceinstance2, gvnf1); + rules.addEdge(g, gvnf1, vserver1); + rules.addTreeEdge(g, vserver1, tenant1); + rules.addTreeEdge(g, tenant1, cloudregion1);// Not expected in output as + // service-subscription is not DHV + + } + + @Override + protected String getQueryName() { + return "cloud-regions-by-generic-vnf-HG-pairs"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "service-subscription").has("service-type", "DHV"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/ColocatedDevicesQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/ColocatedDevicesQueryTest.java index ee5db08..e94a7ef 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/ColocatedDevicesQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/ColocatedDevicesQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,89 +26,105 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class ColocatedDevicesQueryTest extends QueryTest { - public ColocatedDevicesQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //Set up the test graph - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", "physical-location-id", "clli1"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex pserverint1 = graph.addVertex(T.label, "p-interface", T.id, "2", "aai-node-type", "p-interface", "interface-name", "xe0/0/0"); - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "3", "aai-node-type", "pnf", "pnf-name", "pnfname1"); - Vertex pnfint1 = graph.addVertex(T.label, "p-interface", T.id, "4", "aai-node-type", "p-interface", "interface-name", "ge0/0/0"); - Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "5", "aai-node-type", "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); - - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex", "physical-location-id", "clli2"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "7", "aai-node-type", "pserver", "hostname", "pservername2"); - Vertex pserverint2 = graph.addVertex(T.label, "p-interface", T.id, "8", "aai-node-type", "p-interface", "interface-name", "xe0/0/1"); - Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "9", "aai-node-type", "pserver", "hostname", "pservername3"); - Vertex pserverint3 = graph.addVertex(T.label, "p-interface", T.id, "10", "aai-node-type", "p-interface", "interface-name", "xe0/0/3"); - Vertex plink2 = graph.addVertex(T.label, "physical-link", T.id, "11", "aai-node-type", "physical-link", "link-name", "xe0/0/1-to-xe0/0/3"); - - Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "12", "aai-node-type", "pnf", "pnf-name", "pnfname2"); - Vertex pnfint2 = graph.addVertex(T.label, "p-interface", T.id, "13", "aai-node-type", "p-interface", "interface-name", "ge0/0/2"); - Vertex pnf3 = graph.addVertex(T.label, "pnf", T.id, "14", "aai-node-type", "pnf", "pnf-name", "pnfname3"); - Vertex pnfint3 = graph.addVertex(T.label, "p-interface", T.id, "15", "aai-node-type", "p-interface", "interface-name", "ge0/0/3"); - Vertex plink3 = graph.addVertex(T.label, "physical-link", T.id, "16", "aai-node-type", "physical-link", "link-name", "ge0/0/2-to-ge0/0/3"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, pserver1, complex1); - rules.addTreeEdge(g, pserver1, pserverint1); - rules.addEdge(g, pnf1, complex1); - rules.addTreeEdge(g, pnf1, pnfint1); - rules.addEdge(g, pserverint1, plink1); - rules.addEdge(g, pnfint1, plink1); - - rules.addEdge(g, pserver2, complex1); - rules.addTreeEdge(g, pserver2, pserverint2); - rules.addEdge(g, pserver3, complex2); - rules.addTreeEdge(g, pserver3, pserverint3); - rules.addEdge(g, pserverint2, plink2); - rules.addEdge(g, pserverint3, plink2); - - rules.addEdge(g, pnf2, complex2); - rules.addTreeEdge(g, pnf2, pnfint2); - rules.addEdge(g, pnf3, complex2); - rules.addTreeEdge(g, pnf3, pnfint3); - rules.addEdge(g, pnfint2, plink3); - rules.addEdge(g, pnfint3, plink3); - - - expectedResult.add(pnf1); - expectedResult.add(pnfint1); - expectedResult.add(pserver1); - expectedResult.add(pserverint1); - expectedResult.add(plink1); - expectedResult.add(pserver2); - expectedResult.add(pserverint2); - expectedResult.add(plink2); - - - } - @Override - protected String getQueryName() { - return "colocated-devices"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("hostname", "pservername1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public ColocatedDevicesQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // Set up the test graph + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", + "physical-location-id", "clli1"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex pserverint1 = graph.addVertex(T.label, "p-interface", T.id, "2", "aai-node-type", + "p-interface", "interface-name", "xe0/0/0"); + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "3", "aai-node-type", "pnf", "pnf-name", + "pnfname1"); + Vertex pnfint1 = graph.addVertex(T.label, "p-interface", T.id, "4", "aai-node-type", + "p-interface", "interface-name", "ge0/0/0"); + Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "5", "aai-node-type", + "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); + + Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex", + "physical-location-id", "clli2"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "7", "aai-node-type", "pserver", + "hostname", "pservername2"); + Vertex pserverint2 = graph.addVertex(T.label, "p-interface", T.id, "8", "aai-node-type", + "p-interface", "interface-name", "xe0/0/1"); + Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "9", "aai-node-type", "pserver", + "hostname", "pservername3"); + Vertex pserverint3 = graph.addVertex(T.label, "p-interface", T.id, "10", "aai-node-type", + "p-interface", "interface-name", "xe0/0/3"); + Vertex plink2 = graph.addVertex(T.label, "physical-link", T.id, "11", "aai-node-type", + "physical-link", "link-name", "xe0/0/1-to-xe0/0/3"); + + Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "12", "aai-node-type", "pnf", + "pnf-name", "pnfname2"); + Vertex pnfint2 = graph.addVertex(T.label, "p-interface", T.id, "13", "aai-node-type", + "p-interface", "interface-name", "ge0/0/2"); + Vertex pnf3 = graph.addVertex(T.label, "pnf", T.id, "14", "aai-node-type", "pnf", + "pnf-name", "pnfname3"); + Vertex pnfint3 = graph.addVertex(T.label, "p-interface", T.id, "15", "aai-node-type", + "p-interface", "interface-name", "ge0/0/3"); + Vertex plink3 = graph.addVertex(T.label, "physical-link", T.id, "16", "aai-node-type", + "physical-link", "link-name", "ge0/0/2-to-ge0/0/3"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, pserver1, complex1); + rules.addTreeEdge(g, pserver1, pserverint1); + rules.addEdge(g, pnf1, complex1); + rules.addTreeEdge(g, pnf1, pnfint1); + rules.addEdge(g, pserverint1, plink1); + rules.addEdge(g, pnfint1, plink1); + + rules.addEdge(g, pserver2, complex1); + rules.addTreeEdge(g, pserver2, pserverint2); + rules.addEdge(g, pserver3, complex2); + rules.addTreeEdge(g, pserver3, pserverint3); + rules.addEdge(g, pserverint2, plink2); + rules.addEdge(g, pserverint3, plink2); + + rules.addEdge(g, pnf2, complex2); + rules.addTreeEdge(g, pnf2, pnfint2); + rules.addEdge(g, pnf3, complex2); + rules.addTreeEdge(g, pnf3, pnfint3); + rules.addEdge(g, pnfint2, plink3); + rules.addEdge(g, pnfint3, plink3); + + expectedResult.add(pnf1); + expectedResult.add(pnfint1); + expectedResult.add(pserver1); + expectedResult.add(pserverint1); + expectedResult.add(plink1); + expectedResult.add(pserver2); + expectedResult.add(pserverint2); + expectedResult.add(plink2); + + } + + @Override + protected String getQueryName() { + return "colocated-devices"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("hostname", "pservername1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/ComplexFromVnfTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/ComplexFromVnfTest.java index 72b2898..63a3a0c 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/ComplexFromVnfTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/ComplexFromVnfTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,56 +26,63 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class ComplexFromVnfTest extends QueryTest { - public ComplexFromVnfTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public ComplexFromVnfTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", + "hostname", "hostname-1"); + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1", "country", "US"); + + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "hostname-2"); + Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-2", "country", "US"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, gnvf1, vserver1); + rules.addEdge(g, vserver1, pserver1); + rules.addEdge(g, pserver1, complex1); + rules.addEdge(g, gnvf1, pserver2); + rules.addEdge(g, pserver2, complex2); + + expectedResult.add(gnvf1); + expectedResult.add(pserver1); + expectedResult.add(complex1); + expectedResult.add(pserver2); + expectedResult.add(complex2); + } + + @Override + protected String getQueryName() { + return "complex-fromVnf"; + } - @Test - public void run() { - super.run(); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("vnf-name", "vnf-name-1"); - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", "hostname", "hostname-1"); - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", "physical-location-id", "physical-location-id-1", "country", "US"); - - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", "hostname-2"); - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex", "physical-location-id", "physical-location-id-2", "country", "US"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, gnvf1, vserver1); - rules.addEdge(g, vserver1, pserver1); - rules.addEdge(g, pserver1, complex1); - rules.addEdge(g, gnvf1, pserver2); - rules.addEdge(g, pserver2, complex2); - - expectedResult.add(gnvf1); - expectedResult.add(pserver1); - expectedResult.add(complex1); - expectedResult.add(pserver2); - expectedResult.add(complex2); - } + } - @Override - protected String getQueryName() { - return "complex-fromVnf"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("vnf-name", "vnf-name-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/ContainmentPathQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/ContainmentPathQueryTest.java index 1a7edb4..dd9dcdd 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/ContainmentPathQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/ContainmentPathQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,13 @@ */ package org.onap.aai.rest.search; +import static org.hamcrest.collection.IsIterableContainingInOrder.contains; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +import java.util.Map; +import java.util.stream.Collectors; + import org.apache.tinkerpop.gremlin.process.traversal.Path; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,13 +34,6 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; -import java.util.stream.Collectors; - -import static org.hamcrest.collection.IsIterableContainingInOrder.contains; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - public class ContainmentPathQueryTest extends PathQueryTest { public ContainmentPathQueryTest() throws AAIException, NoEdgeRuleFoundException { @@ -42,10 +42,14 @@ public class ContainmentPathQueryTest extends PathQueryTest { @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "0", "aai-node-type", "pnf", "pnf-name", "pnf-1"); - Vertex pInterface1 = graph.addVertex(T.label, "p-interface", T.id, "1", "aai-node-type", "p-interface", "interface-name", "p-interface-1"); - Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", "interface-name", "l-interface-1"); - Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "3", "aai-node-type", "vlan", "vlan-interface", "vlan-1"); + Vertex pnf1 = + graph.addVertex(T.label, "pnf", T.id, "0", "aai-node-type", "pnf", "pnf-name", "pnf-1"); + Vertex pInterface1 = graph.addVertex(T.label, "p-interface", T.id, "1", "aai-node-type", + "p-interface", "interface-name", "p-interface-1"); + Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", + "l-interface", "interface-name", "l-interface-1"); + Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "3", "aai-node-type", "vlan", + "vlan-interface", "vlan-1"); rules.addTreeEdge(gts, pnf1, pInterface1); rules.addTreeEdge(gts, pInterface1, lInterface1); @@ -55,16 +59,22 @@ public class ContainmentPathQueryTest extends PathQueryTest { @Test public void vlanPathTest() { super.run(); - assertEquals("1 path is returned ",1, pathList.size()); + assertEquals("1 path is returned ", 1, pathList.size()); Path path = pathList.get(0); - Vertex pnf1 = graph.traversal().V().has("aai-node-type", "pnf").has("pnf-name", "pnf-1").next(); - Vertex pInterface1 = graph.traversal().V().has("aai-node-type", "p-interface").has("interface-name", "p-interface-1").next(); - Vertex lInterface1 = graph.traversal().V().has("aai-node-type", "l-interface").has("interface-name", "l-interface-1").next(); - Vertex vlan1 = graph.traversal().V().has("aai-node-type", "vlan").has("vlan-interface", "vlan-1").next(); + Vertex pnf1 = + graph.traversal().V().has("aai-node-type", "pnf").has("pnf-name", "pnf-1").next(); + Vertex pInterface1 = graph.traversal().V().has("aai-node-type", "p-interface") + .has("interface-name", "p-interface-1").next(); + Vertex lInterface1 = graph.traversal().V().has("aai-node-type", "l-interface") + .has("interface-name", "l-interface-1").next(); + Vertex vlan1 = graph.traversal().V().has("aai-node-type", "vlan") + .has("vlan-interface", "vlan-1").next(); - //remoce edges - assertThat(path.objects().stream().filter(o -> o instanceof Vertex).collect(Collectors.toList()), contains(vlan1, lInterface1, pInterface1, pnf1)); + // remoce edges + assertThat( + path.objects().stream().filter(o -> o instanceof Vertex).collect(Collectors.toList()), + contains(vlan1, lInterface1, pInterface1, pnf1)); } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CountVnfByVnfTypeTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CountVnfByVnfTypeTest.java index 3ec0886..3f34e36 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CountVnfByVnfTypeTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CountVnfByVnfTypeTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,29 +18,33 @@ * ============LICENSE_END========================================================= */ /** -* ============LICENSE_START======================================================= -* org.onap.aai -* ================================================================================ -* Copyright © 2017 AT&T Intellectual Property. All rights reserved. -* ================================================================================ -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* ============LICENSE_END========================================================= -* -* ECOMP is a trademark and service mark of AT&T Intellectual Property. -*/ + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ package org.onap.aai.rest.search; import com.google.common.collect.ImmutableMap; + +import java.util.ArrayList; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -48,54 +52,57 @@ import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; import org.onap.aai.exceptions.AAIException; -import java.util.ArrayList; -import java.util.Map; - public class CountVnfByVnfTypeTest extends QueryCountTest { - public CountVnfByVnfTypeTest() throws AAIException { - super(); + public CountVnfByVnfTypeTest() throws AAIException { + super(); } @Test public void test() { - super.run(); + super.run(); } @Override - protected void createGraph() throws AAIException { - //Set up the test graph - Vertex genericVnfTypeA1 = graph.addVertex(T.label, "genric-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1", "vnf-type", "A"); - Vertex genericVnfTypeB1 = graph.addVertex(T.label, "genric-vnf", T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2", "vnf-type", "B"); - Vertex genericVnfTypeC1 = graph.addVertex(T.label, "genric-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-3", "vnf-name", "vnf-name-3", "vnf-type", "C"); - Vertex genericVnfTypeA2 = graph.addVertex(T.label, "genric-vnf", T.id, "4", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-4", "vnf-name", "vnf-name-4", "vnf-type", "A"); - Vertex genericVnfTypeB2 = graph.addVertex(T.label, "genric-vnf", T.id, "5", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-5", "vnf-name", "vnf-name-5", "vnf-type", "B"); - Vertex genericVnfTypeA3 = graph.addVertex(T.label, "genric-vnf", T.id, "6", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-6", "vnf-name", "vnf-name-6", "vnf-type", "A"); - Vertex genericVnfTypeA4 = graph.addVertex(T.label, "genric-vnf", T.id, "7", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-7", "vnf-name", "vnf-name-7", "vnf-type", "A"); - - GraphTraversalSource g = graph.traversal(); + protected void createGraph() throws AAIException { + // Set up the test graph + Vertex genericVnfTypeA1 = graph.addVertex(T.label, "genric-vnf", T.id, "1", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1", "vnf-type", "A"); + Vertex genericVnfTypeB1 = graph.addVertex(T.label, "genric-vnf", T.id, "2", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2", "vnf-type", "B"); + Vertex genericVnfTypeC1 = graph.addVertex(T.label, "genric-vnf", T.id, "3", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-3", "vnf-name", "vnf-name-3", "vnf-type", "C"); + Vertex genericVnfTypeA2 = graph.addVertex(T.label, "genric-vnf", T.id, "4", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-4", "vnf-name", "vnf-name-4", "vnf-type", "A"); + Vertex genericVnfTypeB2 = graph.addVertex(T.label, "genric-vnf", T.id, "5", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-5", "vnf-name", "vnf-name-5", "vnf-type", "B"); + Vertex genericVnfTypeA3 = graph.addVertex(T.label, "genric-vnf", T.id, "6", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-6", "vnf-name", "vnf-name-6", "vnf-type", "A"); + Vertex genericVnfTypeA4 = graph.addVertex(T.label, "genric-vnf", T.id, "7", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-7", "vnf-name", "vnf-name-7", "vnf-type", "A"); - listOfMapEntryForCoutnQueries = new ArrayList<>(); - listOfMapEntryForCoutnQueries.add(ImmutableMap.of("A", 4L).entrySet().iterator().next()); - listOfMapEntryForCoutnQueries.add(ImmutableMap.of("B", 2L).entrySet().iterator().next()); - listOfMapEntryForCoutnQueries.add(ImmutableMap.of("C", 1L).entrySet().iterator().next()); - //expectedResultForMaps = expectedResultForMaps + "[A=4, B=2, C=1]"; - } + GraphTraversalSource g = graph.traversal(); - @Override - protected String getQueryName() { - return "count-vnf-byVnfType"; - } + listOfMapEntryForCoutnQueries = new ArrayList<>(); + listOfMapEntryForCoutnQueries.add(ImmutableMap.of("A", 4L).entrySet().iterator().next()); + listOfMapEntryForCoutnQueries.add(ImmutableMap.of("B", 2L).entrySet().iterator().next()); + listOfMapEntryForCoutnQueries.add(ImmutableMap.of("C", 1L).entrySet().iterator().next()); + // expectedResultForMaps = expectedResultForMaps + "[A=4, B=2, C=1]"; + } + @Override + protected String getQueryName() { + return "count-vnf-byVnfType"; + } @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - return; + return; } @Override protected void addParam(Map<String, Object> params) { - return; + return; } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/DestinationFromConfigurationQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/DestinationFromConfigurationQueryTest.java index 47c7d84..bf50dde 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/DestinationFromConfigurationQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/DestinationFromConfigurationQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,6 @@ */ package org.onap.aai.rest.search; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -32,69 +31,79 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class DestinationFromConfigurationQueryTest extends QueryTest { - public DestinationFromConfigurationQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void test() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex config = graph.addVertex(T.label, "configuration", T.id, "0", "aai-node-type", "configuration", "configuration-id", "configuration"); - Vertex logicalLink = graph.addVertex(T.label, "l", T.id, "1", "aai-node-type", "logical-link", "link-name", "link-name-0"); - Vertex lInterface = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", "interface-name", "interface-name-0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserver-id-0", "vserver-name", "vserver-name-0"); - Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "4", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-0", "vf-module-name", "vf-module-name0"); - - Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "5", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-0", "vnf-name", "vnf-name-0"); - - Vertex logicalLink1 = graph.addVertex(T.label, "l", T.id, "11", "aai-node-type", "logical-link", "link-name", "link-name-1"); - Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", "l-interface", "interface-name", "interface-name-1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "13", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); - Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "14", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); - - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "15", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "16", "aai-node-type", "pnf", "pnf-name", "pnfname-1"); - - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, config, logicalLink); - rules.addEdge(g, logicalLink, lInterface,"org.onap.relationships.inventory.Destination"); - rules.addTreeEdge(g, lInterface, vserver); - rules.addEdge(g, vserver, vfmodule); - rules.addTreeEdge(g, vfmodule, gnvf); - - rules.addEdge(g, logicalLink, lInterface1,"tosca.relationships.network.LinksTo");//false - rules.addTreeEdge(g, lInterface1, vserver1);//false - rules.addEdge(g, vserver1, vfmodule1);//false - rules.addTreeEdge(g, vfmodule1, gnvf1);//false - - rules.addEdge(g, config, logicalLink1); - rules.addEdge(g, logicalLink1, gnvf1); - rules.addEdge(g, gnvf1, pnf1); - - - expectedResult.add(gnvf); - expectedResult.add(pnf1); - } - - @Override - protected String getQueryName() { - return "destination-FromConfiguration"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "configuration").has("configuration-id", "configuration"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public DestinationFromConfigurationQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void test() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex config = graph.addVertex(T.label, "configuration", T.id, "0", "aai-node-type", + "configuration", "configuration-id", "configuration"); + Vertex logicalLink = graph.addVertex(T.label, "l", T.id, "1", "aai-node-type", + "logical-link", "link-name", "link-name-0"); + Vertex lInterface = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", + "l-interface", "interface-name", "interface-name-0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserver-id-0", "vserver-name", "vserver-name-0"); + Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "4", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-0", "vf-module-name", "vf-module-name0"); + + Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "5", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-0", "vnf-name", "vnf-name-0"); + + Vertex logicalLink1 = graph.addVertex(T.label, "l", T.id, "11", "aai-node-type", + "logical-link", "link-name", "link-name-1"); + Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", + "l-interface", "interface-name", "interface-name-1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "13", "aai-node-type", + "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "14", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); + + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "15", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "16", "aai-node-type", "pnf", + "pnf-name", "pnfname-1"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, config, logicalLink); + rules.addEdge(g, logicalLink, lInterface, "org.onap.relationships.inventory.Destination"); + rules.addTreeEdge(g, lInterface, vserver); + rules.addEdge(g, vserver, vfmodule); + rules.addTreeEdge(g, vfmodule, gnvf); + + rules.addEdge(g, logicalLink, lInterface1, "tosca.relationships.network.LinksTo");// false + rules.addTreeEdge(g, lInterface1, vserver1);// false + rules.addEdge(g, vserver1, vfmodule1);// false + rules.addTreeEdge(g, vfmodule1, gnvf1);// false + + rules.addEdge(g, config, logicalLink1); + rules.addEdge(g, logicalLink1, gnvf1); + rules.addEdge(g, gnvf1, pnf1); + + expectedResult.add(gnvf); + expectedResult.add(pnf1); + } + + @Override + protected String getQueryName() { + return "destination-FromConfiguration"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "configuration").has("configuration-id", "configuration"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/FabricInformationFromVnfTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/FabricInformationFromVnfTest.java index 68393c5..dd4b530 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/FabricInformationFromVnfTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/FabricInformationFromVnfTest.java @@ -10,7 +10,7 @@ package org.onap.aai.rest.search; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,76 +30,95 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -public class FabricInformationFromVnfTest extends QueryTest{ - - public FabricInformationFromVnfTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } +public class FabricInformationFromVnfTest extends QueryTest { - @Test - public void test() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex gvnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-0", "vnf-name", "vnf-name-0", "vnf-type", "vnf-type-0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver", "vserver-id", "vserver-id-0", "vserver-name", "vserver-name-0", "vserver-selflink", "vserver-selflink-0"); - Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", "interface-name", "interface-name-0"); - Vertex sriovvf = graph.addVertex(T.label, "sriov-vf", T.id, "3", "aai-node-type", "sriov-vf", "pci-id", "pci-id-0"); - Vertex sriovpf = graph.addVertex(T.label, "sriov-pf", T.id, "4", "aai-node-type", "sriov-pf", "pf-pci-id", "pf-pci-id-0"); - Vertex pinterface = graph.addVertex(T.label, "p-interface", T.id, "5", "aai-node-type", "p-interface", "interface-name", "interface-name-0"); - Vertex pserver = graph.addVertex(T.label, "p-server", T.id, "6", "aai-node-type", "pserver", "hostname", "hostname-0"); - Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "7", "aai-node-type", "vnfc", "vnfc-name", "vnfc-name-0", "nfc-naming-code", "nfc-naming-code-0", "nfc-naming-function", "nfc-naming-function-0"); - Vertex cp = graph.addVertex(T.label, "cp", T.id, "8", "aai-node-type", "cp", "cp-instance-id", "cp-instance-id-0"); - Vertex vlantag = graph.addVertex(T.label, "vlan-tag", T.id, "9", "aai-node-type", "vlan-tag","vlan-tag-id", "vlan-tag-id-0"); - - Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "16", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1", "vnf-type", "vnf-type-1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "10", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-0", "vserver-selflink", "vserver-selflink-0"); - Vertex vlantag1 = graph.addVertex(T.label, "vlan-tag", T.id, "11", "aai-node-type", "vlan-tag","vlan-tag-id", "vlan-tag-id-1"); - Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "14", "aai-node-type", "vnfc", "vnfc-name", "vnfc-name-1", "nfc-naming-code", "nfc-naming-code-1", "nfc-naming-function", "nfc-naming-function-1"); - Vertex cp1 = graph.addVertex(T.label, "cp", T.id, "15", "aai-node-type", "cp", "cp-instance-id", "cp-instance-id-1"); + public FabricInformationFromVnfTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, gvnf, vserver); - rules.addTreeEdge(g, vserver, linterface); - rules.addTreeEdge(g, linterface, sriovvf); - rules.addEdge(g, sriovvf, sriovpf); - rules.addTreeEdge(g, sriovpf, pinterface); - rules.addTreeEdge(g, pinterface, pserver); - rules.addEdge(g, vserver, vnfc); - rules.addTreeEdge(g, vnfc, cp); - rules.addEdge(g, cp, vlantag); - - rules.addEdge(g, gvnf1, vserver1); - rules.addEdge(g, vserver1, vnfc1); - rules.addTreeEdge(g, vnfc1, cp1); - rules.addEdge(g, cp1, vlantag1);//false - - - expectedResult.add(gvnf); - expectedResult.add(vserver); - expectedResult.add(pinterface); - expectedResult.add(pserver); - expectedResult.add(vnfc); - expectedResult.add(vlantag); - } + @Test + public void test() { + super.run(); + } - @Override - protected String getQueryName() { - return "fabric-information-fromVnf"; - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex gvnf = + graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", + "vnf-id", "vnf-id-0", "vnf-name", "vnf-name-0", "vnf-type", "vnf-type-0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver", + "vserver-id", "vserver-id-0", "vserver-name", "vserver-name-0", "vserver-selflink", + "vserver-selflink-0"); + Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", + "l-interface", "interface-name", "interface-name-0"); + Vertex sriovvf = graph.addVertex(T.label, "sriov-vf", T.id, "3", "aai-node-type", + "sriov-vf", "pci-id", "pci-id-0"); + Vertex sriovpf = graph.addVertex(T.label, "sriov-pf", T.id, "4", "aai-node-type", + "sriov-pf", "pf-pci-id", "pf-pci-id-0"); + Vertex pinterface = graph.addVertex(T.label, "p-interface", T.id, "5", "aai-node-type", + "p-interface", "interface-name", "interface-name-0"); + Vertex pserver = graph.addVertex(T.label, "p-server", T.id, "6", "aai-node-type", "pserver", + "hostname", "hostname-0"); + Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "7", "aai-node-type", "vnfc", + "vnfc-name", "vnfc-name-0", "nfc-naming-code", "nfc-naming-code-0", + "nfc-naming-function", "nfc-naming-function-0"); + Vertex cp = graph.addVertex(T.label, "cp", T.id, "8", "aai-node-type", "cp", + "cp-instance-id", "cp-instance-id-0"); + Vertex vlantag = graph.addVertex(T.label, "vlan-tag", T.id, "9", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlan-tag-id-0"); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("vnf-id", "vnf-id-0"); - } + Vertex gvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "16", "aai-node-type", "generic-vnf", + "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1", "vnf-type", "vnf-type-1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "10", "aai-node-type", + "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-0", + "vserver-selflink", "vserver-selflink-0"); + Vertex vlantag1 = graph.addVertex(T.label, "vlan-tag", T.id, "11", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlan-tag-id-1"); + Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "14", "aai-node-type", "vnfc", + "vnfc-name", "vnfc-name-1", "nfc-naming-code", "nfc-naming-code-1", + "nfc-naming-function", "nfc-naming-function-1"); + Vertex cp1 = graph.addVertex(T.label, "cp", T.id, "15", "aai-node-type", "cp", + "cp-instance-id", "cp-instance-id-1"); - @Override - protected void addParam(Map<String, Object> params) { - return; - } + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, gvnf, vserver); + rules.addTreeEdge(g, vserver, linterface); + rules.addTreeEdge(g, linterface, sriovvf); + rules.addEdge(g, sriovvf, sriovpf); + rules.addTreeEdge(g, sriovpf, pinterface); + rules.addTreeEdge(g, pinterface, pserver); + rules.addEdge(g, vserver, vnfc); + rules.addTreeEdge(g, vnfc, cp); + rules.addEdge(g, cp, vlantag); + + rules.addEdge(g, gvnf1, vserver1); + rules.addEdge(g, vserver1, vnfc1); + rules.addTreeEdge(g, vnfc1, cp1); + rules.addEdge(g, cp1, vlantag1);// false + + expectedResult.add(gvnf); + expectedResult.add(vserver); + expectedResult.add(pinterface); + expectedResult.add(pserver); + expectedResult.add(vnfc); + expectedResult.add(vlantag); + } + + @Override + protected String getQueryName() { + return "fabric-information-fromVnf"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("vnf-id", "vnf-id-0"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/FirstNetTopology_LineOfBusinessTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/FirstNetTopology_LineOfBusinessTest.java index 35a0cd9..93a65d2 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/FirstNetTopology_LineOfBusinessTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/FirstNetTopology_LineOfBusinessTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,68 +30,82 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class FirstNetTopology_LineOfBusinessTest extends QueryTest { - public FirstNetTopology_LineOfBusinessTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //set up test graph - Vertex lineofbusiness = graph.addVertex(T.label, "line-of-business", T.id, "0", "aai-node-type", "line-of-business", "line-of-business-name", "business0"); - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0","vnf-name", "vnf-name-1", "nf-type", "sample-nf-type"); - Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "2", "aai-node-type", "vnfc", "vnfc-name", "vnfc0", "nfc-naming-code", "namingCode0", "nfc-function", "function0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserverid0","vserver-name", "vserver-name-1"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "5", "aai-node-type", "pnf", "pnf-name", "pnf1name"); - - - Vertex lineofbusiness1 = graph.addVertex(T.label, "line-of-business", T.id, "10", "aai-node-type", "line-of-business", "line-of-business-name", "business1"); - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "11", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1","vnf-name", "vnf-name-2", "nf-type", "sample-nf-type1"); - Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "12", "aai-node-type", "vnfc", "vnfc-name", "vnfc1", "nfc-naming-code", "namingCode1", "nfc-function", "function1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "13", "aai-node-type", "vserver", "vserver-id", "vserverid1","vserver-name", "vserver-name-2"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", "pserver", "hostname", "pservername2"); - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "15", "aai-node-type", "pnf", "pnf-name", "pnf1name1"); + public FirstNetTopology_LineOfBusinessTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, genericvnf,lineofbusiness); - rules.addEdge(g, genericvnf, vnfc); - rules.addEdge(g, genericvnf, vserver); - rules.addEdge(g, genericvnf,pserver); - rules.addEdge(g, genericvnf, pnf); - - //false - rules.addEdge(g, genericvnf1,lineofbusiness1); - rules.addEdge(g, genericvnf1, vnfc1); - rules.addEdge(g, genericvnf1, vserver1); - rules.addEdge(g, genericvnf1,pserver1); - rules.addEdge(g, genericvnf1, pnf1); + @Test + public void run() { + super.run(); + } - expectedResult.add(genericvnf); - expectedResult.add(vnfc); - expectedResult.add(vserver); - expectedResult.add(pserver); - expectedResult.add(pnf); - + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // set up test graph + Vertex lineofbusiness = graph.addVertex(T.label, "line-of-business", T.id, "0", + "aai-node-type", "line-of-business", "line-of-business-name", "business0"); + Vertex genericvnf = + graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", + "vnf-id", "vnfid0", "vnf-name", "vnf-name-1", "nf-type", "sample-nf-type"); + Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "2", "aai-node-type", "vnfc", + "vnfc-name", "vnfc0", "nfc-naming-code", "namingCode0", "nfc-function", "function0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserverid0", "vserver-name", "vserver-name-1"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "5", "aai-node-type", "pnf", "pnf-name", + "pnf1name"); + Vertex lineofbusiness1 = graph.addVertex(T.label, "line-of-business", T.id, "10", + "aai-node-type", "line-of-business", "line-of-business-name", "business1"); + Vertex genericvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "11", "aai-node-type", "generic-vnf", + "vnf-id", "vnfid1", "vnf-name", "vnf-name-2", "nf-type", "sample-nf-type1"); + Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "12", "aai-node-type", "vnfc", + "vnfc-name", "vnfc1", "nfc-naming-code", "namingCode1", "nfc-function", "function1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "13", "aai-node-type", + "vserver", "vserver-id", "vserverid1", "vserver-name", "vserver-name-2"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", + "pserver", "hostname", "pservername2"); + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "15", "aai-node-type", "pnf", + "pnf-name", "pnf1name1"); + GraphTraversalSource g = graph.traversal(); - } - @Override - protected String getQueryName() { - return "fn-topology"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "line-of-business").has("line-of-business-name", "business0"); + rules.addEdge(g, genericvnf, lineofbusiness); + rules.addEdge(g, genericvnf, vnfc); + rules.addEdge(g, genericvnf, vserver); + rules.addEdge(g, genericvnf, pserver); + rules.addEdge(g, genericvnf, pnf); - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } -}
\ No newline at end of file + // false + rules.addEdge(g, genericvnf1, lineofbusiness1); + rules.addEdge(g, genericvnf1, vnfc1); + rules.addEdge(g, genericvnf1, vserver1); + rules.addEdge(g, genericvnf1, pserver1); + rules.addEdge(g, genericvnf1, pnf1); + + expectedResult.add(genericvnf); + expectedResult.add(vnfc); + expectedResult.add(vserver); + expectedResult.add(pserver); + expectedResult.add(pnf); + + } + + @Override + protected String getQueryName() { + return "fn-topology"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "line-of-business").has("line-of-business-name", "business0"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/FirstNetTopology_ServiceInstanceTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/FirstNetTopology_ServiceInstanceTest.java index 15a8302..b2accd5 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/FirstNetTopology_ServiceInstanceTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/FirstNetTopology_ServiceInstanceTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,75 +30,96 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class FirstNetTopology_ServiceInstanceTest extends QueryTest { - public FirstNetTopology_ServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //set up test graph - Vertex customer = graph.addVertex(T.label, "customer", T.id, "0", "aai-node-type", "customer","global-customer-id", "global-customer-id-1", "subscriber-name", "subscriber-name-1"); - Vertex serviceSubscription = graph.addVertex(T.label, "service-subscription", T.id, "1", "aai-node-type","service-subscription", "service-type", "service-type-1"); - Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "2", "aai-node-type","service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name","service-instance-name-1"); - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0","vnf-name", "vnf-name-1", "nf-type", "sample-nf-type"); - Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "4", "aai-node-type", "vnfc", "vnfc-name", "vnfc0", "nfc-naming-code", "namingCode0", "nfc-function", "function0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "5", "aai-node-type", "vserver", "vserver-id", "vserverid0","vserver-name", "vserver-name-1"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "6", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "7", "aai-node-type", "pnf", "pnf-name", "pnf1name"); - - Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "10", "aai-node-type", "customer","global-customer-id", "global-customer-id-2", "subscriber-name", "subscriber-name-2"); - Vertex serviceSubscription1 = graph.addVertex(T.label, "service-subscription", T.id, "11", "aai-node-type","service-subscription", "service-type", "service-type-2"); - Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "12", "aai-node-type","service-instance", "service-instance-id", "service-instance-id-2", "service-instance-name","service-instance-name-2"); - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "13", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1","vnf-name", "vnf-name-2", "nf-type", "sample-nf-type1"); - Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "14", "aai-node-type", "vnfc", "vnfc-name", "vnfc1", "nfc-naming-code", "namingCode1", "nfc-function", "function1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "15", "aai-node-type", "vserver", "vserver-id", "vserverid1","vserver-name", "vserver-name-2"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "16", "aai-node-type", "pserver", "hostname", "pservername2"); - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "17", "aai-node-type", "pnf", "pnf-name", "pnf1name1"); - + public FirstNetTopology_ServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, genericvnf, serviceInstance); - rules.addTreeEdge(g, serviceInstance, serviceSubscription); - rules.addTreeEdge(g, serviceSubscription, customer); - rules.addEdge(g, genericvnf, vnfc); - rules.addEdge(g, genericvnf, vserver); - rules.addEdge(g, genericvnf,pserver); - rules.addEdge(g, genericvnf, pnf); - - - //false - rules.addEdge(g, genericvnf1, serviceInstance1); - rules.addTreeEdge(g, serviceInstance1, serviceSubscription1); - rules.addTreeEdge(g, serviceSubscription1, customer1); - rules.addEdge(g, genericvnf1, vnfc1); - rules.addEdge(g, genericvnf1, vserver1); - rules.addEdge(g, genericvnf1,pserver1); - rules.addEdge(g, genericvnf1, pnf1); + @Test + public void run() { + super.run(); + } - expectedResult.add(genericvnf); - expectedResult.add(vnfc); - expectedResult.add(vserver); - expectedResult.add(pserver); - expectedResult.add(pnf); - + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // set up test graph + Vertex customer = graph.addVertex(T.label, "customer", T.id, "0", "aai-node-type", + "customer", "global-customer-id", "global-customer-id-1", "subscriber-name", + "subscriber-name-1"); + Vertex serviceSubscription = graph.addVertex(T.label, "service-subscription", T.id, "1", + "aai-node-type", "service-subscription", "service-type", "service-type-1"); + Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "2", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex genericvnf = + graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", + "vnf-id", "vnfid0", "vnf-name", "vnf-name-1", "nf-type", "sample-nf-type"); + Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "4", "aai-node-type", "vnfc", + "vnfc-name", "vnfc0", "nfc-naming-code", "namingCode0", "nfc-function", "function0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "5", "aai-node-type", "vserver", + "vserver-id", "vserverid0", "vserver-name", "vserver-name-1"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "6", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "7", "aai-node-type", "pnf", "pnf-name", + "pnf1name"); + Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "10", "aai-node-type", + "customer", "global-customer-id", "global-customer-id-2", "subscriber-name", + "subscriber-name-2"); + Vertex serviceSubscription1 = graph.addVertex(T.label, "service-subscription", T.id, "11", + "aai-node-type", "service-subscription", "service-type", "service-type-2"); + Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "12", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", + "service-instance-name", "service-instance-name-2"); + Vertex genericvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "13", "aai-node-type", "generic-vnf", + "vnf-id", "vnfid1", "vnf-name", "vnf-name-2", "nf-type", "sample-nf-type1"); + Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "14", "aai-node-type", "vnfc", + "vnfc-name", "vnfc1", "nfc-naming-code", "namingCode1", "nfc-function", "function1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "15", "aai-node-type", + "vserver", "vserver-id", "vserverid1", "vserver-name", "vserver-name-2"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "16", "aai-node-type", + "pserver", "hostname", "pservername2"); + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "17", "aai-node-type", "pnf", + "pnf-name", "pnf1name1"); + GraphTraversalSource g = graph.traversal(); - } - @Override - protected String getQueryName() { - return "fn-topology"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("service-instance-name", "service-instance-name-1"); - } - @Override - protected void addParam(Map<String, Object> params) { - } -}
\ No newline at end of file + rules.addEdge(g, genericvnf, serviceInstance); + rules.addTreeEdge(g, serviceInstance, serviceSubscription); + rules.addTreeEdge(g, serviceSubscription, customer); + rules.addEdge(g, genericvnf, vnfc); + rules.addEdge(g, genericvnf, vserver); + rules.addEdge(g, genericvnf, pserver); + rules.addEdge(g, genericvnf, pnf); + + // false + rules.addEdge(g, genericvnf1, serviceInstance1); + rules.addTreeEdge(g, serviceInstance1, serviceSubscription1); + rules.addTreeEdge(g, serviceSubscription1, customer1); + rules.addEdge(g, genericvnf1, vnfc1); + rules.addEdge(g, genericvnf1, vserver1); + rules.addEdge(g, genericvnf1, pserver1); + rules.addEdge(g, genericvnf1, pnf1); + + expectedResult.add(genericvnf); + expectedResult.add(vnfc); + expectedResult.add(vserver); + expectedResult.add(pserver); + expectedResult.add(pnf); + + } + + @Override + protected String getQueryName() { + return "fn-topology"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("service-instance-name", "service-instance-name-1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GFPVnfDataTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GFPVnfDataTest.java index 6f2d0ad..08287a3 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GFPVnfDataTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GFPVnfDataTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,107 +30,146 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GFPVnfDataTest extends QueryTest { - public GFPVnfDataTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //set up test graph - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0","vnf-name", "vnf-name-1", "nf-type", "sample-nf-type"); - Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "3", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-0"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "4", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-0"); - Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "5", "aai-node-type", "vlan","vlan-interface", "vlan1"); - Vertex vnfImage = graph.addVertex(T.label, "vnf-image", T.id, "6", "aai-node-type", "vnf-image", "vnf-image-uuid", "vnf1imageuuid"); - Vertex networkProfile = graph.addVertex(T.label, "network-profile", T.id, "7","aai-node-type", "network-profile","nm-profile-name", "nm-profile-name-1"); - Vertex lagint = graph.addVertex(T.label, "lag-interface", T.id, "8", "aai-node-type", "lag-interface","interface-name", "lagint1"); - - Vertex lagint0 = graph.addVertex(T.label, "lag-interface", T.id, "11", "aai-node-type", "lag-interface","interface-name", "lagint31"); - Vertex linterface0 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id30", "l-interface-name", "l-interface-name30"); - Vertex vlan0 = graph.addVertex(T.label, "vlan", T.id, "13", "aai-node-type", "vlan","vlan-interface", "vlan31"); - Vertex l3inter1ipv4addresslist0 = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "14", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-30"); - Vertex l3inter1ipv6addresslist0 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "15", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-30"); - - - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "10", "aai-node-type", "generic-vnf", "vnf-id", "vnfid10","vnf-name", "vnf-name-11", "nf-type", "sample-nf-type11"); - Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "20", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id10", "l-interface-name", "l-interface-name10"); - Vertex l3inter1ipv4addresslist1 = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "30", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-10"); - Vertex l3inter1ipv6addresslist1 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "40", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-10"); - Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "50", "aai-node-type", "vlan","vlan-interface", "vlan11"); - Vertex vnfImage1 = graph.addVertex(T.label, "vnf-image", T.id, "60", "aai-node-type", "vnf-image", "vnf-image-uuid", "vnf1imageuuid11"); - Vertex networkProfile1 = graph.addVertex(T.label, "network-profile", T.id, "70","aai-node-type", "network-profile","nm-profile-name", "nm-profile-name-11"); - Vertex lagint1 = graph.addVertex(T.label, "lag-interface", T.id, "80", "aai-node-type", "lag-interface","interface-name", "lagint11"); - - - Vertex lagint2 = graph.addVertex(T.label, "lag-interface", T.id, "21", "aai-node-type", "lag-interface","interface-name", "lagint312"); - Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "22", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id30", "l-interface-name", "l-interface-name302"); - Vertex vlan2 = graph.addVertex(T.label, "vlan", T.id, "23", "aai-node-type", "vlan","vlan-interface", "vlan312"); - Vertex l3inter1ipv4addresslist2 = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "24", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-302"); - Vertex l3inter1ipv6addresslist2 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "25", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-302"); - - GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(g, genericvnf, linterface); - rules.addTreeEdge(g, l3inter1ipv4addresslist, linterface); - rules.addTreeEdge(g, l3inter1ipv6addresslist, linterface); - rules.addTreeEdge(g, linterface,vlan); - rules.addTreeEdge(g, l3inter1ipv4addresslist, vlan); - rules.addTreeEdge(g, l3inter1ipv6addresslist, vlan); - - rules.addTreeEdge(g, genericvnf, lagint0); - rules.addTreeEdge(g, lagint0,linterface0); - rules.addTreeEdge(g, linterface0,vlan0); - rules.addTreeEdge(g, l3inter1ipv4addresslist0, linterface0); - rules.addTreeEdge(g, l3inter1ipv6addresslist0, linterface0); - - rules.addEdge(g, genericvnf, vnfImage); - rules.addEdge(g, genericvnf, networkProfile); - - - - //false - rules.addTreeEdge(g, genericvnf1, linterface1); - rules.addTreeEdge(g, l3inter1ipv4addresslist1, linterface1); - rules.addTreeEdge(g, l3inter1ipv6addresslist1, linterface1); - rules.addTreeEdge(g, linterface1,vlan1); - rules.addTreeEdge(g, l3inter1ipv4addresslist1, vlan1); - rules.addTreeEdge(g, l3inter1ipv6addresslist1, vlan1); - - rules.addTreeEdge(g, genericvnf1, lagint2); - rules.addTreeEdge(g, linterface2,lagint2); - rules.addTreeEdge(g, linterface2,vlan2); - rules.addTreeEdge(g, l3inter1ipv4addresslist2, linterface2); - rules.addTreeEdge(g, l3inter1ipv6addresslist2, linterface2); - - rules.addEdge(g, genericvnf1, vnfImage1); - rules.addEdge(g, genericvnf1, networkProfile1); - - - expectedResult.add(genericvnf); - expectedResult.add(l3inter1ipv4addresslist); - expectedResult.add(l3inter1ipv6addresslist); - expectedResult.add(vlan); - expectedResult.add(linterface0); - expectedResult.add(vnfImage); - expectedResult.add(networkProfile); - - - } - @Override - protected String getQueryName() { - return "gfp-vnf-data"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("vnf-name", "vnf-name-1").has("vnf-id", "vnfid0"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public GFPVnfDataTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // set up test graph + Vertex genericvnf = + graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", + "vnf-id", "vnfid0", "vnf-name", "vnf-name-1", "nf-type", "sample-nf-type"); + Vertex linterface = + graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "3", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-0"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "4", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-0"); + Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "5", "aai-node-type", "vlan", + "vlan-interface", "vlan1"); + Vertex vnfImage = graph.addVertex(T.label, "vnf-image", T.id, "6", "aai-node-type", + "vnf-image", "vnf-image-uuid", "vnf1imageuuid"); + Vertex networkProfile = graph.addVertex(T.label, "network-profile", T.id, "7", + "aai-node-type", "network-profile", "nm-profile-name", "nm-profile-name-1"); + Vertex lagint = graph.addVertex(T.label, "lag-interface", T.id, "8", "aai-node-type", + "lag-interface", "interface-name", "lagint1"); + + Vertex lagint0 = graph.addVertex(T.label, "lag-interface", T.id, "11", "aai-node-type", + "lag-interface", "interface-name", "lagint31"); + Vertex linterface0 = + graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id30", "l-interface-name", "l-interface-name30"); + Vertex vlan0 = graph.addVertex(T.label, "vlan", T.id, "13", "aai-node-type", "vlan", + "vlan-interface", "vlan31"); + Vertex l3inter1ipv4addresslist0 = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "14", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-30"); + Vertex l3inter1ipv6addresslist0 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "15", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-30"); + + Vertex genericvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "10", "aai-node-type", "generic-vnf", + "vnf-id", "vnfid10", "vnf-name", "vnf-name-11", "nf-type", "sample-nf-type11"); + Vertex linterface1 = + graph.addVertex(T.label, "l-interface", T.id, "20", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id10", "l-interface-name", "l-interface-name10"); + Vertex l3inter1ipv4addresslist1 = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "30", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-10"); + Vertex l3inter1ipv6addresslist1 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "40", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-10"); + Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "50", "aai-node-type", "vlan", + "vlan-interface", "vlan11"); + Vertex vnfImage1 = graph.addVertex(T.label, "vnf-image", T.id, "60", "aai-node-type", + "vnf-image", "vnf-image-uuid", "vnf1imageuuid11"); + Vertex networkProfile1 = graph.addVertex(T.label, "network-profile", T.id, "70", + "aai-node-type", "network-profile", "nm-profile-name", "nm-profile-name-11"); + Vertex lagint1 = graph.addVertex(T.label, "lag-interface", T.id, "80", "aai-node-type", + "lag-interface", "interface-name", "lagint11"); + + Vertex lagint2 = graph.addVertex(T.label, "lag-interface", T.id, "21", "aai-node-type", + "lag-interface", "interface-name", "lagint312"); + Vertex linterface2 = + graph.addVertex(T.label, "l-interface", T.id, "22", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id30", "l-interface-name", "l-interface-name302"); + Vertex vlan2 = graph.addVertex(T.label, "vlan", T.id, "23", "aai-node-type", "vlan", + "vlan-interface", "vlan312"); + Vertex l3inter1ipv4addresslist2 = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "24", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-302"); + Vertex l3inter1ipv6addresslist2 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "25", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-302"); + + GraphTraversalSource g = graph.traversal(); + + rules.addTreeEdge(g, genericvnf, linterface); + rules.addTreeEdge(g, l3inter1ipv4addresslist, linterface); + rules.addTreeEdge(g, l3inter1ipv6addresslist, linterface); + rules.addTreeEdge(g, linterface, vlan); + rules.addTreeEdge(g, l3inter1ipv4addresslist, vlan); + rules.addTreeEdge(g, l3inter1ipv6addresslist, vlan); + + rules.addTreeEdge(g, genericvnf, lagint0); + rules.addTreeEdge(g, lagint0, linterface0); + rules.addTreeEdge(g, linterface0, vlan0); + rules.addTreeEdge(g, l3inter1ipv4addresslist0, linterface0); + rules.addTreeEdge(g, l3inter1ipv6addresslist0, linterface0); + + rules.addEdge(g, genericvnf, vnfImage); + rules.addEdge(g, genericvnf, networkProfile); + + // false + rules.addTreeEdge(g, genericvnf1, linterface1); + rules.addTreeEdge(g, l3inter1ipv4addresslist1, linterface1); + rules.addTreeEdge(g, l3inter1ipv6addresslist1, linterface1); + rules.addTreeEdge(g, linterface1, vlan1); + rules.addTreeEdge(g, l3inter1ipv4addresslist1, vlan1); + rules.addTreeEdge(g, l3inter1ipv6addresslist1, vlan1); + + rules.addTreeEdge(g, genericvnf1, lagint2); + rules.addTreeEdge(g, linterface2, lagint2); + rules.addTreeEdge(g, linterface2, vlan2); + rules.addTreeEdge(g, l3inter1ipv4addresslist2, linterface2); + rules.addTreeEdge(g, l3inter1ipv6addresslist2, linterface2); + + rules.addEdge(g, genericvnf1, vnfImage1); + rules.addEdge(g, genericvnf1, networkProfile1); + + expectedResult.add(genericvnf); + expectedResult.add(l3inter1ipv4addresslist); + expectedResult.add(l3inter1ipv6addresslist); + expectedResult.add(vlan); + expectedResult.add(linterface0); + expectedResult.add(vnfImage); + expectedResult.add(networkProfile); + + } + + @Override + protected String getQueryName() { + return "gfp-vnf-data"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("vnf-name", "vnf-name-1").has("vnf-id", "vnfid0"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GenericVnfsFromPserverTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GenericVnfsFromPserverTest.java index 4d42fce..80e9c51 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GenericVnfsFromPserverTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GenericVnfsFromPserverTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,78 +26,95 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GenericVnfsFromPserverTest extends QueryTest { - public GenericVnfsFromPserverTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public GenericVnfsFromPserverTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + + Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1", "vnf-type", "test", + "nf-function", "test", "nf-role", "test", "nf-naming-code", "test"); + Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2", "vnf-type", "test", + "nf-function", "test", "nf-role", "test", "nf-naming-code", "test"); + Vertex vnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-3", "vnf-name", "vnf-name-3", "vnf-type", "test", + "nf-function", "test", "nf-role", "test", "nf-naming-code", "test"); + Vertex vnf4 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-4", "vnf-name", "vnf-name-4", "vnf-type", "test", + "nf-function", "test", "nf-role", "test", "nf-naming-code", "test"); + Vertex badVnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-bad-1", "vnf-name", "vnf-bad-1", "vnf-type", "test"); + Vertex badVnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "5", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-bad-2", "vnf-name", "vnf-bad-2", "nf-function", "test"); + Vertex badVnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-bad-3", "vnf-name", "vnf-bad-3", "vnf-type", "bad", + "nf-function", "bad"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "8", "aai-node-type", "vserver", + "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2"); + Vertex badVserver = graph.addVertex(T.label, "vserver", T.id, "9", "aai-node-type", + "vserver", "vserver-id", "vserver-bad", "vserver-name", "vserver-bad"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "10", "aai-node-type", + "pserver", "hostname", "hostname-1", "fqdn", "fqdn"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "11", "aai-node-type", + "pserver", "hostname", "hostname-2", "fqdn", "fqdn"); + Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "12", "aai-node-type", + "pserver", "hostname", "hostname-3", "fqdn", "fqdn"); + Vertex badPserver1 = graph.addVertex(T.label, "pserver", T.id, "13", "aai-node-type", + "pserver", "hostname", "hostname-bad-1", "fqdn", "fqdn"); + Vertex badPserver2 = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", + "pserver", "hostname", "hostname-bad-2", "fqdn", "fqdn"); + Vertex badPserver3 = graph.addVertex(T.label, "pserver", T.id, "15", "aai-node-type", + "pserver", "hostname", "hostname-bad-3", "fqdn", "fqdn"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, pserver1, vnf1); + rules.addEdge(g, pserver2, vserver1); + rules.addEdge(g, vserver1, vnf2); + rules.addEdge(g, pserver3, vnf3); + rules.addEdge(g, pserver3, vserver2); + rules.addEdge(g, vserver2, vnf4); + rules.addEdge(g, badPserver1, badVnf1); + rules.addEdge(g, badPserver2, badVserver); + rules.addEdge(g, badVserver, badVnf2); + rules.addEdge(g, badPserver3, badVnf3); - @Test - public void run() { - super.run(); - } + expectedResult.add(vnf1); + expectedResult.add(vnf2); + expectedResult.add(vnf3); + expectedResult.add(vnf4); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph + @Override + protected String getQueryName() { + return "genericVnfs-fromPserver"; + } - Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1", "vnf-type", "test", "nf-function", "test" - ,"nf-role", "test", "nf-naming-code", "test"); - Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2", "vnf-type", "test", "nf-function", "test" - ,"nf-role", "test", "nf-naming-code", "test"); - Vertex vnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-3", "vnf-name", "vnf-name-3", "vnf-type", "test", "nf-function", "test" - ,"nf-role", "test", "nf-naming-code", "test"); - Vertex vnf4 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-4", "vnf-name", "vnf-name-4", "vnf-type", "test", "nf-function", "test" - ,"nf-role", "test", "nf-naming-code", "test"); - Vertex badVnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", "generic-vnf", "vnf-id", "vnf-bad-1", "vnf-name", "vnf-bad-1", "vnf-type", "test"); - Vertex badVnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "5", "aai-node-type", "generic-vnf", "vnf-id", "vnf-bad-2", "vnf-name", "vnf-bad-2", "nf-function", "test"); - Vertex badVnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", "generic-vnf", "vnf-id", "vnf-bad-3", "vnf-name", "vnf-bad-3", "vnf-type", "bad", "nf-function", "bad"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "8", "aai-node-type", "vserver", "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2"); - Vertex badVserver = graph.addVertex(T.label, "vserver", T.id, "9", "aai-node-type", "vserver", "vserver-id", "vserver-bad", "vserver-name", "vserver-bad"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "10", "aai-node-type", "pserver", "hostname", "hostname-1", "fqdn", "fqdn"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "11", "aai-node-type", "pserver", "hostname", "hostname-2", "fqdn", "fqdn"); - Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "12", "aai-node-type", "pserver", "hostname", "hostname-3", "fqdn", "fqdn"); - Vertex badPserver1 = graph.addVertex(T.label, "pserver", T.id, "13", "aai-node-type", "pserver", "hostname", "hostname-bad-1", "fqdn", "fqdn"); - Vertex badPserver2 = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", "pserver", "hostname", "hostname-bad-2", "fqdn", "fqdn"); - Vertex badPserver3 = graph.addVertex(T.label, "pserver", T.id, "15", "aai-node-type", "pserver", "hostname", "hostname-bad-3", "fqdn", "fqdn"); + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "pserver").has("fqdn", "fqdn"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, pserver1, vnf1); - rules.addEdge(g, pserver2, vserver1); - rules.addEdge(g, vserver1, vnf2); - rules.addEdge(g, pserver3, vnf3); - rules.addEdge(g, pserver3, vserver2); - rules.addEdge(g, vserver2, vnf4); - rules.addEdge(g, badPserver1, badVnf1); - rules.addEdge(g, badPserver2, badVserver); - rules.addEdge(g, badVserver, badVnf2); - rules.addEdge(g, badPserver3, badVnf3); - - expectedResult.add(vnf1); - expectedResult.add(vnf2); - expectedResult.add(vnf3); - expectedResult.add(vnf4); - } + } - @Override - protected String getQueryName() { - return "genericVnfs-fromPserver"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "pserver").has("fqdn", "fqdn"); - - } - @Override - protected void addParam(Map<String, Object> params) { - params.put("vnfType","test"); - params.put("nfFunction","test"); - params.put("nfRole","test"); - params.put("nfNamingCode", "test"); - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("vnfType", "test"); + params.put("nfFunction", "test"); + params.put("nfRole", "test"); + params.put("nfNamingCode", "test"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetClfiRoadmTailSummaryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetClfiRoadmTailSummaryTest.java index 73f7595..5fde2db 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetClfiRoadmTailSummaryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetClfiRoadmTailSummaryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,11 @@ */ package org.onap.aai.rest.search; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,79 +32,89 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.Map; - public class GetClfiRoadmTailSummaryTest extends TreeQueryTest { - public GetClfiRoadmTailSummaryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public GetClfiRoadmTailSummaryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex logicalLink1 = graph.addVertex(T.label, "logical-link", T.id, "5", "aai-node-type", "logical-link", "link-name", "logical-link-1"); - Vertex pInterface1 = graph.addVertex(T.label, "p-interface", T.id, "6", "aai-node-type", "p-interface", "interface-name", "p-interface-1"); - Vertex pInterface2 = graph.addVertex(T.label, "p-interface", T.id, "7", "aai-node-type", "p-interface", "interface-name", "p-interface-2"); - Vertex pInterface3 = graph.addVertex(T.label, "p-interface", T.id, "8", "aai-node-type", "p-interface", "interface-name", "p-interface-3"); - Vertex pInterface4 = graph.addVertex(T.label, "p-interface", T.id, "9", "aai-node-type", "p-interface", "interface-name", "p-interface-4"); - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "12", "aai-node-type", "pnf", "pnf-name", "pnf1name"); - Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "10", "aai-node-type", "pnf", "pnf-name", "pnf2name"); + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex logicalLink1 = graph.addVertex(T.label, "logical-link", T.id, "5", "aai-node-type", + "logical-link", "link-name", "logical-link-1"); + Vertex pInterface1 = graph.addVertex(T.label, "p-interface", T.id, "6", "aai-node-type", + "p-interface", "interface-name", "p-interface-1"); + Vertex pInterface2 = graph.addVertex(T.label, "p-interface", T.id, "7", "aai-node-type", + "p-interface", "interface-name", "p-interface-2"); + Vertex pInterface3 = graph.addVertex(T.label, "p-interface", T.id, "8", "aai-node-type", + "p-interface", "interface-name", "p-interface-3"); + Vertex pInterface4 = graph.addVertex(T.label, "p-interface", T.id, "9", "aai-node-type", + "p-interface", "interface-name", "p-interface-4"); + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "12", "aai-node-type", "pnf", + "pnf-name", "pnf1name"); + Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "10", "aai-node-type", "pnf", + "pnf-name", "pnf2name"); - Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", "interface-name", "l-interface-1"); + Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", + "l-interface", "interface-name", "l-interface-1"); rules.addEdge(gts, logicalLink1, pInterface1); rules.addEdge(gts, logicalLink1, pInterface2); rules.addEdge(gts, logicalLink1, pInterface3); - rules.addEdge(gts, logicalLink1, pInterface4);//false + rules.addEdge(gts, logicalLink1, pInterface4);// false rules.addTreeEdge(gts, pnf1, pInterface1); rules.addTreeEdge(gts, pnf2, pInterface2); rules.addTreeEdge(gts, pnf2, pInterface3); - rules.addEdge(gts, logicalLink1, lInterface1);//false - - } - - @Test - public void run() { - super.run(); - Tree tree = treeList.get(0); - - Vertex l1 = graph.traversal().V().has("aai-node-type","logical-link").has("link-name","logical-link-1").next(); - Vertex pInt1 = graph.traversal().V().has("aai-node-type","p-interface").has("interface-name","p-interface-1").next(); - Vertex pInt2 = graph.traversal().V().has("aai-node-type","p-interface").has("interface-name","p-interface-2").next(); - Vertex pInt3 = graph.traversal().V().has("aai-node-type","p-interface").has("interface-name","p-interface-3").next(); - Vertex pInt4 = graph.traversal().V().has("aai-node-type","p-interface").has("interface-name","p-interface-4").next(); - Vertex pnf1 = graph.traversal().V().has("aai-node-type","pnf").has("pnf-name","pnf1name").next(); - Vertex pnf2 = graph.traversal().V().has("aai-node-type","pnf").has("pnf-name","pnf2name").next(); - - assertTrue(tree.containsKey(l1)); + rules.addEdge(gts, logicalLink1, lInterface1);// false + + } + + @Test + public void run() { + super.run(); + Tree tree = treeList.get(0); + + Vertex l1 = graph.traversal().V().has("aai-node-type", "logical-link") + .has("link-name", "logical-link-1").next(); + Vertex pInt1 = graph.traversal().V().has("aai-node-type", "p-interface") + .has("interface-name", "p-interface-1").next(); + Vertex pInt2 = graph.traversal().V().has("aai-node-type", "p-interface") + .has("interface-name", "p-interface-2").next(); + Vertex pInt3 = graph.traversal().V().has("aai-node-type", "p-interface") + .has("interface-name", "p-interface-3").next(); + Vertex pInt4 = graph.traversal().V().has("aai-node-type", "p-interface") + .has("interface-name", "p-interface-4").next(); + Vertex pnf1 = + graph.traversal().V().has("aai-node-type", "pnf").has("pnf-name", "pnf1name").next(); + Vertex pnf2 = + graph.traversal().V().has("aai-node-type", "pnf").has("pnf-name", "pnf2name").next(); + + assertTrue(tree.containsKey(l1)); assertTrue(((Tree) tree.get(l1)).containsKey(pInt1)); assertTrue(((Tree) tree.get(l1)).containsKey(pInt2)); assertTrue(((Tree) tree.get(l1)).containsKey(pInt3)); - assertFalse(((Tree) tree.get(l1)).containsKey(pInt4)); //pInt4 does not have an edge to any pnf + assertFalse(((Tree) tree.get(l1)).containsKey(pInt4)); // pInt4 does not have an edge to any + // pnf assertTrue(((Tree) tree.get(l1)).getLeafObjects().contains(pnf1)); assertTrue(((Tree) tree.get(l1)).getLeafObjects().contains(pnf2)); - - } - @Override - protected String getQueryName() { - return "getClfiRoadmTailSummary"; - } + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "logical-link").has("link-name", "logical-link-1"); - } + @Override + protected String getQueryName() { + return "getClfiRoadmTailSummary"; + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "logical-link").has("link-name", "logical-link-1"); + } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexAndPserversTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexAndPserversTest.java index 5b17f32..b47b7a1 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexAndPserversTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexAndPserversTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,47 +30,53 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetComplexAndPserversTest extends QueryTest { - public GetComplexAndPserversTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public GetComplexAndPserversTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - Vertex complex = graph.addVertex(T.label, "complex", T.id, "1", "aai-node-type", "complex", "complex-id", "complex-1"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", "hostname", "pservername1"); - - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", "complex-id", "complex-2"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", "hostname", "pservername2"); - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, complex, pserver ); - - //Not expected in result - rules.addEdge(g, complex1, pserver1 ); - //Not expected in result - - expectedResult.add(complex); - expectedResult.add(pserver); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - @Override - protected String getQueryName() { - return "getComplexAndPservers"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "complex").has("complex-id", "complex-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + Vertex complex = graph.addVertex(T.label, "complex", T.id, "1", "aai-node-type", "complex", + "complex-id", "complex-1"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", + "hostname", "pservername1"); + + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", + "complex-id", "complex-2"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", + "hostname", "pservername2"); + + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, complex, pserver); + + // Not expected in result + rules.addEdge(g, complex1, pserver1); + // Not expected in result + + expectedResult.add(complex); + expectedResult.add(pserver); + } + + @Override + protected String getQueryName() { + return "getComplexAndPservers"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "complex").has("complex-id", "complex-1"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexByPnfNameQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexByPnfNameQueryTest.java index 1d79466..733c382 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexByPnfNameQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexByPnfNameQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,49 +29,51 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class GetComplexByPnfNameQueryTest extends QueryTest { - public GetComplexByPnfNameQueryTest () throws AAIException, NoEdgeRuleFoundException { - super(); - } + public GetComplexByPnfNameQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } - @Test - public void run() { - super.run(); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "0", "aai-node-type", "pnf", "pnf-name", + "pnf1name", "equip-vendor", "equip-vendor1", "equip-model", "equip-model1"); + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "1", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1"); - // Set up the test graph - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "0", "aai-node-type", "pnf", "pnf-name", "pnf1name", "equip-vendor", "equip-vendor1", "equip-model","equip-model1"); - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "1", "aai-node-type", "complex", "physical-location-id", "physical-location-id-1"); - - // adding extra vertices and edges which shouldn't be picked. - Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "2", "aai-node-type", "pnf", "pnf-name", "pnf2name", "equip-vendor", "equip-vendor2", "equip-model","equip-model2"); - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", "physical-location-id", "physical-location-id-2"); + // adding extra vertices and edges which shouldn't be picked. + Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "2", "aai-node-type", "pnf", "pnf-name", + "pnf2name", "equip-vendor", "equip-vendor2", "equip-model", "equip-model2"); + Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-2"); - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, pnf1, complex1); - rules.addEdge(g, pnf2, complex2); + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, pnf1, complex1); + rules.addEdge(g, pnf2, complex2); - expectedResult.add(pnf1); - expectedResult.add(complex1); - } + expectedResult.add(pnf1); + expectedResult.add(complex1); + } - @Override - protected String getQueryName() { - return "getComplexByPnfName"; - } + @Override + protected String getQueryName() { + return "getComplexByPnfName"; + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "pnf").has("pnf-name", "pnf1name"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "pnf").has("pnf-name", "pnf1name"); + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexFromHostnameQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexFromHostnameQueryTest.java index 694b1c5..fe8a162 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexFromHostnameQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetComplexFromHostnameQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,11 @@ */ package org.onap.aai.rest.search; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,51 +32,52 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - public class GetComplexFromHostnameQueryTest extends TreeQueryTest { - public GetComplexFromHostnameQueryTest () throws AAIException, NoEdgeRuleFoundException { - super(); - } + public GetComplexFromHostnameQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @SuppressWarnings("rawtypes") - @Test - public void run() { - super.run(); - Tree tree = treeList.get(0); - Vertex pserver1 = graph.traversal().V().has("aai-node-type","pserver").has("hostname","pserver-name-1").next(); - Vertex pserver2 = graph.traversal().V().has("aai-node-type","pserver").has("hostname","pserver-name-2").next(); - Vertex complex1 = graph.traversal().V().has("aai-node-type", "complex").has( "physical-location-id", "physical-location-id-1").next(); + @SuppressWarnings("rawtypes") + @Test + public void run() { + super.run(); + Tree tree = treeList.get(0); + Vertex pserver1 = graph.traversal().V().has("aai-node-type", "pserver") + .has("hostname", "pserver-name-1").next(); + Vertex pserver2 = graph.traversal().V().has("aai-node-type", "pserver") + .has("hostname", "pserver-name-2").next(); + Vertex complex1 = graph.traversal().V().has("aai-node-type", "complex") + .has("physical-location-id", "physical-location-id-1").next(); assertTrue(tree.containsKey(pserver1)); assertTrue(((Tree) tree.get(pserver1)).containsKey(complex1)); assertFalse(tree.containsKey(pserver2)); - } + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - // Set up the test graph - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "0", "aai-node-type", "pserver", "hostname", "pserver-name-1"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", "hostname", "pserver-name-2"); - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "1", "aai-node-type", "complex", "physical-location-id", "physical-location-id-1"); - rules.addEdge(gts, pserver1, complex1); - rules.addEdge(gts, pserver2, complex1); - } + // Set up the test graph + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "0", "aai-node-type", "pserver", + "hostname", "pserver-name-1"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", + "hostname", "pserver-name-2"); + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "1", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1"); + rules.addEdge(gts, pserver1, complex1); + rules.addEdge(gts, pserver2, complex1); + } - @Override - protected String getQueryName() { - return "getComplexFromHostname"; - } + @Override + protected String getQueryName() { + return "getComplexFromHostname"; + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "pserver").has("hostname", "pserver-name-1"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "pserver").has("hostname", "pserver-name-1"); + } - @Override - protected void addParam(Map<String, Object> params) { - } + @Override + protected void addParam(Map<String, Object> params) { + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomQueryConfigTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomQueryConfigTest.java index 864b14b..3ab960f 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomQueryConfigTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomQueryConfigTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -21,63 +21,61 @@ package org.onap.aai.rest.search; import static org.junit.Assert.*; +import com.google.common.collect.Lists; + import java.util.ArrayList; import org.junit.Before; import org.junit.Test; -import com.google.common.collect.Lists; - public class GetCustomQueryConfigTest { - private String configJson; - - @Before - public void setUp() throws Exception { - System.setProperty("AJSC_HOME", "."); - System.setProperty("BUNDLECONFIG_DIR", "src/main/resources"); - + private String configJson; + + @Before + public void setUp() throws Exception { + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "src/main/resources"); + + configJson = "{\n \"stored-queries\": [{\n" + + " \"queryName1\": {\n \"query\": {\n \"required-properties\": [\"prop1\", \"prop2\"],\n \"optional-properties\": [\"prop3\", \"prop4\"]\n },\n \"stored-query\": \"out('blah').has('something','foo')\"\n }\n }, {\n" + + " \"queryName2\": {\n \"query\": {\n \"optional-properties\": [\"prop5\"]\n },\n \"stored-query\": \"out('bar').has('stuff','baz')\"\n }\n }, {\n" + + " \"queryName3\": {\n \"stored-query\": \"out('bar1').has('stuff','baz1')\"\n }\n }]\n}"; + } + + @Test + public void testGetStoredQueryNameWithOptAndReqProps() { - configJson = "{\n \"stored-queries\": [{\n" + - " \"queryName1\": {\n \"query\": {\n \"required-properties\": [\"prop1\", \"prop2\"],\n \"optional-properties\": [\"prop3\", \"prop4\"]\n },\n \"stored-query\": \"out('blah').has('something','foo')\"\n }\n }, {\n" + - " \"queryName2\": {\n \"query\": {\n \"optional-properties\": [\"prop5\"]\n },\n \"stored-query\": \"out('bar').has('stuff','baz')\"\n }\n }, {\n" + - " \"queryName3\": {\n \"stored-query\": \"out('bar1').has('stuff','baz1')\"\n }\n }]\n}"; - } + GetCustomQueryConfig getCustomQueryConfig = new GetCustomQueryConfig(configJson); + CustomQueryConfig cqc = getCustomQueryConfig.getStoredQuery("queryName1"); + assertEquals(Lists.newArrayList("prop3", "prop4"), cqc.getQueryOptionalProperties()); + assertEquals(Lists.newArrayList("prop1", "prop2"), cqc.getQueryRequiredProperties()); + assertEquals("out('blah').has('something','foo')", cqc.getQuery()); - @Test - public void testGetStoredQueryNameWithOptAndReqProps() { - - GetCustomQueryConfig getCustomQueryConfig = new GetCustomQueryConfig(configJson); - CustomQueryConfig cqc = getCustomQueryConfig.getStoredQuery("queryName1"); + } - assertEquals(Lists.newArrayList("prop3", "prop4"), cqc.getQueryOptionalProperties()); - assertEquals(Lists.newArrayList("prop1", "prop2"), cqc.getQueryRequiredProperties()); - assertEquals("out('blah').has('something','foo')", cqc.getQuery()); + @Test + public void testGetStoredQueryNameWithOptProps() { - } + GetCustomQueryConfig getCustomQueryConfig = new GetCustomQueryConfig(configJson); + CustomQueryConfig cqc = getCustomQueryConfig.getStoredQuery("queryName2"); - @Test - public void testGetStoredQueryNameWithOptProps() { - - GetCustomQueryConfig getCustomQueryConfig = new GetCustomQueryConfig(configJson); - CustomQueryConfig cqc = getCustomQueryConfig.getStoredQuery("queryName2"); + assertEquals(Lists.newArrayList("prop5"), cqc.getQueryOptionalProperties()); + assertEquals(new ArrayList<String>(), cqc.getQueryRequiredProperties()); + assertEquals("out('bar').has('stuff','baz')", cqc.getQuery()); - assertEquals(Lists.newArrayList("prop5"), cqc.getQueryOptionalProperties()); - assertEquals(new ArrayList<String>(), cqc.getQueryRequiredProperties()); - assertEquals("out('bar').has('stuff','baz')", cqc.getQuery()); + } - } + @Test + public void testGetStoredQueryNameWithNoProps() { - @Test - public void testGetStoredQueryNameWithNoProps() { - - GetCustomQueryConfig getCustomQueryConfig = new GetCustomQueryConfig(configJson); - CustomQueryConfig cqc = getCustomQueryConfig.getStoredQuery("queryName3"); + GetCustomQueryConfig getCustomQueryConfig = new GetCustomQueryConfig(configJson); + CustomQueryConfig cqc = getCustomQueryConfig.getStoredQuery("queryName3"); - assertEquals(new ArrayList<String>(), cqc.getQueryOptionalProperties()); - assertEquals(new ArrayList<String>(), cqc.getQueryRequiredProperties()); - assertEquals("out('bar1').has('stuff','baz1')", cqc.getQuery()); + assertEquals(new ArrayList<String>(), cqc.getQueryOptionalProperties()); + assertEquals(new ArrayList<String>(), cqc.getQueryRequiredProperties()); + assertEquals("out('bar1').has('stuff','baz1')", cqc.getQuery()); - } + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomerVPNBondingServiceDetailsTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomerVPNBondingServiceDetailsTest.java index d080016..bdd47f8 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomerVPNBondingServiceDetailsTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomerVPNBondingServiceDetailsTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -33,70 +33,80 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetCustomerVPNBondingServiceDetailsTest extends QueryTest { - public GetCustomerVPNBondingServiceDetailsTest() throws AAIException, NoEdgeRuleFoundException { - super(); + public GetCustomerVPNBondingServiceDetailsTest() throws AAIException, NoEdgeRuleFoundException { + super(); } @Test public void test() { - super.run(); + super.run(); } @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - - Vertex serviceSubscription = graph.addVertex(T.label, "service-subscription", T.id, "1", "aai-node-type", "service-subscription", - "service-type", "start-test"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "2", "aai-node-type", "customer", - "global-customer-id", "customer-test", "subscriber-name", "test-name", "subscriber-type", "test-type"); - Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "3", "aai-node-type", "service-instance", - "service-instance-id", "test-instance"); - Vertex configurationOne = graph.addVertex(T.label, "configuration", T.id, "4", "aai-node-type", "configuration", - "configuration-id", "test-config-1", "configuration-type", "VLAN-NETWORK-RECEPTOR"); - Vertex configurationTwo = graph.addVertex(T.label, "configuration", T.id, "5", "aai-node-type", "configuration", - "configuration-id", "test-config-2", "configuration-type", "VLAN-NETWORK-RECEPTOR"); - Vertex badConfiguration = graph.addVertex(T.label, "configuration", T.id, "6", "aai-node-type", "configuration", - "configuration-id", "bad-config", "configuration-type", "bad"); - Vertex genericVnfOne = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", "generic-vnf", - "vnf-id", "test-generic-vnf-1", "vnf-type", "right-relationship"); - Vertex genericVnfTwo = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", "generic-vnf", - "vnf-id", "test-generic-vnf-2", "vnf-type", "wrong-relationship"); - Vertex rightInstanceGroup = graph.addVertex(T.label, "instance-group", T.id, "9", "aai-node-type", "instance-group", - "id", "test-group-right", "description", "MemberOf relationship", "instance-group-type", "lower case ha for high availability"); - Vertex wrongInstanceGroup = graph.addVertex(T.label, "instance-group", T.id, "10", "aai-node-type", "instance-group", - "id", "test-group-wrong", "description", "Uses relationship", "instance-group-type", "lower case ha for high availability"); - Vertex l3Network = graph.addVertex(T.label, "l3-network", T.id, "11", "aai-node-type", "l3-network", - "network-id", "test-l3"); - Vertex subnet = graph.addVertex(T.label, "subnet", T.id, "12", "aai-node-type", "subnet", - "subnet-id", "test-subnet"); - Vertex l3InterfaceIpv6AddressList = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "13", "aai-node-type", "l3-interface-ipv6-address-list", - "l3-interface-ipv6-address", "test-ipv6"); - Vertex l3InterfaceIpv4AddressList = graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "14", "aai-node-type", "l3-interface-ipv4-address-list", - "l3-interface-ipv4-address", "test-ipv4"); - Vertex l3VpnBinding = graph.addVertex(T.label, "vpn-binding", T.id, "15", "aai-node-type", "vpn-binding", - "vpn-id", "test-binding", "vpn-name", "test"); - Vertex l3RouteTarget = graph.addVertex(T.label, "route-target", T.id, "16", "aai-node-type", "route-target", - "global-route-target", "test-target", "route-target-role", "test"); - Vertex parentLInterface = graph.addVertex(T.label, "l-interface", T.id, "17", "aai-node-type", "l-interface", - "interface-name", "parent-test-l-interface"); - Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "18", "aai-node-type", "vlan", - "vlan-interface", "test-vlan"); - Vertex childLInterface = graph.addVertex(T.label, "l-interface", T.id, "19", "aai-node-type", "l-interface", - "interface-name", "child-test-l-interface"); - Vertex configurationThree = graph.addVertex(T.label, "configuration", T.id, "20", "aai-node-type", "configuration", - "configuration-id", "test-config-3", "configuration-type", "VRF ENTRY"); - Vertex configVpnBinding = graph.addVertex(T.label, "vpn-binding", T.id, "21", "aai-node-type", "vpn-binding", - "vpn-id", "test-binding-config", "vpn-name", "test"); - Vertex configRouteTarget = graph.addVertex(T.label, "route-target", T.id, "22", "aai-node-type", "route-target", - "global-route-target", "test-target-config", "route-target-role", "test"); - Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "23", "aai-node-type", "pnf", - "pnf-name", "test-pnf", "nf-role", "D2IPE"); - Vertex badPnf = graph.addVertex(T.label, "pnf", T.id, "24", "aai-node-type", "pnf", - "pnf-name", "test-pnf", "nf-role", "none"); - + // Set up the test graph + + Vertex serviceSubscription = graph.addVertex(T.label, "service-subscription", T.id, "1", + "aai-node-type", "service-subscription", "service-type", "start-test"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "2", "aai-node-type", + "customer", "global-customer-id", "customer-test", "subscriber-name", "test-name", + "subscriber-type", "test-type"); + Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "3", + "aai-node-type", "service-instance", "service-instance-id", "test-instance"); + Vertex configurationOne = + graph.addVertex(T.label, "configuration", T.id, "4", "aai-node-type", "configuration", + "configuration-id", "test-config-1", "configuration-type", "VLAN-NETWORK-RECEPTOR"); + Vertex configurationTwo = + graph.addVertex(T.label, "configuration", T.id, "5", "aai-node-type", "configuration", + "configuration-id", "test-config-2", "configuration-type", "VLAN-NETWORK-RECEPTOR"); + Vertex badConfiguration = + graph.addVertex(T.label, "configuration", T.id, "6", "aai-node-type", "configuration", + "configuration-id", "bad-config", "configuration-type", "bad"); + Vertex genericVnfOne = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", + "generic-vnf", "vnf-id", "test-generic-vnf-1", "vnf-type", "right-relationship"); + Vertex genericVnfTwo = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", + "generic-vnf", "vnf-id", "test-generic-vnf-2", "vnf-type", "wrong-relationship"); + Vertex rightInstanceGroup = graph.addVertex(T.label, "instance-group", T.id, "9", + "aai-node-type", "instance-group", "id", "test-group-right", "description", + "MemberOf relationship", "instance-group-type", "lower case ha for high availability"); + Vertex wrongInstanceGroup = graph.addVertex(T.label, "instance-group", T.id, "10", + "aai-node-type", "instance-group", "id", "test-group-wrong", "description", + "Uses relationship", "instance-group-type", "lower case ha for high availability"); + Vertex l3Network = graph.addVertex(T.label, "l3-network", T.id, "11", "aai-node-type", + "l3-network", "network-id", "test-l3"); + Vertex subnet = graph.addVertex(T.label, "subnet", T.id, "12", "aai-node-type", "subnet", + "subnet-id", "test-subnet"); + Vertex l3InterfaceIpv6AddressList = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "13", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test-ipv6"); + Vertex l3InterfaceIpv4AddressList = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "14", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test-ipv4"); + Vertex l3VpnBinding = graph.addVertex(T.label, "vpn-binding", T.id, "15", "aai-node-type", + "vpn-binding", "vpn-id", "test-binding", "vpn-name", "test"); + Vertex l3RouteTarget = graph.addVertex(T.label, "route-target", T.id, "16", "aai-node-type", + "route-target", "global-route-target", "test-target", "route-target-role", "test"); + Vertex parentLInterface = graph.addVertex(T.label, "l-interface", T.id, "17", + "aai-node-type", "l-interface", "interface-name", "parent-test-l-interface"); + Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "18", "aai-node-type", "vlan", + "vlan-interface", "test-vlan"); + Vertex childLInterface = graph.addVertex(T.label, "l-interface", T.id, "19", + "aai-node-type", "l-interface", "interface-name", "child-test-l-interface"); + Vertex configurationThree = + graph.addVertex(T.label, "configuration", T.id, "20", "aai-node-type", "configuration", + "configuration-id", "test-config-3", "configuration-type", "VRF ENTRY"); + Vertex configVpnBinding = graph.addVertex(T.label, "vpn-binding", T.id, "21", + "aai-node-type", "vpn-binding", "vpn-id", "test-binding-config", "vpn-name", "test"); + Vertex configRouteTarget = + graph.addVertex(T.label, "route-target", T.id, "22", "aai-node-type", "route-target", + "global-route-target", "test-target-config", "route-target-role", "test"); + Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "23", "aai-node-type", "pnf", "pnf-name", + "test-pnf", "nf-role", "D2IPE"); + Vertex badPnf = graph.addVertex(T.label, "pnf", T.id, "24", "aai-node-type", "pnf", + "pnf-name", "test-pnf", "nf-role", "none"); + GraphTraversalSource g = graph.traversal(); - + rules.addTreeEdge(g, customer, serviceSubscription); rules.addTreeEdge(g, serviceSubscription, serviceInstance); rules.addEdge(g, serviceInstance, configurationOne); @@ -104,8 +114,10 @@ public class GetCustomerVPNBondingServiceDetailsTest extends QueryTest { rules.addEdge(g, serviceInstance, badConfiguration); rules.addEdge(g, configurationOne, genericVnfOne); rules.addEdge(g, configurationTwo, genericVnfTwo); - rules.addEdge(g, genericVnfOne, rightInstanceGroup, "org.onap.relationships.inventory.MemberOf"); - rules.addEdge(g, genericVnfTwo, wrongInstanceGroup, "org.onap.relationships.inventory.Uses"); + rules.addEdge(g, genericVnfOne, rightInstanceGroup, + "org.onap.relationships.inventory.MemberOf"); + rules.addEdge(g, genericVnfTwo, wrongInstanceGroup, + "org.onap.relationships.inventory.Uses"); rules.addEdge(g, configurationOne, l3Network); rules.addTreeEdge(g, l3Network, subnet); rules.addEdge(g, subnet, l3InterfaceIpv6AddressList); @@ -120,7 +132,7 @@ public class GetCustomerVPNBondingServiceDetailsTest extends QueryTest { rules.addTreeEdge(g, configVpnBinding, configRouteTarget); rules.addEdge(g, configurationThree, pnf); rules.addEdge(g, configurationThree, badPnf); - + expectedResult.add(customer); expectedResult.add(serviceInstance); expectedResult.add(configurationOne); @@ -145,17 +157,17 @@ public class GetCustomerVPNBondingServiceDetailsTest extends QueryTest { @Override protected String getQueryName() { - return "getCustomerVPNBondingServiceDetails"; + return "getCustomerVPNBondingServiceDetails"; } @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-subscription").has("service-type", "start-test"); + g.has("aai-node-type", "service-subscription").has("service-type", "start-test"); } @Override protected void addParam(Map<String, Object> params) { - return; + return; } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetDHVLogicalLinkTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetDHVLogicalLinkTest.java index 6659d20..7ed3d34 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetDHVLogicalLinkTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetDHVLogicalLinkTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import static org.junit.Assert.*; + import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -30,8 +32,6 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import static org.junit.Assert.*; - public class GetDHVLogicalLinkTest extends TreeQueryTest { public GetDHVLogicalLinkTest() throws AAIException, NoEdgeRuleFoundException { super(); @@ -42,58 +42,69 @@ public class GetDHVLogicalLinkTest extends TreeQueryTest { super.run(); Tree tree = treeList.get(0); - Vertex gvnf1 = graph.traversal().V().has("aai-node-type", "generic-vnf").has("vnfname", "vnfname1").next(); - Vertex linterface1 = graph.traversal().V().has("aai-node-type", "l-interface").has("network-name", "networkName1").next(); - Vertex vlan1 = graph.traversal().V().has("aai-node-type", "vlan").has("vlan-interface", "vlan-interface1").next(); - Vertex logicalLink1 = graph.traversal().V().has("aai-node-type", "logical-link").has("link-type", "linkType1").next(); - - Vertex gvnf2 = graph.traversal().V().has("aai-node-type", "generic-vnf").has("vnfname", "vnfname2").next(); + Vertex gvnf1 = graph.traversal().V().has("aai-node-type", "generic-vnf") + .has("vnfname", "vnfname1").next(); + Vertex linterface1 = graph.traversal().V().has("aai-node-type", "l-interface") + .has("network-name", "networkName1").next(); + Vertex vlan1 = graph.traversal().V().has("aai-node-type", "vlan") + .has("vlan-interface", "vlan-interface1").next(); + Vertex logicalLink1 = graph.traversal().V().has("aai-node-type", "logical-link") + .has("link-type", "linkType1").next(); + + Vertex gvnf2 = graph.traversal().V().has("aai-node-type", "generic-vnf") + .has("vnfname", "vnfname2").next(); assertTrue(tree.containsKey(gvnf1)); assertTrue(((Tree) tree.get(gvnf1)).containsKey(linterface1)); - assertTrue(((Tree)(((Tree) tree.get(gvnf1)).get(linterface1))).containsKey(vlan1)); - assertTrue(((Tree)((Tree)(((Tree) tree.get(gvnf1)).get(linterface1))).get(vlan1)).containsKey(logicalLink1)); + assertTrue(((Tree) (((Tree) tree.get(gvnf1)).get(linterface1))).containsKey(vlan1)); + assertTrue(((Tree) ((Tree) (((Tree) tree.get(gvnf1)).get(linterface1))).get(vlan1)) + .containsKey(logicalLink1)); assertFalse(tree.containsKey(gvnf2)); } + @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnfname", "vnfname1", "vnf-name", "vnfname1", "vnf-type", "vnftype1"); - //Set up the test graph - Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnfname", "vnfname1", "vnf-name", "vnfname1", "vnf-type", "vnftype1"); - + Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "1", "aai-node-type", + "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", + "l-interface-name1", "network-name", "networkName1"); - Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "1", "aai-node-type", "l-interface", - "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name1","network-name","networkName1"); + Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "2", "aai-node-type", "vlan", + "vlan-interface", "vlan-interface1"); - Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "2", "aai-node-type", "vlan", "vlan-interface", "vlan-interface1"); + Vertex logicalLink1 = + graph.addVertex(T.label, "logical-link", T.id, "3", "aai-node-type", "logical-link", + "link-name", "linkName1", "in-maint", "false", "link-type", "linkType1"); - Vertex logicalLink1 = graph.addVertex(T.label, "logical-link", T.id, "3", "aai-node-type", "logical-link", - "link-name", "linkName1", "in-maint", "false", "link-type","linkType1"); + // Set up the test graph for false test cases + Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", + "generic-vnf", "vnfname", "vnfname2", "vnf-name", "vnfname2", "vnf-type", "vnftype2"); - //Set up the test graph for false test cases - Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", "generic-vnf", "vnfname", "vnfname2", "vnf-name", "vnfname2", "vnf-type", "vnftype2"); + Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", + "l-interface", "l-interface-id", "l-interface-id2", "l-interface-name", + "l-interface-name2", "network-name", "networkName2"); + Vertex vlan2 = graph.addVertex(T.label, "vlan", T.id, "6", "aai-node-type", "vlan", + "vlan-interface", "vlan-interface2"); - Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", "l-interface", - "l-interface-id", "l-interface-id2", "l-interface-name", "l-interface-name2","network-name","networkName2"); + Vertex logicalLink2 = + graph.addVertex(T.label, "logical-link", T.id, "7", "aai-node-type", "logical-link", + "link-name", "linkName2", "in-maint", "false", "link-type", "linkType2"); - Vertex vlan2 = graph.addVertex(T.label, "vlan", T.id, "6", "aai-node-type", "vlan", "vlan-interface", "vlan-interface2"); + // GraphTraversalSource g = graph.traversal(); - Vertex logicalLink2 = graph.addVertex(T.label, "logical-link", T.id, "7", "aai-node-type", "logical-link", - "link-name", "linkName2", "in-maint", "false", "link-type","linkType2"); + rules.addTreeEdge(gts, gvnf1, linterface1); // true + rules.addTreeEdge(gts, linterface1, vlan1); // true + rules.addEdge(gts, vlan1, logicalLink1); // true - - //GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(gts, gvnf1, linterface1); // true - rules.addTreeEdge(gts, linterface1, vlan1); // true - rules.addEdge(gts, vlan1, logicalLink1); // true - - rules.addTreeEdge(gts, gvnf2, linterface2); // false - rules.addTreeEdge(gts, linterface2, vlan2); // false - rules.addEdge(gts, vlan2, logicalLink2); // false + rules.addTreeEdge(gts, gvnf2, linterface2); // false + rules.addTreeEdge(gts, linterface2, vlan2); // false + rules.addEdge(gts, vlan2, logicalLink2); // false expectedResult.add(gvnf1); expectedResult.add(linterface1); @@ -101,13 +112,16 @@ public class GetDHVLogicalLinkTest extends TreeQueryTest { expectedResult.add(logicalLink1); } + @Override protected String getQueryName() { return "getDHVLogicalLink"; } + @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("vnfname", "vnfname1"); } + g.has("aai-node-type", "generic-vnf").has("vnfname", "vnfname1"); + } @Override protected void addParam(Map<String, Object> params) { diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetL3networkCloudRegionByNetworkRoleQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetL3networkCloudRegionByNetworkRoleQueryTest.java index a9fedcd..d059a9c 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetL3networkCloudRegionByNetworkRoleQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetL3networkCloudRegionByNetworkRoleQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,10 +29,9 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class GetL3networkCloudRegionByNetworkRoleQueryTest extends QueryTest { - public GetL3networkCloudRegionByNetworkRoleQueryTest () throws AAIException, NoEdgeRuleFoundException { + public GetL3networkCloudRegionByNetworkRoleQueryTest() + throws AAIException, NoEdgeRuleFoundException { super(); } @@ -43,18 +44,32 @@ public class GetL3networkCloudRegionByNetworkRoleQueryTest extends QueryTest { protected void createGraph() throws AAIException, NoEdgeRuleFoundException { // Set up the test graph - Vertex l3Network1 = graph.addVertex(T.label, "l3-network", T.id, "0", "aai-node-type", "l3-network", "network-id", "networkId1", "network-name", "networkName1", "network-role","networkRole1"); - Vertex genericVnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnfId1", "vnf-name", "vnfName1", "vnf-type", "vnfType1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", "vserver-id", "vserverId1", "vserver-name", "vserverName1", "vserver-selflink", "vserverSelfLink1"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "3", "aai-node-type", "tenant", "tenant-id", "tenantId1", "tenant-name" ,"tenantName1"); - Vertex cloudRegion1 = graph.addVertex(T.label, "cloud-region", T.id, "4", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner1", "cloud-region-id", "cloudRegionId1"); + Vertex l3Network1 = graph.addVertex(T.label, "l3-network", T.id, "0", "aai-node-type", + "l3-network", "network-id", "networkId1", "network-name", "networkName1", + "network-role", "networkRole1"); + Vertex genericVnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", + "generic-vnf", "vnf-id", "vnfId1", "vnf-name", "vnfName1", "vnf-type", "vnfType1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", + "vserver-id", "vserverId1", "vserver-name", "vserverName1", "vserver-selflink", + "vserverSelfLink1"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "3", "aai-node-type", "tenant", + "tenant-id", "tenantId1", "tenant-name", "tenantName1"); + Vertex cloudRegion1 = graph.addVertex(T.label, "cloud-region", T.id, "4", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner1", "cloud-region-id", "cloudRegionId1"); // adding extra vertices and edges which shouldn't be picked. - Vertex l3Network2 = graph.addVertex(T.label, "l3-network", T.id, "5", "aai-node-type", "l3-network", "network-id", "networkId2", "network-name", "networkName2", "network-role","networkRole2"); - Vertex genericVnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", "generic-vnf", "vnf-id", "vnfId2", "vnf-name", "vnfName2", "vnf-type", "vnfType2"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", "vserver-id", "vserverId2", "vserver-name", "vserverName2", "vserver-selflink", "vserverSelfLink2"); - Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "8", "aai-node-type", "tenant", "tenant-id", "tenantId2", "tenant-name" ,"tenantName2"); - Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region", T.id, "9", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner2", "cloud-region-id", "cloudRegionId2"); + Vertex l3Network2 = graph.addVertex(T.label, "l3-network", T.id, "5", "aai-node-type", + "l3-network", "network-id", "networkId2", "network-name", "networkName2", + "network-role", "networkRole2"); + Vertex genericVnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", + "generic-vnf", "vnf-id", "vnfId2", "vnf-name", "vnfName2", "vnf-type", "vnfType2"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", + "vserver-id", "vserverId2", "vserver-name", "vserverName2", "vserver-selflink", + "vserverSelfLink2"); + Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "8", "aai-node-type", "tenant", + "tenant-id", "tenantId2", "tenant-name", "tenantName2"); + Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region", T.id, "9", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner2", "cloud-region-id", "cloudRegionId2"); GraphTraversalSource g = graph.traversal(); rules.addEdge(g, l3Network1, genericVnf1); @@ -81,7 +96,8 @@ public class GetL3networkCloudRegionByNetworkRoleQueryTest extends QueryTest { @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "l3-network").has("network-id", "networkId1").has("network-role", "networkRole1"); + g.has("aai-node-type", "l3-network").has("network-id", "networkId1").has("network-role", + "networkRole1"); } @Override diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetLinterfaceFromNewvceTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetLinterfaceFromNewvceTest.java index fbb77b8..1becf6c 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetLinterfaceFromNewvceTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetLinterfaceFromNewvceTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,10 +29,8 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class GetLinterfaceFromNewvceTest extends QueryTest { - public GetLinterfaceFromNewvceTest () throws AAIException, NoEdgeRuleFoundException { + public GetLinterfaceFromNewvceTest() throws AAIException, NoEdgeRuleFoundException { super(); } @@ -43,64 +43,81 @@ public class GetLinterfaceFromNewvceTest extends QueryTest { protected void createGraph() throws AAIException, NoEdgeRuleFoundException { // Set up the test graph - Vertex newvce = graph.addVertex(T.label, "newvce", T.id, "0", "aai-node-type", "newvce", "vnf-id2", "vnfId2-1", "vnf-name", "vnfName-1", "vnf-type", "vnfType-1"); - Vertex linterfaceNewvce1 = graph.addVertex(T.label, "l-interface", T.id, "1", "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-10", - "l-interface-name", "lInterfaceName-1", "interface-role", "UPLINK"); - Vertex linterfaceNewvce2 = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-20", - "l-interface-name", "lInterfaceName-1", "interface-role", "CUSTOMER"); - Vertex linterfaceNewvce3 = graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-30", - "l-interface-name", "lInterfaceName-3", "interface-role", "CUSTOMER-UPLINK"); - - Vertex logicalLink1 = graph.addVertex(T.label, "logical-link", T.id, "4", "aai-node-type", "logical-link", "link-name", "linkName-1", "in-maint", "false", "link-type","linkType-1"); - - // 1 generic-vnf with 2 lags each has 1 linterface - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "5", "aai-node-type", "generic-vnf", "vnf-id", "vnfId-1","vnf-name", "vnfName-1"); - Vertex lagint1 = graph.addVertex(T.label, "lag-interface", T.id, "6", "aai-node-type", "lag-interface","interface-name", "lagIntName-1"); - Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-1", - "l-interface-name", "lInterfaceName-1", "interface-role", "CUSTOMER"); - - Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "9", "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-2", - "l-interface-name", "lInterfaceName-2", "interface-role", "CUSTOMER-UPLINK"); - Vertex linterface3 = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-3", - "l-interface-name", "lInterfaceName-3", "interface-role", "UPLINK"); - Vertex linterface4 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-4", "l-interface-name", "lInterfaceName-4", "interface-role", "CUSTOMER-UPLINK"); - - Vertex lagint2 = graph.addVertex(T.label, "lag-interface", T.id, "8", "aai-node-type", "lag-interface","interface-name", "lagIntName-2"); - Vertex linterface21 = graph.addVertex(T.label, "l-interface", T.id, "20", "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-21", - "l-interface-name", "lInterfaceName-2", "interface-role", "CUSTOMER-UPLINK"); - - Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "12", "aai-node-type", "generic-vnf", "vnf-id", "vnfId-2","vnf-name", "vnfName-2"); - Vertex linterface31 = graph.addVertex(T.label, "l-interface", T.id, "13", "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-21", "l-interface-name", "lInterfaceName-21", "interface-role", "CUSTOMER-UPLINK"); - Vertex lagint3 = graph.addVertex(T.label, "lag-interface", T.id, "14", "aai-node-type", "lag-interface","interface-name", "lagIntName-22"); - - + Vertex newvce = graph.addVertex(T.label, "newvce", T.id, "0", "aai-node-type", "newvce", + "vnf-id2", "vnfId2-1", "vnf-name", "vnfName-1", "vnf-type", "vnfType-1"); + Vertex linterfaceNewvce1 = graph.addVertex(T.label, "l-interface", T.id, "1", + "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-10", "l-interface-name", + "lInterfaceName-1", "interface-role", "UPLINK"); + Vertex linterfaceNewvce2 = graph.addVertex(T.label, "l-interface", T.id, "2", + "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-20", "l-interface-name", + "lInterfaceName-1", "interface-role", "CUSTOMER"); + Vertex linterfaceNewvce3 = graph.addVertex(T.label, "l-interface", T.id, "3", + "aai-node-type", "l-interface", "l-interface-id", "lInterfaceId-30", "l-interface-name", + "lInterfaceName-3", "interface-role", "CUSTOMER-UPLINK"); + + Vertex logicalLink1 = + graph.addVertex(T.label, "logical-link", T.id, "4", "aai-node-type", "logical-link", + "link-name", "linkName-1", "in-maint", "false", "link-type", "linkType-1"); + + // 1 generic-vnf with 2 lags each has 1 linterface + Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "5", "aai-node-type", + "generic-vnf", "vnf-id", "vnfId-1", "vnf-name", "vnfName-1"); + Vertex lagint1 = graph.addVertex(T.label, "lag-interface", T.id, "6", "aai-node-type", + "lag-interface", "interface-name", "lagIntName-1"); + Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", + "l-interface", "l-interface-id", "lInterfaceId-1", "l-interface-name", + "lInterfaceName-1", "interface-role", "CUSTOMER"); + + Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "9", "aai-node-type", + "l-interface", "l-interface-id", "lInterfaceId-2", "l-interface-name", + "lInterfaceName-2", "interface-role", "CUSTOMER-UPLINK"); + Vertex linterface3 = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", + "l-interface", "l-interface-id", "lInterfaceId-3", "l-interface-name", + "lInterfaceName-3", "interface-role", "UPLINK"); + Vertex linterface4 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", + "l-interface", "l-interface-id", "lInterfaceId-4", "l-interface-name", + "lInterfaceName-4", "interface-role", "CUSTOMER-UPLINK"); + + Vertex lagint2 = graph.addVertex(T.label, "lag-interface", T.id, "8", "aai-node-type", + "lag-interface", "interface-name", "lagIntName-2"); + Vertex linterface21 = graph.addVertex(T.label, "l-interface", T.id, "20", "aai-node-type", + "l-interface", "l-interface-id", "lInterfaceId-21", "l-interface-name", + "lInterfaceName-2", "interface-role", "CUSTOMER-UPLINK"); + + Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "12", "aai-node-type", + "generic-vnf", "vnf-id", "vnfId-2", "vnf-name", "vnfName-2"); + Vertex linterface31 = graph.addVertex(T.label, "l-interface", T.id, "13", "aai-node-type", + "l-interface", "l-interface-id", "lInterfaceId-21", "l-interface-name", + "lInterfaceName-21", "interface-role", "CUSTOMER-UPLINK"); + Vertex lagint3 = graph.addVertex(T.label, "lag-interface", T.id, "14", "aai-node-type", + "lag-interface", "interface-name", "lagIntName-22"); + GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, newvce, linterfaceNewvce1); // true + rules.addTreeEdge(g, newvce, linterfaceNewvce1); // true rules.addTreeEdge(g, newvce, linterfaceNewvce2); - rules.addTreeEdge(g, newvce, linterfaceNewvce3); - rules.addEdge(g, linterfaceNewvce1, logicalLink1); // true - rules.addEdge(g, linterfaceNewvce2, logicalLink1); - + rules.addTreeEdge(g, newvce, linterfaceNewvce3); + rules.addEdge(g, linterfaceNewvce1, logicalLink1); // true + rules.addEdge(g, linterfaceNewvce2, logicalLink1); + rules.addTreeEdge(g, genericvnf1, lagint1); rules.addTreeEdge(g, lagint1, linterface1); - rules.addTreeEdge(g, lagint1, linterface2); // true - rules.addTreeEdge(g, lagint1, linterface3); - rules.addTreeEdge(g, lagint1, linterface4); // true + rules.addTreeEdge(g, lagint1, linterface2); // true + rules.addTreeEdge(g, lagint1, linterface3); + rules.addTreeEdge(g, lagint1, linterface4); // true rules.addTreeEdge(g, lagint2, linterface21); - - rules.addEdge(g, linterface2, logicalLink1); // true - rules.addEdge(g, linterface4, logicalLink1); // true - rules.addEdge(g, linterface21, logicalLink1); // true - + + rules.addEdge(g, linterface2, logicalLink1); // true + rules.addEdge(g, linterface4, logicalLink1); // true + rules.addEdge(g, linterface21, logicalLink1); // true + rules.addTreeEdge(g, genericvnf2, lagint3); rules.addTreeEdge(g, lagint2, linterface31); - expectedResult.add(linterface2); expectedResult.add(linterface4); expectedResult.add(linterface21); - + } @Override @@ -115,7 +132,7 @@ public class GetLinterfaceFromNewvceTest extends QueryTest { @Override protected void addParam(Map<String, Object> params) { - params.put("interfaceRole1", "UPLINK"); - params.put("interfaceRole2", "CUSTOMER-UPLINK"); + params.put("interfaceRole1", "UPLINK"); + params.put("interfaceRole2", "CUSTOMER-UPLINK"); } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetNetworksByServiceInstanceTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetNetworksByServiceInstanceTest.java index 1b1395c..6af6e1b 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetNetworksByServiceInstanceTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetNetworksByServiceInstanceTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,90 +31,100 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetNetworksByServiceInstanceTest extends QueryTest { - public GetNetworksByServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex serviceInstance = graph.addVertex(T.label, "service-instance",T.id, "0", "aai-node-type", "service-instance", "service-instance-id", "serviceinstanceid"); - Vertex l3Network = graph.addVertex(T.label, "l3-network",T.id, "1", "aai-node-type", "l3-network","network-id", "networkId"); - Vertex vlanTag = graph.addVertex(T.label, "vlan-tag",T.id, "2", "aai-node-type", "vlan-tag","vlan-tag-id", "vlanTagId"); - Vertex l3Network1 = graph.addVertex(T.label, "l3-network",T.id, "3", "aai-node-type", "l3-network","network-id", "networkId1"); - Vertex vlanTag1 = graph.addVertex(T.label, "vlan-tag",T.id, "4", "aai-node-type", "vlan-tag","vlan-tag-id", "vlanTagId"); - - Vertex serviceInstance2 = graph.addVertex(T.label, "service-instance",T.id, "5", "aai-node-type", "service-instance", "service-instance-id", "serviceinstanceid1"); - Vertex l3Network2 = graph.addVertex(T.label, "l3-network",T.id, "6", "aai-node-type", "l3-network","network-id", "networkId2"); - Vertex vlanTag2 = graph.addVertex(T.label, "vlan-tag",T.id, "7", "aai-node-type", "vlan-tag","vlan-tag-id", "vlanTagId"); - Vertex l3Network3 = graph.addVertex(T.label, "l3-network",T.id, "8", "aai-node-type", "l3-network","network-id", "networkId3"); - Vertex vlanTag3 = graph.addVertex(T.label, "vlan-tag",T.id, "9", "aai-node-type", "vlan-tag","vlan-tag-id", "vlanTagId"); - Vertex vlanTag4 = graph.addVertex(T.label, "vlan-tag",T.id, "10", "aai-node-type", "vlan-tag","vlan-tag-id", "vlanTagId"); - - - Vertex l3Network4 = graph.addVertex(T.label, "l3-network",T.id, "11", "aai-node-type", "l3-network","network-id", "networkId4"); - Vertex l3Network5 = graph.addVertex(T.label, "l3-network",T.id, "12", "aai-node-type", "l3-network","network-id", "networkId5"); - - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, serviceInstance,l3Network); - rules.addEdge(g, serviceInstance,l3Network2); - - rules.addEdge(g, l3Network,vlanTag); - rules.addEdge(g, l3Network,vlanTag2); - - rules.addEdge(g, l3Network,l3Network1); - rules.addEdge(g, l3Network1,vlanTag1); - - rules.addEdge(g, l3Network2,vlanTag4); - - rules.addEdge(g, l3Network2,l3Network3); - rules.addEdge(g, l3Network3,vlanTag3); - - rules.addEdge(g, l3Network4,l3Network5); - rules.addEdge(g, serviceInstance,l3Network5); - - expectedResult.add(l3Network); - expectedResult.add(l3Network2); - - expectedResult.add(vlanTag); - expectedResult.add(vlanTag2); - - expectedResult.add(l3Network1); - expectedResult.add(vlanTag1); - - expectedResult.add(vlanTag4); - - expectedResult.add(l3Network3); - expectedResult.add(vlanTag3); - - expectedResult.add(l3Network4); - expectedResult.add(l3Network5); - - //expectedResult.add(vlanTag1);//false - //expectedResult.add(l3Network1);//false - //expectedResult.add(linterface1);//false - } - - @Override - protected String getQueryName() { - return "getNetworksByServiceInstance"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "serviceinstanceid"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } - - -}
\ No newline at end of file + public GetNetworksByServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "0", + "aai-node-type", "service-instance", "service-instance-id", "serviceinstanceid"); + Vertex l3Network = graph.addVertex(T.label, "l3-network", T.id, "1", "aai-node-type", + "l3-network", "network-id", "networkId"); + Vertex vlanTag = graph.addVertex(T.label, "vlan-tag", T.id, "2", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlanTagId"); + Vertex l3Network1 = graph.addVertex(T.label, "l3-network", T.id, "3", "aai-node-type", + "l3-network", "network-id", "networkId1"); + Vertex vlanTag1 = graph.addVertex(T.label, "vlan-tag", T.id, "4", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlanTagId"); + + Vertex serviceInstance2 = graph.addVertex(T.label, "service-instance", T.id, "5", + "aai-node-type", "service-instance", "service-instance-id", "serviceinstanceid1"); + Vertex l3Network2 = graph.addVertex(T.label, "l3-network", T.id, "6", "aai-node-type", + "l3-network", "network-id", "networkId2"); + Vertex vlanTag2 = graph.addVertex(T.label, "vlan-tag", T.id, "7", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlanTagId"); + Vertex l3Network3 = graph.addVertex(T.label, "l3-network", T.id, "8", "aai-node-type", + "l3-network", "network-id", "networkId3"); + Vertex vlanTag3 = graph.addVertex(T.label, "vlan-tag", T.id, "9", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlanTagId"); + Vertex vlanTag4 = graph.addVertex(T.label, "vlan-tag", T.id, "10", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlanTagId"); + + Vertex l3Network4 = graph.addVertex(T.label, "l3-network", T.id, "11", "aai-node-type", + "l3-network", "network-id", "networkId4"); + Vertex l3Network5 = graph.addVertex(T.label, "l3-network", T.id, "12", "aai-node-type", + "l3-network", "network-id", "networkId5"); + + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, serviceInstance, l3Network); + rules.addEdge(g, serviceInstance, l3Network2); + + rules.addEdge(g, l3Network, vlanTag); + rules.addEdge(g, l3Network, vlanTag2); + + rules.addEdge(g, l3Network, l3Network1); + rules.addEdge(g, l3Network1, vlanTag1); + + rules.addEdge(g, l3Network2, vlanTag4); + + rules.addEdge(g, l3Network2, l3Network3); + rules.addEdge(g, l3Network3, vlanTag3); + + rules.addEdge(g, l3Network4, l3Network5); + rules.addEdge(g, serviceInstance, l3Network5); + + expectedResult.add(l3Network); + expectedResult.add(l3Network2); + + expectedResult.add(vlanTag); + expectedResult.add(vlanTag2); + + expectedResult.add(l3Network1); + expectedResult.add(vlanTag1); + + expectedResult.add(vlanTag4); + + expectedResult.add(l3Network3); + expectedResult.add(vlanTag3); + + expectedResult.add(l3Network4); + expectedResult.add(l3Network5); + + // expectedResult.add(vlanTag1);//false + // expectedResult.add(l3Network1);//false + // expectedResult.add(linterface1);//false + } + + @Override + protected String getQueryName() { + return "getNetworksByServiceInstance"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "service-instance").has("service-instance-id", "serviceinstanceid"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } + +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetNetworksTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetNetworksTest.java index 8e34236..3e4c1ee 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetNetworksTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetNetworksTest.java @@ -9,7 +9,7 @@ package org.onap.aai.rest.search; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,63 +30,86 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetNetworksTest extends QueryTest { - - public GetNetworksTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void test() { - super.run(); - } + public GetNetworksTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex owningentity = graph.addVertex(T.label, "owning-entity", T.id, "1", "aai-node-type", "owning-entity", "owning-entity-id", "owning-entity-id-0", "owning-entity-name", "owning-entity-name-0"); - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "2", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-0"); - Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "3", "aai-node-type", "l3-network", "network-id", "network-id-0", "network-role", "network-role-0", "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", "false", "is-external-network", "false"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "10", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-0", "cloud-region-owner", "cloud-owner-name-0","cloud-region-version","cloud-region-version-0"); - Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "8", "aai-node-type", "l3-network", "network-id", "network-id-2", "network-role", "network-role-2", "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", "false", "is-external-network", "false"); - Vertex l3network3 = graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", "l3-network", "network-id", "network-id-0", "network-role", "network-role-3", "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", "false", "is-external-network", "false"); - Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "11", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-0","cloud-region-version","cloud-region-version-0"); - - Vertex owningentity1 = graph.addVertex(T.label, "owning-entity", T.id, "4", "aai-node-type", "owning-entity", "owning-entity-id", "owning-entity-id-1", "owning-entity-name", "owning-entity-name-1"); - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "5", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1"); - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "6", "aai-node-type", "l3-network", "network-id", "network-id-1", "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", "false", "is-external-network", "false"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "7", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1","cloud-region-version","cloud-region-version-1"); + @Test + public void test() { + super.run(); + } - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, owningentity, serviceinstance); - rules.addEdge(g, serviceinstance, l3network); - rules.addEdge(g, l3network, cloudregion); - rules.addEdge(g, serviceinstance, l3network2); - rules.addEdge(g, l3network2, cloudregion); - rules.addEdge(g, l3network3, cloudregion2); - rules.addEdge(g, serviceinstance, l3network3); - - rules.addEdge(g, owningentity1, serviceinstance1); - rules.addEdge(g, serviceinstance1, l3network1); //false - rules.addEdge(g, l3network1, cloudregion1); - - expectedResult.add(l3network); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex owningentity = graph.addVertex(T.label, "owning-entity", T.id, "1", "aai-node-type", + "owning-entity", "owning-entity-id", "owning-entity-id-0", "owning-entity-name", + "owning-entity-name-0"); + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "2", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-0"); + Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "3", "aai-node-type", + "l3-network", "network-id", "network-id-0", "network-role", "network-role-0", + "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", + "false", "is-external-network", "false"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "10", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-0", "cloud-region-owner", + "cloud-owner-name-0", "cloud-region-version", "cloud-region-version-0"); + Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "8", "aai-node-type", + "l3-network", "network-id", "network-id-2", "network-role", "network-role-2", + "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", + "false", "is-external-network", "false"); + Vertex l3network3 = graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", + "l3-network", "network-id", "network-id-0", "network-role", "network-role-3", + "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", + "false", "is-external-network", "false"); + Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "11", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", + "cloud-owner-name-0", "cloud-region-version", "cloud-region-version-0"); - @Override - protected String getQueryName() { - return "getNetworks"; - } + Vertex owningentity1 = graph.addVertex(T.label, "owning-entity", T.id, "4", "aai-node-type", + "owning-entity", "owning-entity-id", "owning-entity-id-1", "owning-entity-name", + "owning-entity-name-1"); + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "5", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1"); + Vertex l3network1 = + graph.addVertex(T.label, "l3-network", T.id, "6", "aai-node-type", "l3-network", + "network-id", "network-id-1", "is-bound-to-vpn", "false", "is-provider-network", + "false", "is-shared-network", "false", "is-external-network", "false"); + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "7", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", + "cloud-owner-name-1", "cloud-region-version", "cloud-region-version-1"); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "owning-entity").has("owning-entity-id", "owning-entity-id-0"); - } + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, owningentity, serviceinstance); + rules.addEdge(g, serviceinstance, l3network); + rules.addEdge(g, l3network, cloudregion); + rules.addEdge(g, serviceinstance, l3network2); + rules.addEdge(g, l3network2, cloudregion); + rules.addEdge(g, l3network3, cloudregion2); + rules.addEdge(g, serviceinstance, l3network3); - @Override - protected void addParam(Map<String, Object> params) { - params.put("networkRole", "network-role-0"); - params.put("cloudRegionId", "cloud-region-id-0"); - } + rules.addEdge(g, owningentity1, serviceinstance1); + rules.addEdge(g, serviceinstance1, l3network1); // false + rules.addEdge(g, l3network1, cloudregion1); + + expectedResult.add(l3network); + } + + @Override + protected String getQueryName() { + return "getNetworks"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "owning-entity").has("owning-entity-id", "owning-entity-id-0"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("networkRole", "network-role-0"); + params.put("cloudRegionId", "cloud-region-id-0"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetPinterfacePhysicalLinkBySvcInstIdTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetPinterfacePhysicalLinkBySvcInstIdTest.java index b271183..f1bf3f1 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetPinterfacePhysicalLinkBySvcInstIdTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetPinterfacePhysicalLinkBySvcInstIdTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,6 @@ */ package org.onap.aai.rest.search; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -32,75 +31,85 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetPinterfacePhysicalLinkBySvcInstIdTest extends QueryTest { - public GetPinterfacePhysicalLinkBySvcInstIdTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void test() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "0", "aai-node-type", "service-instance", "service-instance-id", "s-instance-id1"); - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "s-instance-id2"); - - Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2"); - - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", "pservername2"); - - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver", "vserver-id", "vserverid1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", "vserver-id", "vserverid2"); - - Vertex pInterface = graph.addVertex(T.label, "p-interface", T.id, "8", "aai-node-type", "p-interface", "interface-name", "p-interface-1"); - Vertex pInterface1 = graph.addVertex(T.label, "p-interface", T.id, "9", "aai-node-type", "p-interface", "interface-name", "p-interface-2"); - - Vertex plink = graph.addVertex(T.label, "physical-link", T.id, "10", "aai-node-type", "physical-link", "link-name", "link-name-1" ); - Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "11", "aai-node-type", "physical-link", "link-name", "link-name-2" ); - - - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, serviceinstance, gnvf); - rules.addEdge(g, gnvf, vserver); - rules.addEdge(g, vserver, pserver); - rules.addTreeEdge(g, pserver, pInterface); - rules.addEdge(g, pInterface, plink); - - rules.addEdge(g, serviceinstance1, gnvf1); - rules.addEdge(g, gnvf1, vserver1); - rules.addEdge(g, vserver1, pserver1); - rules.addTreeEdge(g, pserver1, pInterface1); - rules.addEdge(g, pInterface1, plink1); - - expectedResult.add(serviceinstance); - expectedResult.add(gnvf); - expectedResult.add(vserver); - expectedResult.add(pserver); - expectedResult.add(pInterface); - expectedResult.add(plink); - - - } - - @Override - protected String getQueryName() { - return "getPinterfacePhysicalLinkBySvcInstId"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "s-instance-id1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public GetPinterfacePhysicalLinkBySvcInstIdTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void test() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "0", + "aai-node-type", "service-instance", "service-instance-id", "s-instance-id1"); + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "s-instance-id2"); + + Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2"); + + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "pservername2"); + + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver", + "vserver-id", "vserverid1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", + "vserver-id", "vserverid2"); + + Vertex pInterface = graph.addVertex(T.label, "p-interface", T.id, "8", "aai-node-type", + "p-interface", "interface-name", "p-interface-1"); + Vertex pInterface1 = graph.addVertex(T.label, "p-interface", T.id, "9", "aai-node-type", + "p-interface", "interface-name", "p-interface-2"); + + Vertex plink = graph.addVertex(T.label, "physical-link", T.id, "10", "aai-node-type", + "physical-link", "link-name", "link-name-1"); + Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "11", "aai-node-type", + "physical-link", "link-name", "link-name-2"); + + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, serviceinstance, gnvf); + rules.addEdge(g, gnvf, vserver); + rules.addEdge(g, vserver, pserver); + rules.addTreeEdge(g, pserver, pInterface); + rules.addEdge(g, pInterface, plink); + + rules.addEdge(g, serviceinstance1, gnvf1); + rules.addEdge(g, gnvf1, vserver1); + rules.addEdge(g, vserver1, pserver1); + rules.addTreeEdge(g, pserver1, pInterface1); + rules.addEdge(g, pInterface1, plink1); + + expectedResult.add(serviceinstance); + expectedResult.add(gnvf); + expectedResult.add(vserver); + expectedResult.add(pserver); + expectedResult.add(pInterface); + expectedResult.add(plink); + + } + + @Override + protected String getQueryName() { + return "getPinterfacePhysicalLinkBySvcInstId"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "service-instance").has("service-instance-id", "s-instance-id1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetRouterRoadmTailSummaryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetRouterRoadmTailSummaryTest.java index 6e0f852..bbde1d4 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetRouterRoadmTailSummaryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetRouterRoadmTailSummaryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,11 @@ */ package org.onap.aai.rest.search; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,12 +32,7 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.Map; - -public class GetRouterRoadmTailSummaryTest extends TreeQueryTest{ +public class GetRouterRoadmTailSummaryTest extends TreeQueryTest { public GetRouterRoadmTailSummaryTest() throws AAIException, NoEdgeRuleFoundException { super(); @@ -40,16 +40,25 @@ public class GetRouterRoadmTailSummaryTest extends TreeQueryTest{ @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex logicalLink1 = graph.addVertex(T.label, "logical-link", T.id, "4", "aai-node-type", "logical-link", "link-name", "logical-link-1"); - Vertex logicalLink2 = graph.addVertex(T.label, "logical-link", T.id, "5", "aai-node-type", "logical-link", "link-name", "logical-link-2"); - Vertex pInterface1 = graph.addVertex(T.label, "p-interface", T.id, "6", "aai-node-type", "p-interface", "interface-name", "p-interface-1"); - Vertex pInterface2 = graph.addVertex(T.label, "p-interface", T.id, "7", "aai-node-type", "p-interface", "interface-name", "p-interface-2"); - Vertex pInterface3 = graph.addVertex(T.label, "p-interface", T.id, "8", "aai-node-type", "p-interface", "interface-name", "p-interface-3"); - Vertex pInterface4 = graph.addVertex(T.label, "p-interface", T.id, "12", "aai-node-type", "p-interface", "interface-name", "p-interface-4"); - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "9", "aai-node-type", "pnf", "pnf-name", "pnf1name"); - Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "10", "aai-node-type", "pnf", "pnf-name", "pnf2name"); + Vertex logicalLink1 = graph.addVertex(T.label, "logical-link", T.id, "4", "aai-node-type", + "logical-link", "link-name", "logical-link-1"); + Vertex logicalLink2 = graph.addVertex(T.label, "logical-link", T.id, "5", "aai-node-type", + "logical-link", "link-name", "logical-link-2"); + Vertex pInterface1 = graph.addVertex(T.label, "p-interface", T.id, "6", "aai-node-type", + "p-interface", "interface-name", "p-interface-1"); + Vertex pInterface2 = graph.addVertex(T.label, "p-interface", T.id, "7", "aai-node-type", + "p-interface", "interface-name", "p-interface-2"); + Vertex pInterface3 = graph.addVertex(T.label, "p-interface", T.id, "8", "aai-node-type", + "p-interface", "interface-name", "p-interface-3"); + Vertex pInterface4 = graph.addVertex(T.label, "p-interface", T.id, "12", "aai-node-type", + "p-interface", "interface-name", "p-interface-4"); + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "9", "aai-node-type", "pnf", "pnf-name", + "pnf1name"); + Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "10", "aai-node-type", "pnf", + "pnf-name", "pnf2name"); - Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", "interface-name", "l-interface-1"); + Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", + "l-interface", "interface-name", "l-interface-1"); rules.addEdge(gts, logicalLink2, logicalLink1); rules.addEdge(gts, logicalLink2, pInterface1); @@ -59,56 +68,65 @@ public class GetRouterRoadmTailSummaryTest extends TreeQueryTest{ rules.addTreeEdge(gts, pInterface1, pnf1); rules.addTreeEdge(gts, pInterface2, pnf2); rules.addTreeEdge(gts, pInterface3, pnf2); - rules.addTreeEdge(gts, pInterface4, pnf1); //false + rules.addTreeEdge(gts, pInterface4, pnf1); // false - rules.addEdge(gts, logicalLink2, lInterface1);//false + rules.addEdge(gts, logicalLink2, lInterface1);// false expectedResult.add(pnf1); expectedResult.add(pInterface1); - //expectedResult.add(logicalLink1); + // expectedResult.add(logicalLink1); expectedResult.add(pInterface2); expectedResult.add(pInterface3); expectedResult.add(pnf2); expectedResult.add(logicalLink2); - + } @Test public void run() { super.run(); - - Tree tree = treeList.get(0); //pnf1 - - Vertex l1 = graph.traversal().V().has("aai-node-type","logical-link").has("link-name","logical-link-1").next(); - - Vertex l2 = graph.traversal().V().has("aai-node-type","logical-link").has("link-name","logical-link-2").next(); - Vertex pInt1 = graph.traversal().V().has("aai-node-type","p-interface").has("interface-name","p-interface-1").next(); - Vertex pInt2 = graph.traversal().V().has("aai-node-type","p-interface").has("interface-name","p-interface-2").next(); - Vertex pInt3 = graph.traversal().V().has("aai-node-type","p-interface").has("interface-name","p-interface-3").next(); - Vertex pInt4 = graph.traversal().V().has("aai-node-type","p-interface").has("interface-name","p-interface-4").next(); - Vertex pnf1 = graph.traversal().V().has("aai-node-type","pnf").has("pnf-name","pnf1name").next(); - Vertex pnf2 = graph.traversal().V().has("aai-node-type","pnf").has("pnf-name","pnf2name").next(); - + + Tree tree = treeList.get(0); // pnf1 + + Vertex l1 = graph.traversal().V().has("aai-node-type", "logical-link") + .has("link-name", "logical-link-1").next(); + + Vertex l2 = graph.traversal().V().has("aai-node-type", "logical-link") + .has("link-name", "logical-link-2").next(); + Vertex pInt1 = graph.traversal().V().has("aai-node-type", "p-interface") + .has("interface-name", "p-interface-1").next(); + Vertex pInt2 = graph.traversal().V().has("aai-node-type", "p-interface") + .has("interface-name", "p-interface-2").next(); + Vertex pInt3 = graph.traversal().V().has("aai-node-type", "p-interface") + .has("interface-name", "p-interface-3").next(); + Vertex pInt4 = graph.traversal().V().has("aai-node-type", "p-interface") + .has("interface-name", "p-interface-4").next(); + Vertex pnf1 = + graph.traversal().V().has("aai-node-type", "pnf").has("pnf-name", "pnf1name").next(); + Vertex pnf2 = + graph.traversal().V().has("aai-node-type", "pnf").has("pnf-name", "pnf2name").next(); + /* * Expected: - * {v[9] -> pnf1 - {v[6] -> pInt1 - {v[5] -> l2 - { - v[6] -> pInt1 - {v[9]={}}, -> pnf1 - v[7]= -> pInt2 - {v[10]={}}, -> pnf2 - v[8]= -> pInt3 - {v[10]={}} -> pnf2 - } - } - } - } + * {v[9] -> pnf1 + * {v[6] -> pInt1 + * {v[5] -> l2 + * { + * v[6] -> pInt1 + * {v[9]={}}, -> pnf1 + * v[7]= -> pInt2 + * {v[10]={}}, -> pnf2 + * v[8]= -> pInt3 + * {v[10]={}} -> pnf2 + * } + * } + * } + * } */ - + assertTrue(tree.containsKey(pnf1)); - assertFalse(((Tree) tree.get(pnf1)).containsKey(pInt4)); //pInt4 is not connected to any logical-link + assertFalse(((Tree) tree.get(pnf1)).containsKey(pInt4)); // pInt4 is not connected to any + // logical-link assertTrue(((Tree) tree.get(pnf1)).containsKey(pInt1)); assertTrue(tree.getObjectsAtDepth(3).contains(l2)); assertTrue(tree.getObjectsAtDepth(4).contains(pInt1)); @@ -117,7 +135,7 @@ public class GetRouterRoadmTailSummaryTest extends TreeQueryTest{ assertTrue(tree.getObjectsAtDepth(4).contains(pInt3)); assertTrue(tree.getObjectsAtDepth(5).contains(pnf2)); } - + @Override protected String getQueryName() { return "getRouterRoadmTailSummary"; @@ -133,4 +151,4 @@ public class GetRouterRoadmTailSummaryTest extends TreeQueryTest{ return; } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceInstanceSummaryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceInstanceSummaryTest.java index 1fba932..d2a248e 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceInstanceSummaryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceInstanceSummaryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,79 +26,100 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetServiceInstanceSummaryTest extends QueryTest { - - public GetServiceInstanceSummaryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //set up test graph - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "serviceinstanceid0"); - Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "2", "aai-node-type", "l3-network", "network-id", "networkid0"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - Vertex servicesub = graph.addVertex(T.label, "service-subscription", T.id, "4", "aai-node-type", "service-subscription", "service-type", "servicetype0"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "5", "aai-node-type", "customer", "customer-id", "customerid0"); - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", "vserver-id", "vserverid0"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "8", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName0"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "9", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "10", "aai-node-type", "service-instance", "service-instance-id", "serviceinstanceid1"); - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "11", "aai-node-type", "l3-network", "network-id", "networkid0"); - Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "12", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - Vertex servicesub1 = graph.addVertex(T.label, "service-subscription", T.id, "13", "aai-node-type", "service-subscription", "service-type", "servicetype0"); - Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "14", "aai-node-type", "customer", "customer-id", "customerid0"); - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "15", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "16", "aai-node-type", "vserver", "vserver-id", "vserverid0"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "17", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName0"); - Vertex cloudregion3 = graph.addVertex(T.label, "cloud-region", T.id, "18", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, serviceinstance, l3network); - rules.addEdge(g, l3network, cloudregion); - rules.addTreeEdge(g, serviceinstance, servicesub); - rules.addTreeEdge(g, servicesub, customer); - rules.addEdge(g, serviceinstance, genericvnf); - rules.addEdge(g, genericvnf, vserver); - rules.addTreeEdge(g, vserver, tenant); - rules.addTreeEdge(g, tenant, cloudregion1); - - rules.addEdge(g, serviceinstance1, l3network1);//false - rules.addEdge(g, l3network1, cloudregion2);//false - rules.addTreeEdge(g, serviceinstance1, servicesub1);//false - rules.addTreeEdge(g, servicesub1, customer1);//false - rules.addEdge(g, serviceinstance1, genericvnf1);//false - rules.addEdge(g, genericvnf1, vserver1);//false - rules.addTreeEdge(g, vserver1, tenant1);//false - rules.addTreeEdge(g, tenant1, cloudregion3);//false - - expectedResult.add(serviceinstance); - expectedResult.add(cloudregion); - expectedResult.add(cloudregion1); - expectedResult.add(servicesub); - expectedResult.add(customer); - } - @Override - protected String getQueryName() { - return "getServiceInstanceSummary"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "serviceinstanceid0"); - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public GetServiceInstanceSummaryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // set up test graph + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "serviceinstanceid0"); + Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "2", "aai-node-type", + "l3-network", "network-id", "networkid0"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + Vertex servicesub = graph.addVertex(T.label, "service-subscription", T.id, "4", + "aai-node-type", "service-subscription", "service-type", "servicetype0"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "5", "aai-node-type", + "customer", "customer-id", "customerid0"); + Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", + "vserver-id", "vserverid0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "8", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName0"); + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "9", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "10", + "aai-node-type", "service-instance", "service-instance-id", "serviceinstanceid1"); + Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "11", "aai-node-type", + "l3-network", "network-id", "networkid0"); + Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "12", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + Vertex servicesub1 = graph.addVertex(T.label, "service-subscription", T.id, "13", + "aai-node-type", "service-subscription", "service-type", "servicetype0"); + Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "14", "aai-node-type", + "customer", "customer-id", "customerid0"); + Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "15", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid0"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "16", "aai-node-type", + "vserver", "vserver-id", "vserverid0"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "17", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName0"); + Vertex cloudregion3 = graph.addVertex(T.label, "cloud-region", T.id, "18", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, serviceinstance, l3network); + rules.addEdge(g, l3network, cloudregion); + rules.addTreeEdge(g, serviceinstance, servicesub); + rules.addTreeEdge(g, servicesub, customer); + rules.addEdge(g, serviceinstance, genericvnf); + rules.addEdge(g, genericvnf, vserver); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion1); + + rules.addEdge(g, serviceinstance1, l3network1);// false + rules.addEdge(g, l3network1, cloudregion2);// false + rules.addTreeEdge(g, serviceinstance1, servicesub1);// false + rules.addTreeEdge(g, servicesub1, customer1);// false + rules.addEdge(g, serviceinstance1, genericvnf1);// false + rules.addEdge(g, genericvnf1, vserver1);// false + rules.addTreeEdge(g, vserver1, tenant1);// false + rules.addTreeEdge(g, tenant1, cloudregion3);// false + + expectedResult.add(serviceinstance); + expectedResult.add(cloudregion); + expectedResult.add(cloudregion1); + expectedResult.add(servicesub); + expectedResult.add(customer); + } + + @Override + protected String getQueryName() { + return "getServiceInstanceSummary"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "service-instance").has("service-instance-id", "serviceinstanceid0"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceInstanceVnfVfModuleModelsTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceInstanceVnfVfModuleModelsTest.java index 64abbae..6714a13 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceInstanceVnfVfModuleModelsTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceInstanceVnfVfModuleModelsTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -29,59 +31,72 @@ import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class GetServiceInstanceVnfVfModuleModelsTest extends QueryTest { public GetServiceInstanceVnfVfModuleModelsTest() throws AAIException, NoEdgeRuleFoundException { super(); } + @Test public void run() { super.run(); } + @Override + protected void createGraph() + throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException { + Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex modelver = graph.addVertex(T.label, "model-ver", T.id, "2", "aai-node-type", + "model-ver", "model-ver-id", "model-ver-id-1"); + Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1"); + Vertex modelver1 = graph.addVertex(T.label, "model-ver", T.id, "4", "aai-node-type", + "model-ver", "model-ver-id", "model-ver-id-1"); + Vertex model = graph.addVertex(T.label, "model", T.id, "5", "aai-node-type", "model", + "model-id", "model-id-1"); + Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "6", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-1"); + Vertex modelver2 = graph.addVertex(T.label, "model-ver", T.id, "7", "aai-node-type", + "model-ver", "model-ver-id", "model-ver-id-2"); + Vertex model1 = graph.addVertex(T.label, "model", T.id, "8", "aai-node-type", "model", + "model-id", "model-id-2"); + + Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "9", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", + "service-instance-name", "service-instance-name-2"); + Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "10", "aai-node-type", + "l3-network", "l3-network-id", "l3-network-id-1"); + Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "11", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2"); + Vertex complex = graph.addVertex(T.label, "complex", T.id, "12", "aai-node-type", "complex", + "complex-id", "complex-1"); + Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "13", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-2"); + Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "14", "aai-node-type", + "l3-network", "l3-network-id", "l3-network-id-2"); + + Vertex model2 = graph.addVertex(T.label, "model", T.id, "15", "aai-node-type", "model", + "model-id", "model-id-3"); - @Override - protected void createGraph() throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException { - - Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex modelver = graph.addVertex(T.label, "model-ver", T.id, "2", "aai-node-type", "model-ver","model-ver-id", "model-ver-id-1"); - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1"); - Vertex modelver1 = graph.addVertex(T.label, "model-ver", T.id, "4", "aai-node-type", "model-ver","model-ver-id", "model-ver-id-1"); - Vertex model = graph.addVertex(T.label, "model", T.id, "5", "aai-node-type", "model","model-id", "model-id-1"); - Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "6", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-1"); - Vertex modelver2 = graph.addVertex(T.label, "model-ver", T.id, "7", "aai-node-type", "model-ver","model-ver-id", "model-ver-id-2"); - Vertex model1 = graph.addVertex(T.label, "model", T.id, "8", "aai-node-type", "model","model-id", "model-id-2"); - - Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "9", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", "service-instance-name", "service-instance-name-2"); - Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "10", "aai-node-type", "l3-network","l3-network-id", "l3-network-id-1"); - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "11", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-2"); - Vertex complex = graph.addVertex(T.label, "complex", T.id, "12", "aai-node-type", "complex","complex-id", "complex-1"); - Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "13", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-2"); - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "14", "aai-node-type", "l3-network","l3-network-id", "l3-network-id-2"); - - Vertex model2 = graph.addVertex(T.label, "model", T.id, "15", "aai-node-type", "model","model-id", "model-id-3"); - - GraphTraversalSource g = graph.traversal(); - rules.addPrivateEdge(g, serviceInstance, modelver,null); + rules.addPrivateEdge(g, serviceInstance, modelver, null); rules.addTreeEdge(g, modelver, model2); rules.addEdge(g, serviceInstance, genericvnf); - rules.addPrivateEdge(g, genericvnf, modelver1,null); + rules.addPrivateEdge(g, genericvnf, modelver1, null); rules.addTreeEdge(g, modelver1, model); rules.addTreeEdge(g, genericvnf, vfmodule); - rules.addPrivateEdge(g, vfmodule, modelver2,null); + rules.addPrivateEdge(g, vfmodule, modelver2, null); rules.addTreeEdge(g, modelver2, model1); - - rules.addEdge(g, serviceInstance1, l3network);//not expected in result - rules.addEdge(g, serviceInstance1, genericvnf1);//not expected in result - rules.addEdge(g, genericvnf1, complex);//not expected in result - rules.addTreeEdge(g, genericvnf1, vfmodule1);//not expected in result - rules.addEdge(g, vfmodule1, l3network1);//not expected in result - - + + rules.addEdge(g, serviceInstance1, l3network);// not expected in result + rules.addEdge(g, serviceInstance1, genericvnf1);// not expected in result + rules.addEdge(g, genericvnf1, complex);// not expected in result + rules.addTreeEdge(g, genericvnf1, vfmodule1);// not expected in result + rules.addEdge(g, vfmodule1, l3network1);// not expected in result + expectedResult.add(serviceInstance); expectedResult.add(modelver); expectedResult.add(model2); @@ -91,19 +106,20 @@ public class GetServiceInstanceVnfVfModuleModelsTest extends QueryTest { expectedResult.add(vfmodule); expectedResult.add(modelver2); expectedResult.add(model1); - } - @Override protected String getQueryName() { - return "getServiceInstanceVnfVfModuleModels"; + return "getServiceInstanceVnfVfModuleModels"; } + @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "service-instance-id-1"); + g.has("aai-node-type", "service-instance").has("service-instance-id", + "service-instance-id-1"); } + @Override protected void addParam(Map<String, Object> params) { return; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceTopologyTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceTopologyTest.java index 5475ea8..c9694d0 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceTopologyTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceTopologyTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -36,143 +36,191 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetServiceTopologyTest extends TreeQueryTest { - public GetServiceTopologyTest() throws AAIException, NoEdgeRuleFoundException { - super(); + public GetServiceTopologyTest() throws AAIException, NoEdgeRuleFoundException { + super(); } @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - - - - Vertex customer = graph.addVertex(T.label, "customer", T.id, "1", "aai-node-type", "customer", "global-customer-id", "customer-id-1", "subscriber-name", "customer-name1", "subscriber-type", "customer-type1"); - Vertex serviceSubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", "service-subscription", "service-type", "service-subcription-1"); - - Vertex serviceInstanceOne = graph.addVertex(T.label, "service-instance", T.id, "3", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex genericVnfOne = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", "generic-vnf", "vnf-name", "vnf-name", "vnf-type", "test", "vnf-id", "vnf-test=1"); - Vertex lInterfaceOne = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", "l-interface", "interface-name", "test-l-interface-one"); - Vertex l3Ipv4AddressListOne = graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "6", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test1"); - Vertex l3Ipv6AddressListOne = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "7", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test2"); - - Vertex vlanOne = graph.addVertex(T.label, "vlan", T.id, "8", "aai-node-type", "vlan", "vlan-interface", "test-vlan-one"); - Vertex l3Ipv4AddressListTwo = graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "9", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test3"); - Vertex l3Ipv6AddressListTwo = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "10", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test4"); - - Vertex vserverOne = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", "vserver-id-one", "test-vserver", "vserver-selflink", "test", "vserver-name", "test-vserver"); - Vertex lInterfaceTwo = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", "l-interface", "interface-name", "test-l-interface-two"); - Vertex l3Ipv4AddressListThree = graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "13", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test5"); - Vertex l3Ipv6AddressListThree = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "14", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test6"); - - Vertex vlanTwo = graph.addVertex(T.label, "vlan", T.id, "15", "aai-node-type", "vlan", "vlan-interface", "test-vlan-two"); - Vertex l3Ipv4AddressListFour = graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "16", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test7"); - Vertex l3Ipv6AddressListFour = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "17", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test8"); - - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "18", "aai-node-type", "pserver", "hostname", "test-pserver"); - Vertex complex = graph.addVertex(T.label, "complex", T.id, "19", "aai-node-type", "complex", "physical-location-id", "test-complex"); - - Vertex allottedResource = graph.addVertex(T.label, "allotted-resource", T.id, "20", "aai-node-type", "allotted-resource", "id", "test-resource"); - Vertex serviceInstanceTwo = graph.addVertex(T.label, "service-instance", T.id, "21", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", "service-instance-name", "service-instance-name-1"); - Vertex genericVnfTwo = graph.addVertex(T.label, "generic-vnf", T.id, "22", "aai-node-type", "generic-vnf", "vnf-name", "vnf-name", "vnf-type", "test", "vnf-id", "vnf-test-2"); - Vertex lInterfaceThree = graph.addVertex(T.label, "l-interface", T.id, "23", "aai-node-type", "l-interface", "interface-name", "test-l-interface-three"); - Vertex l3Ipv4AddressListFive = graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "24", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test9"); - Vertex l3Ipv6AddressListFive = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "25", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test10"); - - Vertex vlanThree = graph.addVertex(T.label, "vlan", T.id, "26", "aai-node-type", "vlan", "vlan-interface", "test-vlan-three"); - Vertex l3Ipv4AddressListSix = graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "27", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test11"); - Vertex l3Ipv6AddressListSix = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "28", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test12"); - - Vertex vserverTwo = graph.addVertex(T.label, "vserver", T.id, "29", "aai-node-type", "vserver", "vserver-id", "test-vserver", "vserver-selflink", "test", "vserver-name", "test-vserver=two"); - Vertex lInterfaceFour = graph.addVertex(T.label, "l-interface", T.id, "30", "aai-node-type", "l-interface", "interface-name", "test-l-interface-four"); - Vertex l3Ipv4AddressListSeven = graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "31", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test13"); - Vertex l3Ipv6AddressListSeven = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "32", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test14"); - - Vertex vlanFour = graph.addVertex(T.label, "vlan", T.id, "33", "aai-node-type", "vlan", "vlan-interface", "test-vlan-four"); - Vertex l3Ipv4AddressListEight = graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "34", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test15"); - Vertex l3Ipv6AddressListEight = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "35", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test16"); - - + // Set up the test graph + + Vertex customer = graph.addVertex(T.label, "customer", T.id, "1", "aai-node-type", + "customer", "global-customer-id", "customer-id-1", "subscriber-name", "customer-name1", + "subscriber-type", "customer-type1"); + Vertex serviceSubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-type", "service-subcription-1"); + + Vertex serviceInstanceOne = graph.addVertex(T.label, "service-instance", T.id, "3", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex genericVnfOne = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", + "generic-vnf", "vnf-name", "vnf-name", "vnf-type", "test", "vnf-id", "vnf-test=1"); + Vertex lInterfaceOne = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", + "l-interface", "interface-name", "test-l-interface-one"); + Vertex l3Ipv4AddressListOne = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "6", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test1"); + Vertex l3Ipv6AddressListOne = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "7", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test2"); + + Vertex vlanOne = graph.addVertex(T.label, "vlan", T.id, "8", "aai-node-type", "vlan", + "vlan-interface", "test-vlan-one"); + Vertex l3Ipv4AddressListTwo = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "9", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test3"); + Vertex l3Ipv6AddressListTwo = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "10", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test4"); + + Vertex vserverOne = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", + "vserver", "vserver-id-one", "test-vserver", "vserver-selflink", "test", "vserver-name", + "test-vserver"); + Vertex lInterfaceTwo = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", + "l-interface", "interface-name", "test-l-interface-two"); + Vertex l3Ipv4AddressListThree = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "13", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test5"); + Vertex l3Ipv6AddressListThree = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "14", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test6"); + + Vertex vlanTwo = graph.addVertex(T.label, "vlan", T.id, "15", "aai-node-type", "vlan", + "vlan-interface", "test-vlan-two"); + Vertex l3Ipv4AddressListFour = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "16", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test7"); + Vertex l3Ipv6AddressListFour = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "17", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test8"); + + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "18", "aai-node-type", "pserver", + "hostname", "test-pserver"); + Vertex complex = graph.addVertex(T.label, "complex", T.id, "19", "aai-node-type", "complex", + "physical-location-id", "test-complex"); + + Vertex allottedResource = graph.addVertex(T.label, "allotted-resource", T.id, "20", + "aai-node-type", "allotted-resource", "id", "test-resource"); + Vertex serviceInstanceTwo = graph.addVertex(T.label, "service-instance", T.id, "21", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", + "service-instance-name", "service-instance-name-1"); + Vertex genericVnfTwo = graph.addVertex(T.label, "generic-vnf", T.id, "22", "aai-node-type", + "generic-vnf", "vnf-name", "vnf-name", "vnf-type", "test", "vnf-id", "vnf-test-2"); + Vertex lInterfaceThree = graph.addVertex(T.label, "l-interface", T.id, "23", + "aai-node-type", "l-interface", "interface-name", "test-l-interface-three"); + Vertex l3Ipv4AddressListFive = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "24", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test9"); + Vertex l3Ipv6AddressListFive = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "25", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test10"); + + Vertex vlanThree = graph.addVertex(T.label, "vlan", T.id, "26", "aai-node-type", "vlan", + "vlan-interface", "test-vlan-three"); + Vertex l3Ipv4AddressListSix = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "27", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test11"); + Vertex l3Ipv6AddressListSix = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "28", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test12"); + + Vertex vserverTwo = graph.addVertex(T.label, "vserver", T.id, "29", "aai-node-type", + "vserver", "vserver-id", "test-vserver", "vserver-selflink", "test", "vserver-name", + "test-vserver=two"); + Vertex lInterfaceFour = graph.addVertex(T.label, "l-interface", T.id, "30", "aai-node-type", + "l-interface", "interface-name", "test-l-interface-four"); + Vertex l3Ipv4AddressListSeven = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "31", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test13"); + Vertex l3Ipv6AddressListSeven = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "32", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test14"); + + Vertex vlanFour = graph.addVertex(T.label, "vlan", T.id, "33", "aai-node-type", "vlan", + "vlan-interface", "test-vlan-four"); + Vertex l3Ipv4AddressListEight = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "34", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "test15"); + Vertex l3Ipv6AddressListEight = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "35", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "test16"); + GraphTraversalSource g = graph.traversal(); - - + rules.addTreeEdge(g, customer, serviceSubscription); rules.addTreeEdge(g, serviceSubscription, serviceInstanceOne); - + rules.addEdge(g, serviceInstanceOne, genericVnfOne); rules.addTreeEdge(g, genericVnfOne, lInterfaceOne); rules.addTreeEdge(g, lInterfaceOne, l3Ipv4AddressListOne); rules.addTreeEdge(g, lInterfaceOne, l3Ipv6AddressListOne); - + rules.addTreeEdge(g, lInterfaceOne, vlanOne); rules.addTreeEdge(g, vlanOne, l3Ipv4AddressListTwo); rules.addTreeEdge(g, vlanOne, l3Ipv6AddressListTwo); - + rules.addEdge(g, genericVnfOne, vserverOne); - rules.addTreeEdge(g, vserverOne, lInterfaceTwo); + rules.addTreeEdge(g, vserverOne, lInterfaceTwo); rules.addTreeEdge(g, lInterfaceTwo, l3Ipv4AddressListThree); rules.addTreeEdge(g, lInterfaceTwo, l3Ipv6AddressListThree); rules.addTreeEdge(g, lInterfaceTwo, vlanTwo); rules.addTreeEdge(g, vlanTwo, l3Ipv4AddressListFour); rules.addTreeEdge(g, vlanTwo, l3Ipv6AddressListFour); rules.addEdge(g, vserverOne, pserver); - rules.addEdge(g, pserver, complex); - + rules.addEdge(g, pserver, complex); + rules.addEdge(g, serviceInstanceOne, allottedResource); rules.addTreeEdge(g, allottedResource, serviceInstanceTwo); - + rules.addEdge(g, serviceInstanceTwo, genericVnfTwo); rules.addTreeEdge(g, genericVnfTwo, lInterfaceThree); rules.addTreeEdge(g, lInterfaceThree, l3Ipv4AddressListFive); rules.addTreeEdge(g, lInterfaceThree, l3Ipv6AddressListFive); - + rules.addTreeEdge(g, lInterfaceThree, vlanThree); rules.addTreeEdge(g, vlanThree, l3Ipv4AddressListSix); rules.addTreeEdge(g, vlanThree, l3Ipv6AddressListSix); - + rules.addEdge(g, genericVnfTwo, vserverTwo); - rules.addTreeEdge(g, vserverTwo, lInterfaceFour); + rules.addTreeEdge(g, vserverTwo, lInterfaceFour); rules.addTreeEdge(g, lInterfaceFour, l3Ipv4AddressListSeven); rules.addTreeEdge(g, lInterfaceFour, l3Ipv6AddressListSeven); rules.addTreeEdge(g, lInterfaceFour, vlanFour); rules.addTreeEdge(g, vlanFour, l3Ipv4AddressListEight); rules.addTreeEdge(g, vlanFour, l3Ipv6AddressListEight); - - - - + expectedResult.add(serviceInstanceOne); expectedResult.add(genericVnfOne); expectedResult.add(lInterfaceOne); expectedResult.add(l3Ipv4AddressListOne); expectedResult.add(l3Ipv6AddressListOne); - expectedResult.add(vlanOne); + expectedResult.add(vlanOne); expectedResult.add(l3Ipv4AddressListTwo); expectedResult.add(l3Ipv6AddressListTwo); - - + expectedResult.add(vserverOne); expectedResult.add(lInterfaceTwo); expectedResult.add(l3Ipv4AddressListThree); expectedResult.add(l3Ipv6AddressListThree); - + expectedResult.add(vlanTwo); expectedResult.add(l3Ipv4AddressListFour); expectedResult.add(l3Ipv6AddressListFour); - + expectedResult.add(pserver); expectedResult.add(complex); - + expectedResult.add(allottedResource); expectedResult.add(serviceInstanceTwo); expectedResult.add(genericVnfTwo); expectedResult.add(lInterfaceThree); expectedResult.add(l3Ipv4AddressListFive); expectedResult.add(l3Ipv6AddressListFive); - + expectedResult.add(vlanThree); expectedResult.add(l3Ipv4AddressListSix); expectedResult.add(l3Ipv6AddressListSix); - + expectedResult.add(vserverTwo); expectedResult.add(lInterfaceFour); expectedResult.add(l3Ipv4AddressListSeven); @@ -180,9 +228,9 @@ public class GetServiceTopologyTest extends TreeQueryTest { expectedResult.add(vlanFour); expectedResult.add(l3Ipv4AddressListEight); expectedResult.add(l3Ipv6AddressListEight); - + } - + @Test public void run() { super.run(); @@ -190,31 +238,34 @@ public class GetServiceTopologyTest extends TreeQueryTest { ArrayList<Vertex> actualResult = new ArrayList<Vertex>(); int i = 1; do { - actualResult.addAll(tree.getObjectsAtDepth(i)); - i++; - } while(!tree.getObjectsAtDepth(i).isEmpty()); - - assertEquals("result has expected number of values", actualResult.size(), expectedResult.size()); + actualResult.addAll(tree.getObjectsAtDepth(i)); + i++; + } while (!tree.getObjectsAtDepth(i).isEmpty()); + + assertEquals("result has expected number of values", actualResult.size(), + expectedResult.size()); int size = actualResult.size() == expectedResult.size() ? expectedResult.size() : 0; - for(i = 0; i < size; i++) { - assertTrue("result has node " + expectedResult.get(i), actualResult.contains(expectedResult.get(i))); + for (i = 0; i < size; i++) { + assertTrue("result has node " + expectedResult.get(i), + actualResult.contains(expectedResult.get(i))); } - + } @Override protected String getQueryName() { - return "getServiceTopology"; + return "getServiceTopology"; } @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "service-instance-id-1"); + g.has("aai-node-type", "service-instance").has("service-instance-id", + "service-instance-id-1"); } @Override protected void addParam(Map<String, Object> params) { - return; + return; } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetTenantInfoAtSvcInstanceQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetTenantInfoAtSvcInstanceQueryTest.java index 71e2f18..81255b4 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetTenantInfoAtSvcInstanceQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetTenantInfoAtSvcInstanceQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,72 +30,84 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetTenantInfoAtSvcInstanceQueryTest extends QueryTest { - public GetTenantInfoAtSvcInstanceQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public GetTenantInfoAtSvcInstanceQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1"); - Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserver-id-1","vserver-name","vserver-name-1"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", "tenant-id", "tenantid01", "tenant-name", "tenantName01"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); - Vertex complex = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex", "complex-id", "complex-1"); - - Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "7", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2"); - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-2"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "9", "aai-node-type", "vserver", "vserver-id", "vserver-id-2","vserver-name","vserver-name-2"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "10", "aai-node-type", "tenant", "tenant-id", "tenantid02", "tenant-name", "tenantName02"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "11", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2"); - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "12", "aai-node-type", "complex", "complex-id", "complex-2"); - - - - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, serviceInstance, gnvf); - rules.addEdge(g, gnvf, vserver); - rules.addTreeEdge(g, vserver,tenant); - rules.addTreeEdge(g, tenant,cloudregion); - rules.addEdge(g, cloudregion, complex); - - //Not expected in result - rules.addEdge(g, serviceInstance1, gnvf1); - rules.addEdge(g, gnvf1, vserver1); - rules.addTreeEdge(g, vserver1,tenant1); - rules.addTreeEdge(g, tenant1,cloudregion1); - rules.addEdge(g, cloudregion1, complex1); - //Not expected in result - - expectedResult.add(serviceInstance); - expectedResult.add(gnvf); - expectedResult.add(vserver); - expectedResult.add(tenant); - expectedResult.add(cloudregion); - expectedResult.add(complex); - - - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - @Override - protected String getQueryName() { - return "getTenantInfoAtSvcInstance"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "service-instance-id-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1"); + Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", + "tenant-id", "tenantid01", "tenant-name", "tenantName01"); + Vertex cloudregion = + graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); + Vertex complex = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex", + "complex-id", "complex-1"); + + Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "7", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2"); + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "9", "aai-node-type", "vserver", + "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "10", "aai-node-type", "tenant", + "tenant-id", "tenantid02", "tenant-name", "tenantName02"); + Vertex cloudregion1 = + graph.addVertex(T.label, "cloud-region", T.id, "11", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2"); + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "12", "aai-node-type", + "complex", "complex-id", "complex-2"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, serviceInstance, gnvf); + rules.addEdge(g, gnvf, vserver); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addEdge(g, cloudregion, complex); + + // Not expected in result + rules.addEdge(g, serviceInstance1, gnvf1); + rules.addEdge(g, gnvf1, vserver1); + rules.addTreeEdge(g, vserver1, tenant1); + rules.addTreeEdge(g, tenant1, cloudregion1); + rules.addEdge(g, cloudregion1, complex1); + // Not expected in result + + expectedResult.add(serviceInstance); + expectedResult.add(gnvf); + expectedResult.add(vserver); + expectedResult.add(tenant); + expectedResult.add(cloudregion); + expectedResult.add(complex); + + } + + @Override + protected String getQueryName() { + return "getTenantInfoAtSvcInstance"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "service-instance").has("service-instance-id", + "service-instance-id-1"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetTenantInfoAtSvcSubscriptionTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetTenantInfoAtSvcSubscriptionTest.java index 8ceab5e..2366d10 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetTenantInfoAtSvcSubscriptionTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetTenantInfoAtSvcSubscriptionTest.java @@ -9,7 +9,7 @@ package org.onap.aai.rest.search; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -20,6 +20,7 @@ package org.onap.aai.rest.search; */ import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -28,62 +29,69 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; +public class GetTenantInfoAtSvcSubscriptionTest extends QueryTest { + + public GetTenantInfoAtSvcSubscriptionTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void test() { + super.run(); + } -public class GetTenantInfoAtSvcSubscriptionTest extends QueryTest{ - - public GetTenantInfoAtSvcSubscriptionTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "0", + "aai-node-type", "service-subscription", "service-type", "service-type-0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "1", "aai-node-type", "tenant", + "tenant-id", "tenant-id-0", "tenant-name", "tenant-name-0"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", + "cloud-region", "cloud-owner", "cloud-owner-0", "cloud-region-id", "cloud-region-id-0"); + Vertex complex = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-0", "physical-location-type", + "physical-location-type-0", "street1", "street1-0", "city", "city-0", "postal-code", + "postal-code-0", "country", "country-0", "region", "region-0"); + Vertex servicesubscription1 = graph.addVertex(T.label, "service-subscription", T.id, "5", + "aai-node-type", "service-subscription", "service-type", "service-type-1"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "6", "aai-node-type", "tenant", + "tenant-id", "tenant-id-1", "tenant-name", "tenant-name-1"); + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "7", "aai-node-type", + "cloud-region", "cloud-owner", "cloud-owner-1", "cloud-region-id", "cloud-region-id-1"); + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "8", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1", "physical-location-type", + "physical-location-type-1", "street1", "street1-1", "city", "city-1", "postal-code", + "postal-code-1", "country", "country-1", "region", "region-1"); - @Test - public void test() { - super.run(); - } + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, servicesubscription, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addEdge(g, cloudregion, complex); - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex servicesubscription = graph.addVertex(T.label, "service-subscription",T.id, "0", "aai-node-type", "service-subscription", "service-type", "service-type-0"); - Vertex tenant = graph.addVertex(T.label, "tenant",T.id, "1", "aai-node-type", "tenant", "tenant-id", "tenant-id-0", "tenant-name", "tenant-name-0"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region",T.id, "2", "aai-node-type", "cloud-region", "cloud-owner", "cloud-owner-0", "cloud-region-id", "cloud-region-id-0"); - Vertex complex = graph.addVertex(T.label, "complex",T.id, "3", "aai-node-type", "complex", "physical-location-id", "physical-location-id-0", "physical-location-type", - "physical-location-type-0", "street1", "street1-0", "city", "city-0", "postal-code", "postal-code-0", "country", "country-0", "region", "region-0"); - Vertex servicesubscription1 = graph.addVertex(T.label, "service-subscription",T.id, "5", "aai-node-type", "service-subscription", "service-type", "service-type-1"); - Vertex tenant1 = graph.addVertex(T.label, "tenant",T.id, "6", "aai-node-type", "tenant", "tenant-id", "tenant-id-1", "tenant-name", "tenant-name-1"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region",T.id, "7", "aai-node-type", "cloud-region", "cloud-owner", "cloud-owner-1", "cloud-region-id", "cloud-region-id-1"); - Vertex complex1 = graph.addVertex(T.label, "complex",T.id, "8", "aai-node-type", "complex", "physical-location-id", "physical-location-id-1", "physical-location-type", - "physical-location-type-1", "street1", "street1-1", "city", "city-1", "postal-code", "postal-code-1", "country", "country-1", "region", "region-1"); + rules.addEdge(g, servicesubscription1, tenant1); + rules.addTreeEdge(g, tenant1, cloudregion1); + rules.addEdge(g, cloudregion1, complex1); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, servicesubscription, tenant); - rules.addTreeEdge(g, tenant, cloudregion); - rules.addEdge(g, cloudregion, complex); - - rules.addEdge(g, servicesubscription1, tenant1); - rules.addTreeEdge(g, tenant1, cloudregion1); - rules.addEdge(g, cloudregion1, complex1); - - - expectedResult.add(servicesubscription); - expectedResult.add(tenant); - expectedResult.add(cloudregion); - expectedResult.add(complex); - } + expectedResult.add(servicesubscription); + expectedResult.add(tenant); + expectedResult.add(cloudregion); + expectedResult.add(complex); + } - @Override - protected String getQueryName() { - return "getTenantInfoAtSvcSubscription"; - } + @Override + protected String getQueryName() { + return "getTenantInfoAtSvcSubscription"; + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-subscription").has("service-type", "service-type-0"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "service-subscription").has("service-type", "service-type-0"); + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVNFVpnBondingServiceDetailsTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVNFVpnBondingServiceDetailsTest.java index b859b84..d6e1f54 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVNFVpnBondingServiceDetailsTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVNFVpnBondingServiceDetailsTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,7 +27,6 @@ import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Ignore; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; @@ -47,39 +46,55 @@ public class GetVNFVpnBondingServiceDetailsTest extends QueryTest { @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - - - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver", "vserver-name1", "vservername1"); - Vertex linter1 = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); - Vertex linter2 = graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); - Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "4", "aai-node-type", "vlan","vlan-interface", "vlan11"); - Vertex config1 = graph.addVertex(T.label, "configuration", T.id, "5", "aai-node-type", "configuration", "configuration-id", "configuration1"); - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "6", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-1", "l3-network-name", "l3-network-name1"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "7", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address-list-id", "l3-interface-ipv4-address-list-id-1", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "8", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-1", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); - Vertex configVpnBinding = graph.addVertex(T.label, "vpn-binding", T.id, "9", "aai-node-type", "vpn-binding", - "vpn-id", "test-binding-config", "vpn-name", "test"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "10", "aai-node-type", "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); - Vertex subnet1 = graph.addVertex(T.label, "subnet", T.id, "11", "aai-node-type", "subnet", "subnet-id", "subnet-id-11"); - Vertex routeTarget1 = graph.addVertex(T.label, "route-target", T.id, "12", "aai-node-type", "route-target", "global-route-target", "111"); - + // Set up the test graph + + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver", + "vserver-name1", "vservername1"); + Vertex linter1 = + graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); + Vertex linter2 = + graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); + Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "4", "aai-node-type", "vlan", + "vlan-interface", "vlan11"); + Vertex config1 = graph.addVertex(T.label, "configuration", T.id, "5", "aai-node-type", + "configuration", "configuration-id", "configuration1"); + Vertex l3network1 = + graph.addVertex(T.label, "l3-network", T.id, "6", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-1", "l3-network-name", "l3-network-name1"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "7", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address-list-id", "l3-interface-ipv4-address-list-id-1", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "8", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-1", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); + Vertex configVpnBinding = graph.addVertex(T.label, "vpn-binding", T.id, "9", + "aai-node-type", "vpn-binding", "vpn-id", "test-binding-config", "vpn-name", "test"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "10", "aai-node-type", + "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); + Vertex subnet1 = graph.addVertex(T.label, "subnet", T.id, "11", "aai-node-type", "subnet", + "subnet-id", "subnet-id-11"); + Vertex routeTarget1 = graph.addVertex(T.label, "route-target", T.id, "12", "aai-node-type", + "route-target", "global-route-target", "111"); GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, gnvf1, vserver);//false - rules.addEdge(g, gnvf1, config1);//false - rules.addTreeEdge(g, vserver, linter1);//true - rules.addTreeEdge(g, linter1, linter2);//true - rules.addTreeEdge(g, linter2, vlan1);//true - rules.addEdge(g, config1, l3network1 );//false - rules.addTreeEdge(g, l3network1, subnet1);//true - rules.addEdge(g, subnet1, l3inter1ipv4addresslist );//false - rules.addEdge(g, subnet1, l3inter1ipv6addresslist );//false - rules.addEdge(g, l3network1, configVpnBinding );//false - rules.addEdge(g, configVpnBinding, customer );//false - rules.addTreeEdge(g, configVpnBinding, routeTarget1);//true - + rules.addEdge(g, gnvf1, vserver);// false + rules.addEdge(g, gnvf1, config1);// false + rules.addTreeEdge(g, vserver, linter1);// true + rules.addTreeEdge(g, linter1, linter2);// true + rules.addTreeEdge(g, linter2, vlan1);// true + rules.addEdge(g, config1, l3network1);// false + rules.addTreeEdge(g, l3network1, subnet1);// true + rules.addEdge(g, subnet1, l3inter1ipv4addresslist);// false + rules.addEdge(g, subnet1, l3inter1ipv6addresslist);// false + rules.addEdge(g, l3network1, configVpnBinding);// false + rules.addEdge(g, configVpnBinding, customer);// false + rules.addTreeEdge(g, configVpnBinding, routeTarget1);// true expectedResult.add(vserver); expectedResult.add(config1); @@ -98,13 +113,15 @@ public class GetVNFVpnBondingServiceDetailsTest extends QueryTest { @Override protected String getQueryName() { - return "getVNFVpnBondingServiceDetails"; + return "getVNFVpnBondingServiceDetails"; } + @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { g.has("vnf-name", "vnf-name-1"); } + @Override protected void addParam(Map<String, Object> params) { params.put("vnf-name", "vnf-name-1"); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVnfVlanByCircuitIdTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVnfVlanByCircuitIdTest.java index 74e4875..861ce57 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVnfVlanByCircuitIdTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVnfVlanByCircuitIdTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,64 +26,74 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetVnfVlanByCircuitIdTest extends QueryTest { - public GetVnfVlanByCircuitIdTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //Set up the test graph - Vertex logicallink1 = graph.addVertex(T.label, "logical-link", T.id, "1", "aai-node-type", "logical-link", "link-name", "linkName1", "link-type", "linkType1", "circuit-id", "circuitId1"); - Vertex logicallink2 = graph.addVertex(T.label, "logical-link", T.id, "2", "aai-node-type", "logical-link", "link-name", "linkName2", "link-type", "linkType2", "circuit-id", "circuitId2"); - - Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "3", "aai-node-type", "vlan", "vlan-interface", "vlanInterface1"); - Vertex vlan2 = graph.addVertex(T.label, "vlan", T.id, "4", "aai-node-type", "vlan", "vlan-interface", "vlanInterface2"); - - Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", "l-interface", "interface-name", "interfaceName1"); - Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "6", "aai-node-type", "l-interface", "interface-name", "interfaceName2"); - - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", "generic-vnf", "vnf-id", "vnfId1", "vnf-type", "vnfType1"); - Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", "generic-vnf", "vnf-id", "vnfId2", "vnf-type", "vnfType2"); - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, logicallink1, vlan1); - rules.addTreeEdge(g, vlan1, linterface1); - rules.addTreeEdge(g, linterface1, genericvnf1); - - rules.addEdge(g, logicallink2, vlan2);//false - rules.addTreeEdge(g, vlan2, linterface2);//false - rules.addTreeEdge(g, linterface2, genericvnf2);//false - - expectedResult.add(logicallink1); - expectedResult.add(vlan1); - expectedResult.add(linterface1); - expectedResult.add(genericvnf1); - - } - - @Override - protected String getQueryName() { - return "getVnfVlanByCircuitId"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("link-name","linkName1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - params.put("circuit-id","circuitId1"); - } -}
\ No newline at end of file + public GetVnfVlanByCircuitIdTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // Set up the test graph + Vertex logicallink1 = + graph.addVertex(T.label, "logical-link", T.id, "1", "aai-node-type", "logical-link", + "link-name", "linkName1", "link-type", "linkType1", "circuit-id", "circuitId1"); + Vertex logicallink2 = + graph.addVertex(T.label, "logical-link", T.id, "2", "aai-node-type", "logical-link", + "link-name", "linkName2", "link-type", "linkType2", "circuit-id", "circuitId2"); + + Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "3", "aai-node-type", "vlan", + "vlan-interface", "vlanInterface1"); + Vertex vlan2 = graph.addVertex(T.label, "vlan", T.id, "4", "aai-node-type", "vlan", + "vlan-interface", "vlanInterface2"); + + Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", + "l-interface", "interface-name", "interfaceName1"); + Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "6", "aai-node-type", + "l-interface", "interface-name", "interfaceName2"); + + Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", + "generic-vnf", "vnf-id", "vnfId1", "vnf-type", "vnfType1"); + Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", + "generic-vnf", "vnf-id", "vnfId2", "vnf-type", "vnfType2"); + + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, logicallink1, vlan1); + rules.addTreeEdge(g, vlan1, linterface1); + rules.addTreeEdge(g, linterface1, genericvnf1); + + rules.addEdge(g, logicallink2, vlan2);// false + rules.addTreeEdge(g, vlan2, linterface2);// false + rules.addTreeEdge(g, linterface2, genericvnf2);// false + + expectedResult.add(logicallink1); + expectedResult.add(vlan1); + expectedResult.add(linterface1); + expectedResult.add(genericvnf1); + + } + + @Override + protected String getQueryName() { + return "getVnfVlanByCircuitId"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("link-name", "linkName1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("circuit-id", "circuitId1"); + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVserverDetailTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVserverDetailTest.java index 094439b..c6b9239 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVserverDetailTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetVserverDetailTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -32,91 +32,120 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetVserverDetailTest extends QueryTest { - public GetVserverDetailTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException { - //set up test graph - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserverid0"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "2", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName0"); - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0"); - Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "5", "aai-node-type", "vf-module", "vf-module-id", "vfmoduleid0"); - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "6", "aai-node-type", "service-instance", "service-intsance-id", "serviceinstanceid0"); - Vertex modelver0 = graph.addVertex(T.label, "model-ver", T.id, "7", "aai-node-type", "model-ver", "model-version-id", "modelversionid0"); - Vertex modelver1 = graph.addVertex(T.label, "model-ver", T.id, "8", "aai-node-type", "model-ver", "model-version-id", "modelversionid1"); - Vertex modelver2 = graph.addVertex(T.label, "model-ver", T.id, "9", "aai-node-type", "model-ver", "model-version-id", "modelversionid2"); - Vertex model0 = graph.addVertex(T.label, "model", T.id, "10", "aai-node-type", "model", "model-invariant-id", "modelinvariantid0"); - Vertex model1 = graph.addVertex(T.label, "model", T.id, "11", "aai-node-type", "model", "model-invariant-id", "modelinvariantid1"); - Vertex model2 = graph.addVertex(T.label, "model", T.id, "12", "aai-node-type", "model", "model-invariant-id", "modelinvariantid2"); - - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "13", "aai-node-type", "vserver", "vserver-id", "vserverid1"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "14", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "15", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName0"); - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "16", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0"); - Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "17", "aai-node-type", "vf-module", "vf-module-id", "vfmoduleid0"); - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "18", "aai-node-type", "service-instance", "service-intsance-id", "serviceinstanceid0"); - Vertex modelver3 = graph.addVertex(T.label, "model-ver", T.id, "19", "aai-node-type", "model-ver", "model-version-id", "modelversionid0"); - Vertex modelver4 = graph.addVertex(T.label, "model-ver", T.id, "20", "aai-node-type", "model-ver", "model-version-id", "modelversionid1"); - Vertex modelver5 = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver", "model-version-id", "modelversionid2"); - Vertex model3 = graph.addVertex(T.label, "model", T.id, "22", "aai-node-type", "model", "model-invariant-id", "modelinvariantid0"); - Vertex model4 = graph.addVertex(T.label, "model", T.id, "23", "aai-node-type", "model", "model-invariant-id", "modelinvariantid1"); - Vertex model5 = graph.addVertex(T.label, "model", T.id, "24", "aai-node-type", "model", "model-invariant-id", "modelinvariantid2"); - GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(g, vserver, tenant); - rules.addTreeEdge(g, tenant, cloudregion); - rules.addEdge(g, vserver, genericvnf); - rules.addPrivateEdge(g, genericvnf, modelver0, null); - rules.addTreeEdge(g, modelver0, model0); - rules.addTreeEdge(g, genericvnf, vfmodule); - rules.addPrivateEdge(g, vfmodule, modelver1, null); - rules.addTreeEdge(g, modelver1, model1); - rules.addEdge(g, genericvnf, serviceinstance); - rules.addPrivateEdge(g, serviceinstance, modelver2, null); - rules.addTreeEdge(g, modelver2, model2); - - rules.addTreeEdge(g, vserver1, tenant1);//false - rules.addTreeEdge(g, tenant1, cloudregion1);//false - rules.addEdge(g, vserver1, genericvnf1);//false - rules.addPrivateEdge(g, genericvnf1, modelver3, null);//false - rules.addTreeEdge(g, modelver3, model3);//false - rules.addTreeEdge(g, genericvnf1, vfmodule1);//false - rules.addPrivateEdge(g, vfmodule1, modelver4, null);//false - rules.addTreeEdge(g, modelver4, model4);//false - rules.addEdge(g, genericvnf1, serviceinstance1); - rules.addPrivateEdge(g, serviceinstance1, modelver5, null);//false - rules.addTreeEdge(g, modelver5, model5);//false - - expectedResult.add(vserver); - expectedResult.add(tenant); - expectedResult.add(cloudregion); - expectedResult.add(genericvnf); - expectedResult.add(modelver0); - expectedResult.add(model0); - expectedResult.add(vfmodule); - expectedResult.add(modelver1); - expectedResult.add(model1); - expectedResult.add(serviceinstance); - expectedResult.add(modelver2); - expectedResult.add(model2); - } - @Override - protected String getQueryName() { - return "getVserverDetail"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "vserver").has("vserver-id", "vserverid0"); - } + public GetVserverDetailTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } -}
\ No newline at end of file + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException, + EdgeRuleNotFoundException, AmbiguousRuleChoiceException { + // set up test graph + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserverid0"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "2", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName0"); + Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid0"); + Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "5", "aai-node-type", + "vf-module", "vf-module-id", "vfmoduleid0"); + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "6", + "aai-node-type", "service-instance", "service-intsance-id", "serviceinstanceid0"); + Vertex modelver0 = graph.addVertex(T.label, "model-ver", T.id, "7", "aai-node-type", + "model-ver", "model-version-id", "modelversionid0"); + Vertex modelver1 = graph.addVertex(T.label, "model-ver", T.id, "8", "aai-node-type", + "model-ver", "model-version-id", "modelversionid1"); + Vertex modelver2 = graph.addVertex(T.label, "model-ver", T.id, "9", "aai-node-type", + "model-ver", "model-version-id", "modelversionid2"); + Vertex model0 = graph.addVertex(T.label, "model", T.id, "10", "aai-node-type", "model", + "model-invariant-id", "modelinvariantid0"); + Vertex model1 = graph.addVertex(T.label, "model", T.id, "11", "aai-node-type", "model", + "model-invariant-id", "modelinvariantid1"); + Vertex model2 = graph.addVertex(T.label, "model", T.id, "12", "aai-node-type", "model", + "model-invariant-id", "modelinvariantid2"); + + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "13", "aai-node-type", + "vserver", "vserver-id", "vserverid1"); + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "14", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "15", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName0"); + Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "16", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid0"); + Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "17", "aai-node-type", + "vf-module", "vf-module-id", "vfmoduleid0"); + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "18", + "aai-node-type", "service-instance", "service-intsance-id", "serviceinstanceid0"); + Vertex modelver3 = graph.addVertex(T.label, "model-ver", T.id, "19", "aai-node-type", + "model-ver", "model-version-id", "modelversionid0"); + Vertex modelver4 = graph.addVertex(T.label, "model-ver", T.id, "20", "aai-node-type", + "model-ver", "model-version-id", "modelversionid1"); + Vertex modelver5 = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", + "model-ver", "model-version-id", "modelversionid2"); + Vertex model3 = graph.addVertex(T.label, "model", T.id, "22", "aai-node-type", "model", + "model-invariant-id", "modelinvariantid0"); + Vertex model4 = graph.addVertex(T.label, "model", T.id, "23", "aai-node-type", "model", + "model-invariant-id", "modelinvariantid1"); + Vertex model5 = graph.addVertex(T.label, "model", T.id, "24", "aai-node-type", "model", + "model-invariant-id", "modelinvariantid2"); + GraphTraversalSource g = graph.traversal(); + + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addEdge(g, vserver, genericvnf); + rules.addPrivateEdge(g, genericvnf, modelver0, null); + rules.addTreeEdge(g, modelver0, model0); + rules.addTreeEdge(g, genericvnf, vfmodule); + rules.addPrivateEdge(g, vfmodule, modelver1, null); + rules.addTreeEdge(g, modelver1, model1); + rules.addEdge(g, genericvnf, serviceinstance); + rules.addPrivateEdge(g, serviceinstance, modelver2, null); + rules.addTreeEdge(g, modelver2, model2); + + rules.addTreeEdge(g, vserver1, tenant1);// false + rules.addTreeEdge(g, tenant1, cloudregion1);// false + rules.addEdge(g, vserver1, genericvnf1);// false + rules.addPrivateEdge(g, genericvnf1, modelver3, null);// false + rules.addTreeEdge(g, modelver3, model3);// false + rules.addTreeEdge(g, genericvnf1, vfmodule1);// false + rules.addPrivateEdge(g, vfmodule1, modelver4, null);// false + rules.addTreeEdge(g, modelver4, model4);// false + rules.addEdge(g, genericvnf1, serviceinstance1); + rules.addPrivateEdge(g, serviceinstance1, modelver5, null);// false + rules.addTreeEdge(g, modelver5, model5);// false + + expectedResult.add(vserver); + expectedResult.add(tenant); + expectedResult.add(cloudregion); + expectedResult.add(genericvnf); + expectedResult.add(modelver0); + expectedResult.add(model0); + expectedResult.add(vfmodule); + expectedResult.add(modelver1); + expectedResult.add(model1); + expectedResult.add(serviceinstance); + expectedResult.add(modelver2); + expectedResult.add(model2); + } + + @Override + protected String getQueryName() { + return "getVserverDetail"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "vserver").has("vserver-id", "vserverid0"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetWlBundleIdQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetWlBundleIdQueryTest.java index 2831315..f2b0a2e 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetWlBundleIdQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetWlBundleIdQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,71 +30,83 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GetWlBundleIdQueryTest extends QueryTest { - public GetWlBundleIdQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public GetWlBundleIdQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - - Vertex lagLink = graph.addVertex(T.label, "lag-link", T.id, "1", "aai-node-type", "lag-link", "lag-link-id", "lag-link-id-1","link-name", "link-name-1"); - Vertex logicalLink = graph.addVertex(T.label, "logical-link", T.id, "2", "aai-node-type", "logical-link", "logical-link-id", "logical-link-id-1"); - Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "3", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1"); - Vertex serviceSubcription = graph.addVertex(T.label, "service-subscription", T.id, "4", "aai-node-type", "service-subscription", "service-subscription-id", "service-subscription-id-1"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "5", "aai-node-type", "customer", "customer-id", "customer-id-1"); - Vertex logicalLink1 = graph.addVertex(T.label, "logical-link", T.id, "6", "aai-node-type", "logical-link", "logical-link-id", "logical-link-id-2"); - - Vertex lagLink1 = graph.addVertex(T.label, "lag-link", T.id, "7", "aai-node-type", "lag-link", "lag-link-id", "lag-link-id-2","link-name", "link-name-2"); - Vertex logicalLink2 = graph.addVertex(T.label, "logical-link", T.id, "8", "aai-node-type", "logical-link", "logical-link-id", "logical-link-id-3"); - Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "9", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2"); - Vertex serviceSubcription1 = graph.addVertex(T.label, "service-subscription", T.id, "10", "aai-node-type", "service-subscription", "service-subscription-id", "service-subscription-id-2"); - Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "11", "aai-node-type", "customer", "customer-id", "customer-id-2"); - Vertex logicalLink3 = graph.addVertex(T.label, "logical-link", T.id, "12", "aai-node-type", "logical-link", "logical-link-id", "logical-link-id-4"); - - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, lagLink, logicalLink); - rules.addEdge(g, logicalLink, serviceInstance); - rules.addTreeEdge(g, serviceInstance,serviceSubcription); - rules.addTreeEdge(g, serviceSubcription,customer); - rules.addEdge(g, logicalLink, logicalLink1); - - //Not expected in result - rules.addEdge(g, lagLink1, logicalLink2); - rules.addEdge(g, logicalLink2, serviceInstance1); - rules.addTreeEdge(g, serviceInstance1,serviceSubcription1); - rules.addTreeEdge(g, serviceSubcription1,customer1); - rules.addEdge(g, logicalLink2, logicalLink3); - //Not expected in result - - expectedResult.add(lagLink); - expectedResult.add(logicalLink); - expectedResult.add(serviceInstance); - expectedResult.add(serviceSubcription); - expectedResult.add(customer); - expectedResult.add(logicalLink1); - - - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - @Override - protected String getQueryName() { - return "getWlBundleId"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "lag-link").has("link-name", "link-name-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + Vertex lagLink = graph.addVertex(T.label, "lag-link", T.id, "1", "aai-node-type", + "lag-link", "lag-link-id", "lag-link-id-1", "link-name", "link-name-1"); + Vertex logicalLink = graph.addVertex(T.label, "logical-link", T.id, "2", "aai-node-type", + "logical-link", "logical-link-id", "logical-link-id-1"); + Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "3", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1"); + Vertex serviceSubcription = + graph.addVertex(T.label, "service-subscription", T.id, "4", "aai-node-type", + "service-subscription", "service-subscription-id", "service-subscription-id-1"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "5", "aai-node-type", + "customer", "customer-id", "customer-id-1"); + Vertex logicalLink1 = graph.addVertex(T.label, "logical-link", T.id, "6", "aai-node-type", + "logical-link", "logical-link-id", "logical-link-id-2"); + + Vertex lagLink1 = graph.addVertex(T.label, "lag-link", T.id, "7", "aai-node-type", + "lag-link", "lag-link-id", "lag-link-id-2", "link-name", "link-name-2"); + Vertex logicalLink2 = graph.addVertex(T.label, "logical-link", T.id, "8", "aai-node-type", + "logical-link", "logical-link-id", "logical-link-id-3"); + Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "9", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2"); + Vertex serviceSubcription1 = + graph.addVertex(T.label, "service-subscription", T.id, "10", "aai-node-type", + "service-subscription", "service-subscription-id", "service-subscription-id-2"); + Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "11", "aai-node-type", + "customer", "customer-id", "customer-id-2"); + Vertex logicalLink3 = graph.addVertex(T.label, "logical-link", T.id, "12", "aai-node-type", + "logical-link", "logical-link-id", "logical-link-id-4"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, lagLink, logicalLink); + rules.addEdge(g, logicalLink, serviceInstance); + rules.addTreeEdge(g, serviceInstance, serviceSubcription); + rules.addTreeEdge(g, serviceSubcription, customer); + rules.addEdge(g, logicalLink, logicalLink1); + + // Not expected in result + rules.addEdge(g, lagLink1, logicalLink2); + rules.addEdge(g, logicalLink2, serviceInstance1); + rules.addTreeEdge(g, serviceInstance1, serviceSubcription1); + rules.addTreeEdge(g, serviceSubcription1, customer1); + rules.addEdge(g, logicalLink2, logicalLink3); + // Not expected in result + + expectedResult.add(lagLink); + expectedResult.add(logicalLink); + expectedResult.add(serviceInstance); + expectedResult.add(serviceSubcription); + expectedResult.add(customer); + expectedResult.add(logicalLink1); + + } + + @Override + protected String getQueryName() { + return "getWlBundleId"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "lag-link").has("link-name", "link-name-1"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GfpVserverDataQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GfpVserverDataQueryTest.java index 8724785..49f41f5 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GfpVserverDataQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GfpVserverDataQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,58 +26,72 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GfpVserverDataQueryTest extends QueryTest { - public GfpVserverDataQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //set up test graph - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0", "nf-type", "sample-nf-type"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "2", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserverid0"); - Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "4", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "5", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-0"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "8", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-0"); - Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "9", "aai-node-type", "vlan", "vlan-interface", "vlan-interface0"); - Vertex sriovVf = graph.addVertex(T.label, "sriov-vf", T.id, "10", "aai-node-type", "sriov-vf", "pci-id", "pci-id0"); - - GraphTraversalSource g = graph.traversal(); - - - rules.addTreeEdge(g, tenant, cloudregion); - rules.addTreeEdge(g, vserver, tenant); - rules.addEdge(g, genericvnf, vserver); - rules.addTreeEdge(g, linterface, vserver); - rules.addTreeEdge(g, l3inter1ipv4addresslist, linterface); + public GfpVserverDataQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // set up test graph + Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid0", "nf-type", "sample-nf-type"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "2", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserverid0"); + Vertex linterface = + graph.addVertex(T.label, "l-interface", T.id, "4", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "5", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-0"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "8", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-0"); + Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "9", "aai-node-type", "vlan", + "vlan-interface", "vlan-interface0"); + Vertex sriovVf = graph.addVertex(T.label, "sriov-vf", T.id, "10", "aai-node-type", + "sriov-vf", "pci-id", "pci-id0"); + + GraphTraversalSource g = graph.traversal(); + + rules.addTreeEdge(g, tenant, cloudregion); + rules.addTreeEdge(g, vserver, tenant); + rules.addEdge(g, genericvnf, vserver); + rules.addTreeEdge(g, linterface, vserver); + rules.addTreeEdge(g, l3inter1ipv4addresslist, linterface); rules.addTreeEdge(g, l3inter1ipv6addresslist, linterface); rules.addTreeEdge(g, vlan, linterface); rules.addTreeEdge(g, sriovVf, linterface); - - expectedResult.add(l3inter1ipv4addresslist); - expectedResult.add(l3inter1ipv6addresslist); - expectedResult.add(vlan); - } - @Override - protected String getQueryName() { - return "gfp-vserver-data"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "vserver"); - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } -}
\ No newline at end of file + expectedResult.add(l3inter1ipv4addresslist); + expectedResult.add(l3inter1ipv6addresslist); + expectedResult.add(vlan); + } + + @Override + protected String getQueryName() { + return "gfp-vserver-data"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "vserver"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GfpVserverQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GfpVserverQueryTest.java index 286319f..e287f40 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GfpVserverQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GfpVserverQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,44 +26,52 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class GfpVserverQueryTest extends QueryTest { - public GfpVserverQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //set up test graph - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "2", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserverid0"); - Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "4", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); - GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(g, tenant, cloudregion); - rules.addTreeEdge(g, vserver, tenant); - rules.addTreeEdge(g, linterface, vserver); - - expectedResult.add(vserver); - } - @Override - protected String getQueryName() { - return "gfp-vserver"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "vserver"); - } + public GfpVserverQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // set up test graph + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "2", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserverid0"); + Vertex linterface = + graph.addVertex(T.label, "l-interface", T.id, "4", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); + GraphTraversalSource g = graph.traversal(); + + rules.addTreeEdge(g, tenant, cloudregion); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, linterface, vserver); + + expectedResult.add(vserver); + } + + @Override + protected String getQueryName() { + return "gfp-vserver"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "vserver"); + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } -}
\ No newline at end of file + @Override + protected void addParam(Map<String, Object> params) { + return; + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GroovyShellImplTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GroovyShellImplTest.java index b489a83..b7291d6 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GroovyShellImplTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GroovyShellImplTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,17 @@ */ package org.onap.aai.rest.search; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import groovy.lang.MissingPropertyException; + +import java.net.URI; +import java.util.*; + +import javax.ws.rs.core.*; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Before; @@ -33,17 +43,9 @@ import org.onap.aai.serialization.engines.QueryStyle; import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.setup.SchemaVersion; -import javax.ws.rs.core.*; -import java.net.URI; -import java.util.*; +public class GroovyShellImplTest extends AAISetup { -import static org.mockito.Matchers.anyObject; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class GroovyShellImplTest extends AAISetup{ - - GroovyShellImpl groovyShellImpl ; + GroovyShellImpl groovyShellImpl; protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json"); @@ -78,11 +80,11 @@ public class GroovyShellImplTest extends AAISetup{ public void setup() { version = schemaVersions.getDefaultVersion(); - httpHeaders = mock(HttpHeaders.class); - uriInfo = mock(UriInfo.class); + httpHeaders = mock(HttpHeaders.class); + uriInfo = mock(UriInfo.class); - headersMultiMap = new MultivaluedHashMap<>(); - queryParameters = Mockito.spy(new MultivaluedHashMap<>()); + headersMultiMap = new MultivaluedHashMap<>(); + queryParameters = Mockito.spy(new MultivaluedHashMap<>()); headersMultiMap.add("X-FromAppId", "JUNIT"); headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString()); @@ -103,19 +105,18 @@ public class GroovyShellImplTest extends AAISetup{ when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList); - when(uriInfo.getQueryParameters()).thenReturn(queryParameters); when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters); - // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable + // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very + // unreasonable Mockito.doReturn(null).when(queryParameters).remove(anyObject()); when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON); loader = loaderFactory.createLoaderForVersion(introspectorFactoryType, version); - dbEngine = new JanusGraphDBEngine( - queryStyle, - loader); - GenericQueryProcessor.Builder builder = new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton); + dbEngine = new JanusGraphDBEngine(queryStyle, loader); + GenericQueryProcessor.Builder builder = + new GenericQueryProcessor.Builder(dbEngine, gremlinServerSingleton); builder.queryFrom(URI.create("te")); builder.queryFrom("te", "gremlin"); builder.create(); @@ -130,7 +131,8 @@ public class GroovyShellImplTest extends AAISetup{ GraphTraversal<Vertex, Vertex> g = Mockito.mock(GraphTraversal.class); g.has("cloud-region-id", "cloud-region-id-1"); Map<String, Object> params = new HashMap<>(); - groovyShellImpl.runQuery("vnfs-fromServiceInstance", params, dbEngine.asAdmin().getTraversalSource()); + groovyShellImpl.runQuery("vnfs-fromServiceInstance", params, + dbEngine.asAdmin().getTraversalSource()); } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/ImageFromCloudRegionNfTypeTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/ImageFromCloudRegionNfTypeTest.java index 04f4433..7ea2678 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/ImageFromCloudRegionNfTypeTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/ImageFromCloudRegionNfTypeTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,78 +31,99 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class ImageFromCloudRegionNfTypeTest extends QueryTest { - public ImageFromCloudRegionNfTypeTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "10", "aai-node-type", "cloud-region", "cloud-region-id", "cloudreg1", "cloud-region-owner", "cloudOwnername00"); - Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "11", "aai-node-type", "cloud-region", "cloud-region-id", "cloudregWrong", "cloud-region-owner", "cloudOwnername01"); - - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf", "vnf-id", "genvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); - Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "21", "aai-node-type", "generic-vnf", "vnf-id", "genvnf2", "vnf-name", "genvnfname2", "nf-type", "wrong-nf-type"); - Vertex genericvnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "22", "aai-node-type", "generic-vnf", "vnf-id", "genvnf3", "vnf-name", "genvnfname3", "nf-type", "sample-nf-type"); - - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "30", "aai-node-type", "tenant", "tenant-id", "tenantid01", "tenant-name", "tenantName01"); - Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "31", "aai-node-type", "tenant", "tenant-id", "tenantid02", "tenant-name", "tenantName02"); - - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "40", "aai-node-type", "vserver", "vserver-id", "vserverid01"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "41", "aai-node-type", "vserver", "vserver-id", "vserverid02"); - Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "42", "aai-node-type", "vserver", "vserver-id", "vserverid03"); - Vertex vserver4 = graph.addVertex(T.label, "vserver", T.id, "43", "aai-node-type", "vserver", "vserver-id", "vserverid04"); - Vertex vserver5 = graph.addVertex(T.label, "vserver", T.id, "44", "aai-node-type", "vserver", "vserver-id", "vserverid05"); - - Vertex image1 = graph.addVertex(T.label, "image", T.id, "50", "aai-node-type", "image", - "image-id", "image1", "image-name", "imageName1", "image-os-distro", "boopOS", "image-os-version", "1.0", "image-selflink", "self/link"); - Vertex image2 = graph.addVertex(T.label, "image", T.id, "51", "aai-node-type", "image", - "image-id", "image2", "image-name", "imageName2", "image-os-distro", "beepOS", "image-os-version", "1.0", "image-selflink", "self/link"); - Vertex image3 = graph.addVertex(T.label, "image", T.id, "52", "aai-node-type", "image", - "image-id", "image3", "image-name", "imageName3", "image-os-distro", "beepOS", "image-os-version", "1.1", "image-selflink", "self/link"); - Vertex image4 = graph.addVertex(T.label, "image", T.id, "53", "aai-node-type", "image", - "image-id", "image4", "image-name", "imageName4", "image-os-distro", "beepOS", "image-os-version", "1.1", "image-selflink", "self/link"); - - GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(g, cloudregion1, tenant1); - rules.addTreeEdge(g, cloudregion2, tenant2); - rules.addTreeEdge(g, tenant1, vserver1); - rules.addTreeEdge(g, tenant1, vserver2); - rules.addTreeEdge(g, tenant2, vserver3); - rules.addTreeEdge(g, tenant1, vserver4); - rules.addTreeEdge(g, tenant1, vserver5); - rules.addEdge(g, vserver1, image1); - rules.addEdge(g, vserver2, image2); - rules.addEdge(g, vserver3, image3); - rules.addEdge(g, vserver4, image4); - rules.addEdge(g, vserver5, image1); - rules.addEdge(g, genericvnf1, vserver1); - rules.addEdge(g, genericvnf2, vserver2); - rules.addEdge(g, genericvnf1, vserver3); - rules.addEdge(g, genericvnf3, vserver4); - - expectedResult.add(image1); - expectedResult.add(image4); - } - - @Override - protected String getQueryName() { - return "images-fromCloudRegionNfType"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type","cloud-region").has("cloud-region-id","cloudreg1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - params.put("nfType", "sample-nf-type"); - } + public ImageFromCloudRegionNfTypeTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex cloudregion1 = + graph.addVertex(T.label, "cloud-region", T.id, "10", "aai-node-type", "cloud-region", + "cloud-region-id", "cloudreg1", "cloud-region-owner", "cloudOwnername00"); + Vertex cloudregion2 = + graph.addVertex(T.label, "cloud-region", T.id, "11", "aai-node-type", "cloud-region", + "cloud-region-id", "cloudregWrong", "cloud-region-owner", "cloudOwnername01"); + + Vertex genericvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf", + "vnf-id", "genvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); + Vertex genericvnf2 = + graph.addVertex(T.label, "generic-vnf", T.id, "21", "aai-node-type", "generic-vnf", + "vnf-id", "genvnf2", "vnf-name", "genvnfname2", "nf-type", "wrong-nf-type"); + Vertex genericvnf3 = + graph.addVertex(T.label, "generic-vnf", T.id, "22", "aai-node-type", "generic-vnf", + "vnf-id", "genvnf3", "vnf-name", "genvnfname3", "nf-type", "sample-nf-type"); + + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "30", "aai-node-type", "tenant", + "tenant-id", "tenantid01", "tenant-name", "tenantName01"); + Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "31", "aai-node-type", "tenant", + "tenant-id", "tenantid02", "tenant-name", "tenantName02"); + + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "40", "aai-node-type", + "vserver", "vserver-id", "vserverid01"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "41", "aai-node-type", + "vserver", "vserver-id", "vserverid02"); + Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "42", "aai-node-type", + "vserver", "vserver-id", "vserverid03"); + Vertex vserver4 = graph.addVertex(T.label, "vserver", T.id, "43", "aai-node-type", + "vserver", "vserver-id", "vserverid04"); + Vertex vserver5 = graph.addVertex(T.label, "vserver", T.id, "44", "aai-node-type", + "vserver", "vserver-id", "vserverid05"); + + Vertex image1 = graph.addVertex(T.label, "image", T.id, "50", "aai-node-type", "image", + "image-id", "image1", "image-name", "imageName1", "image-os-distro", "boopOS", + "image-os-version", "1.0", "image-selflink", "self/link"); + Vertex image2 = graph.addVertex(T.label, "image", T.id, "51", "aai-node-type", "image", + "image-id", "image2", "image-name", "imageName2", "image-os-distro", "beepOS", + "image-os-version", "1.0", "image-selflink", "self/link"); + Vertex image3 = graph.addVertex(T.label, "image", T.id, "52", "aai-node-type", "image", + "image-id", "image3", "image-name", "imageName3", "image-os-distro", "beepOS", + "image-os-version", "1.1", "image-selflink", "self/link"); + Vertex image4 = graph.addVertex(T.label, "image", T.id, "53", "aai-node-type", "image", + "image-id", "image4", "image-name", "imageName4", "image-os-distro", "beepOS", + "image-os-version", "1.1", "image-selflink", "self/link"); + + GraphTraversalSource g = graph.traversal(); + + rules.addTreeEdge(g, cloudregion1, tenant1); + rules.addTreeEdge(g, cloudregion2, tenant2); + rules.addTreeEdge(g, tenant1, vserver1); + rules.addTreeEdge(g, tenant1, vserver2); + rules.addTreeEdge(g, tenant2, vserver3); + rules.addTreeEdge(g, tenant1, vserver4); + rules.addTreeEdge(g, tenant1, vserver5); + rules.addEdge(g, vserver1, image1); + rules.addEdge(g, vserver2, image2); + rules.addEdge(g, vserver3, image3); + rules.addEdge(g, vserver4, image4); + rules.addEdge(g, vserver5, image1); + rules.addEdge(g, genericvnf1, vserver1); + rules.addEdge(g, genericvnf2, vserver2); + rules.addEdge(g, genericvnf1, vserver3); + rules.addEdge(g, genericvnf3, vserver4); + + expectedResult.add(image1); + expectedResult.add(image4); + } + + @Override + protected String getQueryName() { + return "images-fromCloudRegionNfType"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "cloud-region").has("cloud-region-id", "cloudreg1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("nfType", "sample-nf-type"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/InstanceGroupsByCloudRegionQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/InstanceGroupsByCloudRegionQueryTest.java index 0dbb911..2cf93b7 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/InstanceGroupsByCloudRegionQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/InstanceGroupsByCloudRegionQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,48 +31,60 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class InstanceGroupsByCloudRegionQueryTest extends QueryTest { - public InstanceGroupsByCloudRegionQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public InstanceGroupsByCloudRegionQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void test() { - super.run(); - } + @Test + public void test() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-0", "cloud-region-owner", "cloud-owner-name-0","cloud-region-version","cloud-region-version-0"); - Vertex instancegroup = graph.addVertex(T.label, "instance-group", T.id, "2", "aai-node-type", "instance-group", "id", "id-0", "instance-group-type", "instance-group-type-0","instance-group-role","instance-group-role-0","instance-group-function","instance-group-function-0","instance-group-description","instance-group-description-0"); - - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1","cloud-region-version","cloud-region-version-1"); - Vertex instancegroup1 = graph.addVertex(T.label, "instance-group", T.id, "4", "aai-node-type", "instance-group", "id", "id-1", "instance-group-type", "instance-group-type-1","instance-group-role","instance-group-role-1","instance-group-function","instance-group-function-1","instance-group-description","instance-group-description-1"); + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-0", "cloud-region-owner", + "cloud-owner-name-0", "cloud-region-version", "cloud-region-version-0"); + Vertex instancegroup = + graph.addVertex(T.label, "instance-group", T.id, "2", "aai-node-type", "instance-group", + "id", "id-0", "instance-group-type", "instance-group-type-0", "instance-group-role", + "instance-group-role-0", "instance-group-function", "instance-group-function-0", + "instance-group-description", "instance-group-description-0"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, cloudregion, instancegroup); - - rules.addEdge(g, cloudregion1, instancegroup1); //false - - expectedResult.add(instancegroup); - } + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", + "cloud-owner-name-1", "cloud-region-version", "cloud-region-version-1"); + Vertex instancegroup1 = + graph.addVertex(T.label, "instance-group", T.id, "4", "aai-node-type", "instance-group", + "id", "id-1", "instance-group-type", "instance-group-type-1", "instance-group-role", + "instance-group-role-1", "instance-group-function", "instance-group-function-1", + "instance-group-description", "instance-group-description-1"); - @Override - protected String getQueryName() { - return "instance-groups-byCloudRegion"; - } + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, cloudregion, instancegroup); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "cloud-region").has("cloud-region-owner", "cloud-owner-name-0").has("cloud-region-id", "cloud-region-id-0"); - } + rules.addEdge(g, cloudregion1, instancegroup1); // false - @Override - protected void addParam(Map<String, Object> params) { - params.put("role", "instance-group-role-0"); - params.put("type", "instance-group-type-0"); - params.put("function", "instance-group-function-0"); - } + expectedResult.add(instancegroup); + } + + @Override + protected String getQueryName() { + return "instance-groups-byCloudRegion"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "cloud-region").has("cloud-region-owner", "cloud-owner-name-0") + .has("cloud-region-id", "cloud-region-id-0"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("role", "instance-group-role-0"); + params.put("type", "instance-group-type-0"); + params.put("function", "instance-group-function-0"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/IpsNetworksFromVnfTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/IpsNetworksFromVnfTest.java index 0d26300..c9c76e6 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/IpsNetworksFromVnfTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/IpsNetworksFromVnfTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -25,177 +25,223 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.junit.Test; import org.junit.Ignore; +import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class IpsNetworksFromVnfTest extends QueryTest { - public IpsNetworksFromVnfTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Ignore - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex genericVnf = graph.addVertex(T.label, "generic-vnf",T.id, "0", "aai-node-type", "generic-vnf", "generic-vnf-id", "serviceinstanceid0"); - Vertex vnfc = graph.addVertex(T.label, "vnfc",T.id, "1", "aai-node-type", "vnfc","vnfc-id", "vnfcId1"); - Vertex cp = graph.addVertex(T.label, "cp",T.id, "30", "aai-node-type", "cp","cp-id", "cpId1"); - Vertex vipIpv4AddressList = graph.addVertex(T.label, "vip-ipv4-address-list",T.id, "2", "aai-node-type", "vip-ipv4-address-list","vip-ipv4-address-list-id", "vip-ipv4-address-listId2"); - Vertex vipIpv6AddressList = graph.addVertex(T.label, "vip-ipv6-address-list",T.id, "3", "aai-node-type", "vip-ipv6-address-list","vip-ipv6-address-list-id", "vip-ipv6-address-listId3"); - - - Vertex subnetIpv4 = graph.addVertex(T.label, "subnet",T.id, "7", "aai-node-type", "subnet","subnet-id", "subnetId7"); - Vertex l3Network1Ipv4 = graph.addVertex(T.label, "l3-network",T.id, "8", "aai-node-type", "l3-network","l3-network-id", "l3-networkId8"); - - Vertex subnetIpv6 = graph.addVertex(T.label, "subnet",T.id, "10", "aai-node-type", "subnet","subnet-id", "subnetId10"); - Vertex l3Network1Ipv6 = graph.addVertex(T.label, "l3-network",T.id, "11", "aai-node-type", "l3-network","l3-network-id", "l3-networkId11"); - - Vertex vserver = graph.addVertex(T.label, "vserver",T.id, "18", "aai-node-type", "vserver","vserver-id", "vserverId18"); - Vertex linterface = graph.addVertex(T.label, "l-interface",T.id, "19", "aai-node-type", "l-interface","l-interface-id", "l-interfaceId19"); - Vertex pserver = graph.addVertex(T.label, "pserver",T.id, "20", "aai-node-type", "pserver","pserver-id", "pserverId20"); - - - Vertex l3NetworklintIpv4 = graph.addVertex(T.label, "l3-network",T.id, "21", "aai-node-type", "l3-network","l3-network-id", "l3-networkId21"); - Vertex subnetlintIpv4 = graph.addVertex(T.label, "subnet",T.id, "22", "aai-node-type", "subnet","subnet-id", "subnetId22"); - Vertex l3Network1lintIpv4 = graph.addVertex(T.label, "l3-network",T.id, "23", "aai-node-type", "l3-network","l3-network-id", "l3-networkId23"); - - Vertex l3NetworklintIpv6 = graph.addVertex(T.label, "l3-network",T.id, "24", "aai-node-type", "l3-network","l3-network-id", "l3-networkId24"); - Vertex subnetlintIpv6 = graph.addVertex(T.label, "subnet",T.id, "25", "aai-node-type", "subnet","subnet-id", "subnetId25"); - Vertex l3Network1lintIpv6 = graph.addVertex(T.label, "l3-network",T.id, "26", "aai-node-type", "l3-network","l3-network-id", "l3-networkId26"); - - - Vertex l3InterfaceIpv4AddressListLint = graph.addVertex(T.label, "l3-interface-ipv4-address-list",T.id, "27", "aai-node-type", "l3-interface-ipv4-address-list","l3-interface-ipv4-address-list-id", "l3-interface-ipv4-address-listId27"); - Vertex l3InterfaceIpv6AddressListlInt = graph.addVertex(T.label, "l3-interface-ipv6-address-list",T.id, "28", "aai-node-type", "l3-interface-ipv6-address-list","l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-listId28"); - - - Vertex complex = graph.addVertex(T.label, "complex",T.id, "29", "aai-node-type", "complex","complex-id", "complexId29"); - - - - Vertex genericVnf1 = graph.addVertex(T.label, "generic-vnf",T.id, "31", "aai-node-type", "generic-vnf", "generic-vnf-id", "serviceinstanceid1"); - Vertex vnfc1 = graph.addVertex(T.label, "vnfc",T.id, "32", "aai-node-type", "vnfc","vnfc-id", "vnfcId2"); - Vertex cp1 = graph.addVertex(T.label, "cp",T.id, "33", "aai-node-type", "cp","cp-id", "cpId3"); - Vertex vipIpv4AddressList1 = graph.addVertex(T.label, "vip-ipv4-address-list",T.id, "34", "aai-node-type", "vip-ipv4-address-list","vip-ipv4-address-list-id", "vip-ipv4-address-listId4"); - Vertex vipIpv6AddressList1 = graph.addVertex(T.label, "vip-ipv6-address-list",T.id, "35", "aai-node-type", "vip-ipv6-address-list","vip-ipv6-address-list-id", "vip-ipv6-address-listId5"); - Vertex subnetIpv41 = graph.addVertex(T.label, "subnet",T.id, "36", "aai-node-type", "subnet","subnet-id", "subnetId6"); - Vertex l3Network1Ipv41 = graph.addVertex(T.label, "l3-network",T.id, "37", "aai-node-type", "l3-network","l3-network-id", "l3-networkId7"); - Vertex subnetIpv61 = graph.addVertex(T.label, "subnet",T.id, "38", "aai-node-type", "subnet","subnet-id", "subnetId8"); - Vertex l3Network1Ipv61 = graph.addVertex(T.label, "l3-network",T.id, "39", "aai-node-type", "l3-network","l3-network-id", "l3-networkId9"); - Vertex vserver1 = graph.addVertex(T.label, "vserver",T.id, "40", "aai-node-type", "vserver","vserver-id", "vserverId10"); - Vertex linterface1 = graph.addVertex(T.label, "l-interface",T.id, "41", "aai-node-type", "l-interface","l-interface-id", "l-interfaceId11"); - Vertex pserver1 = graph.addVertex(T.label, "pserver",T.id, "42", "aai-node-type", "pserver","pserver-id", "pserverId12"); - Vertex l3NetworklintIpv41 = graph.addVertex(T.label, "l3-network",T.id, "43", "aai-node-type", "l3-network","l3-network-id", "l3-networkId13"); - Vertex subnetlintIpv41 = graph.addVertex(T.label, "subnet",T.id, "44", "aai-node-type", "subnet","subnet-id", "subnetId14"); - Vertex l3Network1lintIpv41 = graph.addVertex(T.label, "l3-network",T.id, "45", "aai-node-type", "l3-network","l3-network-id", "l3-networkId15"); - Vertex l3NetworklintIpv61 = graph.addVertex(T.label, "l3-network",T.id, "46", "aai-node-type", "l3-network","l3-network-id", "l3-networkId16"); - Vertex subnetlintIpv61 = graph.addVertex(T.label, "subnet",T.id, "47", "aai-node-type", "subnet","subnet-id", "subnetId17"); - Vertex l3Network1lintIpv61 = graph.addVertex(T.label, "l3-network",T.id, "48", "aai-node-type", "l3-network","l3-network-id", "l3-networkId18"); - Vertex l3InterfaceIpv4AddressListLint1 = graph.addVertex(T.label, "l3-interface-ipv4-address-list",T.id, "49", "aai-node-type", "l3-interface-ipv4-address-list","l3-interface-ipv4-address-list-id", "l3-interface-ipv4-address-listId19"); - Vertex l3InterfaceIpv6AddressListlInt1 = graph.addVertex(T.label, "l3-interface-ipv6-address-list",T.id, "50", "aai-node-type", "l3-interface-ipv6-address-list","l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-listId20"); - Vertex complex1 = graph.addVertex(T.label, "complex",T.id, "51", "aai-node-type", "complex","complex-id", "complexId21"); - - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, genericVnf,vnfc); - rules.addTreeEdge(g, vnfc,cp); - rules.addEdge(g, cp,vipIpv4AddressList); - rules.addEdge(g, cp,vipIpv6AddressList); - - rules.addEdge(g, vipIpv4AddressList,subnetIpv4); - rules.addTreeEdge(g, subnetIpv4,l3Network1Ipv4); - - rules.addEdge(g, vipIpv6AddressList,subnetIpv6); - rules.addTreeEdge(g, subnetIpv6,l3Network1Ipv6); - - rules.addEdge(g, genericVnf,vserver); - rules.addEdge(g, vserver,pserver); - - rules.addTreeEdge(g, cp,l3InterfaceIpv4AddressListLint); - rules.addTreeEdge(g, cp,l3InterfaceIpv6AddressListlInt); - - rules.addEdge(g, l3InterfaceIpv4AddressListLint,l3NetworklintIpv4); - rules.addEdge(g, l3InterfaceIpv4AddressListLint,subnetlintIpv4); - rules.addTreeEdge(g, subnetlintIpv4,l3Network1lintIpv4); - - rules.addEdge(g, l3InterfaceIpv6AddressListlInt,l3NetworklintIpv6); - rules.addEdge(g, l3InterfaceIpv6AddressListlInt,subnetlintIpv6); - rules.addTreeEdge(g, subnetlintIpv6,l3Network1lintIpv6); - - rules.addEdge(g, pserver,complex); - - //false - rules.addEdge(g, genericVnf1,vnfc1); - rules.addTreeEdge(g, vnfc1,cp1); - rules.addEdge(g, cp1,vipIpv4AddressList1); - rules.addEdge(g, cp1,vipIpv6AddressList1); - rules.addEdge(g, vipIpv4AddressList1,subnetIpv41); - rules.addTreeEdge(g, subnetIpv41,l3Network1Ipv41); - rules.addEdge(g, vipIpv6AddressList1,subnetIpv61); - rules.addTreeEdge(g, subnetIpv61,l3Network1Ipv61); - rules.addEdge(g, genericVnf1,vserver1); - rules.addEdge(g, vserver1,pserver1); - rules.addTreeEdge(g, cp1,l3InterfaceIpv4AddressListLint1); - rules.addTreeEdge(g, cp1,l3InterfaceIpv6AddressListlInt1); - rules.addEdge(g, l3InterfaceIpv4AddressListLint1,l3NetworklintIpv41); - rules.addEdge(g, l3InterfaceIpv4AddressListLint1,subnetlintIpv41); - rules.addTreeEdge(g, subnetlintIpv41,l3Network1lintIpv41); - rules.addEdge(g, l3InterfaceIpv6AddressListlInt1,l3NetworklintIpv61); - rules.addEdge(g, l3InterfaceIpv6AddressListlInt1,subnetlintIpv61); - rules.addTreeEdge(g, subnetlintIpv61,l3Network1lintIpv61); - rules.addEdge(g, pserver1,complex1); - //false - - expectedResult.add(genericVnf); - expectedResult.add(vnfc); - expectedResult.add(cp); - expectedResult.add(vipIpv4AddressList); - expectedResult.add(vipIpv6AddressList); - - expectedResult.add(subnetIpv4); - expectedResult.add(l3Network1Ipv4); - - expectedResult.add(subnetIpv6); - expectedResult.add(l3Network1Ipv6); - - expectedResult.add(l3InterfaceIpv4AddressListLint); - expectedResult.add(l3InterfaceIpv6AddressListlInt); - - expectedResult.add(l3NetworklintIpv4); - expectedResult.add(subnetlintIpv4); - expectedResult.add(l3Network1lintIpv4); - - expectedResult.add(l3NetworklintIpv6); - expectedResult.add(subnetlintIpv6); - expectedResult.add(l3Network1lintIpv6); - - expectedResult.add(vserver); - expectedResult.add(pserver); - expectedResult.add(complex); - - } - - @Override - protected String getQueryName() { - return "ips-networks-fromVnf"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("generic-vnf-id", "serviceinstanceid0"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } - - + public IpsNetworksFromVnfTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Ignore + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "generic-vnf-id", "serviceinstanceid0"); + Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "1", "aai-node-type", "vnfc", + "vnfc-id", "vnfcId1"); + Vertex cp = + graph.addVertex(T.label, "cp", T.id, "30", "aai-node-type", "cp", "cp-id", "cpId1"); + Vertex vipIpv4AddressList = + graph.addVertex(T.label, "vip-ipv4-address-list", T.id, "2", "aai-node-type", + "vip-ipv4-address-list", "vip-ipv4-address-list-id", "vip-ipv4-address-listId2"); + Vertex vipIpv6AddressList = + graph.addVertex(T.label, "vip-ipv6-address-list", T.id, "3", "aai-node-type", + "vip-ipv6-address-list", "vip-ipv6-address-list-id", "vip-ipv6-address-listId3"); + + Vertex subnetIpv4 = graph.addVertex(T.label, "subnet", T.id, "7", "aai-node-type", "subnet", + "subnet-id", "subnetId7"); + Vertex l3Network1Ipv4 = graph.addVertex(T.label, "l3-network", T.id, "8", "aai-node-type", + "l3-network", "l3-network-id", "l3-networkId8"); + + Vertex subnetIpv6 = graph.addVertex(T.label, "subnet", T.id, "10", "aai-node-type", + "subnet", "subnet-id", "subnetId10"); + Vertex l3Network1Ipv6 = graph.addVertex(T.label, "l3-network", T.id, "11", "aai-node-type", + "l3-network", "l3-network-id", "l3-networkId11"); + + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "18", "aai-node-type", "vserver", + "vserver-id", "vserverId18"); + Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "19", "aai-node-type", + "l-interface", "l-interface-id", "l-interfaceId19"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "20", "aai-node-type", "pserver", + "pserver-id", "pserverId20"); + + Vertex l3NetworklintIpv4 = graph.addVertex(T.label, "l3-network", T.id, "21", + "aai-node-type", "l3-network", "l3-network-id", "l3-networkId21"); + Vertex subnetlintIpv4 = graph.addVertex(T.label, "subnet", T.id, "22", "aai-node-type", + "subnet", "subnet-id", "subnetId22"); + Vertex l3Network1lintIpv4 = graph.addVertex(T.label, "l3-network", T.id, "23", + "aai-node-type", "l3-network", "l3-network-id", "l3-networkId23"); + + Vertex l3NetworklintIpv6 = graph.addVertex(T.label, "l3-network", T.id, "24", + "aai-node-type", "l3-network", "l3-network-id", "l3-networkId24"); + Vertex subnetlintIpv6 = graph.addVertex(T.label, "subnet", T.id, "25", "aai-node-type", + "subnet", "subnet-id", "subnetId25"); + Vertex l3Network1lintIpv6 = graph.addVertex(T.label, "l3-network", T.id, "26", + "aai-node-type", "l3-network", "l3-network-id", "l3-networkId26"); + + Vertex l3InterfaceIpv4AddressListLint = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "27", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address-list-id", + "l3-interface-ipv4-address-listId27"); + Vertex l3InterfaceIpv6AddressListlInt = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "28", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", + "l3-interface-ipv6-address-listId28"); + + Vertex complex = graph.addVertex(T.label, "complex", T.id, "29", "aai-node-type", "complex", + "complex-id", "complexId29"); + + Vertex genericVnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "31", "aai-node-type", + "generic-vnf", "generic-vnf-id", "serviceinstanceid1"); + Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "32", "aai-node-type", "vnfc", + "vnfc-id", "vnfcId2"); + Vertex cp1 = + graph.addVertex(T.label, "cp", T.id, "33", "aai-node-type", "cp", "cp-id", "cpId3"); + Vertex vipIpv4AddressList1 = + graph.addVertex(T.label, "vip-ipv4-address-list", T.id, "34", "aai-node-type", + "vip-ipv4-address-list", "vip-ipv4-address-list-id", "vip-ipv4-address-listId4"); + Vertex vipIpv6AddressList1 = + graph.addVertex(T.label, "vip-ipv6-address-list", T.id, "35", "aai-node-type", + "vip-ipv6-address-list", "vip-ipv6-address-list-id", "vip-ipv6-address-listId5"); + Vertex subnetIpv41 = graph.addVertex(T.label, "subnet", T.id, "36", "aai-node-type", + "subnet", "subnet-id", "subnetId6"); + Vertex l3Network1Ipv41 = graph.addVertex(T.label, "l3-network", T.id, "37", "aai-node-type", + "l3-network", "l3-network-id", "l3-networkId7"); + Vertex subnetIpv61 = graph.addVertex(T.label, "subnet", T.id, "38", "aai-node-type", + "subnet", "subnet-id", "subnetId8"); + Vertex l3Network1Ipv61 = graph.addVertex(T.label, "l3-network", T.id, "39", "aai-node-type", + "l3-network", "l3-network-id", "l3-networkId9"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "40", "aai-node-type", + "vserver", "vserver-id", "vserverId10"); + Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "41", "aai-node-type", + "l-interface", "l-interface-id", "l-interfaceId11"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "42", "aai-node-type", + "pserver", "pserver-id", "pserverId12"); + Vertex l3NetworklintIpv41 = graph.addVertex(T.label, "l3-network", T.id, "43", + "aai-node-type", "l3-network", "l3-network-id", "l3-networkId13"); + Vertex subnetlintIpv41 = graph.addVertex(T.label, "subnet", T.id, "44", "aai-node-type", + "subnet", "subnet-id", "subnetId14"); + Vertex l3Network1lintIpv41 = graph.addVertex(T.label, "l3-network", T.id, "45", + "aai-node-type", "l3-network", "l3-network-id", "l3-networkId15"); + Vertex l3NetworklintIpv61 = graph.addVertex(T.label, "l3-network", T.id, "46", + "aai-node-type", "l3-network", "l3-network-id", "l3-networkId16"); + Vertex subnetlintIpv61 = graph.addVertex(T.label, "subnet", T.id, "47", "aai-node-type", + "subnet", "subnet-id", "subnetId17"); + Vertex l3Network1lintIpv61 = graph.addVertex(T.label, "l3-network", T.id, "48", + "aai-node-type", "l3-network", "l3-network-id", "l3-networkId18"); + Vertex l3InterfaceIpv4AddressListLint1 = + graph.addVertex(T.label, "l3-interface-ipv4-address-list", T.id, "49", "aai-node-type", + "l3-interface-ipv4-address-list", "l3-interface-ipv4-address-list-id", + "l3-interface-ipv4-address-listId19"); + Vertex l3InterfaceIpv6AddressListlInt1 = + graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "50", "aai-node-type", + "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", + "l3-interface-ipv6-address-listId20"); + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "51", "aai-node-type", + "complex", "complex-id", "complexId21"); + + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, genericVnf, vnfc); + rules.addTreeEdge(g, vnfc, cp); + rules.addEdge(g, cp, vipIpv4AddressList); + rules.addEdge(g, cp, vipIpv6AddressList); + + rules.addEdge(g, vipIpv4AddressList, subnetIpv4); + rules.addTreeEdge(g, subnetIpv4, l3Network1Ipv4); + + rules.addEdge(g, vipIpv6AddressList, subnetIpv6); + rules.addTreeEdge(g, subnetIpv6, l3Network1Ipv6); + + rules.addEdge(g, genericVnf, vserver); + rules.addEdge(g, vserver, pserver); + + rules.addTreeEdge(g, cp, l3InterfaceIpv4AddressListLint); + rules.addTreeEdge(g, cp, l3InterfaceIpv6AddressListlInt); + + rules.addEdge(g, l3InterfaceIpv4AddressListLint, l3NetworklintIpv4); + rules.addEdge(g, l3InterfaceIpv4AddressListLint, subnetlintIpv4); + rules.addTreeEdge(g, subnetlintIpv4, l3Network1lintIpv4); + + rules.addEdge(g, l3InterfaceIpv6AddressListlInt, l3NetworklintIpv6); + rules.addEdge(g, l3InterfaceIpv6AddressListlInt, subnetlintIpv6); + rules.addTreeEdge(g, subnetlintIpv6, l3Network1lintIpv6); + + rules.addEdge(g, pserver, complex); + + // false + rules.addEdge(g, genericVnf1, vnfc1); + rules.addTreeEdge(g, vnfc1, cp1); + rules.addEdge(g, cp1, vipIpv4AddressList1); + rules.addEdge(g, cp1, vipIpv6AddressList1); + rules.addEdge(g, vipIpv4AddressList1, subnetIpv41); + rules.addTreeEdge(g, subnetIpv41, l3Network1Ipv41); + rules.addEdge(g, vipIpv6AddressList1, subnetIpv61); + rules.addTreeEdge(g, subnetIpv61, l3Network1Ipv61); + rules.addEdge(g, genericVnf1, vserver1); + rules.addEdge(g, vserver1, pserver1); + rules.addTreeEdge(g, cp1, l3InterfaceIpv4AddressListLint1); + rules.addTreeEdge(g, cp1, l3InterfaceIpv6AddressListlInt1); + rules.addEdge(g, l3InterfaceIpv4AddressListLint1, l3NetworklintIpv41); + rules.addEdge(g, l3InterfaceIpv4AddressListLint1, subnetlintIpv41); + rules.addTreeEdge(g, subnetlintIpv41, l3Network1lintIpv41); + rules.addEdge(g, l3InterfaceIpv6AddressListlInt1, l3NetworklintIpv61); + rules.addEdge(g, l3InterfaceIpv6AddressListlInt1, subnetlintIpv61); + rules.addTreeEdge(g, subnetlintIpv61, l3Network1lintIpv61); + rules.addEdge(g, pserver1, complex1); + // false + + expectedResult.add(genericVnf); + expectedResult.add(vnfc); + expectedResult.add(cp); + expectedResult.add(vipIpv4AddressList); + expectedResult.add(vipIpv6AddressList); + + expectedResult.add(subnetIpv4); + expectedResult.add(l3Network1Ipv4); + + expectedResult.add(subnetIpv6); + expectedResult.add(l3Network1Ipv6); + + expectedResult.add(l3InterfaceIpv4AddressListLint); + expectedResult.add(l3InterfaceIpv6AddressListlInt); + + expectedResult.add(l3NetworklintIpv4); + expectedResult.add(subnetlintIpv4); + expectedResult.add(l3Network1lintIpv4); + + expectedResult.add(l3NetworklintIpv6); + expectedResult.add(subnetlintIpv6); + expectedResult.add(l3Network1lintIpv6); + + expectedResult.add(vserver); + expectedResult.add(pserver); + expectedResult.add(complex); + + } + + @Override + protected String getQueryName() { + return "ips-networks-fromVnf"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("generic-vnf-id", "serviceinstanceid0"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } + } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_ComplicatedGVtoGV.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_ComplicatedGVtoGV.java index 42cf635..026c722 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_ComplicatedGVtoGV.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_ComplicatedGVtoGV.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,67 +31,71 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class LinkedDevices_ComplicatedGVtoGV extends QueryTest { - public LinkedDevices_ComplicatedGVtoGV() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "00", "aai-node-type", "generic-vnf", - "vnf-id", "gvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); - - Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", "l-interface", - "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - - Vertex loglink1 = graph.addVertex(T.label, "logical-link", T.id, "20", "aai-node-type", "logical-link", - "link-name", "loglink1", "in-maint", "false", "link-type", "sausage"); - - Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", - "interface-name", "lint2", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - - Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "30", "aai-node-type", "vlan", - "vlan-interface", "vlan1"); - - Vertex loglink2 = graph.addVertex(T.label, "logical-link", T.id, "21", "aai-node-type", "logical-link", - "link-name", "loglink2", "in-maint", "false", "link-type", "sausage"); - - Vertex lagint = graph.addVertex(T.label, "lag-interface", T.id, "40", "aai-node-type", "lag-interface", - "interface-name", "lagint1"); - - Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "01", "aai-node-type", "generic-vnf", - "vnf-id", "gvnf2", "vnf-name", "genvnfname2", "nf-type", "sample-nf-type"); - - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, gvnf1, lint1); - rules.addEdge(g, lint1, loglink1); - rules.addEdge(g, lint2, loglink1); - rules.addTreeEdge(g, lint2, vlan); - rules.addEdge(g, vlan, loglink2); - rules.addEdge(g, loglink2, lagint); - rules.addTreeEdge(g, gvnf2, lagint); - - expectedResult.add(gvnf1); - expectedResult.add(gvnf2); - } - - @Override - protected String getQueryName() { - return "linked-devices"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("vnf-id", "gvnf1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - // n/a for this query - } + public LinkedDevices_ComplicatedGVtoGV() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex gvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "00", "aai-node-type", "generic-vnf", + "vnf-id", "gvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); + + Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", + "l-interface", "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false"); + + Vertex loglink1 = graph.addVertex(T.label, "logical-link", T.id, "20", "aai-node-type", + "logical-link", "link-name", "loglink1", "in-maint", "false", "link-type", "sausage"); + + Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", + "l-interface", "interface-name", "lint2", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false"); + + Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "30", "aai-node-type", "vlan", + "vlan-interface", "vlan1"); + + Vertex loglink2 = graph.addVertex(T.label, "logical-link", T.id, "21", "aai-node-type", + "logical-link", "link-name", "loglink2", "in-maint", "false", "link-type", "sausage"); + + Vertex lagint = graph.addVertex(T.label, "lag-interface", T.id, "40", "aai-node-type", + "lag-interface", "interface-name", "lagint1"); + + Vertex gvnf2 = + graph.addVertex(T.label, "generic-vnf", T.id, "01", "aai-node-type", "generic-vnf", + "vnf-id", "gvnf2", "vnf-name", "genvnfname2", "nf-type", "sample-nf-type"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, gvnf1, lint1); + rules.addEdge(g, lint1, loglink1); + rules.addEdge(g, lint2, loglink1); + rules.addTreeEdge(g, lint2, vlan); + rules.addEdge(g, vlan, loglink2); + rules.addEdge(g, loglink2, lagint); + rules.addTreeEdge(g, gvnf2, lagint); + + expectedResult.add(gvnf1); + expectedResult.add(gvnf2); + } + + @Override + protected String getQueryName() { + return "linked-devices"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("vnf-id", "gvnf1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + // n/a for this query + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_NewvceVserverTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_NewvceVserverTest.java index c828c67..7866237 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_NewvceVserverTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_NewvceVserverTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -22,8 +22,8 @@ package org.onap.aai.rest.search; import static org.junit.Assert.*; import java.util.ArrayList; -import java.util.Map; import java.util.List; +import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; @@ -35,76 +35,80 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class LinkedDevices_NewvceVserverTest extends QueryTest { - public LinkedDevices_NewvceVserverTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Note: I don't know if this topology is realistic, but it doesn't really matter bc we're just testing functionality - Vertex newvce1 = graph.addVertex(T.label, "newvce", T.id, "00", "aai-node-type", "newvce", - "vnf-id2", "newvce1", "vnf-name", "bob", "vnf-type", "new"); - - Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", "l-interface", - "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - Vertex loglink1 = graph.addVertex(T.label, "logical-link", T.id, "20", "aai-node-type", "logical-link", - "link-name", "loglink1", "in-maint", "false", "link-type", "sausage"); - Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", - "interface-name", "lint2", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "40", "aai-node-type", "vlan", - "vlan-interface", "vlan1"); - - Vertex newvce2 = graph.addVertex(T.label, "newvce", T.id, "01", "aai-node-type", "newvce", - "vnf-id2", "newvce2", "vnf-name", "bob", "vnf-type", "new"); - - Vertex loglink2 = graph.addVertex(T.label, "logical-link", T.id, "21", "aai-node-type", "logical-link", - "link-name", "loglink2", "in-maint", "false", "link-type", "sausage"); - Vertex lint3 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", "l-interface", - "interface-name", "lint3", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "50", "aai-node-type", "cloud-region", - "cloud-owner", "att", "cloud-region-id", "crId"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "60", "aai-node-type", "tenant", - "tenant-id", "tenId", "tenant-name", "verity"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "30", "aai-node-type", "vserver", - "vserver-id", "vserv1", "vserver-name", "frank"); - - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, newvce1, lint1); - rules.addTreeEdge(g, lint1, vlan); - rules.addEdge(g, lint1, loglink1); - rules.addEdge(g, lint2, loglink1); - - rules.addTreeEdge(g, cloudregion, tenant); - rules.addTreeEdge(g, tenant, vserver); - rules.addTreeEdge(g, vserver, lint2); - - rules.addEdge(g, vlan, loglink2); - rules.addTreeEdge(g, newvce2, lint3); - rules.addEdge(g, loglink2, lint3); - - expectedResult.add(newvce1); - expectedResult.add(newvce2); - expectedResult.add(vserver); - } - - @Override - protected String getQueryName() { - return "linked-devices"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "newvce").has("vnf-id2", "newvce1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - // n/a for this query - } + public LinkedDevices_NewvceVserverTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Note: I don't know if this topology is realistic, but it doesn't really matter bc we're + // just testing functionality + Vertex newvce1 = graph.addVertex(T.label, "newvce", T.id, "00", "aai-node-type", "newvce", + "vnf-id2", "newvce1", "vnf-name", "bob", "vnf-type", "new"); + + Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", + "l-interface", "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false"); + Vertex loglink1 = graph.addVertex(T.label, "logical-link", T.id, "20", "aai-node-type", + "logical-link", "link-name", "loglink1", "in-maint", "false", "link-type", "sausage"); + Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", + "l-interface", "interface-name", "lint2", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false"); + Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "40", "aai-node-type", "vlan", + "vlan-interface", "vlan1"); + + Vertex newvce2 = graph.addVertex(T.label, "newvce", T.id, "01", "aai-node-type", "newvce", + "vnf-id2", "newvce2", "vnf-name", "bob", "vnf-type", "new"); + + Vertex loglink2 = graph.addVertex(T.label, "logical-link", T.id, "21", "aai-node-type", + "logical-link", "link-name", "loglink2", "in-maint", "false", "link-type", "sausage"); + Vertex lint3 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", + "l-interface", "interface-name", "lint3", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false"); + + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "50", "aai-node-type", + "cloud-region", "cloud-owner", "att", "cloud-region-id", "crId"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "60", "aai-node-type", "tenant", + "tenant-id", "tenId", "tenant-name", "verity"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "30", "aai-node-type", "vserver", + "vserver-id", "vserv1", "vserver-name", "frank"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, newvce1, lint1); + rules.addTreeEdge(g, lint1, vlan); + rules.addEdge(g, lint1, loglink1); + rules.addEdge(g, lint2, loglink1); + + rules.addTreeEdge(g, cloudregion, tenant); + rules.addTreeEdge(g, tenant, vserver); + rules.addTreeEdge(g, vserver, lint2); + + rules.addEdge(g, vlan, loglink2); + rules.addTreeEdge(g, newvce2, lint3); + rules.addEdge(g, loglink2, lint3); + + expectedResult.add(newvce1); + expectedResult.add(newvce2); + expectedResult.add(vserver); + } + + @Override + protected String getQueryName() { + return "linked-devices"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "newvce").has("vnf-id2", "newvce1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + // n/a for this query + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_SimpleGVtoGVQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_SimpleGVtoGVQueryTest.java index 57967a6..6c4409e 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_SimpleGVtoGVQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_SimpleGVtoGVQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,55 +31,59 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class LinkedDevices_SimpleGVtoGVQueryTest extends QueryTest { - public LinkedDevices_SimpleGVtoGVQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "00", "aai-node-type", "generic-vnf", - "vnf-id", "gvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); - - Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", "l-interface", - "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - - Vertex loglink = graph.addVertex(T.label, "logical-link", T.id, "20", "aai-node-type", "logical-link", - "link-name", "loglink1", "in-maint", "false", "link-type", "sausage"); - - Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", - "interface-name", "lint2", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - - Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "01", "aai-node-type", "generic-vnf", - "vnf-id", "gvnf2", "vnf-name", "genvnfname2", "nf-type", "sample-nf-type"); - - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, gvnf1, lint1); - rules.addTreeEdge(g, gvnf2, lint2); - rules.addEdge(g, lint1, loglink); - rules.addEdge(g, lint2, loglink); - - expectedResult.add(gvnf1); - expectedResult.add(gvnf2); - } - - @Override - protected String getQueryName() { - return "linked-devices"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type","generic-vnf").has("vnf-id","gvnf1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - // n/a for this test - } + public LinkedDevices_SimpleGVtoGVQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex gvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "00", "aai-node-type", "generic-vnf", + "vnf-id", "gvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); + + Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", + "l-interface", "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false"); + + Vertex loglink = graph.addVertex(T.label, "logical-link", T.id, "20", "aai-node-type", + "logical-link", "link-name", "loglink1", "in-maint", "false", "link-type", "sausage"); + + Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", + "l-interface", "interface-name", "lint2", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false"); + + Vertex gvnf2 = + graph.addVertex(T.label, "generic-vnf", T.id, "01", "aai-node-type", "generic-vnf", + "vnf-id", "gvnf2", "vnf-name", "genvnfname2", "nf-type", "sample-nf-type"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, gvnf1, lint1); + rules.addTreeEdge(g, gvnf2, lint2); + rules.addEdge(g, lint1, loglink); + rules.addEdge(g, lint2, loglink); + + expectedResult.add(gvnf1); + expectedResult.add(gvnf2); + } + + @Override + protected String getQueryName() { + return "linked-devices"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("vnf-id", "gvnf1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + // n/a for this test + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedHashMapQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedHashMapQueryTest.java index 6488cae..b549183 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedHashMapQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedHashMapQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,21 +19,21 @@ */ package org.onap.aai.rest.search; -import org.onap.aai.exceptions.AAIException; - import java.util.LinkedHashMap; import java.util.List; +import org.onap.aai.exceptions.AAIException; + public abstract class LinkedHashMapQueryTest extends QueryTest { - protected List<LinkedHashMap> hashMapList; + protected List<LinkedHashMap> hashMapList; - public LinkedHashMapQueryTest() throws AAIException { - super(); - } + public LinkedHashMapQueryTest() throws AAIException { + super(); + } - @Override - public void run() { - hashMapList = (List<LinkedHashMap>) shell.executeTraversal(query, params).toList(); - } + @Override + public void run() { + hashMapList = (List<LinkedHashMap>) shell.executeTraversal(query, params).toList(); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinterfacesCPFromVnfcTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinterfacesCPFromVnfcTest.java index e911634..6821f78 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinterfacesCPFromVnfcTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinterfacesCPFromVnfcTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,71 +31,85 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class LinterfacesCPFromVnfcTest extends QueryTest { - public LinterfacesCPFromVnfcTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public LinterfacesCPFromVnfcTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex vnfc = graph.addVertex(T.label, "vnfc",T.id, "0", "aai-node-type", "vnfc", - "vnfc-name", "vnfcName1", "nfc-naming-code", "blue", "nfc-function", "correct-function","model-invariant-id","modelinvariantid","model-customization-id","modelcustomizationid"); - Vertex cp = graph.addVertex(T.label, "cp",T.id, "1", "aai-node-type", "cp","cp-id", "cpId"); - Vertex vlanTag = graph.addVertex(T.label, "vlan-tag",T.id, "2", "aai-node-type", "vlan-tag","vlan-tag-id", "vlanTagId"); - Vertex l3Network = graph.addVertex(T.label, "l3-network",T.id, "3", "aai-node-type", "l3-network","network-id", "networkId","is-provider-network",true); - Vertex vserv = graph.addVertex(T.label, "vserver",T.id, "4", "aai-node-type", "vserver", - "vserver-id", "vservId", "vserver-name", "vservName", "vserver-selflink", "me/self"); - Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0","network-name","networkName0"); - - Vertex vnfc1 = graph.addVertex(T.label, "vnfc",T.id, "6", "aai-node-type", "vnfc", - "vnfc-name", "vnfcName1", "nfc-naming-code", "blue", "nfc-function", "correct-function","model-invariant-id","modelinvariantid1","model-customization-id","modelcustomizationid1"); - Vertex cp1 = graph.addVertex(T.label, "cp",T.id, "7", "aai-node-type", "cp","cp-id", "cpId"); - Vertex vlanTag1 = graph.addVertex(T.label, "vlan-tag",T.id, "8", "aai-node-type", "vlan-tag","vlan-tag-id", "vlanTagId"); - Vertex l3Network1 = graph.addVertex(T.label, "l3-network",T.id, "9", "aai-node-type", "l3-network","network-id", "networkId","is-provider-network",false); - Vertex vserv1 = graph.addVertex(T.label, "vserver",T.id, "10", "aai-node-type", "vserver", - "vserver-id", "vservId", "vserver-name", "vservName", "vserver-selflink", "me/self"); - Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0","network-name","networkName0"); + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "0", "aai-node-type", "vnfc", + "vnfc-name", "vnfcName1", "nfc-naming-code", "blue", "nfc-function", "correct-function", + "model-invariant-id", "modelinvariantid", "model-customization-id", + "modelcustomizationid"); + Vertex cp = + graph.addVertex(T.label, "cp", T.id, "1", "aai-node-type", "cp", "cp-id", "cpId"); + Vertex vlanTag = graph.addVertex(T.label, "vlan-tag", T.id, "2", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlanTagId"); + Vertex l3Network = graph.addVertex(T.label, "l3-network", T.id, "3", "aai-node-type", + "l3-network", "network-id", "networkId", "is-provider-network", true); + Vertex vserv = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", + "vserver-id", "vservId", "vserver-name", "vservName", "vserver-selflink", "me/self"); + Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", + "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", + "l-interface-name0", "network-name", "networkName0"); - GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(g, vnfc,cp); - rules.addEdge(g, cp,vlanTag); - rules.addEdge(g, cp,l3Network); - rules.addEdge(g, vnfc,vserv); - rules.addTreeEdge(g, vserv, linterface); - - rules.addTreeEdge(g, vnfc1,cp1); - rules.addEdge(g, cp1,vlanTag1); - rules.addEdge(g, cp1,l3Network1); - rules.addEdge(g, vnfc1,vserv1); - rules.addTreeEdge(g, vserv1, linterface1); - - expectedResult.add(vlanTag); - expectedResult.add(l3Network); - expectedResult.add(linterface); - //expectedResult.add(vlanTag1);//false - //expectedResult.add(l3Network1);//false - //expectedResult.add(linterface1);//false - } + Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "6", "aai-node-type", "vnfc", + "vnfc-name", "vnfcName1", "nfc-naming-code", "blue", "nfc-function", "correct-function", + "model-invariant-id", "modelinvariantid1", "model-customization-id", + "modelcustomizationid1"); + Vertex cp1 = + graph.addVertex(T.label, "cp", T.id, "7", "aai-node-type", "cp", "cp-id", "cpId"); + Vertex vlanTag1 = graph.addVertex(T.label, "vlan-tag", T.id, "8", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlanTagId"); + Vertex l3Network1 = graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", + "l3-network", "network-id", "networkId", "is-provider-network", false); + Vertex vserv1 = graph.addVertex(T.label, "vserver", T.id, "10", "aai-node-type", "vserver", + "vserver-id", "vservId", "vserver-name", "vservName", "vserver-selflink", "me/self"); + Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", + "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", + "l-interface-name0", "network-name", "networkName0"); - @Override - protected String getQueryName() { - return "l-interface-to-CP"; - } + GraphTraversalSource g = graph.traversal(); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "vnfc").has("model-invariant-id", "modelinvariantid").has("model-customization-id", "modelcustomizationid"); - } + rules.addTreeEdge(g, vnfc, cp); + rules.addEdge(g, cp, vlanTag); + rules.addEdge(g, cp, l3Network); + rules.addEdge(g, vnfc, vserv); + rules.addTreeEdge(g, vserv, linterface); - @Override - protected void addParam(Map<String, Object> params) { - params.put("isProviderNetwork", true); - } + rules.addTreeEdge(g, vnfc1, cp1); + rules.addEdge(g, cp1, vlanTag1); + rules.addEdge(g, cp1, l3Network1); + rules.addEdge(g, vnfc1, vserv1); + rules.addTreeEdge(g, vserv1, linterface1); + + expectedResult.add(vlanTag); + expectedResult.add(l3Network); + expectedResult.add(linterface); + // expectedResult.add(vlanTag1);//false + // expectedResult.add(l3Network1);//false + // expectedResult.add(linterface1);//false + } + + @Override + protected String getQueryName() { + return "l-interface-to-CP"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "vnfc").has("model-invariant-id", "modelinvariantid") + .has("model-customization-id", "modelcustomizationid"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("isProviderNetwork", true); + } - } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/LocationNetTypeNetRolefromCloudRegionQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/LocationNetTypeNetRolefromCloudRegionQueryTest.java index c73a4c6..56dbf79 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/LocationNetTypeNetRolefromCloudRegionQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/LocationNetTypeNetRolefromCloudRegionQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,56 +26,65 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class LocationNetTypeNetRolefromCloudRegionQueryTest extends QueryTest { - public LocationNetTypeNetRolefromCloudRegionQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public LocationNetTypeNetRolefromCloudRegionQueryTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + Vertex cloudregion = + graph.addVertex(T.label, "cloud-region", T.id, "0", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); + Vertex complex = graph.addVertex(T.label, "complex", T.id, "1", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1"); + Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "2", "aai-node-type", + "l3-network", "network-id", "network-id-1"); + + Vertex cloudregion1 = + graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2"); + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "4", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-2"); + Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "5", "aai-node-type", + "l3-network", "network-id", "network-id-2"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, cloudregion, complex); + rules.addEdge(g, complex, l3network); + + rules.addEdge(g, cloudregion1, complex1); + rules.addEdge(g, complex1, l3network1); + + expectedResult.add(cloudregion); + expectedResult.add(complex); + expectedResult.add(l3network); + + } + + @Override + protected String getQueryName() { + return "locationNetTypeNetRole-fromCloudRegion"; + } - @Test - public void run() { - super.run(); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("cloud-region-id", "cloud-region-id-1"); - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "0", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); - Vertex complex = graph.addVertex(T.label, "complex", T.id, "1", "aai-node-type", "complex", "physical-location-id", "physical-location-id-1"); - Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "2", "aai-node-type", "l3-network", "network-id", "network-id-1"); - - - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2"); - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "4", "aai-node-type", "complex", "physical-location-id", "physical-location-id-2"); - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "5", "aai-node-type", "l3-network", "network-id", "network-id-2"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, cloudregion,complex); - rules.addEdge(g, complex,l3network); - - rules.addEdge(g, cloudregion1,complex1); - rules.addEdge(g, complex1,l3network1); - - expectedResult.add(cloudregion); - expectedResult.add(complex); - expectedResult.add(l3network); - - } + } - @Override - protected String getQueryName() { - return "locationNetTypeNetRole-fromCloudRegion"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("cloud-region-id", "cloud-region-id-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/LogicalLinkByCloudRegionIdTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/LogicalLinkByCloudRegionIdTest.java index a231ccd..224a6b7 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/LogicalLinkByCloudRegionIdTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/LogicalLinkByCloudRegionIdTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,10 +29,8 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class LogicalLinkByCloudRegionIdTest extends QueryTest { - public LogicalLinkByCloudRegionIdTest () throws AAIException, NoEdgeRuleFoundException { + public LogicalLinkByCloudRegionIdTest() throws AAIException, NoEdgeRuleFoundException { super(); } @@ -43,12 +43,18 @@ public class LogicalLinkByCloudRegionIdTest extends QueryTest { protected void createGraph() throws AAIException, NoEdgeRuleFoundException { // Set up the test graph - Vertex cloudRegion1 = graph.addVertex(T.label, "cloud-region", T.id, "0", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner1", "cloud-region-id", "cloudRegionId1"); - Vertex logicalLink1 = graph.addVertex(T.label, "logical-link", T.id, "1", "aai-node-type", "logical-link", "link-name", "linkName1", "in-maint", "false", "link-type","linkType1"); + Vertex cloudRegion1 = graph.addVertex(T.label, "cloud-region", T.id, "0", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner1", "cloud-region-id", "cloudRegionId1"); + Vertex logicalLink1 = + graph.addVertex(T.label, "logical-link", T.id, "1", "aai-node-type", "logical-link", + "link-name", "linkName1", "in-maint", "false", "link-type", "linkType1"); // adding extra vertices and edges which shouldn't be picked. - Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner2", "cloud-region-id", "cloudRegionId3"); - Vertex logicalLink2 = graph.addVertex(T.label, "logical-link", T.id, "3", "aai-node-type", "logical-link", "link-name", "linkName2", "in-maint", "false", "link-type","linkType4"); + Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner2", "cloud-region-id", "cloudRegionId3"); + Vertex logicalLink2 = + graph.addVertex(T.label, "logical-link", T.id, "3", "aai-node-type", "logical-link", + "link-name", "linkName2", "in-maint", "false", "link-type", "linkType4"); GraphTraversalSource g = graph.traversal(); rules.addEdge(g, cloudRegion1, logicalLink1); @@ -72,4 +78,4 @@ public class LogicalLinkByCloudRegionIdTest extends QueryTest { protected void addParam(Map<String, Object> params) { return; } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/ModelAndNamedQueryRestProviderTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/ModelAndNamedQueryRestProviderTest.java index b4a3dcd..5d2002e 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/ModelAndNamedQueryRestProviderTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/ModelAndNamedQueryRestProviderTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,19 @@ */ package org.onap.aai.rest.search; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.io.InputStream; +import java.util.*; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.*; + import org.apache.commons.io.IOUtils; import org.junit.Before; import org.junit.Ignore; @@ -30,19 +43,7 @@ import org.onap.aai.setup.SchemaVersion; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.*; -import java.io.IOException; -import java.io.InputStream; -import java.util.*; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class ModelAndNamedQueryRestProviderTest extends AAISetup{ +public class ModelAndNamedQueryRestProviderTest extends AAISetup { protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json"); @@ -70,21 +71,23 @@ public class ModelAndNamedQueryRestProviderTest extends AAISetup{ private List<MediaType> outputMediaTypes; - private static final Logger logger = LoggerFactory.getLogger(ModelAndNamedQueryRestProviderTest.class.getName()); + private static final Logger logger = + LoggerFactory.getLogger(ModelAndNamedQueryRestProviderTest.class.getName()); @Before - public void setup(){ + public void setup() { version = schemaVersions.getDefaultVersion(); logger.info("Starting the setup for the integration tests of Rest Endpoints"); - - modelAndNamedQueryRestProvider = new ModelAndNamedQueryRestProvider(searchGraph, schemaVersions); - httpHeaders = mock(HttpHeaders.class); - uriInfo = mock(UriInfo.class); + + modelAndNamedQueryRestProvider = + new ModelAndNamedQueryRestProvider(searchGraph, schemaVersions); + httpHeaders = mock(HttpHeaders.class); + uriInfo = mock(UriInfo.class); when(uriInfo.getPath()).thenReturn("JUNITURI"); - headersMultiMap = new MultivaluedHashMap<>(); - queryParameters = Mockito.spy(new MultivaluedHashMap<>()); + headersMultiMap = new MultivaluedHashMap<>(); + queryParameters = Mockito.spy(new MultivaluedHashMap<>()); headersMultiMap.add("X-FromAppId", "JUNIT"); headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString()); @@ -100,16 +103,18 @@ public class ModelAndNamedQueryRestProviderTest extends AAISetup{ when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap); - when(httpHeaders.getRequestHeader("X-FromAppId")).thenReturn(Collections.singletonList("JUNIT")); - when(httpHeaders.getRequestHeader("X-TransactionId")).thenReturn(Collections.singletonList("JUNIT")); + when(httpHeaders.getRequestHeader("X-FromAppId")) + .thenReturn(Collections.singletonList("JUNIT")); + when(httpHeaders.getRequestHeader("X-TransactionId")) + .thenReturn(Collections.singletonList("JUNIT")); when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList); - when(uriInfo.getQueryParameters()).thenReturn(queryParameters); when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters); - // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable + // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very + // unreasonable Mockito.doReturn(null).when(queryParameters).remove(anyObject()); when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON); @@ -123,12 +128,8 @@ public class ModelAndNamedQueryRestProviderTest extends AAISetup{ when(request.getContentType()).thenReturn("application/json"); - Response response = modelAndNamedQueryRestProvider.getNamedQueryResponse( - httpHeaders, - request, - queryParameters, - uriInfo - ); + Response response = modelAndNamedQueryRestProvider.getNamedQueryResponse(httpHeaders, + request, queryParameters, uriInfo); assertNotNull(response); assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus()); @@ -142,12 +143,8 @@ public class ModelAndNamedQueryRestProviderTest extends AAISetup{ when(httpHeaders.getRequestHeader("X-FromAppId")).thenThrow(IllegalArgumentException.class); when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); - Response response = modelAndNamedQueryRestProvider.getNamedQueryResponse( - httpHeaders, - null, - "cloud-region", - uriInfo - ); + Response response = modelAndNamedQueryRestProvider.getNamedQueryResponse(httpHeaders, null, + "cloud-region", uriInfo); assertNotNull(response); assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus()); @@ -165,12 +162,8 @@ public class ModelAndNamedQueryRestProviderTest extends AAISetup{ when(request.getContentType()).thenReturn("application/json"); - Response response = modelAndNamedQueryRestProvider.getNamedQueryResponse( - httpHeaders, - request, - queryParameters, - uriInfo - ); + Response response = modelAndNamedQueryRestProvider.getNamedQueryResponse(httpHeaders, + request, queryParameters, uriInfo); assertNotNull(response); assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); @@ -187,12 +180,8 @@ public class ModelAndNamedQueryRestProviderTest extends AAISetup{ when(request.getContentType()).thenReturn("application/json"); - Response response = modelAndNamedQueryRestProvider.getNamedQueryResponse( - httpHeaders, - request, - queryParameters, - uriInfo - ); + Response response = modelAndNamedQueryRestProvider.getNamedQueryResponse(httpHeaders, + request, queryParameters, uriInfo); assertNotNull(response); assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus()); @@ -200,9 +189,7 @@ public class ModelAndNamedQueryRestProviderTest extends AAISetup{ public String getPayload(String filename) throws IOException { - InputStream inputStream = getClass() - .getClassLoader() - .getResourceAsStream(filename); + InputStream inputStream = getClass().getClassLoader().getResourceAsStream(filename); String message = String.format("Unable to find the %s in src/test/resources", filename); assertNotNull(message, inputStream); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/MsoRequestVfModuleTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/MsoRequestVfModuleTest.java index dfaf3c3..e1edfd6 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/MsoRequestVfModuleTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/MsoRequestVfModuleTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,66 +30,91 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class MsoRequestVfModuleTest extends QueryTest { - public MsoRequestVfModuleTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //set up test graph - Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "0", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0","vnf-name", "vnf-name-1", "nf-type", "sample-nf-type"); - Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "2", "aai-node-type","service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name","service-instance-name-1"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserverid0"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName0"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - Vertex volumegroup = graph.addVertex(T.label, "volume-group", T.id, "6", "aai-node-type", "volume-group", "volume-group-id", "volume-group-id-1", "volume-group-name", "volume-group-name1"); - - - Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "10", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-10", "vf-module-name", "vf-module-name10"); - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "11", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0","vnf-name", "vnf-name-10", "nf-type", "sample-nf-type1"); - Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "12", "aai-node-type","service-instance", "service-instance-id", "service-instance-id-10", "service-instance-name","service-instance-name-10"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "13", "aai-node-type", "vserver", "vserver-id", "vserverid10"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "14", "aai-node-type", "tenant", "tenant-id", "tenantid10", "tenant-name", "tenantName10"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "15", "aai-node-type", "cloud-region", "cloud-region-id", "regionid10", "cloud-owner", "cloudOwnername10"); - Vertex volumegroup1 = graph.addVertex(T.label, "volume-group", T.id, "16", "aai-node-type", "volume-group", "volume-group-id", "volume-group-id-10", "volume-group-name", "volume-group-name10"); - - GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(g, genericvnf,vfmodule); - rules.addEdge(g, genericvnf, serviceInstance); - rules.addEdge(g, vserver,vfmodule); - rules.addTreeEdge(g, vserver,tenant); - rules.addTreeEdge(g, tenant, cloudregion); - rules.addEdge(g, vfmodule, volumegroup); - - //false - rules.addTreeEdge(g, genericvnf1, vfmodule1); - rules.addEdge(g, genericvnf1, serviceInstance1); - rules.addEdge(g, vserver1,vfmodule1); - rules.addTreeEdge(g, vserver1, tenant1); - rules.addTreeEdge(g, tenant1, cloudregion1); - rules.addEdge(g, vfmodule1, volumegroup1); + public MsoRequestVfModuleTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - expectedResult.add(vfmodule); - expectedResult.add(genericvnf); - expectedResult.add(serviceInstance); - expectedResult.add(cloudregion); - expectedResult.add(volumegroup); + @Test + public void run() { + super.run(); + } - } - @Override - protected String getQueryName() { - return "so-request-vfModule"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "vf-module").has("vf-module-id", "vf-module-id-1").has("vf-module-name", "vf-module-name1"); - } - @Override - protected void addParam(Map<String, Object> params) { - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // set up test graph + Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "0", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); + Vertex genericvnf = + graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", + "vnf-id", "vnfid0", "vnf-name", "vnf-name-1", "nf-type", "sample-nf-type"); + Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "2", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserverid0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName0"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + Vertex volumegroup = + graph.addVertex(T.label, "volume-group", T.id, "6", "aai-node-type", "volume-group", + "volume-group-id", "volume-group-id-1", "volume-group-name", "volume-group-name1"); + + Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "10", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-10", "vf-module-name", "vf-module-name10"); + Vertex genericvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "11", "aai-node-type", "generic-vnf", + "vnf-id", "vnfid0", "vnf-name", "vnf-name-10", "nf-type", "sample-nf-type1"); + Vertex serviceInstance1 = graph.addVertex(T.label, "service-instance", T.id, "12", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-10", + "service-instance-name", "service-instance-name-10"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "13", "aai-node-type", + "vserver", "vserver-id", "vserverid10"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "14", "aai-node-type", "tenant", + "tenant-id", "tenantid10", "tenant-name", "tenantName10"); + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "15", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid10", "cloud-owner", "cloudOwnername10"); + Vertex volumegroup1 = graph.addVertex(T.label, "volume-group", T.id, "16", "aai-node-type", + "volume-group", "volume-group-id", "volume-group-id-10", "volume-group-name", + "volume-group-name10"); + + GraphTraversalSource g = graph.traversal(); + + rules.addTreeEdge(g, genericvnf, vfmodule); + rules.addEdge(g, genericvnf, serviceInstance); + rules.addEdge(g, vserver, vfmodule); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addEdge(g, vfmodule, volumegroup); + + // false + rules.addTreeEdge(g, genericvnf1, vfmodule1); + rules.addEdge(g, genericvnf1, serviceInstance1); + rules.addEdge(g, vserver1, vfmodule1); + rules.addTreeEdge(g, vserver1, tenant1); + rules.addTreeEdge(g, tenant1, cloudregion1); + rules.addEdge(g, vfmodule1, volumegroup1); + + expectedResult.add(vfmodule); + expectedResult.add(genericvnf); + expectedResult.add(serviceInstance); + expectedResult.add(cloudregion); + expectedResult.add(volumegroup); + + } + + @Override + protected String getQueryName() { + return "so-request-vfModule"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "vf-module").has("vf-module-id", "vf-module-id-1") + .has("vf-module-name", "vf-module-name1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkCollectionByServiceInstanceTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkCollectionByServiceInstanceTest.java index bb44704..fee5896 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkCollectionByServiceInstanceTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkCollectionByServiceInstanceTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -29,7 +29,7 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -public class NetworkCollectionByServiceInstanceTest extends QueryTest{ +public class NetworkCollectionByServiceInstanceTest extends QueryTest { public NetworkCollectionByServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { super(); } @@ -38,36 +38,42 @@ public class NetworkCollectionByServiceInstanceTest extends QueryTest{ public void run() { super.run(); } + @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "0", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); - //Set up the test graph - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "0", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", - "service-instance-name-1"); - - Vertex collection1 = graph.addVertex(T.label, "collection", T.id, "1", "aai-node-type", "collection"); - - Vertex instancegroup1 = graph.addVertex(T.label, "instance-group", T.id, "2", "aai-node-type", "instance-group", - "id", "id-0", "instance-group-type", "instance-group-type-0","instance-group-role","instance-group-role-0", - "instance-group-function","instance-group-function-0","instance-group-description","instance-group-description-0"); - - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "3", "aai-node-type", "l3-network"); + Vertex collection1 = + graph.addVertex(T.label, "collection", T.id, "1", "aai-node-type", "collection"); + Vertex instancegroup1 = + graph.addVertex(T.label, "instance-group", T.id, "2", "aai-node-type", "instance-group", + "id", "id-0", "instance-group-type", "instance-group-type-0", "instance-group-role", + "instance-group-role-0", "instance-group-function", "instance-group-function-0", + "instance-group-description", "instance-group-description-0"); + Vertex l3network1 = + graph.addVertex(T.label, "l3-network", T.id, "3", "aai-node-type", "l3-network"); - Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "4", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id-2", "service-instance-name", - "service-instance-name-1"); + Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "4", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", + "service-instance-name", "service-instance-name-1"); - Vertex collection2 = graph.addVertex(T.label, "collection", T.id, "5", "aai-node-type", "collection"); + Vertex collection2 = + graph.addVertex(T.label, "collection", T.id, "5", "aai-node-type", "collection"); - Vertex instancegroup2 = graph.addVertex(T.label, "instance-group", T.id, "6", "aai-node-type", "instance-group", - "id", "id-0", "instance-group-type", "instance-group-type-0","instance-group-role","instance-group-role-0", - "instance-group-function","instance-group-function-0","instance-group-description","instance-group-description-0"); + Vertex instancegroup2 = + graph.addVertex(T.label, "instance-group", T.id, "6", "aai-node-type", "instance-group", + "id", "id-0", "instance-group-type", "instance-group-type-0", "instance-group-role", + "instance-group-role-0", "instance-group-function", "instance-group-function-0", + "instance-group-description", "instance-group-description-0"); - Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "7", "aai-node-type", "l3-network"); + Vertex l3network2 = + graph.addVertex(T.label, "l3-network", T.id, "7", "aai-node-type", "l3-network"); GraphTraversalSource g = graph.traversal(); @@ -85,13 +91,16 @@ public class NetworkCollectionByServiceInstanceTest extends QueryTest{ expectedResult.add(l3network1); } + @Override protected String getQueryName() { return "network-collection-ByServiceInstance"; } + @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "service-instance-id-1"); + g.has("aai-node-type", "service-instance").has("service-instance-id", + "service-instance-id-1"); } @Override @@ -99,5 +108,3 @@ public class NetworkCollectionByServiceInstanceTest extends QueryTest{ return; } } - - diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkNameFromNetworkRoleQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkNameFromNetworkRoleQueryTest.java index 9f9dcdf..e4acc25 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkNameFromNetworkRoleQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkNameFromNetworkRoleQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -33,55 +33,61 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class NetworkNameFromNetworkRoleQueryTest extends QueryTest { - public NetworkNameFromNetworkRoleQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public NetworkNameFromNetworkRoleQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex cr1 = graph.addVertex(T.id, "00", "aai-node-type", "cloud-region", "cloud-owner", "foo", "cloud-region-id", "cr1"); - Vertex cr2 = graph.addVertex(T.id, "01", "aai-node-type", "cloud-region", "cloud-owner", "bar", "cloud-region-id", "cr2"); - - Vertex l3net1 = graph.addVertex(T.id, "10", "aai-node-type", "l3-network", - "network-id", "net1", "network-name", "netname1", "network-role", "correct-role"); - Vertex l3net2 = graph.addVertex(T.id, "11", "aai-node-type", "l3-network", - "network-id", "net2", "network-name", "netname2", "network-role", "wrong-role"); - Vertex l3net3 = graph.addVertex(T.id, "12", "aai-node-type", "l3-network", - "network-id", "net3", "network-name", "netname3", "network-role", "correct-role"); - - Vertex np1 = graph.addVertex(T.id, "20", "aai-node-type", "network-policy", "network-policy-id", "npId1"); - Vertex np2 = graph.addVertex(T.id, "21", "aai-node-type", "network-policy", "network-policy-id", "npId2"); - Vertex np3 = graph.addVertex(T.id, "22", "aai-node-type", "network-policy", "network-policy-id", "npId3"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, cr1, l3net1); - rules.addEdge(g, l3net1, np1); - rules.addEdge(g, cr1, l3net2); - rules.addEdge(g, l3net2, np2); - rules.addEdge(g, cr2, l3net3); - rules.addEdge(g, l3net3, np3); - - expectedResult.add(l3net1); - expectedResult.add(np1); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex cr1 = graph.addVertex(T.id, "00", "aai-node-type", "cloud-region", "cloud-owner", + "foo", "cloud-region-id", "cr1"); + Vertex cr2 = graph.addVertex(T.id, "01", "aai-node-type", "cloud-region", "cloud-owner", + "bar", "cloud-region-id", "cr2"); - @Override - protected String getQueryName() { - return "network-name-fromNetwork-role"; - } + Vertex l3net1 = graph.addVertex(T.id, "10", "aai-node-type", "l3-network", "network-id", + "net1", "network-name", "netname1", "network-role", "correct-role"); + Vertex l3net2 = graph.addVertex(T.id, "11", "aai-node-type", "l3-network", "network-id", + "net2", "network-name", "netname2", "network-role", "wrong-role"); + Vertex l3net3 = graph.addVertex(T.id, "12", "aai-node-type", "l3-network", "network-id", + "net3", "network-name", "netname3", "network-role", "correct-role"); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "cloud-region").has("cloud-owner", "foo").has("cloud-region-id", "cr1"); - } + Vertex np1 = graph.addVertex(T.id, "20", "aai-node-type", "network-policy", + "network-policy-id", "npId1"); + Vertex np2 = graph.addVertex(T.id, "21", "aai-node-type", "network-policy", + "network-policy-id", "npId2"); + Vertex np3 = graph.addVertex(T.id, "22", "aai-node-type", "network-policy", + "network-policy-id", "npId3"); - @Override - protected void addParam(Map<String, Object> params) { - params.put("networkRole", "correct-role"); - } + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, cr1, l3net1); + rules.addEdge(g, l3net1, np1); + rules.addEdge(g, cr1, l3net2); + rules.addEdge(g, l3net2, np2); + rules.addEdge(g, cr2, l3net3); + rules.addEdge(g, l3net3, np3); + + expectedResult.add(l3net1); + expectedResult.add(np1); + } + + @Override + protected String getQueryName() { + return "network-name-fromNetwork-role"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "cloud-region").has("cloud-owner", "foo").has("cloud-region-id", + "cr1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("networkRole", "correct-role"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/NfTypefromCloudRegionQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/NfTypefromCloudRegionQueryTest.java index 08a52f1..1093fb7 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/NfTypefromCloudRegionQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/NfTypefromCloudRegionQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,53 +30,64 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class NfTypefromCloudRegionQueryTest extends QueryTest { - public NfTypefromCloudRegionQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public NfTypefromCloudRegionQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "0", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "1", "aai-node-type", "tenant", "tenant-id", "tenantid01", "tenant-name", "tenantName01"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", "vserver-id", "vserver-id-1","vserver-name","vserver-name-1"); - Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1"); - - - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "4", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "5", "aai-node-type", "tenant", "tenant-id", "tenantid2", "tenant-name", "tenantName-2"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver", "vserver-id", "vserver-id-1","vserver-name","vserver-name-1"); - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1"); - - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, tenant,cloudregion); - rules.addTreeEdge(g, vserver,tenant); - rules.addEdge(g, vserver, gnvf); - - rules.addTreeEdge(g, tenant1,cloudregion1); - rules.addTreeEdge(g, vserver1,tenant1); - rules.addEdge(g, vserver1, gnvf1); - - expectedResult.add(gnvf); - - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - @Override - protected String getQueryName() { - return "nfType-fromCloudRegion"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("cloud-region-id", "cloud-region-id-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + Vertex cloudregion = + graph.addVertex(T.label, "cloud-region", T.id, "0", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "1", "aai-node-type", "tenant", + "tenant-id", "tenantid01", "tenant-name", "tenantName01"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1"); + + Vertex cloudregion1 = + graph.addVertex(T.label, "cloud-region", T.id, "4", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "5", "aai-node-type", "tenant", + "tenant-id", "tenantid2", "tenant-name", "tenantName-2"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addTreeEdge(g, vserver, tenant); + rules.addEdge(g, vserver, gnvf); + + rules.addTreeEdge(g, tenant1, cloudregion1); + rules.addTreeEdge(g, vserver1, tenant1); + rules.addEdge(g, vserver1, gnvf1); + + expectedResult.add(gnvf); + + } + + @Override + protected String getQueryName() { + return "nfType-fromCloudRegion"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("cloud-region-id", "cloud-region-id-1"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/OnapQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/OnapQueryTest.java index 138892c..c137d6f 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/OnapQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/OnapQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,9 +19,15 @@ */ package org.onap.aai.rest.search; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; + import com.att.eelf.configuration.EELFManager; + +import java.util.*; +import java.util.stream.Collectors; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Graph; @@ -47,167 +53,152 @@ import org.onap.aai.introspection.Loader; import org.onap.aai.introspection.LoaderFactory; import org.onap.aai.introspection.ModelType; import org.onap.aai.nodes.NodeIngestor; +import org.onap.aai.query.builder.GremlinTraversal; +import org.onap.aai.restcore.search.GremlinGroovyShell; +import org.onap.aai.restcore.search.GroovyQueryBuilder; +import org.onap.aai.serialization.db.EdgeSerializer; +import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; 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.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.rules.SpringClassRule; import org.springframework.test.context.junit4.rules.SpringMethodRule; -import org.onap.aai.query.builder.GremlinTraversal; -import org.onap.aai.restcore.search.GremlinGroovyShell; -import org.onap.aai.restcore.search.GroovyQueryBuilder; -import org.onap.aai.serialization.db.EdgeSerializer; -import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import org.onap.aai.serialization.engines.QueryStyle; -import org.onap.aai.serialization.engines.TransactionalGraphEngine; - -import java.util.*; -import java.util.stream.Collectors; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.when; @RunWith(Parameterized.class) -@ContextConfiguration(classes = { - ConfigConfiguration.class, - AAIConfigTranslator.class, - EdgeIngestor.class, - EdgeSerializer.class, - NodeIngestor.class, - SpringContextAware.class, - SearchConfiguration.class, - IntrospectionConfig.class -}) -@TestPropertySource(properties = { - "schema.uri.base.path = /aai", - "schema.ingest.file = src/test/resources/application-onap-test.properties" -}) +@ContextConfiguration( + classes = {ConfigConfiguration.class, AAIConfigTranslator.class, EdgeIngestor.class, + EdgeSerializer.class, NodeIngestor.class, SpringContextAware.class, + SearchConfiguration.class, IntrospectionConfig.class}) +@TestPropertySource( + properties = {"schema.uri.base.path = /aai", + "schema.ingest.file = src/test/resources/application-onap-test.properties"}) public abstract class OnapQueryTest { - @ClassRule + @ClassRule public static final SpringClassRule springClassRule = new SpringClassRule(); @Rule public final SpringMethodRule springMethodRule = new SpringMethodRule(); - protected Logger logger; - protected Graph graph; - protected GremlinGroovyShell shell; - @Mock protected TransactionalGraphEngine dbEngine; - protected final List<Vertex> expectedResult = new ArrayList<>(); - - @Autowired - protected EdgeIngestor edgeRules; - - @Autowired - protected EdgeSerializer rules; - - @Autowired - protected LoaderFactory loaderFactory; - - @Autowired - protected SchemaVersions schemaVersions; - - @Autowired - protected GremlinServerSingleton gremlinServerSingleton; - - protected Loader loader; - protected GraphTraversalSource gts; - - @Parameterized.Parameter(value = 0) - public SchemaVersion version; - - @Parameterized.Parameters(name = "Version.{0}") - public static Collection<Object[]> data() { - return Arrays.asList(new Object[][]{ - {new SchemaVersion("v11")}, - {new SchemaVersion("v12")}, - {new SchemaVersion("v13")}, - {new SchemaVersion("v14")} - }); - } - - protected String query; - - LinkedHashMap <String, Object> params; - - @BeforeClass - public static void setupBundleconfig() { - System.setProperty("AJSC_HOME", "./"); - System.setProperty("BUNDLECONFIG_DIR", "src/main/resources/"); - } - - @Before - public void setUp() throws AAIException, NoEdgeRuleFoundException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException { - System.setProperty("AJSC_HOME", "."); - System.setProperty("BUNDLECONFIG_DIR", "src/main/resources"); - logger = LoggerFactory.getLogger(getClass()); - MockitoAnnotations.initMocks(this); - graph = TinkerGraph.open(); - gts = graph.traversal(); - createGraph(); - shell = new GremlinGroovyShell(); - loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, version); - setUpQuery(); - } - - - protected void setUpQuery() { - query = gremlinServerSingleton.getStoredQueryFromConfig(getQueryName()); - params = new LinkedHashMap <>(); - addParam(params); - when(dbEngine.getQueryBuilder(any(QueryStyle.class))).thenReturn(new GremlinTraversal<>(loader, graph.traversal())); - logger.info("Stored query in abstraction form {}", query); - query = new GroovyQueryBuilder().executeTraversal(dbEngine, query, params); - logger.info("After converting to gremlin query {}", query); - query = "g" + query; - GraphTraversal<Vertex, Vertex> g = graph.traversal().V(); - addStartNode(g); - params.put("g", g); - } - - public void run() { - - GraphTraversal<Vertex, Vertex> result = (GraphTraversal<Vertex, Vertex>)shell.executeTraversal(query, params); - - List<Vertex> vertices = result.toList(); - - logger.info("Expected result set of vertexes [{}]", convert(expectedResult)); - logger.info("Actual Result set of vertexes [{}]", convert(vertices)); - - List<Vertex> nonDuplicateExpectedResult = new ArrayList<>(new HashSet<>(expectedResult)); - vertices = new ArrayList<>(new HashSet<>(vertices)); - - nonDuplicateExpectedResult.sort(Comparator.comparing(vertex -> vertex.id().toString())); - vertices.sort(Comparator.comparing(vertex -> vertex.id().toString())); - - - // Use this instead of the assertTrue as this provides more useful - // debugging information such as this when expected and actual differ: - // java.lang.AssertionError: Expected all the vertices to be found - // Expected :[v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] - // Actual :[v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] - assertEquals("Expected all the vertices to be found", nonDuplicateExpectedResult, vertices); - - } - - protected String convert(List<Vertex> vertices){ - return vertices - .stream() - .map(vertex -> vertex.property("aai-node-type").value().toString()) - .collect(Collectors.joining(",")); - } - - protected abstract void createGraph() throws AAIException, NoEdgeRuleFoundException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException; - - protected abstract String getQueryName(); - - protected abstract void addStartNode(GraphTraversal<Vertex, Vertex> g); + protected Logger logger; + protected Graph graph; + protected GremlinGroovyShell shell; + @Mock + protected TransactionalGraphEngine dbEngine; + protected final List<Vertex> expectedResult = new ArrayList<>(); + + @Autowired + protected EdgeIngestor edgeRules; + + @Autowired + protected EdgeSerializer rules; + + @Autowired + protected LoaderFactory loaderFactory; + + @Autowired + protected SchemaVersions schemaVersions; + + @Autowired + protected GremlinServerSingleton gremlinServerSingleton; + + protected Loader loader; + protected GraphTraversalSource gts; + + @Parameterized.Parameter(value = 0) + public SchemaVersion version; + + @Parameterized.Parameters(name = "Version.{0}") + public static Collection<Object[]> data() { + return Arrays.asList(new Object[][] {{new SchemaVersion("v11")}, {new SchemaVersion("v12")}, + {new SchemaVersion("v13")}, {new SchemaVersion("v14")}}); + } + + protected String query; + + LinkedHashMap<String, Object> params; + + @BeforeClass + public static void setupBundleconfig() { + System.setProperty("AJSC_HOME", "./"); + System.setProperty("BUNDLECONFIG_DIR", "src/main/resources/"); + } + + @Before + public void setUp() throws AAIException, NoEdgeRuleFoundException, EdgeRuleNotFoundException, + AmbiguousRuleChoiceException { + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "src/main/resources"); + logger = LoggerFactory.getLogger(getClass()); + MockitoAnnotations.initMocks(this); + graph = TinkerGraph.open(); + gts = graph.traversal(); + createGraph(); + shell = new GremlinGroovyShell(); + loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, version); + setUpQuery(); + } + + protected void setUpQuery() { + query = gremlinServerSingleton.getStoredQueryFromConfig(getQueryName()); + params = new LinkedHashMap<>(); + addParam(params); + when(dbEngine.getQueryBuilder(any(QueryStyle.class))) + .thenReturn(new GremlinTraversal<>(loader, graph.traversal())); + logger.info("Stored query in abstraction form {}", query); + query = new GroovyQueryBuilder().executeTraversal(dbEngine, query, params); + logger.info("After converting to gremlin query {}", query); + query = "g" + query; + GraphTraversal<Vertex, Vertex> g = graph.traversal().V(); + addStartNode(g); + params.put("g", g); + } + + public void run() { + + GraphTraversal<Vertex, Vertex> result = + (GraphTraversal<Vertex, Vertex>) shell.executeTraversal(query, params); + + List<Vertex> vertices = result.toList(); + + logger.info("Expected result set of vertexes [{}]", convert(expectedResult)); + logger.info("Actual Result set of vertexes [{}]", convert(vertices)); + + List<Vertex> nonDuplicateExpectedResult = new ArrayList<>(new HashSet<>(expectedResult)); + vertices = new ArrayList<>(new HashSet<>(vertices)); + + nonDuplicateExpectedResult.sort(Comparator.comparing(vertex -> vertex.id().toString())); + vertices.sort(Comparator.comparing(vertex -> vertex.id().toString())); + + // Use this instead of the assertTrue as this provides more useful + // debugging information such as this when expected and actual differ: + // java.lang.AssertionError: Expected all the vertices to be found + // Expected :[v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] + // Actual :[v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] + assertEquals("Expected all the vertices to be found", nonDuplicateExpectedResult, vertices); + + } + + protected String convert(List<Vertex> vertices) { + return vertices.stream().map(vertex -> vertex.property("aai-node-type").value().toString()) + .collect(Collectors.joining(",")); + } + + protected abstract void createGraph() throws AAIException, NoEdgeRuleFoundException, + EdgeRuleNotFoundException, AmbiguousRuleChoiceException; - protected abstract void addParam(Map<String, Object> params); + protected abstract String getQueryName(); + + protected abstract void addStartNode(GraphTraversal<Vertex, Vertex> g); + + protected abstract void addParam(Map<String, Object> params); } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/OwningEntityfromServiceInstance.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/OwningEntityfromServiceInstance.java index 39e29ec..c4f36dc 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/OwningEntityfromServiceInstance.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/OwningEntityfromServiceInstance.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,48 +29,52 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class OwningEntityfromServiceInstance extends QueryTest { - public OwningEntityfromServiceInstance () throws AAIException, NoEdgeRuleFoundException { - super(); - } + public OwningEntityfromServiceInstance() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - // Set up the test graph - Vertex service_instance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-1"); - Vertex owning_entity = graph.addVertex(T.label, "owning-entity", T.id, "2", "aai-node-type", "owning-entity", "owning-entity-id", "owning-entity-id-1", "owning-entity-name", "owning-entity-name1"); + // Set up the test graph + Vertex service_instance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-1"); + Vertex owning_entity = graph.addVertex(T.label, "owning-entity", T.id, "2", "aai-node-type", + "owning-entity", "owning-entity-id", "owning-entity-id-1", "owning-entity-name", + "owning-entity-name1"); - // adding extra vertices and edges which shouldn't be picked. - Vertex service_instance2 = graph.addVertex(T.label, "service-instance", T.id, "3", "aai-node-type", "service-instance", "service-instance-id", "service-instance-2"); - Vertex owning_entity2 = graph.addVertex(T.label, "owning-entity", T.id, "4", "aai-node-type", "owning-entity", "owning-entity-id", "owning-entity-id-2", "owning-entity-name", "owning-entity-name2"); + // adding extra vertices and edges which shouldn't be picked. + Vertex service_instance2 = graph.addVertex(T.label, "service-instance", T.id, "3", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-2"); + Vertex owning_entity2 = graph.addVertex(T.label, "owning-entity", T.id, "4", + "aai-node-type", "owning-entity", "owning-entity-id", "owning-entity-id-2", + "owning-entity-name", "owning-entity-name2"); - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, owning_entity, service_instance); - rules.addEdge(g, owning_entity2, service_instance2); + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, owning_entity, service_instance); + rules.addEdge(g, owning_entity2, service_instance2); - expectedResult.add(owning_entity); - } + expectedResult.add(owning_entity); + } - @Override - protected String getQueryName() { - return "owning-entity-fromService-instance"; - } + @Override + protected String getQueryName() { + return "owning-entity-fromService-instance"; + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("service-instance-id", "service-instance-1"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("service-instance-id", "service-instance-1"); + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/PathQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/PathQueryTest.java index 84d7a59..f405728 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/PathQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/PathQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,21 +19,21 @@ */ package org.onap.aai.rest.search; +import java.util.List; + import org.apache.tinkerpop.gremlin.process.traversal.Path; import org.onap.aai.exceptions.AAIException; -import java.util.List; - public abstract class PathQueryTest extends QueryTest { - protected List<Path> pathList; + protected List<Path> pathList; - public PathQueryTest() throws AAIException { - super(); - } + public PathQueryTest() throws AAIException { + super(); + } - @Override - public void run() { - pathList = (List<Path>)shell.executeTraversal(query, params).toList(); - } + @Override + public void run() { + pathList = (List<Path>) shell.executeTraversal(query, params).toList(); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/PendingTopologyDetailTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/PendingTopologyDetailTest.java index 9de2607..28dbcb8 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/PendingTopologyDetailTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/PendingTopologyDetailTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,7 +26,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; @@ -42,121 +41,158 @@ public class PendingTopologyDetailTest extends QueryTest { @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-0", "vnf-name", "vnf-name-0"); - Vertex platform = graph.addVertex(T.label, "platform", T.id, "2", "aai-node-type", "platform", "platform-name", "platform0"); - Vertex lineofbusiness = graph.addVertex(T.label, "line-of-business", T.id, "3", "aai-node-type", "line-of-business", "line-of-business-name", "business0"); - Vertex servinst = graph.addVertex(T.label, "service-instance", T.id, "4", "aai-node-type", "service-instance", "service-instance-id", "servInstId0", "service-type", "servType0"); - Vertex owningentity = graph.addVertex(T.label, "owning-entity", T.id, "5", "aai-node-type", "owning-entity", "owning-entity-id", "entityId0", "owning-entity-name", "entityName0"); - Vertex project = graph.addVertex(T.label, "project", T.id, "6", "aai-node-type", "project", "project-name", "project0"); - Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "38", "aai-node-type", "vf-module", "vf-module-id", "1"); - Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "7", "aai-node-type", "vnfc", "vnfc-name", "vnfc0", "nfc-naming-code", "namingCode0", "nfc-function", "function0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "8", "aai-node-type", "vserver", "vserver-id", "vserverid0"); - Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "9", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "10", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address0"); - Vertex subnet4 = graph.addVertex(T.label, "subnet", T.id, "11", "aai-node-type", "subnet", "subnet-id", "subnet4-id0"); - Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "12", "aai-node-type", "l3-network", "network-id", "network4-id0", "network-name", "network4-name0"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "13", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address0"); - Vertex subnet6 = graph.addVertex(T.label, "subnet", T.id, "14", "aai-node-type", "subnet", "subnet-id", "subnet6-id0"); - Vertex l3network6 = graph.addVertex(T.label, "l3-network", T.id, "15", "aai-node-type", "l3-network", "network-id", "network6-id0", "network-name", "network6-name0"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "16", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName0"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "17", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "18", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex complex = graph.addVertex(T.label, "pserver", T.id, "19", "aai-node-type", "complex", "physical-location-id", "locationId", "physical-location-type", "locationType", "physical-location-id", "locationId", - "city", "cityName", "state", "stateName", "postal-code", "zip", "country", "countryName"); - Vertex vipipv4addresslist = graph.addVertex(T.label, "vip-ipv4-address-list", T.id, "20", "aai-node-type", "vip-ipv4-address-list", "vip-ipv4-address", "vip-ipv4-address0"); - Vertex vipipv6addresslist = graph.addVertex(T.label, "vip-ipv6-address-list", T.id, "21", "aai-node-type", "vip-ipv6-address-list", "vip-ipv6-address", "vip-ipv6-address0"); - - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "40", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); - Vertex platform1 = graph.addVertex(T.label, "platform", T.id, "41", "aai-node-type", "platform", "platform-name", "platform1"); - - Vertex vfmodule2 = graph.addVertex(T.label, "vf-module", T.id, "39", "aai-node-type", "vf-module", "vf-module-id", "2"); - Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "30", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-2", "vnf-name", "vnf-name2"); - Vertex vnfc2 = graph.addVertex(T.label, "vnfc", T.id, "31", "aai-node-type", "vnfc", "vnfc-name", "vnfc2", "nfc-naming-code", "namingCode2", "nfc-function", "function2"); - Vertex vipipv4addresslist2 = graph.addVertex(T.label, "vip-ipv4-address-list", T.id, "32", "aai-node-type", "vip-ipv4-address-list", "vip-ipv4-addres", "vip-ipv4-address2"); - Vertex vipipv6addresslist2 = graph.addVertex(T.label, "vip-ipv6-address-list", T.id, "33", "aai-node-type", "vip-ipv6-address-list", "vip-ipv6-address", "vip-ipv6-address2"); - Vertex subnet42 = graph.addVertex(T.label, "subnet", T.id, "34", "aai-node-type", "subnet", "subnet-id", "subnet4-id-0"); - Vertex l3network42 = graph.addVertex(T.label, "l3-network", T.id, "35", "aai-node-type", "l3-network", "network-id", "network4-id2", "network-name", "network4-name2"); - Vertex subnet62 = graph.addVertex(T.label, "subnet", T.id, "36", "aai-node-type", "subnet", "subnet-id", "subnet6-id2"); - Vertex l3network62 = graph.addVertex(T.label, "l3-network", T.id, "37", "aai-node-type", "l3-network", "network-id", "network6-id2", "network-name", "network6-name2"); - + // Set up the test graph + + Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-0", "vnf-name", "vnf-name-0"); + Vertex platform = graph.addVertex(T.label, "platform", T.id, "2", "aai-node-type", + "platform", "platform-name", "platform0"); + Vertex lineofbusiness = graph.addVertex(T.label, "line-of-business", T.id, "3", + "aai-node-type", "line-of-business", "line-of-business-name", "business0"); + Vertex servinst = graph.addVertex(T.label, "service-instance", T.id, "4", "aai-node-type", + "service-instance", "service-instance-id", "servInstId0", "service-type", "servType0"); + Vertex owningentity = graph.addVertex(T.label, "owning-entity", T.id, "5", "aai-node-type", + "owning-entity", "owning-entity-id", "entityId0", "owning-entity-name", "entityName0"); + Vertex project = graph.addVertex(T.label, "project", T.id, "6", "aai-node-type", "project", + "project-name", "project0"); + Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "38", "aai-node-type", + "vf-module", "vf-module-id", "1"); + Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "7", "aai-node-type", "vnfc", + "vnfc-name", "vnfc0", "nfc-naming-code", "namingCode0", "nfc-function", "function0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "8", "aai-node-type", "vserver", + "vserver-id", "vserverid0"); + Vertex linterface = + graph.addVertex(T.label, "l-interface", T.id, "9", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "10", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address0"); + Vertex subnet4 = graph.addVertex(T.label, "subnet", T.id, "11", "aai-node-type", "subnet", + "subnet-id", "subnet4-id0"); + Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "12", "aai-node-type", + "l3-network", "network-id", "network4-id0", "network-name", "network4-name0"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "13", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address0"); + Vertex subnet6 = graph.addVertex(T.label, "subnet", T.id, "14", "aai-node-type", "subnet", + "subnet-id", "subnet6-id0"); + Vertex l3network6 = graph.addVertex(T.label, "l3-network", T.id, "15", "aai-node-type", + "l3-network", "network-id", "network6-id0", "network-name", "network6-name0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "16", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName0"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "17", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "18", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex complex = graph.addVertex(T.label, "pserver", T.id, "19", "aai-node-type", "complex", + "physical-location-id", "locationId", "physical-location-type", "locationType", + "physical-location-id", "locationId", "city", "cityName", "state", "stateName", + "postal-code", "zip", "country", "countryName"); + Vertex vipipv4addresslist = graph.addVertex(T.label, "vip-ipv4-address-list", T.id, "20", + "aai-node-type", "vip-ipv4-address-list", "vip-ipv4-address", "vip-ipv4-address0"); + Vertex vipipv6addresslist = graph.addVertex(T.label, "vip-ipv6-address-list", T.id, "21", + "aai-node-type", "vip-ipv6-address-list", "vip-ipv6-address", "vip-ipv6-address0"); + + Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "40", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); + Vertex platform1 = graph.addVertex(T.label, "platform", T.id, "41", "aai-node-type", + "platform", "platform-name", "platform1"); + + Vertex vfmodule2 = graph.addVertex(T.label, "vf-module", T.id, "39", "aai-node-type", + "vf-module", "vf-module-id", "2"); + Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "30", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2", "vnf-name", "vnf-name2"); + Vertex vnfc2 = graph.addVertex(T.label, "vnfc", T.id, "31", "aai-node-type", "vnfc", + "vnfc-name", "vnfc2", "nfc-naming-code", "namingCode2", "nfc-function", "function2"); + Vertex vipipv4addresslist2 = graph.addVertex(T.label, "vip-ipv4-address-list", T.id, "32", + "aai-node-type", "vip-ipv4-address-list", "vip-ipv4-addres", "vip-ipv4-address2"); + Vertex vipipv6addresslist2 = graph.addVertex(T.label, "vip-ipv6-address-list", T.id, "33", + "aai-node-type", "vip-ipv6-address-list", "vip-ipv6-address", "vip-ipv6-address2"); + Vertex subnet42 = graph.addVertex(T.label, "subnet", T.id, "34", "aai-node-type", "subnet", + "subnet-id", "subnet4-id-0"); + Vertex l3network42 = graph.addVertex(T.label, "l3-network", T.id, "35", "aai-node-type", + "l3-network", "network-id", "network4-id2", "network-name", "network4-name2"); + Vertex subnet62 = graph.addVertex(T.label, "subnet", T.id, "36", "aai-node-type", "subnet", + "subnet-id", "subnet6-id2"); + Vertex l3network62 = graph.addVertex(T.label, "l3-network", T.id, "37", "aai-node-type", + "l3-network", "network-id", "network6-id2", "network-name", "network6-name2"); + GraphTraversalSource g = graph.traversal(); rules.addEdge(g, genericvnf, platform); - rules.addEdge(g, genericvnf, lineofbusiness); - rules.addEdge(g, genericvnf, servinst); - rules.addEdge(g, owningentity, servinst); - rules.addEdge(g, project, servinst); - rules.addTreeEdge(g, genericvnf, vfmodule); - rules.addEdge(g, vfmodule, vnfc); - //rules.addEdge(g, genericvnf, vnfc); - rules.addEdge(g, vnfc, vserver); - rules.addTreeEdge(g, vserver, tenant); - rules.addTreeEdge(g, tenant, cloudregion); - rules.addEdge(g, pserver, vserver); - rules.addEdge(g, complex, pserver); - rules.addTreeEdge(g, linterface, vserver); - rules.addTreeEdge(g, l3inter1ipv4addresslist, linterface); - rules.addEdge(g, l3inter1ipv4addresslist, subnet4); - rules.addTreeEdge(g, l3network4, subnet4); - rules.addTreeEdge(g, vnfc, l3inter1ipv4addresslist); - rules.addTreeEdge(g, l3inter1ipv6addresslist, linterface); - rules.addEdge(g, l3inter1ipv6addresslist, subnet6); - rules.addTreeEdge(g, l3network6, subnet6); - rules.addTreeEdge(g, vnfc, l3inter1ipv6addresslist); - rules.addTreeEdge(g, vipipv4addresslist, cloudregion); - rules.addEdge(g, vipipv4addresslist, subnet4); - rules.addEdge(g, vnfc, vipipv4addresslist); - rules.addTreeEdge(g, vipipv6addresslist, cloudregion); - rules.addEdge(g, vipipv6addresslist, subnet6); - rules.addEdge(g, vnfc, vipipv6addresslist); - - rules.addEdge(g, genericvnf, platform1); - - - // false - rules.addTreeEdge(g, genericvnf2, vfmodule2); + rules.addEdge(g, genericvnf, lineofbusiness); + rules.addEdge(g, genericvnf, servinst); + rules.addEdge(g, owningentity, servinst); + rules.addEdge(g, project, servinst); + rules.addTreeEdge(g, genericvnf, vfmodule); + rules.addEdge(g, vfmodule, vnfc); + // rules.addEdge(g, genericvnf, vnfc); + rules.addEdge(g, vnfc, vserver); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addEdge(g, pserver, vserver); + rules.addEdge(g, complex, pserver); + rules.addTreeEdge(g, linterface, vserver); + rules.addTreeEdge(g, l3inter1ipv4addresslist, linterface); + rules.addEdge(g, l3inter1ipv4addresslist, subnet4); + rules.addTreeEdge(g, l3network4, subnet4); + rules.addTreeEdge(g, vnfc, l3inter1ipv4addresslist); + rules.addTreeEdge(g, l3inter1ipv6addresslist, linterface); + rules.addEdge(g, l3inter1ipv6addresslist, subnet6); + rules.addTreeEdge(g, l3network6, subnet6); + rules.addTreeEdge(g, vnfc, l3inter1ipv6addresslist); + rules.addTreeEdge(g, vipipv4addresslist, cloudregion); + rules.addEdge(g, vipipv4addresslist, subnet4); + rules.addEdge(g, vnfc, vipipv4addresslist); + rules.addTreeEdge(g, vipipv6addresslist, cloudregion); + rules.addEdge(g, vipipv6addresslist, subnet6); + rules.addEdge(g, vnfc, vipipv6addresslist); + + rules.addEdge(g, genericvnf, platform1); + + // false + rules.addTreeEdge(g, genericvnf2, vfmodule2); rules.addEdge(g, vfmodule2, vnfc2); - rules.addTreeEdge(g, vipipv4addresslist2, cloudregion); - rules.addTreeEdge(g, vipipv6addresslist2, cloudregion); - rules.addEdge(g, vnfc2, vipipv4addresslist2); - rules.addEdge(g, vnfc2, vipipv6addresslist2); - rules.addEdge(g, vipipv4addresslist2, subnet42); - rules.addEdge(g, vipipv6addresslist2, subnet62); - rules.addTreeEdge(g, l3network42, subnet42); - rules.addTreeEdge(g, l3network62, subnet62); - - rules.addEdge(g, genericvnf1, lineofbusiness); - - - expectedResult.add(genericvnf); - expectedResult.add(platform); - expectedResult.add(lineofbusiness); - expectedResult.add(owningentity); - expectedResult.add(project); - expectedResult.add(vfmodule); - expectedResult.add(vnfc); - expectedResult.add(l3inter1ipv4addresslist); - expectedResult.add(subnet4); - expectedResult.add(l3network4); - expectedResult.add(l3inter1ipv6addresslist); - expectedResult.add(subnet6); - expectedResult.add(l3network6); - expectedResult.add(vipipv4addresslist); - expectedResult.add(vipipv6addresslist); - - expectedResult.add(platform1); + rules.addTreeEdge(g, vipipv4addresslist2, cloudregion); + rules.addTreeEdge(g, vipipv6addresslist2, cloudregion); + rules.addEdge(g, vnfc2, vipipv4addresslist2); + rules.addEdge(g, vnfc2, vipipv6addresslist2); + rules.addEdge(g, vipipv4addresslist2, subnet42); + rules.addEdge(g, vipipv6addresslist2, subnet62); + rules.addTreeEdge(g, l3network42, subnet42); + rules.addTreeEdge(g, l3network62, subnet62); + + rules.addEdge(g, genericvnf1, lineofbusiness); + + expectedResult.add(genericvnf); + expectedResult.add(platform); + expectedResult.add(lineofbusiness); + expectedResult.add(owningentity); + expectedResult.add(project); + expectedResult.add(vfmodule); + expectedResult.add(vnfc); + expectedResult.add(l3inter1ipv4addresslist); + expectedResult.add(subnet4); + expectedResult.add(l3network4); + expectedResult.add(l3inter1ipv6addresslist); + expectedResult.add(subnet6); + expectedResult.add(l3network6); + expectedResult.add(vipipv4addresslist); + expectedResult.add(vipipv6addresslist); + + expectedResult.add(platform1); } @Override protected String getQueryName() { - return "pending-topology-detail"; + return "pending-topology-detail"; } + @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("vnf-id", "vnf-id-0"); + g.has("aai-node-type", "generic-vnf").has("vnf-id", "vnf-id-0"); } + @Override protected void addParam(Map<String, Object> params) { return; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/PnfTopologyQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/PnfTopologyQueryTest.java index 21da962..b501ed6 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/PnfTopologyQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/PnfTopologyQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,6 +18,7 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.rest.search; + import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -26,80 +27,94 @@ import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Ignore; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class PnfTopologyQueryTest extends QueryTest { - public PnfTopologyQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "0", "aai-node-type", "pnf", "pnf-name", "pnf1name"); - Vertex complex = graph.addVertex(T.label, "complex", T.id, "1", "aai-node-type", "complex", "physical-location-id", "clli"); - Vertex pnf1int1 = graph.addVertex(T.label, "p-interface", T.id, "2", "aai-node-type", "p-interface", "interface-name", "ge0/0/0"); - Vertex pnf1int2 = graph.addVertex(T.label, "p-interface", T.id, "3", "aai-node-type", "p-interface", "interface-name", "ge0/0/1"); - Vertex pnf1int3 = graph.addVertex(T.label, "p-interface", T.id, "4", "aai-node-type", "p-interface", "interface-name", "ge0/0/2"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", "pservername"); - Vertex pserverint = graph.addVertex(T.label, "p-interface", T.id, "6", "aai-node-type", "p-interface", "interface-name", "xe0/0/0"); - Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "7", "aai-node-type", "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); - Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "8", "aai-node-type", "pnf", "pnf-name", "pnf2name"); - Vertex pnf2int = graph.addVertex(T.label, "p-interface", T.id, "9", "aai-node-type", "p-interface", "interface-name", "ge0/1/0"); - Vertex plink2 = graph.addVertex(T.label, "physical-link", T.id, "10", "aai-node-type", "physical-link", "link-name", "ge0/0/1-to-ge0/1/0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", "vserver-name", "vservername"); - Vertex pserverint2 = graph.addVertex(T.label, "p-interface", T.id, "12", "aai-node-type", "p-interface", "interface-name", "xe0/0/1"); - Vertex pnf2int2 = graph.addVertex(T.label, "p-interface", T.id, "13", "aai-node-type", "p-interface", "interface-name", "ge0/1/0"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, pnf1, complex); - rules.addTreeEdge(g, pnf1, pnf1int1); - rules.addTreeEdge(g, pnf1, pnf1int2); - rules.addTreeEdge(g, pnf1, pnf1int3); - rules.addEdge(g, pserver, complex); - rules.addTreeEdge(g, pserver, pserverint); - rules.addEdge(g, pnf1int1, plink1); - rules.addEdge(g, pserverint, plink1); - rules.addEdge(g, pnf2, complex); - rules.addTreeEdge(g, pnf2, pnf2int); - rules.addEdge(g, pnf1int2, plink2); - rules.addEdge(g, pnf2int, plink2); - rules.addEdge(g, vserver, pserver); - rules.addTreeEdge(g, pserver, pserverint2); - rules.addTreeEdge(g, pnf2, pnf2int2); + public PnfTopologyQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "0", "aai-node-type", "pnf", "pnf-name", + "pnf1name"); + Vertex complex = graph.addVertex(T.label, "complex", T.id, "1", "aai-node-type", "complex", + "physical-location-id", "clli"); + Vertex pnf1int1 = graph.addVertex(T.label, "p-interface", T.id, "2", "aai-node-type", + "p-interface", "interface-name", "ge0/0/0"); + Vertex pnf1int2 = graph.addVertex(T.label, "p-interface", T.id, "3", "aai-node-type", + "p-interface", "interface-name", "ge0/0/1"); + Vertex pnf1int3 = graph.addVertex(T.label, "p-interface", T.id, "4", "aai-node-type", + "p-interface", "interface-name", "ge0/0/2"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "pservername"); + Vertex pserverint = graph.addVertex(T.label, "p-interface", T.id, "6", "aai-node-type", + "p-interface", "interface-name", "xe0/0/0"); + Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "7", "aai-node-type", + "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); + Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "8", "aai-node-type", "pnf", "pnf-name", + "pnf2name"); + Vertex pnf2int = graph.addVertex(T.label, "p-interface", T.id, "9", "aai-node-type", + "p-interface", "interface-name", "ge0/1/0"); + Vertex plink2 = graph.addVertex(T.label, "physical-link", T.id, "10", "aai-node-type", + "physical-link", "link-name", "ge0/0/1-to-ge0/1/0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", + "vserver-name", "vservername"); + Vertex pserverint2 = graph.addVertex(T.label, "p-interface", T.id, "12", "aai-node-type", + "p-interface", "interface-name", "xe0/0/1"); + Vertex pnf2int2 = graph.addVertex(T.label, "p-interface", T.id, "13", "aai-node-type", + "p-interface", "interface-name", "ge0/1/0"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, pnf1, complex); + rules.addTreeEdge(g, pnf1, pnf1int1); + rules.addTreeEdge(g, pnf1, pnf1int2); + rules.addTreeEdge(g, pnf1, pnf1int3); + rules.addEdge(g, pserver, complex); + rules.addTreeEdge(g, pserver, pserverint); + rules.addEdge(g, pnf1int1, plink1); + rules.addEdge(g, pserverint, plink1); + rules.addEdge(g, pnf2, complex); + rules.addTreeEdge(g, pnf2, pnf2int); + rules.addEdge(g, pnf1int2, plink2); + rules.addEdge(g, pnf2int, plink2); + rules.addEdge(g, vserver, pserver); + rules.addTreeEdge(g, pserver, pserverint2); + rules.addTreeEdge(g, pnf2, pnf2int2); + + expectedResult.add(pnf1); + expectedResult.add(complex); + expectedResult.add(pnf1int1); + expectedResult.add(pnf1int2); + expectedResult.add(pserver); + expectedResult.add(pserverint); + expectedResult.add(plink1); + expectedResult.add(pnf2); + expectedResult.add(pnf2int); + expectedResult.add(plink2); + } - expectedResult.add(pnf1); - expectedResult.add(complex); - expectedResult.add(pnf1int1); - expectedResult.add(pnf1int2); - expectedResult.add(pserver); - expectedResult.add(pserverint); - expectedResult.add(plink1); - expectedResult.add(pnf2); - expectedResult.add(pnf2int); - expectedResult.add(plink2); - } + @Override + protected String getQueryName() { + // TODO Auto-generated method stub + return "pnf-topology"; + } - @Override - protected String getQueryName() { - // TODO Auto-generated method stub - return "pnf-topology"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("pnf-name", "pnf1name"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("pnf-name", "pnf1name"); + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverFromFqdnFirstTokenTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverFromFqdnFirstTokenTest.java index 6b3fcb2..6601e9a 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverFromFqdnFirstTokenTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverFromFqdnFirstTokenTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,6 @@ */ package org.onap.aai.rest.search; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -31,44 +30,52 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class PserverFromFqdnFirstTokenTest extends QueryTest { - public PserverFromFqdnFirstTokenTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public PserverFromFqdnFirstTokenTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void test() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", + "hostname", "hostname-10", "fqdn", "fqdn-1.abc.com", "source-of-truth", "RCT"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "hostname-20", "fqdn", "fqdn-2.abc.com", "source-of-truth", "RCT"); + Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "6", "aai-node-type", "pserver", + "hostname", "hostname-30", "fqdn", "fqdn-13.abc.com", "source-of-truth", "AAIRctFeed"); + Vertex pserver4 = graph.addVertex(T.label, "pserver", T.id, "7", "aai-node-type", "pserver", + "hostname", "hostname-40", "fqdn", "fqdn-12.abc.com", "source-of-truth", "RO"); + Vertex pserver5 = graph.addVertex(T.label, "pserver", T.id, "8", "aai-node-type", "pserver", + "hostname", "hostname-50", "fqdn", "fqdn-20.abc.com", "source-of-truth", "RO"); - @Test - public void test() { - super.run(); - } + expectedResult.add(pserver1); + expectedResult.add(pserver3); - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", "hostname", "hostname-10", "fqdn", "fqdn-1.abc.com", "source-of-truth", "RCT"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", "hostname-20", "fqdn", "fqdn-2.abc.com", "source-of-truth", "RCT"); - Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "6", "aai-node-type", "pserver", "hostname", "hostname-30", "fqdn", "fqdn-13.abc.com", "source-of-truth", "AAIRctFeed"); - Vertex pserver4 = graph.addVertex(T.label, "pserver", T.id, "7", "aai-node-type", "pserver", "hostname", "hostname-40", "fqdn", "fqdn-12.abc.com", "source-of-truth", "RO"); - Vertex pserver5 = graph.addVertex(T.label, "pserver", T.id, "8", "aai-node-type", "pserver", "hostname", "hostname-50", "fqdn", "fqdn-20.abc.com", "source-of-truth", "RO"); - - expectedResult.add(pserver1); - expectedResult.add(pserver3); + } - } + @Override + protected String getQueryName() { + return "pserver-fromFqdnFirstToken"; + } - @Override - protected String getQueryName() { - return "pserver-fromFqdnFirstToken"; - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "pserver"); + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type","pserver"); - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("fqdnFirstToken", "fqdn-1"); + params.put("sourcesOfTruth", "RCT', 'AAIRctFeed"); // placement of single quotes is + // intentional, values between the first + // and last values must be in single + // quotes - @Override - protected void addParam(Map<String, Object> params) { - params.put("fqdnFirstToken", "fqdn-1"); - params.put("sourcesOfTruth", "RCT', 'AAIRctFeed"); //placement of single quotes is intentional, values between the first and last values must be in single quotes - - } + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverFromHostnameFirstTokenTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverFromHostnameFirstTokenTest.java index 9fe290b..680bba9 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverFromHostnameFirstTokenTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverFromHostnameFirstTokenTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,6 @@ */ package org.onap.aai.rest.search; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -31,45 +30,52 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class PserverFromHostnameFirstTokenTest extends QueryTest { - public PserverFromHostnameFirstTokenTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public PserverFromHostnameFirstTokenTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void test() { + super.run(); + } - @Test - public void test() { - super.run(); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", + "hostname", "hostname-1.abc.com", "source-of-truth", "RO"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "hostname-2.abc.com", "source-of-truth", "RO"); + Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "6", "aai-node-type", "pserver", + "hostname", "hostname-13.abc.com", "source-of-truth", "AAI-EXTENSIONS"); + Vertex pserver4 = graph.addVertex(T.label, "pserver", T.id, "7", "aai-node-type", "pserver", + "hostname", "hostname-12.abc.com", "source-of-truth", "RCT"); + Vertex pserver5 = graph.addVertex(T.label, "pserver", T.id, "8", "aai-node-type", "pserver", + "hostname", "hostname-20.abc.com", "source-of-truth", "RO"); - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", "hostname", "hostname-1.abc.com", "source-of-truth", "RO"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", "hostname-2.abc.com", "source-of-truth", "RO"); - Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "6", "aai-node-type", "pserver", "hostname", "hostname-13.abc.com", "source-of-truth", "AAI-EXTENSIONS"); - Vertex pserver4 = graph.addVertex(T.label, "pserver", T.id, "7", "aai-node-type", "pserver", "hostname", "hostname-12.abc.com", "source-of-truth", "RCT"); - Vertex pserver5 = graph.addVertex(T.label, "pserver", T.id, "8", "aai-node-type", "pserver", "hostname", "hostname-20.abc.com", "source-of-truth", "RO"); + expectedResult.add(pserver1); + expectedResult.add(pserver3); - - expectedResult.add(pserver1); - expectedResult.add(pserver3); + } - } + @Override + protected String getQueryName() { + return "pserver-fromHostnameFirstToken"; + } - @Override - protected String getQueryName() { - return "pserver-fromHostnameFirstToken"; - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "pserver"); + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type","pserver"); - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("hostnameFirstToken", "hostname-1"); + params.put("sourcesOfTruth", "RO', 'AAI-EXTENSIONS"); // placement of single quotes is + // intentional, values between the + // first and last values must be in + // single quotes - @Override - protected void addParam(Map<String, Object> params) { - params.put("hostnameFirstToken", "hostname-1"); - params.put("sourcesOfTruth", "RO', 'AAI-EXTENSIONS"); //placement of single quotes is intentional, values between the first and last values must be in single quotes - - } + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverfromConfigurationFilterInterfaceIdTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverfromConfigurationFilterInterfaceIdTest.java index eb0fd25..26f5005 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverfromConfigurationFilterInterfaceIdTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverfromConfigurationFilterInterfaceIdTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,83 +26,94 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class PserverfromConfigurationFilterInterfaceIdTest extends QueryTest { - public PserverfromConfigurationFilterInterfaceIdTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public PserverfromConfigurationFilterInterfaceIdTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } - @Test - public void run() { - super.run(); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex config1 = graph.addVertex(T.label, "configuration", T.id, "1", "aai-node-type", + "configuration", "configuration-id", "configuration1"); + Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid1"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "3", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex loglink1 = + graph.addVertex(T.label, "logical-link", T.id, "4", "aai-node-type", "logical-link", + "link-name", "loglink1", "in-maint", "false", "link-type", "link-type1"); + Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", + "l-interface", "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false", "interface-id", "interface-id1"); + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "17", "aai-node-type", "pnf", + "pnf-name", "pnf1name", "equip-vendor", "equip-vendor1", "equip-model", "equip-model1"); - // Set up the test graph - Vertex config1 = graph.addVertex(T.label, "configuration", T.id, "1", "aai-node-type", "configuration", "configuration-id", "configuration1"); - Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "3", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex loglink1 = graph.addVertex(T.label, "logical-link", T.id, "4", "aai-node-type", "logical-link", "link-name", "loglink1", "in-maint", "false", - "link-type", "link-type1"); - Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", "l-interface", "interface-name", "lint1", "is-port-mirrored", "true", - "in-maint", "true", "is-ip-unnumbered", "false", "interface-id", "interface-id1"); - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "17", "aai-node-type", "pnf", "pnf-name", "pnf1name", "equip-vendor", "equip-vendor1", "equip-model", - "equip-model1"); - - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "22", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "22", "aai-node-type", + "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); - // Following are extra nodes that should not be picked up in - // expectedResults - Vertex config2 = graph.addVertex(T.label, "configuration", T.id, "11", "aai-node-type", "configuration", "configuration-id", "configuration2"); - Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "12", "aai-node-type", "generic-vnf", "vnf-id", "vnfid2"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "13", "aai-node-type", "pserver", "hostname", "pservername2"); - Vertex loglink2 = graph.addVertex(T.label, "logical-link", T.id, "14", "aai-node-type", "logical-link", "link-name", "loglink2", "in-maint", "false", - "link-type", "link-type2"); - Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "15", "aai-node-type", "l-interface", "interface-name", "lint1", "is-port-mirrored", - "true", "in-maint", "true", "is-ip-unnumbered", "false", "interface-id", "interface-id2"); + // Following are extra nodes that should not be picked up in + // expectedResults + Vertex config2 = graph.addVertex(T.label, "configuration", T.id, "11", "aai-node-type", + "configuration", "configuration-id", "configuration2"); + Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "12", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid2"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "13", "aai-node-type", + "pserver", "hostname", "pservername2"); + Vertex loglink2 = + graph.addVertex(T.label, "logical-link", T.id, "14", "aai-node-type", "logical-link", + "link-name", "loglink2", "in-maint", "false", "link-type", "link-type2"); + Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "15", "aai-node-type", + "l-interface", "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false", "interface-id", "interface-id2"); - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, config1, loglink1); - rules.addEdge(g, config1, loglink2); - rules.addEdge(g, lint1, loglink1); - rules.addEdge(g, lint2, loglink1); - rules.addTreeEdge(g, vserver1,lint1); - rules.addEdge(g, vserver1, pserver1); - rules.addEdge(g, loglink1, gvnf1); - rules.addEdge(g, gvnf1, pnf1); + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, config1, loglink1); + rules.addEdge(g, config1, loglink2); + rules.addEdge(g, lint1, loglink1); + rules.addEdge(g, lint2, loglink1); + rules.addTreeEdge(g, vserver1, lint1); + rules.addEdge(g, vserver1, pserver1); + rules.addEdge(g, loglink1, gvnf1); + rules.addEdge(g, gvnf1, pnf1); - // These should not be picked up in expectedResults - //rules.addEdge(g, config2, loglink2); - rules.addEdge(g, loglink2, pserver2); - rules.addEdge(g, loglink2, gvnf2); + // These should not be picked up in expectedResults + // rules.addEdge(g, config2, loglink2); + rules.addEdge(g, loglink2, pserver2); + rules.addEdge(g, loglink2, gvnf2); - // Note lint2 is not in expectedResults as the filter is based on - // interface-id1 - expectedResult.add(config1); - expectedResult.add(lint1); - expectedResult.add(pserver1); - expectedResult.add(gvnf1); - expectedResult.add(pnf1); + // Note lint2 is not in expectedResults as the filter is based on + // interface-id1 + expectedResult.add(config1); + expectedResult.add(lint1); + expectedResult.add(pserver1); + expectedResult.add(gvnf1); + expectedResult.add(pnf1); - } + } - @Override - protected String getQueryName() { - return "pserver-fromConfigurationFilterInterfaceId"; - } + @Override + protected String getQueryName() { + return "pserver-fromConfigurationFilterInterfaceId"; + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("configuration-id", "configuration1"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("configuration-id", "configuration1"); + } - @Override - protected void addParam(Map<String, Object> params) { - params.put("interfaceId", "interface-id1"); - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("interfaceId", "interface-id1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverfromConfigurationTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverfromConfigurationTest.java index 8a39e1d..5808866 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverfromConfigurationTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserverfromConfigurationTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,83 +26,93 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class PserverfromConfigurationTest extends QueryTest { - public PserverfromConfigurationTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public PserverfromConfigurationTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - // Set up the test graph - Vertex config1 = graph.addVertex(T.label, "configuration", T.id, "1", "aai-node-type", "configuration", "configuration-id", "configuration1"); - Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "3", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex loglink1 = graph.addVertex(T.label, "logical-link", T.id, "4", "aai-node-type", "logical-link", "link-name", "loglink1", "in-maint", "false", - "link-type", "link-type1"); - Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", "l-interface", "interface-name", "lint1", "is-port-mirrored", "true", - "in-maint", "true", "is-ip-unnumbered", "false", "interface-id", "interface-id1"); - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "17", "aai-node-type", "pnf", "pnf-name", "pnf1name", "equip-vendor", "equip-vendor1", "equip-model", - "equip-model1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "22", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + // Set up the test graph + Vertex config1 = graph.addVertex(T.label, "configuration", T.id, "1", "aai-node-type", + "configuration", "configuration-id", "configuration1"); + Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid1"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "3", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex loglink1 = + graph.addVertex(T.label, "logical-link", T.id, "4", "aai-node-type", "logical-link", + "link-name", "loglink1", "in-maint", "false", "link-type", "link-type1"); + Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", + "l-interface", "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false", "interface-id", "interface-id1"); + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "17", "aai-node-type", "pnf", + "pnf-name", "pnf1name", "equip-vendor", "equip-vendor1", "equip-model", "equip-model1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "22", "aai-node-type", + "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); - // Following are extra nodes that should not be picked up in - // expectedResults - Vertex config2 = graph.addVertex(T.label, "configuration", T.id, "11", "aai-node-type", "configuration", "configuration-id", "configuration2"); - Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "12", "aai-node-type", "generic-vnf", "vnf-id", "vnfid2"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "13", "aai-node-type", "pserver", "hostname", "pservername2"); - Vertex loglink2 = graph.addVertex(T.label, "logical-link", T.id, "14", "aai-node-type", "logical-link", "link-name", "loglink2", "in-maint", "false", - "link-type", "link-type2"); - Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "16", "aai-node-type", "l-interface", "interface-name", "lint1", "is-port-mirrored", - "true", "in-maint", "true", "is-ip-unnumbered", "false", "interface-id", "interface-id2"); - Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "18", "aai-node-type", "pnf", "pnf-name", "pnf2name", "equip-vendor", "equip-vendor2", "equip-model", - "equip-model2"); + // Following are extra nodes that should not be picked up in + // expectedResults + Vertex config2 = graph.addVertex(T.label, "configuration", T.id, "11", "aai-node-type", + "configuration", "configuration-id", "configuration2"); + Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "12", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid2"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "13", "aai-node-type", + "pserver", "hostname", "pservername2"); + Vertex loglink2 = + graph.addVertex(T.label, "logical-link", T.id, "14", "aai-node-type", "logical-link", + "link-name", "loglink2", "in-maint", "false", "link-type", "link-type2"); + Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "16", "aai-node-type", + "l-interface", "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false", "interface-id", "interface-id2"); + Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "18", "aai-node-type", "pnf", + "pnf-name", "pnf2name", "equip-vendor", "equip-vendor2", "equip-model", "equip-model2"); - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, config1, loglink1); - rules.addEdge(g, lint1, loglink1); - rules.addEdge(g, lint2, loglink1); - rules.addTreeEdge(g, vserver1,lint1); - rules.addEdge(g, vserver1, pserver1); - rules.addEdge(g, loglink1, gvnf1); - rules.addEdge(g, gvnf1, pnf1); + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, config1, loglink1); + rules.addEdge(g, lint1, loglink1); + rules.addEdge(g, lint2, loglink1); + rules.addTreeEdge(g, vserver1, lint1); + rules.addEdge(g, vserver1, pserver1); + rules.addEdge(g, loglink1, gvnf1); + rules.addEdge(g, gvnf1, pnf1); - // These should not be picked up in expectedResults - rules.addEdge(g, config2, loglink2); - rules.addEdge(g, loglink2, pserver2); - rules.addEdge(g, loglink2, gvnf2); - rules.addEdge(g, gvnf2, pnf2); + // These should not be picked up in expectedResults + rules.addEdge(g, config2, loglink2); + rules.addEdge(g, loglink2, pserver2); + rules.addEdge(g, loglink2, gvnf2); + rules.addEdge(g, gvnf2, pnf2); - expectedResult.add(config1); - expectedResult.add(lint1); - expectedResult.add(lint2); - expectedResult.add(pserver1); - expectedResult.add(gvnf1); - expectedResult.add(pnf1); + expectedResult.add(config1); + expectedResult.add(lint1); + expectedResult.add(lint2); + expectedResult.add(pserver1); + expectedResult.add(gvnf1); + expectedResult.add(pnf1); - } + } - @Override - protected String getQueryName() { - return "pserver-fromConfiguration"; - } + @Override + protected String getQueryName() { + return "pserver-fromConfiguration"; + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("configuration-id", "configuration1"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("configuration-id", "configuration1"); + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserversFromVnfQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserversFromVnfQueryTest.java index b7e913c..85f47b2 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserversFromVnfQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserversFromVnfQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,64 +26,74 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class PserversFromVnfQueryTest extends QueryTest { - public PserversFromVnfQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //Set up the test graph - Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", "physical-location-id", "clli"); - - Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", "hostname", "pservername1"); - - Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "vnfid2"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", "hostname", "pservername2"); - Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", "pservername3"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver", "vserver-name", "vservername"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "7", "aai-node-type", "tenant", "tenant-id", "tenantuuid", "tenant-name", "tenantname"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "8", "aai-node-type", "cloud-region", "cloud-region-id", "clouduuid", "cloud-region-owner", "cloudOwnername"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, pserver1, complex); - rules.addEdge(g, pserver2, complex); - - rules.addEdge(g, pserver1, vnf1); - rules.addEdge(g, pserver2, vnf2); - - rules.addEdge(g, pserver3, complex); - rules.addTreeEdge(g, tenant, cloudregion); - rules.addTreeEdge(g, vserver, tenant); - rules.addEdge(g, vserver, pserver3); - rules.addEdge(g, vserver, vnf2); - - expectedResult.add(pserver2); - expectedResult.add(pserver3); - - } - @Override - protected String getQueryName() { - return "pservers-fromVnf"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("vnf-id", "vnfid2"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public PserversFromVnfQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // Set up the test graph + Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", + "physical-location-id", "clli"); + + Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid1"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", + "hostname", "pservername1"); + + Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid2"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", + "hostname", "pservername2"); + Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "pservername3"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver", + "vserver-name", "vservername"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "7", "aai-node-type", "tenant", + "tenant-id", "tenantuuid", "tenant-name", "tenantname"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "8", "aai-node-type", + "cloud-region", "cloud-region-id", "clouduuid", "cloud-region-owner", "cloudOwnername"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, pserver1, complex); + rules.addEdge(g, pserver2, complex); + + rules.addEdge(g, pserver1, vnf1); + rules.addEdge(g, pserver2, vnf2); + + rules.addEdge(g, pserver3, complex); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addTreeEdge(g, vserver, tenant); + rules.addEdge(g, vserver, pserver3); + rules.addEdge(g, vserver, vnf2); + + expectedResult.add(pserver2); + expectedResult.add(pserver3); + + } + + @Override + protected String getQueryName() { + return "pservers-fromVnf"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("vnf-id", "vnfid2"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserversWithNoComplexTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserversWithNoComplexTest.java index cfd6e05..8340417 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/PserversWithNoComplexTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/PserversWithNoComplexTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,50 +31,55 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class PserversWithNoComplexTest extends QueryTest { - public PserversWithNoComplexTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } + public PserversWithNoComplexTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", "hostname", "pservername2"); - Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "3", "aai-node-type", "pserver", "hostname", "pservername3"); - Vertex pserver4 = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", "hostname", "pservername4"); - Vertex pserver5 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", "pservername5"); - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex", - "physical-location-id", "physical-location-id-1", "country", "US"); - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "7", "aai-node-type", "complex", - "physical-location-id", "physical-location-id-2", "country", "USA"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, pserver4,complex1); - rules.addEdge(g, pserver5,complex2); - - expectedResult.add(pserver1); - expectedResult.add(pserver2); - expectedResult.add(pserver3); - } + @Test + public void run() { + super.run(); + } - @Override - protected String getQueryName() { - return "pservers-withNoComplex"; - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", + "hostname", "pservername2"); + Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "3", "aai-node-type", "pserver", + "hostname", "pservername3"); + Vertex pserver4 = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", + "hostname", "pservername4"); + Vertex pserver5 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "pservername5"); + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1", "country", "US"); + Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "7", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-2", "country", "USA"); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - return; - - } + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, pserver4, complex1); + rules.addEdge(g, pserver5, complex2); - @Override - protected void addParam(Map<String, Object> params) { - return; - } + expectedResult.add(pserver1); + expectedResult.add(pserver2); + expectedResult.add(pserver3); + } + + @Override + protected String getQueryName() { + return "pservers-withNoComplex"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + return; + + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryCountTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryCountTest.java index 9ab2284..3d35eb2 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryCountTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryCountTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,32 +19,33 @@ */ package org.onap.aai.rest.search; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.onap.aai.exceptions.AAIException; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; import java.util.HashMap; import java.util.List; import java.util.Map; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; +import org.onap.aai.exceptions.AAIException; public abstract class QueryCountTest extends QueryTest { - //listOfMapEntryForCoutnQueries is for when the query returns a HashMap, not a Vertex - protected List<Map.Entry<String, Long>> listOfMapEntryForCoutnQueries; - + // listOfMapEntryForCoutnQueries is for when the query returns a HashMap, not a Vertex + protected List<Map.Entry<String, Long>> listOfMapEntryForCoutnQueries; - public QueryCountTest() throws AAIException { - super(); - } + public QueryCountTest() throws AAIException { + super(); + } - @Override - public void run() { - GraphTraversal<HashMap<String,Long>, HashMap<String,Long>> result = (GraphTraversal<HashMap<String,Long>, HashMap<String,Long>>)shell.executeTraversal(query, params); + @Override + public void run() { + GraphTraversal<HashMap<String, Long>, HashMap<String, Long>> result = + (GraphTraversal<HashMap<String, Long>, HashMap<String, Long>>) shell + .executeTraversal(query, params); - assertThat("all hash maps found", listOfMapEntryForCoutnQueries, is(result.toList())); + assertThat("all hash maps found", listOfMapEntryForCoutnQueries, is(result.toList())); - } + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryPnfFromModelByRegionTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryPnfFromModelByRegionTest.java index 52cc19a..9570de2 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryPnfFromModelByRegionTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryPnfFromModelByRegionTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,83 +29,86 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class QueryPnfFromModelByRegionTest extends QueryTest { - public QueryPnfFromModelByRegionTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //serviceInstance 1,2,3 are good and 4 is bad based upon the filters - Vertex serviceInst1 = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", - "service-instance1", "model-invariant-id", "miid1", "model-version-id", "mvid1"); - Vertex serviceInst2 = graph.addVertex(T.label, "service-instance", T.id, "2", "aai-node-type", "service-instance", "service-instance-id", - "service-instance2", "model-invariant-id", "miid1", "model-version-id", "mvid1"); - Vertex serviceInst3 = graph.addVertex(T.label, "service-instance", T.id, "3", "aai-node-type", "service-instance", "service-instance-id", - "service-instance3", "model-invariant-id", "miid1", "model-version-id", "mvid1"); - Vertex serviceInst4 = graph.addVertex(T.label, "service-instance", T.id, "4", "aai-node-type", "service-instance", "service-instance-id", - "service-instance4", "model-invariant-id", "miid2", "model-version-id", "mvid2"); - - //pnf 1,2 & 3 are good based upon the filters - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "5", "aai-node-type", "pnf", "pnf-name", "pnf1name", "equip-vendor", "equip-vendor1", "equip-model", - "equip-model1"); - Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "6", "aai-node-type", "pnf", "pnf-name", "pnf2name", "equip-vendor", "equip-vendor1", "equip-model", - "equip-model1"); - Vertex pnf3 = graph.addVertex(T.label, "pnf", T.id, "7", "aai-node-type", "pnf", "pnf-name", "pnf3name", "equip-vendor", "equip-vendor1", "equip-model", - "equip-model1"); - Vertex pnf4 = graph.addVertex(T.label, "pnf", T.id, "12", "aai-node-type", "pnf", "pnf-name", "pnf4name", "equip-vendor", "equip-vendor4", - "equip-model", "equip-model4"); - - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "8", "aai-node-type", "complex", "physical-location-id", "physical-location-id-1"); - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "9", "aai-node-type", "complex", "physical-location-id", "physical-location-id-2"); - - //cr 1 is good based upon the filter - Vertex cloudRegion1 = graph.addVertex(T.label, "cloud-region", T.id, "10", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region1"); - Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region", T.id, "11", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region2"); - - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, serviceInst1, pnf1); - rules.addEdge(g, serviceInst2, pnf2); - rules.addEdge(g, serviceInst3, pnf3); - rules.addEdge(g, serviceInst4, pnf4); - - rules.addEdge(g, pnf1, complex1); - rules.addEdge(g, pnf2, complex1); - rules.addEdge(g, pnf3, complex2); - rules.addEdge(g, pnf4, complex2); - - rules.addEdge(g, cloudRegion1, complex1); - rules.addEdge(g, cloudRegion2, complex2); - - - expectedResult.add(pnf1); - expectedResult.add(pnf2); - } - - @Override - protected String getQueryName() { - return "pnf-fromModel-byRegion"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("model-invariant-id", "miid1").has("model-version-id", "mvid1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - params.put("cloudRegionId", "cloud-region1"); - params.put("equipVendor", "equip-vendor1"); - params.put("equipModel", "equip-model1"); - } + public QueryPnfFromModelByRegionTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // serviceInstance 1,2,3 are good and 4 is bad based upon the filters + Vertex serviceInst1 = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance1", + "model-invariant-id", "miid1", "model-version-id", "mvid1"); + Vertex serviceInst2 = graph.addVertex(T.label, "service-instance", T.id, "2", + "aai-node-type", "service-instance", "service-instance-id", "service-instance2", + "model-invariant-id", "miid1", "model-version-id", "mvid1"); + Vertex serviceInst3 = graph.addVertex(T.label, "service-instance", T.id, "3", + "aai-node-type", "service-instance", "service-instance-id", "service-instance3", + "model-invariant-id", "miid1", "model-version-id", "mvid1"); + Vertex serviceInst4 = graph.addVertex(T.label, "service-instance", T.id, "4", + "aai-node-type", "service-instance", "service-instance-id", "service-instance4", + "model-invariant-id", "miid2", "model-version-id", "mvid2"); + + // pnf 1,2 & 3 are good based upon the filters + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "5", "aai-node-type", "pnf", "pnf-name", + "pnf1name", "equip-vendor", "equip-vendor1", "equip-model", "equip-model1"); + Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "6", "aai-node-type", "pnf", "pnf-name", + "pnf2name", "equip-vendor", "equip-vendor1", "equip-model", "equip-model1"); + Vertex pnf3 = graph.addVertex(T.label, "pnf", T.id, "7", "aai-node-type", "pnf", "pnf-name", + "pnf3name", "equip-vendor", "equip-vendor1", "equip-model", "equip-model1"); + Vertex pnf4 = graph.addVertex(T.label, "pnf", T.id, "12", "aai-node-type", "pnf", + "pnf-name", "pnf4name", "equip-vendor", "equip-vendor4", "equip-model", "equip-model4"); + + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "8", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1"); + Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "9", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-2"); + + // cr 1 is good based upon the filter + Vertex cloudRegion1 = graph.addVertex(T.label, "cloud-region", T.id, "10", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region1"); + Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region", T.id, "11", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region2"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, serviceInst1, pnf1); + rules.addEdge(g, serviceInst2, pnf2); + rules.addEdge(g, serviceInst3, pnf3); + rules.addEdge(g, serviceInst4, pnf4); + + rules.addEdge(g, pnf1, complex1); + rules.addEdge(g, pnf2, complex1); + rules.addEdge(g, pnf3, complex2); + rules.addEdge(g, pnf4, complex2); + + rules.addEdge(g, cloudRegion1, complex1); + rules.addEdge(g, cloudRegion2, complex2); + + expectedResult.add(pnf1); + expectedResult.add(pnf2); + } + + @Override + protected String getQueryName() { + return "pnf-fromModel-byRegion"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("model-invariant-id", "miid1").has("model-version-id", "mvid1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("cloudRegionId", "cloud-region1"); + params.put("equipVendor", "equip-vendor1"); + params.put("equipModel", "equip-model1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryPnfFromModelTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryPnfFromModelTest.java index 95290fb..e7df71e 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryPnfFromModelTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryPnfFromModelTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,55 +29,52 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class QueryPnfFromModelTest extends QueryTest { - public QueryPnfFromModelTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public QueryPnfFromModelTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex serviceInst1 = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", - "service-instance1", "model-invariant-id", "miid1", "model-version-id", "mvid1"); - Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "2", "aai-node-type", "pnf", "pnf-name", "pnf1name", "equip-vendor", "equip-vendor1", "equip-model", - "equip-model1"); - - Vertex serviceInst2 = graph.addVertex(T.label, "service-instance", T.id, "3", "aai-node-type", "service-instance", "service-instance-id", - "service-instance2", "model-invariant-id", "miid2", "model-version-id", "mvid2"); - Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "4", "aai-node-type", "pnf", "pnf-name", "pnf2name", "equip-vendor", "equip-vendor2", "equip-model", - "equip-model2"); + Vertex serviceInst1 = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance1", + "model-invariant-id", "miid1", "model-version-id", "mvid1"); + Vertex pnf1 = graph.addVertex(T.label, "pnf", T.id, "2", "aai-node-type", "pnf", "pnf-name", + "pnf1name", "equip-vendor", "equip-vendor1", "equip-model", "equip-model1"); + Vertex serviceInst2 = graph.addVertex(T.label, "service-instance", T.id, "3", + "aai-node-type", "service-instance", "service-instance-id", "service-instance2", + "model-invariant-id", "miid2", "model-version-id", "mvid2"); + Vertex pnf2 = graph.addVertex(T.label, "pnf", T.id, "4", "aai-node-type", "pnf", "pnf-name", + "pnf2name", "equip-vendor", "equip-vendor2", "equip-model", "equip-model2"); - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, serviceInst1, pnf1); - - rules.addEdge(g, serviceInst2, pnf2);//false + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, serviceInst1, pnf1); + rules.addEdge(g, serviceInst2, pnf2);// false - expectedResult.add(pnf1); - } + expectedResult.add(pnf1); + } - @Override - protected String getQueryName() { - return "pnf-from-model"; - } + @Override + protected String getQueryName() { + return "pnf-from-model"; + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("model-invariant-id", "miid1").has("model-version-id", "mvid1"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("model-invariant-id", "miid1").has("model-version-id", "mvid1"); + } - @Override - protected void addParam(Map<String, Object> params) { - params.put("equipVendor", "equip-vendor1"); - params.put("equipModel", "equip-model1"); - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("equipVendor", "equip-vendor1"); + params.put("equipModel", "equip-model1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryTest.java index f96d4c5..317eb4c 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,9 +19,15 @@ */ package org.onap.aai.rest.search; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; + import com.att.eelf.configuration.EELFManager; + +import java.util.*; +import java.util.stream.Collectors; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Graph; @@ -47,167 +53,152 @@ import org.onap.aai.introspection.Loader; import org.onap.aai.introspection.LoaderFactory; import org.onap.aai.introspection.ModelType; import org.onap.aai.nodes.NodeIngestor; +import org.onap.aai.query.builder.GremlinTraversal; +import org.onap.aai.restcore.search.GremlinGroovyShell; +import org.onap.aai.restcore.search.GroovyQueryBuilder; +import org.onap.aai.serialization.db.EdgeSerializer; +import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.setup.AAIConfigTranslator; +import org.onap.aai.setup.SchemaConfigVersions; import org.onap.aai.setup.SchemaLocationsBean; import org.onap.aai.setup.SchemaVersion; -import org.onap.aai.setup.SchemaConfigVersions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.rules.SpringClassRule; import org.springframework.test.context.junit4.rules.SpringMethodRule; -import org.onap.aai.query.builder.GremlinTraversal; -import org.onap.aai.restcore.search.GremlinGroovyShell; -import org.onap.aai.restcore.search.GroovyQueryBuilder; -import org.onap.aai.serialization.db.EdgeSerializer; -import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import org.onap.aai.serialization.engines.QueryStyle; -import org.onap.aai.serialization.engines.TransactionalGraphEngine; - -import java.util.*; -import java.util.stream.Collectors; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.when; @RunWith(Parameterized.class) -@ContextConfiguration(classes = { - ConfigConfiguration.class, - AAIConfigTranslator.class, - EdgeIngestor.class, - EdgeSerializer.class, - NodeIngestor.class, - SpringContextAware.class, - SearchConfiguration.class, - IntrospectionConfig.class -}) -@TestPropertySource(properties = { - "schema.uri.base.path = /aai", - "schema.ingest.file = src/test/resources/application-test.properties" -}) +@ContextConfiguration( + classes = {ConfigConfiguration.class, AAIConfigTranslator.class, EdgeIngestor.class, + EdgeSerializer.class, NodeIngestor.class, SpringContextAware.class, + SearchConfiguration.class, IntrospectionConfig.class}) +@TestPropertySource( + properties = {"schema.uri.base.path = /aai", + "schema.ingest.file = src/test/resources/application-test.properties"}) public abstract class QueryTest { - @ClassRule + @ClassRule public static final SpringClassRule springClassRule = new SpringClassRule(); @Rule public final SpringMethodRule springMethodRule = new SpringMethodRule(); - protected Logger logger; - protected Graph graph; - protected GremlinGroovyShell shell; - @Mock protected TransactionalGraphEngine dbEngine; - protected final List<Vertex> expectedResult = new ArrayList<>(); - - @Autowired - protected EdgeIngestor edgeRules; - - @Autowired - protected EdgeSerializer rules; - - @Autowired - protected LoaderFactory loaderFactory; - - @Autowired - protected SchemaConfigVersions schemaVersions; - - @Autowired - protected GremlinServerSingleton gremlinServerSingleton; - - protected Loader loader; - protected GraphTraversalSource gts; - - @Parameterized.Parameter(value = 0) - public SchemaVersion version; - - @Parameterized.Parameters(name = "Version.{0}") - public static Collection<Object[]> data() { - return Arrays.asList(new Object[][]{ - {new SchemaVersion("v11")}, - {new SchemaVersion("v12")}, - {new SchemaVersion("v13")}, - {new SchemaVersion("v14")} - }); - } - - protected String query; - - LinkedHashMap <String, Object> params; - - @BeforeClass - public static void setupBundleconfig() { - System.setProperty("AJSC_HOME", "./"); - System.setProperty("BUNDLECONFIG_DIR", "src/main/resources/"); - } - - @Before - public void setUp() throws AAIException, NoEdgeRuleFoundException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException { - System.setProperty("AJSC_HOME", "."); - System.setProperty("BUNDLECONFIG_DIR", "src/main/resources"); - logger = LoggerFactory.getLogger(getClass()); - MockitoAnnotations.initMocks(this); - graph = TinkerGraph.open(); - gts = graph.traversal(); - createGraph(); - shell = new GremlinGroovyShell(); - loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, version); - setUpQuery(); - } - - - protected void setUpQuery() { - query = gremlinServerSingleton.getStoredQueryFromConfig(getQueryName()); - params = new LinkedHashMap <>(); - addParam(params); - when(dbEngine.getQueryBuilder(any(QueryStyle.class))).thenReturn(new GremlinTraversal<>(loader, graph.traversal())); - logger.info("Stored query in abstraction form {}", query); - query = new GroovyQueryBuilder().executeTraversal(dbEngine, query, params); - logger.info("After converting to gremlin query {}", query); - query = "g" + query; - GraphTraversal<Vertex, Vertex> g = graph.traversal().V(); - addStartNode(g); - params.put("g", g); - } - - public void run() { - - GraphTraversal<Vertex, Vertex> result = (GraphTraversal<Vertex, Vertex>)shell.executeTraversal(query, params); - - List<Vertex> vertices = result.toList(); - - logger.info("Expected result set of vertexes [{}]", convert(expectedResult)); - logger.info("Actual Result set of vertexes [{}]", convert(vertices)); - - List<Vertex> nonDuplicateExpectedResult = new ArrayList<>(new HashSet<>(expectedResult)); - vertices = new ArrayList<>(new HashSet<>(vertices)); - - nonDuplicateExpectedResult.sort(Comparator.comparing(vertex -> vertex.id().toString())); - vertices.sort(Comparator.comparing(vertex -> vertex.id().toString())); - - - // Use this instead of the assertTrue as this provides more useful - // debugging information such as this when expected and actual differ: - // java.lang.AssertionError: Expected all the vertices to be found - // Expected :[v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] - // Actual :[v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] - assertEquals("Expected all the vertices to be found", nonDuplicateExpectedResult, vertices); - - } - - protected String convert(List<Vertex> vertices){ - return vertices - .stream() - .map(vertex -> vertex.property("aai-node-type").value().toString()) - .collect(Collectors.joining(",")); - } - - protected abstract void createGraph() throws AAIException, NoEdgeRuleFoundException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException; - - protected abstract String getQueryName(); - - protected abstract void addStartNode(GraphTraversal<Vertex, Vertex> g); + protected Logger logger; + protected Graph graph; + protected GremlinGroovyShell shell; + @Mock + protected TransactionalGraphEngine dbEngine; + protected final List<Vertex> expectedResult = new ArrayList<>(); + + @Autowired + protected EdgeIngestor edgeRules; + + @Autowired + protected EdgeSerializer rules; + + @Autowired + protected LoaderFactory loaderFactory; + + @Autowired + protected SchemaConfigVersions schemaVersions; + + @Autowired + protected GremlinServerSingleton gremlinServerSingleton; + + protected Loader loader; + protected GraphTraversalSource gts; + + @Parameterized.Parameter(value = 0) + public SchemaVersion version; + + @Parameterized.Parameters(name = "Version.{0}") + public static Collection<Object[]> data() { + return Arrays.asList(new Object[][] {{new SchemaVersion("v11")}, {new SchemaVersion("v12")}, + {new SchemaVersion("v13")}, {new SchemaVersion("v14")}}); + } + + protected String query; + + LinkedHashMap<String, Object> params; + + @BeforeClass + public static void setupBundleconfig() { + System.setProperty("AJSC_HOME", "./"); + System.setProperty("BUNDLECONFIG_DIR", "src/main/resources/"); + } + + @Before + public void setUp() throws AAIException, NoEdgeRuleFoundException, EdgeRuleNotFoundException, + AmbiguousRuleChoiceException { + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "src/main/resources"); + logger = LoggerFactory.getLogger(getClass()); + MockitoAnnotations.initMocks(this); + graph = TinkerGraph.open(); + gts = graph.traversal(); + createGraph(); + shell = new GremlinGroovyShell(); + loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, version); + setUpQuery(); + } + + protected void setUpQuery() { + query = gremlinServerSingleton.getStoredQueryFromConfig(getQueryName()); + params = new LinkedHashMap<>(); + addParam(params); + when(dbEngine.getQueryBuilder(any(QueryStyle.class))) + .thenReturn(new GremlinTraversal<>(loader, graph.traversal())); + logger.info("Stored query in abstraction form {}", query); + query = new GroovyQueryBuilder().executeTraversal(dbEngine, query, params); + logger.info("After converting to gremlin query {}", query); + query = "g" + query; + GraphTraversal<Vertex, Vertex> g = graph.traversal().V(); + addStartNode(g); + params.put("g", g); + } + + public void run() { + + GraphTraversal<Vertex, Vertex> result = + (GraphTraversal<Vertex, Vertex>) shell.executeTraversal(query, params); + + List<Vertex> vertices = result.toList(); + + logger.info("Expected result set of vertexes [{}]", convert(expectedResult)); + logger.info("Actual Result set of vertexes [{}]", convert(vertices)); + + List<Vertex> nonDuplicateExpectedResult = new ArrayList<>(new HashSet<>(expectedResult)); + vertices = new ArrayList<>(new HashSet<>(vertices)); + + nonDuplicateExpectedResult.sort(Comparator.comparing(vertex -> vertex.id().toString())); + vertices.sort(Comparator.comparing(vertex -> vertex.id().toString())); + + // Use this instead of the assertTrue as this provides more useful + // debugging information such as this when expected and actual differ: + // java.lang.AssertionError: Expected all the vertices to be found + // Expected :[v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] + // Actual :[v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]] + assertEquals("Expected all the vertices to be found", nonDuplicateExpectedResult, vertices); + + } + + protected String convert(List<Vertex> vertices) { + return vertices.stream().map(vertex -> vertex.property("aai-node-type").value().toString()) + .collect(Collectors.joining(",")); + } + + protected abstract void createGraph() throws AAIException, NoEdgeRuleFoundException, + EdgeRuleNotFoundException, AmbiguousRuleChoiceException; - protected abstract void addParam(Map<String, Object> params); + protected abstract String getQueryName(); + + protected abstract void addStartNode(GraphTraversal<Vertex, Vertex> g); + + protected abstract void addParam(Map<String, Object> params); } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryVnfFromModelByRegionTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryVnfFromModelByRegionTest.java index b79ea2f..4758ba0 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryVnfFromModelByRegionTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryVnfFromModelByRegionTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,72 +29,80 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class QueryVnfFromModelByRegionTest extends QueryTest { - public QueryVnfFromModelByRegionTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public QueryVnfFromModelByRegionTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } - @Test - public void run() { - super.run(); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex serviceInst1 = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance1", + "model-invariant-id", "miid1", "model-version-id", "mvid1"); + Vertex serviceInst2 = graph.addVertex(T.label, "service-instance", T.id, "12", + "aai-node-type", "service-instance", "service-instance-id", "service-instance2", + "model-invariant-id", "miid2", "model-version-id", "mvid2"); - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex serviceInst1 = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", - "service-instance-id", "service-instance1", "model-invariant-id", "miid1", "model-version-id", "mvid1"); - Vertex serviceInst2 = graph.addVertex(T.label, "service-instance", T.id, "12", "aai-node-type", "service-instance", - "service-instance-id", "service-instance2", "model-invariant-id", "miid2", "model-version-id", "mvid2"); + Vertex genericVnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", + "generic-vnf", "generic-vnf-id", "generic-vnf1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserver1"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", + "tenant-id", "tenant1"); + Vertex cloudRegion1 = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region1"); - Vertex genericVnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", "generic-vnf-id", "generic-vnf1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserver1"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", "tenant-id", "tenant1"); - Vertex cloudRegion1 = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region1"); + // Right invariant and version IDs, wrong cloud region + Vertex genericVnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", + "generic-vnf", "generic-vnf-id", "generic-vnf2"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", + "vserver-id", "vserver2"); + Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "8", "aai-node-type", "tenant", + "tenant-id", "tenant2"); + Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region", T.id, "9", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region2"); - // Right invariant and version IDs, wrong cloud region - Vertex genericVnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", "generic-vnf", - "generic-vnf-id", "generic-vnf2"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", "vserver-id", "vserver2"); - Vertex tenant2 = graph.addVertex(T.label, "tenant", T.id, "8", "aai-node-type", "tenant", "tenant-id", "tenant2"); - Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region", T.id, "9", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region2"); + // On both the right and the wrong service-instance, with the right cloud-region + Vertex genericVnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "10", "aai-node-type", + "generic-vnf", "generic-vnf-id", "generic-vnf3"); + Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", + "vserver", "vserver-id", "vserver3"); - // On both the right and the wrong service-instance, with the right cloud-region - Vertex genericVnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "10", "aai-node-type", "generic-vnf", - "generic-vnf-id", "generic-vnf3"); - Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", "vserver-id", "vserver3"); + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, serviceInst1, genericVnf1); + rules.addEdge(g, genericVnf1, vserver1); + rules.addTreeEdge(g, tenant1, vserver1); + rules.addTreeEdge(g, cloudRegion1, tenant1); - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, serviceInst1, genericVnf1); - rules.addEdge(g, genericVnf1, vserver1); - rules.addTreeEdge(g, tenant1, vserver1); - rules.addTreeEdge(g, cloudRegion1, tenant1); + rules.addEdge(g, serviceInst1, genericVnf2); + rules.addEdge(g, genericVnf2, vserver2); + rules.addTreeEdge(g, tenant2, vserver2); + rules.addTreeEdge(g, cloudRegion2, tenant2); - rules.addEdge(g, serviceInst1, genericVnf2); - rules.addEdge(g, genericVnf2, vserver2); - rules.addTreeEdge(g, tenant2, vserver2); - rules.addTreeEdge(g, cloudRegion2, tenant2); - - rules.addEdge(g, serviceInst2, genericVnf3); - rules.addEdge(g, genericVnf3, vserver3); - rules.addTreeEdge(g, tenant1, vserver3); + rules.addEdge(g, serviceInst2, genericVnf3); + rules.addEdge(g, genericVnf3, vserver3); + rules.addTreeEdge(g, tenant1, vserver3); - expectedResult.add(genericVnf1); - } + expectedResult.add(genericVnf1); + } - @Override - protected String getQueryName() { - return "queryvnfFromModelbyRegion"; - } + @Override + protected String getQueryName() { + return "queryvnfFromModelbyRegion"; + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("model-invariant-id", "miid1").has("model-version-id", "mvid1"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("model-invariant-id", "miid1").has("model-version-id", "mvid1"); + } - @Override - protected void addParam(Map<String, Object> params) { - params.put("cloudRegionId", "cloud-region1"); - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("cloudRegionId", "cloud-region1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToBothCousinAndTreeCustomQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToBothCousinAndTreeCustomQueryTest.java index f2c6369..c1137a7 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToBothCousinAndTreeCustomQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToBothCousinAndTreeCustomQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,6 +18,9 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.rest.search; + +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,11 +30,10 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.query.builder.MissingOptionalParameter; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - -public class RelatedToBothCousinAndTreeCustomQueryTest extends QueryTest{ +public class RelatedToBothCousinAndTreeCustomQueryTest extends QueryTest { - public RelatedToBothCousinAndTreeCustomQueryTest() throws AAIException, NoEdgeRuleFoundException { + public RelatedToBothCousinAndTreeCustomQueryTest() + throws AAIException, NoEdgeRuleFoundException { super(); } @@ -39,17 +41,25 @@ public class RelatedToBothCousinAndTreeCustomQueryTest extends QueryTest{ public void run() { super.run(); } + @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex lagInterface1 = graph.addVertex(T.label, "lag-interface", T.id, "1", "aai-node-type", "lag-interface", "interface-name", "lag-int1"); + Vertex lagInterface1 = graph.addVertex(T.label, "lag-interface", T.id, "1", "aai-node-type", + "lag-interface", "interface-name", "lag-int1"); - Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", "interface-name", "l-interfaceid01"); - Vertex lInterface2 = graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", "l-interface", "interface-name", "l-interfaceid02"); - Vertex lInterface3 = graph.addVertex(T.label, "l-interface", T.id, "4", "aai-node-type", "l-interface", "interface-name", "l-interfaceid03"); - Vertex lInterface4 = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", "l-interface", "interface-name", "l-interfaceid04"); - Vertex lInterface5 = graph.addVertex(T.label, "l-interface", T.id, "6", "aai-node-type", "l-interface", "interface-name", "l-interfaceid05"); - Vertex lInterface6 = graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", "l-interface", "interface-name", "l-interfaceid06"); + Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", + "l-interface", "interface-name", "l-interfaceid01"); + Vertex lInterface2 = graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", + "l-interface", "interface-name", "l-interfaceid02"); + Vertex lInterface3 = graph.addVertex(T.label, "l-interface", T.id, "4", "aai-node-type", + "l-interface", "interface-name", "l-interfaceid03"); + Vertex lInterface4 = graph.addVertex(T.label, "l-interface", T.id, "5", "aai-node-type", + "l-interface", "interface-name", "l-interfaceid04"); + Vertex lInterface5 = graph.addVertex(T.label, "l-interface", T.id, "6", "aai-node-type", + "l-interface", "interface-name", "l-interfaceid05"); + Vertex lInterface6 = graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", + "l-interface", "interface-name", "l-interfaceid06"); GraphTraversalSource g = graph.traversal(); rules.addEdge(g, lagInterface1, lInterface1); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToCustomQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToCustomQueryTest.java index 5147268..0d63115 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToCustomQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToCustomQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,6 +18,9 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.rest.search; + +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -26,8 +29,7 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; -public class RelatedToCustomQueryTest extends QueryTest{ +public class RelatedToCustomQueryTest extends QueryTest { public RelatedToCustomQueryTest() throws AAIException, NoEdgeRuleFoundException { super(); @@ -37,14 +39,20 @@ public class RelatedToCustomQueryTest extends QueryTest{ public void run() { super.run(); } + @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "genvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); + Vertex genericvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", + "vnf-id", "genvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", "vserver-id", "vserverid01"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserverid02"); - Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", "vserver-id", "vserverid03"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", + "vserver-id", "vserverid01"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserverid02"); + Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", + "vserver-id", "vserverid03"); GraphTraversalSource g = graph.traversal(); rules.addEdge(g, genericvnf1, vserver1); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToTreeCustomQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToTreeCustomQueryTest.java index 2f31206..f47c9c0 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToTreeCustomQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/RelatedToTreeCustomQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,6 +18,9 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.rest.search; + +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -26,8 +29,6 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class RelatedToTreeCustomQueryTest extends QueryTest { public RelatedToTreeCustomQueryTest() throws AAIException, NoEdgeRuleFoundException { @@ -38,14 +39,20 @@ public class RelatedToTreeCustomQueryTest extends QueryTest { public void run() { super.run(); } + @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "genvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); + Vertex genericvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", + "vnf-id", "genvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); - Vertex entitlement1 = graph.addVertex(T.label, "entitlement", T.id, "2", "aai-node-type", "entitlement", "group-uuid", "entitlementid01", "resource-uuid", "rentitlementid01"); - Vertex entitlement2 = graph.addVertex(T.label, "entitlement", T.id, "3", "aai-node-type", "entitlement", "group-uuid", "entitlementid02", "resource-uuid", "rentitlementid02"); - Vertex entitlement3 = graph.addVertex(T.label, "entitlement", T.id, "4", "aai-node-type", "entitlement", "group-uuid", "entitlementid03", "resource-uuid", "rentitlementid03"); + Vertex entitlement1 = graph.addVertex(T.label, "entitlement", T.id, "2", "aai-node-type", + "entitlement", "group-uuid", "entitlementid01", "resource-uuid", "rentitlementid01"); + Vertex entitlement2 = graph.addVertex(T.label, "entitlement", T.id, "3", "aai-node-type", + "entitlement", "group-uuid", "entitlementid02", "resource-uuid", "rentitlementid02"); + Vertex entitlement3 = graph.addVertex(T.label, "entitlement", T.id, "4", "aai-node-type", + "entitlement", "group-uuid", "entitlementid03", "resource-uuid", "rentitlementid03"); GraphTraversalSource g = graph.traversal(); rules.addTreeEdge(g, genericvnf1, entitlement1); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/SearchProviderTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/SearchProviderTest.java index 4332536..672c449 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/SearchProviderTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/SearchProviderTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,16 @@ */ package org.onap.aai.rest.search; +import static org.hamcrest.Matchers.containsString; +import static org.junit.Assert.*; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.*; + +import javax.ws.rs.core.*; + import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -31,16 +41,7 @@ import org.onap.aai.setup.SchemaVersion; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.core.*; -import java.util.*; - -import static org.hamcrest.Matchers.containsString; -import static org.junit.Assert.*; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class SearchProviderTest extends AAISetup{ +public class SearchProviderTest extends AAISetup { protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json"); @@ -71,21 +72,22 @@ public class SearchProviderTest extends AAISetup{ private List<MediaType> outputMediaTypes; - private static final Logger logger = LoggerFactory.getLogger(SearchProviderTest.class.getName()); + private static final Logger logger = + LoggerFactory.getLogger(SearchProviderTest.class.getName()); @Before - public void setup(){ + public void setup() { logger.info("Starting the setup for the integration tests of Rest Endpoints"); version = schemaVersions.getDefaultVersion(); - - searchProvider = new SearchProvider(loaderFactory, searchGraph, schemaVersions, basePath); - httpHeaders = mock(HttpHeaders.class); - uriInfo = mock(UriInfo.class); + + searchProvider = new SearchProvider(loaderFactory, searchGraph, schemaVersions, basePath); + httpHeaders = mock(HttpHeaders.class); + uriInfo = mock(UriInfo.class); when(uriInfo.getPath()).thenReturn("JUNITURI"); - headersMultiMap = new MultivaluedHashMap<>(); - queryParameters = Mockito.spy(new MultivaluedHashMap<>()); + headersMultiMap = new MultivaluedHashMap<>(); + queryParameters = Mockito.spy(new MultivaluedHashMap<>()); headersMultiMap.add("X-FromAppId", "JUNIT"); headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString()); @@ -101,16 +103,18 @@ public class SearchProviderTest extends AAISetup{ when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap); - when(httpHeaders.getRequestHeader("X-FromAppId")).thenReturn(Collections.singletonList("JUNIT")); - when(httpHeaders.getRequestHeader("X-TransactionId")).thenReturn(Collections.singletonList("JUNIT")); + when(httpHeaders.getRequestHeader("X-FromAppId")) + .thenReturn(Collections.singletonList("JUNIT")); + when(httpHeaders.getRequestHeader("X-TransactionId")) + .thenReturn(Collections.singletonList("JUNIT")); when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList); - when(uriInfo.getQueryParameters()).thenReturn(queryParameters); when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters); - // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable + // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very + // unreasonable Mockito.doReturn(null).when(queryParameters).remove(anyObject()); when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON); @@ -131,21 +135,14 @@ public class SearchProviderTest extends AAISetup{ when(httpHeaders.getRequestHeader("X-FromAppId")).thenThrow(IllegalArgumentException.class); when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); - Response response = searchProvider.getNodesQueryResponse( - httpHeaders, - null, - "cloud-region", - keys, - includeStrings, - version.toString(), - uriInfo - ); + Response response = searchProvider.getNodesQueryResponse(httpHeaders, null, "cloud-region", + keys, includeStrings, version.toString(), uriInfo); assertNotNull(response); assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus()); } - //TODO fix test + // TODO fix test @Ignore("Test has a time dependency and fails based on system perf") @Test public void testNodesQueryTimeoutThrown() throws Exception { @@ -162,15 +159,8 @@ public class SearchProviderTest extends AAISetup{ when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap); when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); - Response response = searchProvider.getNodesQueryResponse( - httpHeaders, - null, - "cloud-region", - keys, - includeStrings, - version.toString(), - uriInfo - ); + Response response = searchProvider.getNodesQueryResponse(httpHeaders, null, "cloud-region", + keys, includeStrings, version.toString(), uriInfo); assertNotNull(response); assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); @@ -192,22 +182,15 @@ public class SearchProviderTest extends AAISetup{ when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap); when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); - Response response = searchProvider.getNodesQueryResponse( - httpHeaders, - null, - "cloud-region", - keys, - includeStrings, - version.toString(), - uriInfo - ); + Response response = searchProvider.getNodesQueryResponse(httpHeaders, null, "cloud-region", + keys, includeStrings, version.toString(), uriInfo); assertNotNull(response); assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); assertThat(response.getEntity().toString(), containsString("4009")); } - //TODO fix test + // TODO fix test @Ignore("Test has a time dependency and fails based on system perf") @Test public void testGenericQueryTimeoutThrown() throws Exception { @@ -225,17 +208,8 @@ public class SearchProviderTest extends AAISetup{ when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); - - Response response = searchProvider.getGenericQueryResponse( - httpHeaders, - null, - "cloud-region", - keys, - includeStrings, - 0, - version.toString(), - uriInfo - ); + Response response = searchProvider.getGenericQueryResponse(httpHeaders, null, + "cloud-region", keys, includeStrings, 0, version.toString(), uriInfo); assertNotNull(response); assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceFromPserverAndSubsNameTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceFromPserverAndSubsNameTest.java index 295480b..cfbe65e 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceFromPserverAndSubsNameTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceFromPserverAndSubsNameTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,84 +26,103 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class ServiceFromPserverAndSubsNameTest extends QueryTest { - public ServiceFromPserverAndSubsNameTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //Set up the test graph - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", "hostname", "pservername01"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", "hostname", "pservername02-wrong"); - - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserverid01"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", "vserver-id", "vserverid02"); - Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "5", "aai-node-type", "vserver", "vserver-id", "vserverid03"); - - Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", "generic-vnf", "vnf-id", "vnfid01"); - Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "9", "aai-node-type", "generic-vnf", "vnf-id", "vnfid02"); - Vertex vnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "10", "aai-node-type", "generic-vnf", "vnf-id", "vnfid03"); - - Vertex servinst1 = graph.addVertex(T.label, "service-instance", T.id, "61", "aai-node-type", "service-instance", "service-instance-id", "servInstId01", "service-type", "servType01"); - Vertex servinst2 = graph.addVertex(T.label, "service-instance", T.id, "12", "aai-node-type", "service-instance", "service-instance-id", "servInstId02", "service-type", "servType02", "service-role", "servRole02"); - Vertex servinst3 = graph.addVertex(T.label, "service-instance", T.id, "13", "aai-node-type", "service-instance", "service-instance-id", "servInstId03-wrong", "service-type", "servType03", "service-role", "servRole03"); - - Vertex servsub1 = graph.addVertex(T.label, "service-subscription", T.id, "14", "aai-node-type", "service-subscription", "service-type", "servType01"); - Vertex servsub2 = graph.addVertex(T.label, "service-subscription", T.id, "15", "aai-node-type", "service-subscription", "service-type", "servType02"); - Vertex servsub3 = graph.addVertex(T.label, "service-subscription", T.id, "16", "aai-node-type", "service-subscription", "service-type", "servType03-wrong"); - - Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "17", "aai-node-type", "customer", "global-customer-id", "custid01", "subscriber-name", "subscriberName01"); - Vertex customer2 = graph.addVertex(T.label, "customer", T.id, "18", "aai-node-type", "customer", "global-customer-id", "custid02-wrong", "subscriber-name", "subscriberName-wrong"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, vserver1, pserver1); //true - rules.addEdge(g, vnf1, vserver1); //true - rules.addEdge(g, vnf1, servinst1); //true - rules.addTreeEdge(g, servinst1, servsub1); //true - rules.addTreeEdge(g, servsub1, customer1); //true - - rules.addEdge(g, vserver2, pserver1); //true - rules.addEdge(g, vnf2, vserver2); //true - rules.addEdge(g, vnf2, servinst2); //true - rules.addTreeEdge(g, servinst2, servsub2); //true - rules.addTreeEdge(g, servsub2, customer1); //true - - rules.addEdge(g, vserver3, pserver2); //false - rules.addEdge(g, vnf3, vserver3); //false - rules.addEdge(g, vnf3, servinst3); //false - rules.addTreeEdge(g, servinst3, servsub3); //false - rules.addTreeEdge(g, servsub3, customer2); //false - - - expectedResult.add(servinst1); - expectedResult.add(servsub1); - expectedResult.add(servinst2); - expectedResult.add(servsub2); - - } - - @Override - protected String getQueryName() { - return "service-fromPserverandSubsName"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type","pserver").has("hostname", "pservername01"); - } - - @Override - protected void addParam(Map<String, Object> params) { - params.put("subscriberName","subscriberName01"); - } + public ServiceFromPserverAndSubsNameTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // Set up the test graph + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", + "hostname", "pservername01"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", + "hostname", "pservername02-wrong"); + + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserverid01"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", + "vserver-id", "vserverid02"); + Vertex vserver3 = graph.addVertex(T.label, "vserver", T.id, "5", "aai-node-type", "vserver", + "vserver-id", "vserverid03"); + + Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid01"); + Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "9", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid02"); + Vertex vnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "10", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid03"); + + Vertex servinst1 = graph.addVertex(T.label, "service-instance", T.id, "61", "aai-node-type", + "service-instance", "service-instance-id", "servInstId01", "service-type", + "servType01"); + Vertex servinst2 = graph.addVertex(T.label, "service-instance", T.id, "12", "aai-node-type", + "service-instance", "service-instance-id", "servInstId02", "service-type", "servType02", + "service-role", "servRole02"); + Vertex servinst3 = graph.addVertex(T.label, "service-instance", T.id, "13", "aai-node-type", + "service-instance", "service-instance-id", "servInstId03-wrong", "service-type", + "servType03", "service-role", "servRole03"); + + Vertex servsub1 = graph.addVertex(T.label, "service-subscription", T.id, "14", + "aai-node-type", "service-subscription", "service-type", "servType01"); + Vertex servsub2 = graph.addVertex(T.label, "service-subscription", T.id, "15", + "aai-node-type", "service-subscription", "service-type", "servType02"); + Vertex servsub3 = graph.addVertex(T.label, "service-subscription", T.id, "16", + "aai-node-type", "service-subscription", "service-type", "servType03-wrong"); + + Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "17", "aai-node-type", + "customer", "global-customer-id", "custid01", "subscriber-name", "subscriberName01"); + Vertex customer2 = + graph.addVertex(T.label, "customer", T.id, "18", "aai-node-type", "customer", + "global-customer-id", "custid02-wrong", "subscriber-name", "subscriberName-wrong"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, vserver1, pserver1); // true + rules.addEdge(g, vnf1, vserver1); // true + rules.addEdge(g, vnf1, servinst1); // true + rules.addTreeEdge(g, servinst1, servsub1); // true + rules.addTreeEdge(g, servsub1, customer1); // true + + rules.addEdge(g, vserver2, pserver1); // true + rules.addEdge(g, vnf2, vserver2); // true + rules.addEdge(g, vnf2, servinst2); // true + rules.addTreeEdge(g, servinst2, servsub2); // true + rules.addTreeEdge(g, servsub2, customer1); // true + + rules.addEdge(g, vserver3, pserver2); // false + rules.addEdge(g, vnf3, vserver3); // false + rules.addEdge(g, vnf3, servinst3); // false + rules.addTreeEdge(g, servinst3, servsub3); // false + rules.addTreeEdge(g, servsub3, customer2); // false + + expectedResult.add(servinst1); + expectedResult.add(servsub1); + expectedResult.add(servinst2); + expectedResult.add(servsub2); + + } + + @Override + protected String getQueryName() { + return "service-fromPserverandSubsName"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "pserver").has("hostname", "pservername01"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("subscriberName", "subscriberName01"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceModelsByDistributionStatusTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceModelsByDistributionStatusTest.java index ee70b07..a0cdfb1 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceModelsByDistributionStatusTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceModelsByDistributionStatusTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,54 +30,69 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class ServiceModelsByDistributionStatusTest extends QueryTest { - public ServiceModelsByDistributionStatusTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public ServiceModelsByDistributionStatusTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex model1 = graph.addVertex(T.label, "model", T.id, "1", "aai-node-type", "model", + "model-invariant-id", "model-invariant-id-1", "model-type", "resource"); + Vertex modelver1 = graph.addVertex(T.label, "model-ver", T.id, "2", "aai-node-type", + "model-ver", "model-version-id", "model-version-id-1", "model-name", "model-name1", + "model-version", "model-version-1", "distribution-status", "distribution-status1"); + Vertex modelver11 = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", + "model-ver", "model-version-id", "model-version-id-11", "model-name", "model-name11", + "model-version", "model-version-1", "distribution-status", "distribution-status2"); + + Vertex model2 = graph.addVertex(T.label, "model", T.id, "3", "aai-node-type", "model", + "model-invariant-id", "model-invariant-id-2", "model-type", "resource"); + Vertex modelver2 = graph.addVertex(T.label, "model-ver", T.id, "4", "aai-node-type", + "model-ver", "model-version-id", "model-version-id-2", "model-name", "model-name2", + "model-version", "model-version-22", "distribution-status", "distribution-status2"); + + Vertex model3 = graph.addVertex(T.label, "model", T.id, "5", "aai-node-type", "model", + "model-invariant-id", "model-invariant-id-3", "model-type", "service"); + Vertex modelver3 = graph.addVertex(T.label, "model-ver", T.id, "6", "aai-node-type", + "model-ver", "model-version-id", "model-version-id-13", "model-name", "model-name3", + "model-version", "model-version-3", "distribution-status", "distribution-status1"); + Vertex modelver13 = graph.addVertex(T.label, "model-ver", T.id, "7", "aai-node-type", + "model-ver", "model-version-id", "model-version-id-33", "model-name", "model-name33", + "model-version", "model-version-33", "distribution-status", "distribution-status2"); - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex model1 = graph.addVertex(T.label, "model", T.id, "1", "aai-node-type", "model", "model-invariant-id", "model-invariant-id-1", "model-type", "resource"); - Vertex modelver1 = graph.addVertex(T.label, "model-ver", T.id, "2", "aai-node-type", "model-ver", "model-version-id", "model-version-id-1","model-name","model-name1", "model-version","model-version-1", "distribution-status", "distribution-status1"); - Vertex modelver11 = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver", "model-version-id", "model-version-id-11","model-name","model-name11", "model-version","model-version-1", "distribution-status", "distribution-status2"); - - Vertex model2 = graph.addVertex(T.label, "model", T.id, "3", "aai-node-type", "model", "model-invariant-id", "model-invariant-id-2", "model-type", "resource"); - Vertex modelver2 = graph.addVertex(T.label, "model-ver", T.id, "4", "aai-node-type", "model-ver", "model-version-id", "model-version-id-2","model-name","model-name2", "model-version","model-version-22", "distribution-status", "distribution-status2"); - - Vertex model3 = graph.addVertex(T.label, "model", T.id, "5", "aai-node-type", "model", "model-invariant-id", "model-invariant-id-3", "model-type", "service"); - Vertex modelver3 = graph.addVertex(T.label, "model-ver", T.id, "6", "aai-node-type", "model-ver", "model-version-id", "model-version-id-13","model-name","model-name3", "model-version","model-version-3", "distribution-status", "distribution-status1"); - Vertex modelver13 = graph.addVertex(T.label, "model-ver", T.id, "7", "aai-node-type", "model-ver", "model-version-id", "model-version-id-33","model-name","model-name33", "model-version","model-version-33", "distribution-status", "distribution-status2"); - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, modelver2,model2); - - rules.addTreeEdge(g, modelver3, model3); - rules.addTreeEdge(g, modelver13, model3); - rules.addTreeEdge(g, modelver11, model3); - - expectedResult.add(model3); - expectedResult.add(modelver13); - expectedResult.add(modelver11); - + rules.addTreeEdge(g, modelver2, model2); + + rules.addTreeEdge(g, modelver3, model3); + rules.addTreeEdge(g, modelver13, model3); + rules.addTreeEdge(g, modelver11, model3); + + expectedResult.add(model3); + expectedResult.add(modelver13); + expectedResult.add(modelver11); + + } + + @Override + protected String getQueryName() { + return "serviceModels-byDistributionStatus"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "model").has("model-invariant-id", "model-invariant-id-3"); + } - } - @Override - protected String getQueryName() { - return "serviceModels-byDistributionStatus"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "model").has("model-invariant-id", "model-invariant-id-3"); - } - - @Override - protected void addParam(Map<String, Object> params) { - params.put("distributionStatus", "distribution-status2"); - return; - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("distributionStatus", "distribution-status2"); + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceSitesQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceSitesQueryTest.java index bb970c6..dd61cf3 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceSitesQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceSitesQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,68 +26,74 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class ServiceSitesQueryTest extends QueryTest { - public ServiceSitesQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } + public ServiceSitesQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "0", "aai-node-type", + "customer", "global-customer-id", "customer1"); + Vertex customer2 = graph.addVertex(T.label, "customer", T.id, "1", "aai-node-type", + "customer", "global-customer-id", "customer2"); + Vertex service1 = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-type", "service1"); + Vertex service2 = graph.addVertex(T.label, "service-subscription", T.id, "3", + "aai-node-type", "service-subscription", "service-type", "service2"); + Vertex instance = graph.addVertex(T.label, "service-instance", T.id, "4", "aai-node-type", + "service-instance"); + Vertex vnf = + graph.addVertex(T.label, "generic-vnf", T.id, "5", "aai-node-type", "generic-vnf"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "9", "aai-node-type", "tenant"); + Vertex region = + graph.addVertex(T.label, "cloud-region", T.id, "10", "aai-node-type", "cloud-region"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "7", "aai-node-type", "pserver"); + Vertex complex = graph.addVertex(T.label, "complex", T.id, "8", "aai-node-type", "complex"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, customer1, service1); + rules.addTreeEdge(g, customer1, service2); + rules.addTreeEdge(g, service1, instance); + rules.addEdge(g, vnf, instance); + rules.addEdge(g, vnf, vserver); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, region); + rules.addEdge(g, region, complex); + rules.addEdge(g, vserver, pserver); + rules.addEdge(g, pserver, complex); - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "0", "aai-node-type", "customer", "global-customer-id", "customer1"); - Vertex customer2 = graph.addVertex(T.label, "customer", T.id, "1", "aai-node-type", "customer", "global-customer-id", "customer2"); - Vertex service1 = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", "service-subscription", "service-type", "service1"); - Vertex service2 = graph.addVertex(T.label, "service-subscription", T.id, "3", "aai-node-type", "service-subscription", "service-type", "service2"); - Vertex instance = graph.addVertex(T.label, "service-instance", T.id, "4", "aai-node-type", "service-instance"); - Vertex vnf = graph.addVertex(T.label, "generic-vnf", T.id, "5", "aai-node-type", "generic-vnf"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "9", "aai-node-type", "tenant"); - Vertex region = graph.addVertex(T.label, "cloud-region", T.id, "10", "aai-node-type", "cloud-region"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "7", "aai-node-type", "pserver"); - Vertex complex = graph.addVertex(T.label, "complex", T.id, "8", "aai-node-type", "complex"); + expectedResult.add(instance); + expectedResult.add(vnf); + expectedResult.add(region); + expectedResult.add(complex); + } - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, customer1, service1); - rules.addTreeEdge(g, customer1, service2); - rules.addTreeEdge(g, service1, instance); - rules.addEdge(g, vnf, instance); - rules.addEdge(g, vnf, vserver); - rules.addTreeEdge(g, vserver, tenant); - rules.addTreeEdge(g, tenant, region); - rules.addEdge(g, region, complex); - rules.addEdge(g, vserver, pserver); - rules.addEdge(g, pserver, complex); - - expectedResult.add(instance); - expectedResult.add(vnf); - expectedResult.add(region); - expectedResult.add(complex); - } + @Override + protected String getQueryName() { + return "service-sites"; + } - @Override - protected String getQueryName() { - return "service-sites"; - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "customer"); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "customer"); - - } + } - @Override - protected void addParam(Map<String, Object> params) { - params.put("customerId", "customer1"); - params.put("type", "service1"); - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("customerId", "customer1"); + params.put("type", "service1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceTopologyTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceTopologyTest.java index 21482aa..ecae9a7 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceTopologyTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/ServiceTopologyTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,8 +29,6 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class ServiceTopologyTest extends QueryTest { public ServiceTopologyTest() throws AAIException, NoEdgeRuleFoundException { super(); @@ -38,84 +38,121 @@ public class ServiceTopologyTest extends QueryTest { public void run() { super.run(); } + @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex servinst = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "servInstId01", "service-type", "servType01"); - Vertex gv = graph.addVertex(T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "gvId", "vnf-name", "name", "vnf-type", "type"); - Vertex vnfc = graph.addVertex(T.id, "3", "aai-node-type", "vnfc","vnfc-name", "vnfcName1", "nfc-naming-code", "blue", "nfc-function", "correct-function"); - - Vertex vipipv4addresslist1 = graph.addVertex(T.label, "vip-ipv4-address-list", T.id, "4", "aai-node-type", "vip-ipv4-address-list", "vip-ipv4-addres", "vip-ipv4-address1"); - Vertex subnet1 = graph.addVertex(T.label, "subnet", T.id, "5", "aai-node-type", "subnet", "subnet-id", "subnet1"); - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "6", "aai-node-type", "l3-network", "network-id", "network1-id1", "network-name", "network1-name1"); - - Vertex vipipv6addresslist1 = graph.addVertex(T.label, "vip-ipv6-address-list", T.id, "7", "aai-node-type", "vip-ipv6-address-list", "vip-ipv6-address", "vip-ipv6-address2"); - Vertex subnet2 = graph.addVertex(T.label, "subnet", T.id, "8", "aai-node-type", "subnet", "subnet-id", "subnet2"); - Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", "l3-network", "network-id", "network1-id2", "network-name", "network2-name2"); - - Vertex l3inter1ipv4addresslist1 = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "10", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address1"); - Vertex l3network3 = graph.addVertex(T.label, "l3-network", T.id, "11", "aai-node-type", "l3-network", "network-id", "network3-id3", "network-name", "network2-name3"); - Vertex subnet3 = graph.addVertex(T.label, "subnet", T.id, "12", "aai-node-type", "subnet", "subnet-id", "subnet3"); - Vertex l3network3_2 = graph.addVertex(T.label, "l3-network", T.id, "13", "aai-node-type", "l3-network", "network-id", "network3-id3", "network-name", "network3_2-name3_2"); - - Vertex l3inter1ipv6addresslist1 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "14", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address1"); - Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "15", "aai-node-type", "l3-network", "network-id", "network3-id3", "network-name", "network2-name4"); - Vertex subnet4 = graph.addVertex(T.label, "subnet", T.id, "16", "aai-node-type", "subnet", "subnet-id", "subnet4"); - Vertex l3network4_2 = graph.addVertex(T.label, "l3-network", T.id, "17", "aai-node-type", "l3-network", "network-id", "network3-id4", "network-name", "network4_2-name4_2"); - - - Vertex vserv1 = graph.addVertex(T.id, "18", "aai-node-type", "vserver", "vserver-id", "vservId1", "vserver-name", "vservName1"); - Vertex tenant1 = graph.addVertex(T.id, "19", "aai-node-type", "tenant", "tenant-id", "ten1", "tenant-name", "tenName1"); - Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "20", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id1", "l-interface-name", "l-interface-name1"); - Vertex l3inter1ipv4addresslist2 = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "21", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address2"); - Vertex l3network5 = graph.addVertex(T.label, "l3-network", T.id, "22", "aai-node-type", "l3-network", "network-id", "network3-id3", "network-name", "network2-name3"); - Vertex subnet5 = graph.addVertex(T.label, "subnet", T.id, "23", "aai-node-type", "subnet", "subnet-id", "subnet3"); - Vertex l3network5_2 = graph.addVertex(T.label, "l3-network", T.id, "24", "aai-node-type", "l3-network", "network-id", "network3-id3", "network-name", "network3_2-name3_2"); - - Vertex l3inter1ipv6addresslist2 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "25", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address1"); - Vertex l3network6 = graph.addVertex(T.label, "l3-network", T.id, "26", "aai-node-type", "l3-network", "network-id", "network3-id3", "network-name", "network2-name4"); - Vertex subnet6 = graph.addVertex(T.label, "subnet", T.id, "27", "aai-node-type", "subnet", "subnet-id", "subnet4"); - Vertex l3network6_2 = graph.addVertex(T.label, "l3-network", T.id, "28", "aai-node-type", "l3-network", "network-id", "network3-id4", "network-name", "network4_2-name4_2"); - - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "29", "aai-node-type", "pserver", "hostname", "pservername1"); - - - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "30", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex pserverint = graph.addVertex(T.label, "p-interface", T.id, "31", "aai-node-type", "p-interface", "interface-name", "xe0/0/0"); - Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "32", "aai-node-type", "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); + Vertex servinst = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", + "service-instance", "service-instance-id", "servInstId01", "service-type", + "servType01"); + Vertex gv = graph.addVertex(T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "gvId", + "vnf-name", "name", "vnf-type", "type"); + Vertex vnfc = graph.addVertex(T.id, "3", "aai-node-type", "vnfc", "vnfc-name", "vnfcName1", + "nfc-naming-code", "blue", "nfc-function", "correct-function"); + + Vertex vipipv4addresslist1 = graph.addVertex(T.label, "vip-ipv4-address-list", T.id, "4", + "aai-node-type", "vip-ipv4-address-list", "vip-ipv4-addres", "vip-ipv4-address1"); + Vertex subnet1 = graph.addVertex(T.label, "subnet", T.id, "5", "aai-node-type", "subnet", + "subnet-id", "subnet1"); + Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "6", "aai-node-type", + "l3-network", "network-id", "network1-id1", "network-name", "network1-name1"); + + Vertex vipipv6addresslist1 = graph.addVertex(T.label, "vip-ipv6-address-list", T.id, "7", + "aai-node-type", "vip-ipv6-address-list", "vip-ipv6-address", "vip-ipv6-address2"); + Vertex subnet2 = graph.addVertex(T.label, "subnet", T.id, "8", "aai-node-type", "subnet", + "subnet-id", "subnet2"); + Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", + "l3-network", "network-id", "network1-id2", "network-name", "network2-name2"); + + Vertex l3inter1ipv4addresslist1 = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "10", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address1"); + Vertex l3network3 = graph.addVertex(T.label, "l3-network", T.id, "11", "aai-node-type", + "l3-network", "network-id", "network3-id3", "network-name", "network2-name3"); + Vertex subnet3 = graph.addVertex(T.label, "subnet", T.id, "12", "aai-node-type", "subnet", + "subnet-id", "subnet3"); + Vertex l3network3_2 = graph.addVertex(T.label, "l3-network", T.id, "13", "aai-node-type", + "l3-network", "network-id", "network3-id3", "network-name", "network3_2-name3_2"); + + Vertex l3inter1ipv6addresslist1 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "14", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address1"); + Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "15", "aai-node-type", + "l3-network", "network-id", "network3-id3", "network-name", "network2-name4"); + Vertex subnet4 = graph.addVertex(T.label, "subnet", T.id, "16", "aai-node-type", "subnet", + "subnet-id", "subnet4"); + Vertex l3network4_2 = graph.addVertex(T.label, "l3-network", T.id, "17", "aai-node-type", + "l3-network", "network-id", "network3-id4", "network-name", "network4_2-name4_2"); + + Vertex vserv1 = graph.addVertex(T.id, "18", "aai-node-type", "vserver", "vserver-id", + "vservId1", "vserver-name", "vservName1"); + Vertex tenant1 = graph.addVertex(T.id, "19", "aai-node-type", "tenant", "tenant-id", "ten1", + "tenant-name", "tenName1"); + Vertex linterface1 = + graph.addVertex(T.label, "l-interface", T.id, "20", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id1", "l-interface-name", "l-interface-name1"); + Vertex l3inter1ipv4addresslist2 = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "21", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address2"); + Vertex l3network5 = graph.addVertex(T.label, "l3-network", T.id, "22", "aai-node-type", + "l3-network", "network-id", "network3-id3", "network-name", "network2-name3"); + Vertex subnet5 = graph.addVertex(T.label, "subnet", T.id, "23", "aai-node-type", "subnet", + "subnet-id", "subnet3"); + Vertex l3network5_2 = graph.addVertex(T.label, "l3-network", T.id, "24", "aai-node-type", + "l3-network", "network-id", "network3-id3", "network-name", "network3_2-name3_2"); + + Vertex l3inter1ipv6addresslist2 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "25", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address1"); + Vertex l3network6 = graph.addVertex(T.label, "l3-network", T.id, "26", "aai-node-type", + "l3-network", "network-id", "network3-id3", "network-name", "network2-name4"); + Vertex subnet6 = graph.addVertex(T.label, "subnet", T.id, "27", "aai-node-type", "subnet", + "subnet-id", "subnet4"); + Vertex l3network6_2 = graph.addVertex(T.label, "l3-network", T.id, "28", "aai-node-type", + "l3-network", "network-id", "network3-id4", "network-name", "network4_2-name4_2"); + + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "29", "aai-node-type", + "pserver", "hostname", "pservername1"); + + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "30", "aai-node-type", + "pserver", "hostname", "pservername1"); + Vertex pserverint = graph.addVertex(T.label, "p-interface", T.id, "31", "aai-node-type", + "p-interface", "interface-name", "xe0/0/0"); + Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "32", "aai-node-type", + "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, servinst , gv); - rules.addEdge(g,gv,vnfc); - rules.addEdge(g,vnfc,vipipv4addresslist1); - rules.addEdge(g,vipipv4addresslist1,subnet1); - rules.addTreeEdge(g,subnet1,l3network1); - rules.addEdge(g,vnfc,vipipv6addresslist1); - rules.addEdge(g,vipipv6addresslist1,subnet2); - rules.addTreeEdge(g,subnet2,l3network2); - rules.addTreeEdge(g,vnfc,l3inter1ipv4addresslist1); - rules.addEdge(g,l3inter1ipv4addresslist1,l3network3); - rules.addEdge(g,l3inter1ipv4addresslist1,subnet3); - rules.addTreeEdge(g,subnet3,l3network3_2); - rules.addTreeEdge(g,vnfc,l3inter1ipv6addresslist1); - rules.addEdge(g,l3inter1ipv6addresslist1,l3network4); - rules.addEdge(g,l3inter1ipv6addresslist1,subnet4); - rules.addTreeEdge(g,subnet4,l3network4_2); - rules.addEdge(g,gv,vserv1); - rules.addTreeEdge(g,vserv1,tenant1); - rules.addTreeEdge(g,vserv1,linterface1); - rules.addTreeEdge(g,linterface1,l3inter1ipv4addresslist2); - rules.addEdge(g,l3inter1ipv4addresslist2,l3network5); - rules.addEdge(g,l3inter1ipv4addresslist2,subnet5); - rules.addTreeEdge(g,subnet5,l3network5_2); - rules.addTreeEdge(g,linterface1,l3inter1ipv6addresslist2); - rules.addEdge(g,l3inter1ipv6addresslist2,l3network6); - rules.addEdge(g,l3inter1ipv6addresslist2,subnet6); - rules.addTreeEdge(g,subnet6,l3network6_2); - rules.addEdge(g,vserv1,pserver1); - rules.addEdge(g,gv,pserver2); - rules.addTreeEdge(g,pserver2,pserverint); - rules.addEdge(g,pserverint,plink1); + rules.addEdge(g, servinst, gv); + rules.addEdge(g, gv, vnfc); + rules.addEdge(g, vnfc, vipipv4addresslist1); + rules.addEdge(g, vipipv4addresslist1, subnet1); + rules.addTreeEdge(g, subnet1, l3network1); + rules.addEdge(g, vnfc, vipipv6addresslist1); + rules.addEdge(g, vipipv6addresslist1, subnet2); + rules.addTreeEdge(g, subnet2, l3network2); + rules.addTreeEdge(g, vnfc, l3inter1ipv4addresslist1); + rules.addEdge(g, l3inter1ipv4addresslist1, l3network3); + rules.addEdge(g, l3inter1ipv4addresslist1, subnet3); + rules.addTreeEdge(g, subnet3, l3network3_2); + rules.addTreeEdge(g, vnfc, l3inter1ipv6addresslist1); + rules.addEdge(g, l3inter1ipv6addresslist1, l3network4); + rules.addEdge(g, l3inter1ipv6addresslist1, subnet4); + rules.addTreeEdge(g, subnet4, l3network4_2); + rules.addEdge(g, gv, vserv1); + rules.addTreeEdge(g, vserv1, tenant1); + rules.addTreeEdge(g, vserv1, linterface1); + rules.addTreeEdge(g, linterface1, l3inter1ipv4addresslist2); + rules.addEdge(g, l3inter1ipv4addresslist2, l3network5); + rules.addEdge(g, l3inter1ipv4addresslist2, subnet5); + rules.addTreeEdge(g, subnet5, l3network5_2); + rules.addTreeEdge(g, linterface1, l3inter1ipv6addresslist2); + rules.addEdge(g, l3inter1ipv6addresslist2, l3network6); + rules.addEdge(g, l3inter1ipv6addresslist2, subnet6); + rules.addTreeEdge(g, subnet6, l3network6_2); + rules.addEdge(g, vserv1, pserver1); + rules.addEdge(g, gv, pserver2); + rules.addTreeEdge(g, pserver2, pserverint); + rules.addEdge(g, pserverint, plink1); expectedResult.add(servinst); expectedResult.add(gv); @@ -150,8 +187,8 @@ public class ServiceTopologyTest extends QueryTest { expectedResult.add(pserverint); expectedResult.add(plink1); - } + @Override protected String getQueryName() { return "service-topology"; @@ -161,6 +198,7 @@ public class ServiceTopologyTest extends QueryTest { protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { g.has("aai-node-type", "service-instance"); } + @Override protected void addParam(Map<String, Object> params) { return; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/SimpleFormatTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/SimpleFormatTest.java index 934d3fa..0b53b72 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/SimpleFormatTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/SimpleFormatTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,16 @@ */ package org.onap.aai.rest.search; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + import com.google.gson.JsonObject; + +import java.util.ArrayList; +import java.util.List; + import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; @@ -42,78 +51,66 @@ import org.onap.aai.serialization.queryformats.exceptions.AAIFormatVertexExcepti import org.onap.aai.serialization.queryformats.utils.UrlBuilder; import org.springframework.test.annotation.DirtiesContext; -import java.util.ArrayList; -import java.util.List; +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS) +public class SimpleFormatTest extends AAISetup { -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; + protected Graph graph; + private TransactionalGraphEngine dbEngine; -@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS) -public class SimpleFormatTest extends AAISetup{ - - - protected Graph graph; - private TransactionalGraphEngine dbEngine; - - protected final List<Vertex> expectedResult = new ArrayList<>(); - - protected Loader loader; - private DBSerializer serializer; - - @Mock - private UrlBuilder urlBuilder; - private RawFormat _simpleFormat; - - Vertex vfmodule = null; - - @Before - public void setUp() throws AAIException, NoEdgeRuleFoundException { - MockitoAnnotations.initMocks(this); - graph = TinkerGraph.open(); - loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getRelatedLinkVersion()); - vfmodule = graph.addVertex(T.label, "vf-module", - T.id, "5", - "aai-node-type", "vf-module", - "vf-module-id", "vf-module-id-val-68205", - "vf-module-name", "example-vf-module-name-val-68205", - "heat-stack-id", "example-heat-stack-id-val-68205", - "orchestration-status", "example-orchestration-status-val-68205", - "is-base-vf-module", "true", - "resource-version", "1498166571906", - "model-invariant-id", "fe8aac07-ce6c-4f9f-aa0d-b561c77da9e8", - "model-invariant-id-local", "fe8aac07-ce6c-4f9f-aa0d-b561c77da9e8", - "model-version-id", "0d23052d-8ffe-433e-a25d-da5da027bb7c", - "model-version-id-local", "0d23052d-8ffe-433e-a25d-da5da027bb7c", - "widget-model-id", "example-widget-model-id-val-68205", - "widget-model-version", "example-widget--model-version-val-68205", - "contrail-service-instance-fqdn", "example-contrail-service-instance-fqdn-val-68205"); - - final ModelType factoryType = ModelType.MOXY; - Loader loader = loaderFactory.createLoaderForVersion(factoryType, schemaVersions.getRelatedLinkVersion()); - dbEngine = spy(new JanusGraphDBEngine( - QueryStyle.TRAVERSAL, - loader)); - - when(dbEngine.tx()).thenReturn(graph); - TransactionalGraphEngine.Admin spyAdmin = spy(dbEngine.asAdmin()); - when(spyAdmin.getTraversalSource()).thenReturn(graph.traversal()); - when(dbEngine.asAdmin()).thenReturn(spyAdmin); - serializer = new DBSerializer(schemaVersions.getRelatedLinkVersion(), dbEngine, factoryType, "Junit"); - _simpleFormat = new RawFormat.Builder(loader, serializer, urlBuilder).modelDriven().build(); - dbEngine.startTransaction(); - } - - @Test - public void run() throws AAIFormatVertexException { - assertNotNull(dbEngine.tx()); - System.out.println(dbEngine.tx()); - assertNotNull(graph.traversal()); - JsonObject json = _simpleFormat.createPropertiesObject(vfmodule).get(); - json.entrySet().forEach((System.out::println)); - assertTrue(json.has("model-invariant-id")); - - } + protected final List<Vertex> expectedResult = new ArrayList<>(); + + protected Loader loader; + private DBSerializer serializer; + + @Mock + private UrlBuilder urlBuilder; + private RawFormat _simpleFormat; + + Vertex vfmodule = null; + + @Before + public void setUp() throws AAIException, NoEdgeRuleFoundException { + MockitoAnnotations.initMocks(this); + graph = TinkerGraph.open(); + loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, + schemaVersions.getRelatedLinkVersion()); + vfmodule = graph.addVertex(T.label, "vf-module", T.id, "5", "aai-node-type", "vf-module", + "vf-module-id", "vf-module-id-val-68205", "vf-module-name", + "example-vf-module-name-val-68205", "heat-stack-id", "example-heat-stack-id-val-68205", + "orchestration-status", "example-orchestration-status-val-68205", "is-base-vf-module", + "true", "resource-version", "1498166571906", "model-invariant-id", + "fe8aac07-ce6c-4f9f-aa0d-b561c77da9e8", "model-invariant-id-local", + "fe8aac07-ce6c-4f9f-aa0d-b561c77da9e8", "model-version-id", + "0d23052d-8ffe-433e-a25d-da5da027bb7c", "model-version-id-local", + "0d23052d-8ffe-433e-a25d-da5da027bb7c", "widget-model-id", + "example-widget-model-id-val-68205", "widget-model-version", + "example-widget--model-version-val-68205", "contrail-service-instance-fqdn", + "example-contrail-service-instance-fqdn-val-68205"); + + final ModelType factoryType = ModelType.MOXY; + Loader loader = loaderFactory.createLoaderForVersion(factoryType, + schemaVersions.getRelatedLinkVersion()); + dbEngine = spy(new JanusGraphDBEngine(QueryStyle.TRAVERSAL, loader)); + + when(dbEngine.tx()).thenReturn(graph); + TransactionalGraphEngine.Admin spyAdmin = spy(dbEngine.asAdmin()); + when(spyAdmin.getTraversalSource()).thenReturn(graph.traversal()); + when(dbEngine.asAdmin()).thenReturn(spyAdmin); + serializer = new DBSerializer(schemaVersions.getRelatedLinkVersion(), dbEngine, factoryType, + "Junit"); + _simpleFormat = new RawFormat.Builder(loader, serializer, urlBuilder).modelDriven().build(); + dbEngine.startTransaction(); + } + + @Test + public void run() throws AAIFormatVertexException { + assertNotNull(dbEngine.tx()); + System.out.println(dbEngine.tx()); + assertNotNull(graph.traversal()); + JsonObject json = _simpleFormat.createPropertiesObject(vfmodule).get(); + json.entrySet().forEach((System.out::println)); + assertTrue(json.has("model-invariant-id")); + + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/SiteL3NetworkCloudRegionQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/SiteL3NetworkCloudRegionQueryTest.java index 74ee775..9538be9 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/SiteL3NetworkCloudRegionQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/SiteL3NetworkCloudRegionQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,59 +26,65 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class SiteL3NetworkCloudRegionQueryTest extends QueryTest { - public SiteL3NetworkCloudRegionQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public SiteL3NetworkCloudRegionQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", + "physical-location-id", "clli"); + Vertex network = + graph.addVertex(T.label, "l3-network", T.id, "1", "aai-node-type", "l3-network"); + Vertex region = + graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", "cloud-region"); + Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", + "physical-location-id", "clli2"); + Vertex network2 = + graph.addVertex(T.label, "l3-network", T.id, "4", "aai-node-type", "l3-network"); + Vertex region2 = + graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region"); + Vertex network3 = + graph.addVertex(T.label, "l3-network", T.id, "6", "aai-node-type", "l3-network"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, complex, network); + rules.addEdge(g, region, network); + rules.addEdge(g, complex, network3); + rules.addEdge(g, complex2, network2); + rules.addEdge(g, region2, network2); + + expectedResult.add(complex); + expectedResult.add(network); + expectedResult.add(region); + expectedResult.add(network3); + + } - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", "physical-location-id", "clli"); - Vertex network = graph.addVertex(T.label, "l3-network", T.id, "1", "aai-node-type", "l3-network"); - Vertex region = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", "cloud-region"); - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", "physical-location-id", "clli2"); - Vertex network2 = graph.addVertex(T.label, "l3-network", T.id, "4", "aai-node-type", "l3-network"); - Vertex region2 = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region"); - Vertex network3 = graph.addVertex(T.label, "l3-network", T.id, "6", "aai-node-type", "l3-network"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, complex, network); - rules.addEdge(g, region, network); - rules.addEdge(g, complex, network3); - rules.addEdge(g, complex2, network2); - rules.addEdge(g, region2, network2); - - expectedResult.add(complex); - expectedResult.add(network); - expectedResult.add(region); - expectedResult.add(network3); - - } + @Override + protected String getQueryName() { + return "site-l3network-cloudRegion"; + } - @Override - protected String getQueryName() { - return "site-l3network-cloudRegion"; - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("physical-location-id", "clli"); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("physical-location-id", "clli"); - - } + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCloudRegionIdQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCloudRegionIdQueryTest.java index abc518c..3686ef3 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCloudRegionIdQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCloudRegionIdQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,54 +26,58 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class SitesByCloudRegionIdQueryTest extends QueryTest { - public SitesByCloudRegionIdQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public SitesByCloudRegionIdQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex"); + Vertex network = + graph.addVertex(T.label, "l3-network", T.id, "1", "aai-node-type", "l3-network"); + Vertex region = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", + "cloud-region", "cloud-region-id", "regionuuid"); + Vertex complex2 = + graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex"); + Vertex network2 = + graph.addVertex(T.label, "l3-network", T.id, "4", "aai-node-type", "l3-network"); + Vertex region2 = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", + "cloud-region", "cloud-region-id", "regionuuid2"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, complex, network); + rules.addEdge(g, region, network); + rules.addEdge(g, complex2, network2); + rules.addEdge(g, region2, network2); + + expectedResult.add(complex); + + } - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex"); - Vertex network = graph.addVertex(T.label, "l3-network", T.id, "1", "aai-node-type", "l3-network"); - Vertex region = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", "cloud-region", "cloud-region-id", "regionuuid"); - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex"); - Vertex network2 = graph.addVertex(T.label, "l3-network", T.id, "4", "aai-node-type", "l3-network"); - Vertex region2 = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region", "cloud-region-id", "regionuuid2"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, complex, network); - rules.addEdge(g, region, network); - rules.addEdge(g, complex2, network2); - rules.addEdge(g, region2, network2); - - expectedResult.add(complex); - - } + @Override + protected String getQueryName() { + return "sites-byCloudRegionId"; + } - @Override - protected String getQueryName() { - return "sites-byCloudRegionId"; - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("cloud-region-id", "regionuuid"); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("cloud-region-id", "regionuuid"); - - } + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCountryFilterCloudRegionIdQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCountryFilterCloudRegionIdQueryTest.java index 25ca62b..4c1dc14 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCountryFilterCloudRegionIdQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCountryFilterCloudRegionIdQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,6 +18,7 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.rest.search; + import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -25,61 +26,67 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class SitesByCountryFilterCloudRegionIdQueryTest extends QueryTest { - - public SitesByCountryFilterCloudRegionIdQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public SitesByCountryFilterCloudRegionIdQueryTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // Set up the test graph + Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", + "physical-location-id", "clli-100", "country", "countrycode-100"); + Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "1", "aai-node-type", + "l3-network", "network-id", "networkId-100", "network-name", "networkName-100", + "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", + "false", "is-external-network", "false"); + Vertex cloudregion = + graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", "cloud-region", + "cloud-owner", "cloudOwner-100", "cloud-region-id", "cloudRegionId-100"); + Vertex cloudregion2 = + graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", + "cloud-owner", "cloudOwner-200", "cloud-region-id", "cloudRegionId-200"); + Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "4", "aai-node-type", + "l3-network", "network-id", "networkId-200", "network-name", "networkName-200", + "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", + "false", "is-external-network", "false"); + Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "5", "aai-node-type", "complex", + "physical-location-id", "clli-200", "country", "countrycode-100"); - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - //Set up the test graph - Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", "physical-location-id", "clli-100", "country", "countrycode-100"); - Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "1", "aai-node-type", "l3-network", "network-id", "networkId-100", "network-name", "networkName-100", - "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", "false", "is-external-network", "false"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner-100", "cloud-region-id", "cloudRegionId-100"); - Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "3", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner-200", "cloud-region-id", "cloudRegionId-200"); - Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "4", "aai-node-type", "l3-network", "network-id", "networkId-200", "network-name", "networkName-200", - "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", "false", "is-external-network", "false"); - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "5", "aai-node-type", "complex", "physical-location-id", "clli-200", "country", "countrycode-100"); + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, complex, l3network); + rules.addEdge(g, cloudregion, l3network); + rules.addEdge(g, complex2, l3network2); + rules.addEdge(g, cloudregion2, l3network2); + expectedResult.add(complex); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, complex, l3network); - rules.addEdge(g, cloudregion, l3network); - rules.addEdge(g, complex2, l3network2); - rules.addEdge(g, cloudregion2, l3network2); - - expectedResult.add(complex); - + } - } + @Override + protected String getQueryName() { + return "sites-byCountryFilterCloudRegionId"; + } - @Override - protected String getQueryName() { - return "sites-byCountryFilterCloudRegionId"; - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "complex").has("country", "countrycode-100"); + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "complex").has("country", "countrycode-100"); - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("cloudRegionId", "cloudRegionId-100"); - @Override - protected void addParam(Map<String, Object> params) { - params.put("cloudRegionId", "cloudRegionId-100"); - - } + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCountryFilterCloudRegionVerQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCountryFilterCloudRegionVerQueryTest.java index 92ecfc2..383f188 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCountryFilterCloudRegionVerQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/SitesByCountryFilterCloudRegionVerQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,6 +18,7 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.rest.search; + import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -25,62 +26,68 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class SitesByCountryFilterCloudRegionVerQueryTest extends QueryTest { - - public SitesByCountryFilterCloudRegionVerQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public SitesByCountryFilterCloudRegionVerQueryTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // Set up the test graph + Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", + "physical-location-id", "clli-100", "country", "countrycode-100"); + Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "1", "aai-node-type", + "l3-network", "network-id", "networkId-100", "network-name", "networkName-100", + "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", + "false", "is-external-network", "false"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner-100", "cloud-region-id", "cloudRegionId-100", + "cloud-region-version", "cloudRegionVer-3.0"); + Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", + "physical-location-id", "clli-200", "country", "countrycode-100"); + Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "4", "aai-node-type", + "l3-network", "network-id", "networkId-200", "network-name", "networkName-200", + "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", + "false", "is-external-network", "false"); + Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner-200", "cloud-region-id", "cloudRegionId-200", + "cloud-region-version", "cloudRegionVer-2.5"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, complex, l3network); + rules.addEdge(g, cloudregion, l3network); + rules.addEdge(g, complex2, l3network2); + rules.addEdge(g, cloudregion2, l3network2); + + expectedResult.add(complex); - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - //Set up the test graph - Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", "physical-location-id", "clli-100", "country", "countrycode-100"); - Vertex l3network = graph.addVertex(T.label, "l3-network", T.id, "1", "aai-node-type", "l3-network", "network-id", "networkId-100", "network-name", "networkName-100", - "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", "false", "is-external-network", "false"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner-100", "cloud-region-id", "cloudRegionId-100", - "cloud-region-version", "cloudRegionVer-3.0"); - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "3", "aai-node-type", "complex", "physical-location-id", "clli-200", "country", "countrycode-100"); - Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "4", "aai-node-type", "l3-network", "network-id", "networkId-200", "network-name", "networkName-200", - "is-bound-to-vpn", "false", "is-provider-network", "false", "is-shared-network", "false", "is-external-network", "false"); - Vertex cloudregion2 = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner-200", "cloud-region-id", "cloudRegionId-200", - "cloud-region-version", "cloudRegionVer-2.5"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, complex, l3network); - rules.addEdge(g, cloudregion, l3network); - rules.addEdge(g, complex2, l3network2); - rules.addEdge(g, cloudregion2, l3network2); + } - expectedResult.add(complex); - + @Override + protected String getQueryName() { + return "sites-byCountryFilterCloudRegionVer"; + } - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "complex").has("country", "countrycode-100"); - @Override - protected String getQueryName() { - return "sites-byCountryFilterCloudRegionVer"; - } + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "complex").has("country", "countrycode-100"); - - } + @Override + protected void addParam(Map<String, Object> params) { + params.put("cloudRegionVersion", "cloudRegionVer-3.0"); - @Override - protected void addParam(Map<String, Object> params) { - params.put("cloudRegionVersion", "cloudRegionVer-3.0"); - - } + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/SriovTopologyFromVnfQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/SriovTopologyFromVnfQueryTest.java index cceab09..953b814 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/SriovTopologyFromVnfQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/SriovTopologyFromVnfQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,80 +30,92 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class SriovTopologyFromVnfQueryTest extends QueryTest { - public SriovTopologyFromVnfQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //Set up the test graph - Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", - "vnf-id", "gvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver","vserver-name", "vservername1"); - Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", - "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - - Vertex sriovVf1 = graph.addVertex(T.label, "sriov-vf", T.id, "3", "aai-node-type", "sriov-vf", "pci-id", "pcIid1"); - Vertex sriovPf1 = graph.addVertex(T.label, "sriov-pf", T.id, "4", "aai-node-type", "sriov-pf", "pf-pci-id", "pfPciId1"); - - Vertex pint1 = graph.addVertex(T.label, "p-interface", T.id, "5", "aai-node-type", "p-interface", "interface-name", "ge0/0/0"); - Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "6", "aai-node-type", "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); - - - Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "10", "aai-node-type", "generic-vnf", - "vnf-id", "gvnf2", "vnf-name", "genvnfname2", "nf-type", "sample-nf-type1"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver","vserver-name", "vservername2"); - Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", "l-interface", - "interface-name", "lint2", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - - Vertex sriovVf2 = graph.addVertex(T.label, "sriov-vf", T.id, "13", "aai-node-type", "sriov-vf", "pci-id", "pcIid2"); - Vertex sriovPf2 = graph.addVertex(T.label, "sriov-pf", T.id, "14", "aai-node-type", "sriov-pf", "pf-pci-id", "pfPciId2"); - - Vertex pint2 = graph.addVertex(T.label, "p-interface", T.id, "15", "aai-node-type", "p-interface", "interface-name", "ge0/0/1"); - Vertex plink2 = graph.addVertex(T.label, "physical-link", T.id, "16", "aai-node-type", "physical-link", "link-name", "ge0/0/0-to-xe0/0/1"); - - - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, gvnf1, vserver1); - rules.addTreeEdge(g, vserver1, lint1); - rules.addTreeEdge(g, lint1, sriovVf1); - rules.addEdge(g, sriovVf1, sriovPf1); - rules.addTreeEdge(g, sriovPf1, pint1); - rules.addEdge(g, pint1, plink1); - - rules.addEdge(g, gvnf2, vserver2);//false - rules.addTreeEdge(g, vserver2, lint2);//false - rules.addTreeEdge(g, lint2, sriovVf2);//false - rules.addEdge(g, sriovVf2, sriovPf2);//false - rules.addTreeEdge(g, sriovPf2, pint2);//false - rules.addEdge(g, pint2, plink2);//false - - - expectedResult.add(gvnf1); - expectedResult.add(vserver1); - expectedResult.add(sriovVf1); - expectedResult.add(plink1); - - } - @Override - protected String getQueryName() { - return "sriov-topology-fromVnf"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type","generic-vnf").has("vnf-id", "gvnf1").has("vnf-name", "genvnfname1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public SriovTopologyFromVnfQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // Set up the test graph + Vertex gvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", + "vnf-id", "gvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver", + "vserver-name", "vservername1"); + Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", + "l-interface", "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false"); + + Vertex sriovVf1 = graph.addVertex(T.label, "sriov-vf", T.id, "3", "aai-node-type", + "sriov-vf", "pci-id", "pcIid1"); + Vertex sriovPf1 = graph.addVertex(T.label, "sriov-pf", T.id, "4", "aai-node-type", + "sriov-pf", "pf-pci-id", "pfPciId1"); + + Vertex pint1 = graph.addVertex(T.label, "p-interface", T.id, "5", "aai-node-type", + "p-interface", "interface-name", "ge0/0/0"); + Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "6", "aai-node-type", + "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); + + Vertex gvnf2 = + graph.addVertex(T.label, "generic-vnf", T.id, "10", "aai-node-type", "generic-vnf", + "vnf-id", "gvnf2", "vnf-name", "genvnfname2", "nf-type", "sample-nf-type1"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", + "vserver", "vserver-name", "vservername2"); + Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", + "l-interface", "interface-name", "lint2", "is-port-mirrored", "true", "in-maint", + "true", "is-ip-unnumbered", "false"); + + Vertex sriovVf2 = graph.addVertex(T.label, "sriov-vf", T.id, "13", "aai-node-type", + "sriov-vf", "pci-id", "pcIid2"); + Vertex sriovPf2 = graph.addVertex(T.label, "sriov-pf", T.id, "14", "aai-node-type", + "sriov-pf", "pf-pci-id", "pfPciId2"); + + Vertex pint2 = graph.addVertex(T.label, "p-interface", T.id, "15", "aai-node-type", + "p-interface", "interface-name", "ge0/0/1"); + Vertex plink2 = graph.addVertex(T.label, "physical-link", T.id, "16", "aai-node-type", + "physical-link", "link-name", "ge0/0/0-to-xe0/0/1"); + + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, gvnf1, vserver1); + rules.addTreeEdge(g, vserver1, lint1); + rules.addTreeEdge(g, lint1, sriovVf1); + rules.addEdge(g, sriovVf1, sriovPf1); + rules.addTreeEdge(g, sriovPf1, pint1); + rules.addEdge(g, pint1, plink1); + + rules.addEdge(g, gvnf2, vserver2);// false + rules.addTreeEdge(g, vserver2, lint2);// false + rules.addTreeEdge(g, lint2, sriovVf2);// false + rules.addEdge(g, sriovVf2, sriovPf2);// false + rules.addTreeEdge(g, sriovPf2, pint2);// false + rules.addEdge(g, pint2, plink2);// false + + expectedResult.add(gvnf1); + expectedResult.add(vserver1); + expectedResult.add(sriovVf1); + expectedResult.add(plink1); + + } + + @Override + protected String getQueryName() { + return "sriov-topology-fromVnf"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("vnf-id", "gvnf1").has("vnf-name", "genvnfname1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailFromVnfQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailFromVnfQueryTest.java index c553d05..e9c5d28 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailFromVnfQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailFromVnfQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,138 +26,182 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class TopologyDetailFromVnfQueryTest extends QueryTest { - public TopologyDetailFromVnfQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnfuuid", "vnf-name", "vnf-name-1", "service-id", "service-id-1"); - Vertex gnvf2 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2", "service-id", "service-id-wrong"); - - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1", "vserver-selflink", "vserver-selflink-1"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2", "vserver-selflink", "vserver-selflink-2"); - - Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "5", "aai-node-type", "vnfc", "vnfc-name", "vnfc-name-1", "nfc-naming-code", "nfc-naming-code-1"); - Vertex vnfc2 = graph.addVertex(T.label, "vnfc", T.id, "6", "aai-node-type", "vnfc", "vnfc-name", "vnfc-name-2", "nfc-naming-code", "nfc-naming-code-2"); - - Vertex tenant1 = graph.addVertex(T.label, "tenant-id", T.id, "7", "aai-node-type", "tenant", "tenant-id", "TenantID", "tenant-name", "TenantName"); - Vertex tenant2 = graph.addVertex(T.label, "tenant-id", T.id, "8", "aai-node-type", "tenant", "tenant-id", "TenantID2", "tenant-name", "TenantName2"); - - Vertex flavor1 = graph.addVertex(T.label, "flavor", T.id, "9", "aai-node-type", "flavor", "flavor-id", "flavor-id-1", "flavor-name", "flavor-name-1", "flavor-selflink", "flavor-selflink-1"); - Vertex image1 = graph.addVertex(T.label, "image", T.id, "10", "aai-node-type", "image", "image-id", "image-id-1", "image-name", "image-name-1", "image-os-distro", "image-os-distro-1", "image-os-version", "image-os-version-1"); - - Vertex flavor2 = graph.addVertex(T.label, "flavor", T.id, "11", "aai-node-type", "flavor", "flavor-id", "flavor-id-2", "flavor-name", "flavor-name-2", "flavor-selflink", "flavor-selflink-2"); - Vertex image2 = graph.addVertex(T.label, "image", T.id, "12", "aai-node-type", "image", "image-id", "image-id-2", "image-name", "image-name-2", "image-os-distro", "image-os-distro-2", "image-os-version", "image-os-version-2"); - - Vertex linter1 = graph.addVertex(T.label, "l-interface", T.id, "13", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); - Vertex linter2 = graph.addVertex(T.label, "l-interface", T.id, "14", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); - - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "15", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-1"); - Vertex l3inter1ipv4addresslist2 = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "16", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-2"); - - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "17", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-1"); - Vertex l3inter1ipv6addresslist2 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "18", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-2"); - - Vertex cloudRegion1 = graph.addVertex(T.label, "cloud-region", T.id, "19", "aai-node-type", "cloud-region", "cloud-owner", "CloudOwner1", "cloud-region-id", "CloudRegionId1"); - Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region", T.id, "20", "aai-node-type", "cloud-region", "cloud-owner", "CloudOwner2", "cloud-region-id", "CloudRegionId2"); - - Vertex availibityzone1 = graph.addVertex(T.label, "availability-zone", T.id, "21", "aai-node-type", "availability-zone", "availability-zone-name", "az-name-1", "hypervisor-type", "hypervisortype-1"); - - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "22", "aai-node-type", "pserver", "pserver-id", "PserverID1", "hostname", "PserverHostName1"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "23", "aai-node-type", "pserver", "pserver-id", "PserverID2", "hostname", "PserverHostName2"); //false - - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "24", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "25", "aai-node-type", "service-instance", "service-instance-id", "servInstId-2", "service-type", "servType-2", "service-role", "servRole-2"); - - Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "26", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); - Vertex vfmodule2 = graph.addVertex(T.label, "vf-module", T.id, "27", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-2", "vf-module-name", "vf-module-name2"); - - Vertex volumegroup1 = graph.addVertex(T.label, "volume-group", T.id, "28", "aai-node-type", "volume-group", "volume-group-id", "volume-group-id-1", "volume-group-name", "volume-group-name1"); - Vertex volumegroup2 = graph.addVertex(T.label, "volume-group", T.id, "29", "aai-node-type", "volume-group", "volume-group-id", "volume-group-id-2", "volume-group-name", "volume-group-name2"); - - Vertex complex = graph.addVertex(T.label, "complex", T.id, "30", "aai-node-type", "complex"); - - - GraphTraversalSource g = graph.traversal();//true - - rules.addEdge(g, gnvf1, vserver1);//true - - rules.addEdge(g, vserver1, vnfc1);//true - rules.addEdge(g, vserver2, vnfc1);//true - - rules.addTreeEdge(g, vserver1, tenant1);//true - rules.addTreeEdge(g, tenant1, cloudRegion1);//true - rules.addTreeEdge(g, cloudRegion1,availibityzone1 );//true - rules.addEdge(g, vserver1, image1);//true - rules.addEdge(g, vserver1, flavor1);//true - rules.addEdge(g, vserver1, pserver1);//true - rules.addEdge(g, vserver2, image1); - rules.addEdge(g, vserver2, flavor1); - rules.addEdge(g, pserver1, complex);//true - - rules.addTreeEdge(g, vserver1, linter1);//true - rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);//true - rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);//true - - rules.addEdge(g, gnvf1, serviceinstance1);//true - rules.addTreeEdge(g, gnvf1, vfmodule1);//true - rules.addEdge(g, vfmodule1, volumegroup1); - - //--------------------------------------------------- - - //rules.addTreeEdge(g, vserver1, tenant2);//false - //rules.addTreeEdge(g, vserver2, linter1);//false - //rules.addEdge(g, vserver1, vnfc2);//false - - - - expectedResult.add(gnvf1); - expectedResult.add(vnfc1); - expectedResult.add(vserver1); - expectedResult.add(tenant1); - expectedResult.add(cloudRegion1); - expectedResult.add(image1); - expectedResult.add(flavor1); - expectedResult.add(pserver1); - expectedResult.add(complex); - - expectedResult.add(serviceinstance1); - expectedResult.add(availibityzone1); - expectedResult.add(volumegroup1); - expectedResult.add(linter1); - expectedResult.add(l3inter1ipv4addresslist); - expectedResult.add(l3inter1ipv6addresslist); - - - } - - @Override - protected String getQueryName() { - return "topology-detail-fromVnf"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("vnf-id", "vnfuuid"); - - } - - @Override - protected void addParam(Map<String, Object> params) { - //return; - params.put("serviceId", "service-id-1"); - } + public TopologyDetailFromVnfQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex gnvf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", + "vnf-id", "vnfuuid", "vnf-name", "vnf-name-1", "service-id", "service-id-1"); + Vertex gnvf2 = + graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", + "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2", "service-id", "service-id-wrong"); + + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1", "vserver-selflink", + "vserver-selflink-1"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", + "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2", "vserver-selflink", + "vserver-selflink-2"); + + Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "5", "aai-node-type", "vnfc", + "vnfc-name", "vnfc-name-1", "nfc-naming-code", "nfc-naming-code-1"); + Vertex vnfc2 = graph.addVertex(T.label, "vnfc", T.id, "6", "aai-node-type", "vnfc", + "vnfc-name", "vnfc-name-2", "nfc-naming-code", "nfc-naming-code-2"); + + Vertex tenant1 = graph.addVertex(T.label, "tenant-id", T.id, "7", "aai-node-type", "tenant", + "tenant-id", "TenantID", "tenant-name", "TenantName"); + Vertex tenant2 = graph.addVertex(T.label, "tenant-id", T.id, "8", "aai-node-type", "tenant", + "tenant-id", "TenantID2", "tenant-name", "TenantName2"); + + Vertex flavor1 = graph.addVertex(T.label, "flavor", T.id, "9", "aai-node-type", "flavor", + "flavor-id", "flavor-id-1", "flavor-name", "flavor-name-1", "flavor-selflink", + "flavor-selflink-1"); + Vertex image1 = graph.addVertex(T.label, "image", T.id, "10", "aai-node-type", "image", + "image-id", "image-id-1", "image-name", "image-name-1", "image-os-distro", + "image-os-distro-1", "image-os-version", "image-os-version-1"); + + Vertex flavor2 = graph.addVertex(T.label, "flavor", T.id, "11", "aai-node-type", "flavor", + "flavor-id", "flavor-id-2", "flavor-name", "flavor-name-2", "flavor-selflink", + "flavor-selflink-2"); + Vertex image2 = graph.addVertex(T.label, "image", T.id, "12", "aai-node-type", "image", + "image-id", "image-id-2", "image-name", "image-name-2", "image-os-distro", + "image-os-distro-2", "image-os-version", "image-os-version-2"); + + Vertex linter1 = + graph.addVertex(T.label, "l-interface", T.id, "13", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); + Vertex linter2 = + graph.addVertex(T.label, "l-interface", T.id, "14", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); + + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "15", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-1"); + Vertex l3inter1ipv4addresslist2 = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "16", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-2"); + + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "17", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-1"); + Vertex l3inter1ipv6addresslist2 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "18", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-2"); + + Vertex cloudRegion1 = graph.addVertex(T.label, "cloud-region", T.id, "19", "aai-node-type", + "cloud-region", "cloud-owner", "CloudOwner1", "cloud-region-id", "CloudRegionId1"); + Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region", T.id, "20", "aai-node-type", + "cloud-region", "cloud-owner", "CloudOwner2", "cloud-region-id", "CloudRegionId2"); + + Vertex availibityzone1 = graph.addVertex(T.label, "availability-zone", T.id, "21", + "aai-node-type", "availability-zone", "availability-zone-name", "az-name-1", + "hypervisor-type", "hypervisortype-1"); + + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "22", "aai-node-type", + "pserver", "pserver-id", "PserverID1", "hostname", "PserverHostName1"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "23", "aai-node-type", + "pserver", "pserver-id", "PserverID2", "hostname", "PserverHostName2"); // false + + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "24", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "25", + "aai-node-type", "service-instance", "service-instance-id", "servInstId-2", + "service-type", "servType-2", "service-role", "servRole-2"); + + Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "26", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); + Vertex vfmodule2 = graph.addVertex(T.label, "vf-module", T.id, "27", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-2", "vf-module-name", "vf-module-name2"); + + Vertex volumegroup1 = + graph.addVertex(T.label, "volume-group", T.id, "28", "aai-node-type", "volume-group", + "volume-group-id", "volume-group-id-1", "volume-group-name", "volume-group-name1"); + Vertex volumegroup2 = + graph.addVertex(T.label, "volume-group", T.id, "29", "aai-node-type", "volume-group", + "volume-group-id", "volume-group-id-2", "volume-group-name", "volume-group-name2"); + + Vertex complex = + graph.addVertex(T.label, "complex", T.id, "30", "aai-node-type", "complex"); + + GraphTraversalSource g = graph.traversal();// true + + rules.addEdge(g, gnvf1, vserver1);// true + + rules.addEdge(g, vserver1, vnfc1);// true + rules.addEdge(g, vserver2, vnfc1);// true + + rules.addTreeEdge(g, vserver1, tenant1);// true + rules.addTreeEdge(g, tenant1, cloudRegion1);// true + rules.addTreeEdge(g, cloudRegion1, availibityzone1);// true + rules.addEdge(g, vserver1, image1);// true + rules.addEdge(g, vserver1, flavor1);// true + rules.addEdge(g, vserver1, pserver1);// true + rules.addEdge(g, vserver2, image1); + rules.addEdge(g, vserver2, flavor1); + rules.addEdge(g, pserver1, complex);// true + + rules.addTreeEdge(g, vserver1, linter1);// true + rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);// true + rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);// true + + rules.addEdge(g, gnvf1, serviceinstance1);// true + rules.addTreeEdge(g, gnvf1, vfmodule1);// true + rules.addEdge(g, vfmodule1, volumegroup1); + + // --------------------------------------------------- + + // rules.addTreeEdge(g, vserver1, tenant2);//false + // rules.addTreeEdge(g, vserver2, linter1);//false + // rules.addEdge(g, vserver1, vnfc2);//false + + expectedResult.add(gnvf1); + expectedResult.add(vnfc1); + expectedResult.add(vserver1); + expectedResult.add(tenant1); + expectedResult.add(cloudRegion1); + expectedResult.add(image1); + expectedResult.add(flavor1); + expectedResult.add(pserver1); + expectedResult.add(complex); + + expectedResult.add(serviceinstance1); + expectedResult.add(availibityzone1); + expectedResult.add(volumegroup1); + expectedResult.add(linter1); + expectedResult.add(l3inter1ipv4addresslist); + expectedResult.add(l3inter1ipv6addresslist); + + } + + @Override + protected String getQueryName() { + return "topology-detail-fromVnf"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("vnf-id", "vnfuuid"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + // return; + params.put("serviceId", "service-id-1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailFromVserverQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailFromVserverQueryTest.java index d9821d0..f6c0b7d 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailFromVserverQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailFromVserverQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,124 +26,158 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class TopologyDetailFromVserverQueryTest extends QueryTest { - public TopologyDetailFromVserverQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //set up test graph - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0", "nf-type", "sample-nf-type"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "2", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserverid0"); - Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "4", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "5", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-0"); - Vertex subnet4 = graph.addVertex(T.label, "subnet", T.id, "6", "aai-node-type", "subnet", "subnet-id", "subnet4-id-0"); - Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "7", "aai-node-type", "l3-network", "network-id", "network4-id-0", "network-name", "network4-name0"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "8", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-0"); - Vertex subnet6 = graph.addVertex(T.label, "subnet", T.id, "9", "aai-node-type", "subnet", "subnet-id", "subnet6-id-0"); - Vertex l3network6 = graph.addVertex(T.label, "l3-network", T.id, "10", "aai-node-type", "l3-network", "network-id", "network6-id-0", "network-name", "network6-name0"); - Vertex platform = graph.addVertex(T.label, "platform", T.id, "11", "aai-node-type", "platform", "platform-name", "platform0"); - Vertex lineofbusiness = graph.addVertex(T.label, "line-of-business", T.id, "12", "aai-node-type", "line-of-business", "line-of-business-name", "business0"); - Vertex servinst = graph.addVertex(T.label, "service-instance", T.id, "13", "aai-node-type", "service-instance", "service-instance-id", "servInstId0", "service-type", "servType0"); - Vertex owningentity = graph.addVertex(T.label, "owning-entity", T.id, "14", "aai-node-type", "owning-entity", "owning-entity-id", "entityId0", "owning-entity-name", "entityName0"); - Vertex project = graph.addVertex(T.label, "project", T.id, "15", "aai-node-type", "project", "project-name", "project0"); - Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "16", "aai-node-type", "vnfc", "vnfc-name", "vnfc0", "nfc-naming-code", "namingCode0", "nfc-function", "function0"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "17", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex complex = graph.addVertex(T.label, "pserver", T.id, "18", "aai-node-type", "complex", "physical-location-id", "locationId", "physical-location-type", "locationType", "physical-location-id", "locationId", - "city", "cityName", "state", "stateName", "postal-code", "zip", "country", "countryName"); - Vertex availabilityZone = graph.addVertex(T.label, "availability-zone", T.id, "19", "aai-node-type", "availability-zone", "availability-zone-name", "azName0", "hypervisor-type", "ht0"); - Vertex virtualDataCenter = graph.addVertex(T.label, "virtual-data-center", T.id, "20", "aai-node-type", "virtual-data-center", "vdc-id", "vdcId0", "vdc-name", "vdcName0"); - Vertex volumeGroup = graph.addVertex(T.label, "volume-group", T.id, "21", "aai-node-type", "volume-group", "volume-group-id", "vgId0", "volume-group-name", "vgName0", "vnf-type", "vnfType0"); - Vertex image = graph.addVertex(T.label, "image", T.id, "22", "aai-node-type", "image", "image-id", "imageId0", "image-name", "imageName0", "image-os-distro", "imageOsDistro0", "image-os-version", "imageOsVersion0", "image-selflink", "imageSl0"); - Vertex flavor = graph.addVertex(T.label, "flavor", T.id, "23", "aai-node-type", "flavor", "flavor-id", "flavorId0", "flavor-name", "flavorName0", "flavor-selflink", "flavorSl0"); - Vertex vfModule = graph.addVertex(T.label, "vf-module", T.id, "24", "aai-node-type", "vf-module", "vf-module-id", "vfmId0", "is-base-vf-module", "true"); - Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "25", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1", "nf-type", "sample-nf-type"); - Vertex vfModule2 = graph.addVertex(T.label, "vf-module", T.id, "26", "aai-node-type", "vf-module", "vf-module-id", "vfmId1", "is-base-vf-module", "true"); + public TopologyDetailFromVserverQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // set up test graph + Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid0", "nf-type", "sample-nf-type"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "2", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserverid0"); + Vertex linterface = + graph.addVertex(T.label, "l-interface", T.id, "4", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "5", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-0"); + Vertex subnet4 = graph.addVertex(T.label, "subnet", T.id, "6", "aai-node-type", "subnet", + "subnet-id", "subnet4-id-0"); + Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "7", "aai-node-type", + "l3-network", "network-id", "network4-id-0", "network-name", "network4-name0"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "8", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-0"); + Vertex subnet6 = graph.addVertex(T.label, "subnet", T.id, "9", "aai-node-type", "subnet", + "subnet-id", "subnet6-id-0"); + Vertex l3network6 = graph.addVertex(T.label, "l3-network", T.id, "10", "aai-node-type", + "l3-network", "network-id", "network6-id-0", "network-name", "network6-name0"); + Vertex platform = graph.addVertex(T.label, "platform", T.id, "11", "aai-node-type", + "platform", "platform-name", "platform0"); + Vertex lineofbusiness = graph.addVertex(T.label, "line-of-business", T.id, "12", + "aai-node-type", "line-of-business", "line-of-business-name", "business0"); + Vertex servinst = graph.addVertex(T.label, "service-instance", T.id, "13", "aai-node-type", + "service-instance", "service-instance-id", "servInstId0", "service-type", "servType0"); + Vertex owningentity = graph.addVertex(T.label, "owning-entity", T.id, "14", "aai-node-type", + "owning-entity", "owning-entity-id", "entityId0", "owning-entity-name", "entityName0"); + Vertex project = graph.addVertex(T.label, "project", T.id, "15", "aai-node-type", "project", + "project-name", "project0"); + Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "16", "aai-node-type", "vnfc", + "vnfc-name", "vnfc0", "nfc-naming-code", "namingCode0", "nfc-function", "function0"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "17", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex complex = graph.addVertex(T.label, "pserver", T.id, "18", "aai-node-type", "complex", + "physical-location-id", "locationId", "physical-location-type", "locationType", + "physical-location-id", "locationId", "city", "cityName", "state", "stateName", + "postal-code", "zip", "country", "countryName"); + Vertex availabilityZone = + graph.addVertex(T.label, "availability-zone", T.id, "19", "aai-node-type", + "availability-zone", "availability-zone-name", "azName0", "hypervisor-type", "ht0"); + Vertex virtualDataCenter = graph.addVertex(T.label, "virtual-data-center", T.id, "20", + "aai-node-type", "virtual-data-center", "vdc-id", "vdcId0", "vdc-name", "vdcName0"); + Vertex volumeGroup = + graph.addVertex(T.label, "volume-group", T.id, "21", "aai-node-type", "volume-group", + "volume-group-id", "vgId0", "volume-group-name", "vgName0", "vnf-type", "vnfType0"); + Vertex image = graph.addVertex(T.label, "image", T.id, "22", "aai-node-type", "image", + "image-id", "imageId0", "image-name", "imageName0", "image-os-distro", "imageOsDistro0", + "image-os-version", "imageOsVersion0", "image-selflink", "imageSl0"); + Vertex flavor = graph.addVertex(T.label, "flavor", T.id, "23", "aai-node-type", "flavor", + "flavor-id", "flavorId0", "flavor-name", "flavorName0", "flavor-selflink", "flavorSl0"); + Vertex vfModule = graph.addVertex(T.label, "vf-module", T.id, "24", "aai-node-type", + "vf-module", "vf-module-id", "vfmId0", "is-base-vf-module", "true"); + Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "25", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid1", "nf-type", "sample-nf-type"); + Vertex vfModule2 = graph.addVertex(T.label, "vf-module", T.id, "26", "aai-node-type", + "vf-module", "vf-module-id", "vfmId1", "is-base-vf-module", "true"); + + GraphTraversalSource g = graph.traversal(); + + rules.addTreeEdge(g, tenant, cloudregion); + rules.addTreeEdge(g, vserver, tenant); + rules.addEdge(g, pserver, vserver); + rules.addEdge(g, complex, pserver); + rules.addEdge(g, availabilityZone, pserver); + rules.addEdge(g, genericvnf, vserver); + rules.addTreeEdge(g, genericvnf, vfModule); // related to the genericvnf only, not the + // vserver + rules.addEdge(g, genericvnf, platform); + rules.addEdge(g, genericvnf, lineofbusiness); + rules.addEdge(g, genericvnf, vnfc); + rules.addEdge(g, genericvnf, servinst); + rules.addEdge(g, virtualDataCenter, genericvnf); + rules.addEdge(g, volumeGroup, genericvnf); + rules.addEdge(g, owningentity, servinst); + rules.addEdge(g, project, servinst); + rules.addTreeEdge(g, linterface, vserver); + rules.addTreeEdge(g, l3inter1ipv4addresslist, linterface); + rules.addEdge(g, l3inter1ipv4addresslist, subnet4); + rules.addTreeEdge(g, l3network4, subnet4); + rules.addTreeEdge(g, l3inter1ipv6addresslist, linterface); + rules.addEdge(g, l3inter1ipv6addresslist, subnet6); + rules.addTreeEdge(g, l3network6, subnet6); + rules.addEdge(g, image, vserver); + rules.addEdge(g, flavor, vserver); + rules.addTreeEdge(g, genericvnf2, vfModule2); + rules.addEdge(g, vserver, vfModule2); + + expectedResult.add(vserver); + expectedResult.add(linterface); + expectedResult.add(l3inter1ipv4addresslist); + expectedResult.add(subnet4); + expectedResult.add(l3network4); + expectedResult.add(l3inter1ipv6addresslist); + expectedResult.add(subnet6); + expectedResult.add(l3network6); + expectedResult.add(tenant); + expectedResult.add(cloudregion); + expectedResult.add(pserver); + expectedResult.add(complex); + expectedResult.add(availabilityZone); + expectedResult.add(genericvnf); + expectedResult.add(vfModule); // related to the genericvnf only, not the vserver + expectedResult.add(platform); + expectedResult.add(lineofbusiness); + expectedResult.add(virtualDataCenter); + expectedResult.add(volumeGroup); + expectedResult.add(owningentity); + expectedResult.add(project); + expectedResult.add(vnfc); + expectedResult.add(image); + expectedResult.add(flavor); + expectedResult.add(vfModule2); // related to the vserver + } - GraphTraversalSource g = graph.traversal(); - - rules.addTreeEdge(g, tenant, cloudregion); - rules.addTreeEdge(g, vserver, tenant); - rules.addEdge(g, pserver, vserver); - rules.addEdge(g, complex, pserver); - rules.addEdge(g, availabilityZone, pserver); - rules.addEdge(g, genericvnf, vserver); - rules.addTreeEdge(g, genericvnf, vfModule); // related to the genericvnf only, not the vserver - rules.addEdge(g, genericvnf, platform); - rules.addEdge(g, genericvnf, lineofbusiness); - rules.addEdge(g, genericvnf, vnfc); - rules.addEdge(g, genericvnf, servinst); - rules.addEdge(g, virtualDataCenter, genericvnf); - rules.addEdge(g, volumeGroup, genericvnf); - rules.addEdge(g, owningentity, servinst); - rules.addEdge(g, project, servinst); - rules.addTreeEdge(g, linterface, vserver); - rules.addTreeEdge(g, l3inter1ipv4addresslist, linterface); - rules.addEdge(g, l3inter1ipv4addresslist, subnet4); - rules.addTreeEdge(g, l3network4, subnet4); - rules.addTreeEdge(g, l3inter1ipv6addresslist, linterface); - rules.addEdge(g, l3inter1ipv6addresslist, subnet6); - rules.addTreeEdge(g, l3network6, subnet6); - rules.addEdge(g, image, vserver); - rules.addEdge(g, flavor, vserver); - rules.addTreeEdge(g, genericvnf2, vfModule2); - rules.addEdge(g, vserver, vfModule2); + @Override + protected String getQueryName() { + return "topology-detail-fromVserver"; + } - expectedResult.add(vserver); - expectedResult.add(linterface); - expectedResult.add(l3inter1ipv4addresslist); - expectedResult.add(subnet4); - expectedResult.add(l3network4); - expectedResult.add(l3inter1ipv6addresslist); - expectedResult.add(subnet6); - expectedResult.add(l3network6); - expectedResult.add(tenant); - expectedResult.add(cloudregion); - expectedResult.add(pserver); - expectedResult.add(complex); - expectedResult.add(availabilityZone); - expectedResult.add(genericvnf); - expectedResult.add(vfModule); // related to the genericvnf only, not the vserver - expectedResult.add(platform); - expectedResult.add(lineofbusiness); - expectedResult.add(virtualDataCenter); - expectedResult.add(volumeGroup); - expectedResult.add(owningentity); - expectedResult.add(project); - expectedResult.add(vnfc); - expectedResult.add(image); - expectedResult.add(flavor); - expectedResult.add(vfModule2); // related to the vserver - } - @Override - protected String getQueryName() { - return "topology-detail-fromVserver"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "cloud-region") - .has("cloud-region-id", "regionid0") - .has("cloud-owner", "cloudOwnername0") - .in("org.onap.relationships.inventory.BelongsTo") - .has("aai-node-type","tenant") - .has("tenant-id", "tenantid0") - .in("org.onap.relationships.inventory.BelongsTo") - .has("aai-node-type","vserver") - .has("vserver-id", "vserverid0"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "cloud-region").has("cloud-region-id", "regionid0") + .has("cloud-owner", "cloudOwnername0").in("org.onap.relationships.inventory.BelongsTo") + .has("aai-node-type", "tenant").has("tenant-id", "tenantid0") + .in("org.onap.relationships.inventory.BelongsTo").has("aai-node-type", "vserver") + .has("vserver-id", "vserverid0"); + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } -}
\ No newline at end of file + @Override + protected void addParam(Map<String, Object> params) { + return; + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailsQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailsQueryTest.java index 36911a8..c8e7dec 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailsQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyDetailsQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,137 +30,182 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class TopologyDetailsQueryTest extends QueryTest { - public TopologyDetailsQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //set up test graph - Vertex genericvnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnfid0","vnf-name", "vnf-name-1", "nf-type", "sample-nf-type"); - Vertex platform = graph.addVertex(T.label, "platform", T.id, "1", "aai-node-type", "platform", "platform-name", "platform0"); - Vertex lineofbusiness = graph.addVertex(T.label, "line-of-business", T.id, "2", "aai-node-type", "line-of-business", "line-of-business-name", "business0"); - Vertex servinst = graph.addVertex(T.label, "service-instance", T.id, "3", "aai-node-type", "service-instance", "service-instance-id", "servInstId0", "service-type", "servType0"); - Vertex owningentity = graph.addVertex(T.label, "owning-entity", T.id, "4", "aai-node-type", "owning-entity", "owning-entity-id", "entityId0", "owning-entity-name", "entityName0"); - Vertex project = graph.addVertex(T.label, "project", T.id, "5", "aai-node-type", "project", "project-name", "project0"); - Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "6", "aai-node-type", "vnfc", "vnfc-name", "vnfc0", "nfc-naming-code", "namingCode0", "nfc-function", "function0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", "vserver-id", "vserverid0"); - Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "8", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "9", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-0"); - Vertex subnet4 = graph.addVertex(T.label, "subnet", T.id, "10", "aai-node-type", "subnet", "subnet-id", "subnet4-id-0"); - Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "11", "aai-node-type", "l3-network", "network-id", "network4-id-0", "network-name", "network4-name0"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "12", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-0"); - Vertex subnet6 = graph.addVertex(T.label, "subnet", T.id, "13", "aai-node-type", "subnet", "subnet-id", "subnet6-id-0"); - Vertex l3network6 = graph.addVertex(T.label, "l3-network", T.id, "14", "aai-node-type", "l3-network", "network-id", "network6-id-0", "network-name", "network6-name0"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "15", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName0"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "16", "aai-node-type", "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "17", "aai-node-type", "pserver", "hostname", "pservername1"); - Vertex complex = graph.addVertex(T.label, "pserver", T.id, "18", "aai-node-type", "complex", "physical-location-id", "locationId", "physical-location-type", "locationType", "physical-location-id", "locationId", - "city", "cityName", "state", "stateName", "postal-code", "zip", "country", "countryName"); - - - - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1","vnf-name", "vnf-name-2", "nf-type", "sample-nf-type1"); - Vertex platform1 = graph.addVertex(T.label, "platform", T.id, "21", "aai-node-type", "platform", "platform-name", "platform1"); - Vertex lineofbusiness1 = graph.addVertex(T.label, "line-of-business", T.id, "22", "aai-node-type", "line-of-business", "line-of-business-name", "business1"); - Vertex servinst1 = graph.addVertex(T.label, "service-instance", T.id, "23", "aai-node-type", "service-instance", "service-instance-id", "servInstId1", "service-type", "servType1"); - Vertex owningentity1 = graph.addVertex(T.label, "owning-entity", T.id, "24", "aai-node-type", "owning-entity", "owning-entity-id", "entityId1", "owning-entity-name", "entityName1"); - Vertex project1 = graph.addVertex(T.label, "project", T.id, "25", "aai-node-type", "project", "project-name", "project1"); - Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "26", "aai-node-type", "vnfc", "vnfc-name", "vnfc1", "nfc-naming-code", "namingCode1", "nfc-function", "function1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "27", "aai-node-type", "vserver", "vserver-id", "vserverid1"); - Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "28", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id1", "l-interface-name", "l-interface-name1"); - Vertex l3inter1ipv4addresslist1 = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "29", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-1"); - Vertex subnet41 = graph.addVertex(T.label, "subnet", T.id, "30", "aai-node-type", "subnet", "subnet-id", "subnet4-id-1"); - Vertex l3network41 = graph.addVertex(T.label, "l3-network", T.id, "31", "aai-node-type", "l3-network", "network-id", "network4-id-1", "network-name", "network4-name1"); - Vertex l3inter1ipv6addresslist1 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "32", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-1"); - Vertex subnet61 = graph.addVertex(T.label, "subnet", T.id, "33", "aai-node-type", "subnet", "subnet-id", "subnet6-id-1"); - Vertex l3network61 = graph.addVertex(T.label, "l3-network", T.id, "34", "aai-node-type", "l3-network", "network-id", "network6-id-1", "network-name", "network6-name1"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "35", "aai-node-type", "tenant", "tenant-id", "tenantid0", "tenant-name", "tenantName1"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "36", "aai-node-type", "cloud-region", "cloud-region-id", "regionid1", "cloud-owner", "cloudOwnername1"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "37", "aai-node-type", "pserver", "hostname", "pservername2"); - Vertex complex1 = graph.addVertex(T.label, "pserver", T.id, "38", "aai-node-type", "complex", "physical-location-id", "locationId1", "physical-location-type", "locationType1", "physical-location-id", "locationId1", - "city", "cityName1", "state", "stateName1", "postal-code", "zip1", "country", "countryName1"); - - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, genericvnf, platform); - rules.addEdge(g, genericvnf, lineofbusiness); - rules.addEdge(g, genericvnf, servinst); - rules.addEdge(g, owningentity, servinst); - rules.addEdge(g, project, servinst); - rules.addEdge(g, genericvnf, vnfc); - rules.addEdge(g, genericvnf,vserver); - rules.addTreeEdge(g, linterface, vserver); - rules.addTreeEdge(g, l3inter1ipv4addresslist, linterface); - rules.addEdge(g, l3inter1ipv4addresslist, subnet4); - rules.addTreeEdge(g, l3network4, subnet4); - rules.addTreeEdge(g, l3inter1ipv6addresslist, linterface); - rules.addEdge(g, l3inter1ipv6addresslist, subnet6); - rules.addTreeEdge(g, l3network6, subnet6); - rules.addTreeEdge(g, vserver, tenant); - rules.addTreeEdge(g, tenant, cloudregion); - rules.addEdge(g, pserver, vserver); - rules.addEdge(g, complex, pserver); - - - //false - rules.addEdge(g, genericvnf1, platform1); - rules.addEdge(g, genericvnf1, lineofbusiness1); - rules.addEdge(g, genericvnf1, servinst1); - rules.addEdge(g, owningentity1, servinst1); - rules.addEdge(g, project1, servinst1); - rules.addEdge(g, genericvnf1, vnfc1); - rules.addEdge(g, genericvnf1,vserver1); - rules.addTreeEdge(g, linterface1, vserver1); - rules.addTreeEdge(g, l3inter1ipv4addresslist1, linterface1); - rules.addEdge(g, l3inter1ipv4addresslist1, subnet41); - rules.addTreeEdge(g, l3network41, subnet41); - rules.addTreeEdge(g, l3inter1ipv6addresslist1, linterface1); - rules.addEdge(g, l3inter1ipv6addresslist1, subnet61); - rules.addTreeEdge(g, l3network61, subnet61); - rules.addTreeEdge(g, vserver1, tenant1); - rules.addTreeEdge(g, tenant1, cloudregion1); - rules.addEdge(g, pserver1, vserver1); - rules.addEdge(g, complex1, pserver1); - - - - - expectedResult.add(genericvnf); - expectedResult.add(platform); - expectedResult.add(lineofbusiness); - expectedResult.add(owningentity); - expectedResult.add(project); - expectedResult.add(vnfc); - expectedResult.add(vserver); - expectedResult.add(linterface); - expectedResult.add(l3inter1ipv4addresslist); - expectedResult.add(subnet4); - expectedResult.add(l3network4); - expectedResult.add(l3inter1ipv6addresslist); - expectedResult.add(subnet6); - expectedResult.add(l3network6); - expectedResult.add(cloudregion); - expectedResult.add(complex); - - - - } - @Override - protected String getQueryName() { - return "topology-detail"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("vnf-name", "vnf-name-1").has("vnf-id", "vnfid0"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public TopologyDetailsQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // set up test graph + Vertex genericvnf = + graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", + "vnf-id", "vnfid0", "vnf-name", "vnf-name-1", "nf-type", "sample-nf-type"); + Vertex platform = graph.addVertex(T.label, "platform", T.id, "1", "aai-node-type", + "platform", "platform-name", "platform0"); + Vertex lineofbusiness = graph.addVertex(T.label, "line-of-business", T.id, "2", + "aai-node-type", "line-of-business", "line-of-business-name", "business0"); + Vertex servinst = graph.addVertex(T.label, "service-instance", T.id, "3", "aai-node-type", + "service-instance", "service-instance-id", "servInstId0", "service-type", "servType0"); + Vertex owningentity = graph.addVertex(T.label, "owning-entity", T.id, "4", "aai-node-type", + "owning-entity", "owning-entity-id", "entityId0", "owning-entity-name", "entityName0"); + Vertex project = graph.addVertex(T.label, "project", T.id, "5", "aai-node-type", "project", + "project-name", "project0"); + Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "6", "aai-node-type", "vnfc", + "vnfc-name", "vnfc0", "nfc-naming-code", "namingCode0", "nfc-function", "function0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", + "vserver-id", "vserverid0"); + Vertex linterface = + graph.addVertex(T.label, "l-interface", T.id, "8", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "9", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-0"); + Vertex subnet4 = graph.addVertex(T.label, "subnet", T.id, "10", "aai-node-type", "subnet", + "subnet-id", "subnet4-id-0"); + Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "11", "aai-node-type", + "l3-network", "network-id", "network4-id-0", "network-name", "network4-name0"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "12", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-0"); + Vertex subnet6 = graph.addVertex(T.label, "subnet", T.id, "13", "aai-node-type", "subnet", + "subnet-id", "subnet6-id-0"); + Vertex l3network6 = graph.addVertex(T.label, "l3-network", T.id, "14", "aai-node-type", + "l3-network", "network-id", "network6-id-0", "network-name", "network6-name0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "15", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName0"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "16", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid0", "cloud-owner", "cloudOwnername0"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "17", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex complex = graph.addVertex(T.label, "pserver", T.id, "18", "aai-node-type", "complex", + "physical-location-id", "locationId", "physical-location-type", "locationType", + "physical-location-id", "locationId", "city", "cityName", "state", "stateName", + "postal-code", "zip", "country", "countryName"); + + Vertex genericvnf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf", + "vnf-id", "vnfid1", "vnf-name", "vnf-name-2", "nf-type", "sample-nf-type1"); + Vertex platform1 = graph.addVertex(T.label, "platform", T.id, "21", "aai-node-type", + "platform", "platform-name", "platform1"); + Vertex lineofbusiness1 = graph.addVertex(T.label, "line-of-business", T.id, "22", + "aai-node-type", "line-of-business", "line-of-business-name", "business1"); + Vertex servinst1 = graph.addVertex(T.label, "service-instance", T.id, "23", "aai-node-type", + "service-instance", "service-instance-id", "servInstId1", "service-type", "servType1"); + Vertex owningentity1 = + graph.addVertex(T.label, "owning-entity", T.id, "24", "aai-node-type", "owning-entity", + "owning-entity-id", "entityId1", "owning-entity-name", "entityName1"); + Vertex project1 = graph.addVertex(T.label, "project", T.id, "25", "aai-node-type", + "project", "project-name", "project1"); + Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "26", "aai-node-type", "vnfc", + "vnfc-name", "vnfc1", "nfc-naming-code", "namingCode1", "nfc-function", "function1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "27", "aai-node-type", + "vserver", "vserver-id", "vserverid1"); + Vertex linterface1 = + graph.addVertex(T.label, "l-interface", T.id, "28", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id1", "l-interface-name", "l-interface-name1"); + Vertex l3inter1ipv4addresslist1 = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "29", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-1"); + Vertex subnet41 = graph.addVertex(T.label, "subnet", T.id, "30", "aai-node-type", "subnet", + "subnet-id", "subnet4-id-1"); + Vertex l3network41 = graph.addVertex(T.label, "l3-network", T.id, "31", "aai-node-type", + "l3-network", "network-id", "network4-id-1", "network-name", "network4-name1"); + Vertex l3inter1ipv6addresslist1 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "32", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-1"); + Vertex subnet61 = graph.addVertex(T.label, "subnet", T.id, "33", "aai-node-type", "subnet", + "subnet-id", "subnet6-id-1"); + Vertex l3network61 = graph.addVertex(T.label, "l3-network", T.id, "34", "aai-node-type", + "l3-network", "network-id", "network6-id-1", "network-name", "network6-name1"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "35", "aai-node-type", "tenant", + "tenant-id", "tenantid0", "tenant-name", "tenantName1"); + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "36", "aai-node-type", + "cloud-region", "cloud-region-id", "regionid1", "cloud-owner", "cloudOwnername1"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "37", "aai-node-type", + "pserver", "hostname", "pservername2"); + Vertex complex1 = graph.addVertex(T.label, "pserver", T.id, "38", "aai-node-type", + "complex", "physical-location-id", "locationId1", "physical-location-type", + "locationType1", "physical-location-id", "locationId1", "city", "cityName1", "state", + "stateName1", "postal-code", "zip1", "country", "countryName1"); + + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, genericvnf, platform); + rules.addEdge(g, genericvnf, lineofbusiness); + rules.addEdge(g, genericvnf, servinst); + rules.addEdge(g, owningentity, servinst); + rules.addEdge(g, project, servinst); + rules.addEdge(g, genericvnf, vnfc); + rules.addEdge(g, genericvnf, vserver); + rules.addTreeEdge(g, linterface, vserver); + rules.addTreeEdge(g, l3inter1ipv4addresslist, linterface); + rules.addEdge(g, l3inter1ipv4addresslist, subnet4); + rules.addTreeEdge(g, l3network4, subnet4); + rules.addTreeEdge(g, l3inter1ipv6addresslist, linterface); + rules.addEdge(g, l3inter1ipv6addresslist, subnet6); + rules.addTreeEdge(g, l3network6, subnet6); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addEdge(g, pserver, vserver); + rules.addEdge(g, complex, pserver); + + // false + rules.addEdge(g, genericvnf1, platform1); + rules.addEdge(g, genericvnf1, lineofbusiness1); + rules.addEdge(g, genericvnf1, servinst1); + rules.addEdge(g, owningentity1, servinst1); + rules.addEdge(g, project1, servinst1); + rules.addEdge(g, genericvnf1, vnfc1); + rules.addEdge(g, genericvnf1, vserver1); + rules.addTreeEdge(g, linterface1, vserver1); + rules.addTreeEdge(g, l3inter1ipv4addresslist1, linterface1); + rules.addEdge(g, l3inter1ipv4addresslist1, subnet41); + rules.addTreeEdge(g, l3network41, subnet41); + rules.addTreeEdge(g, l3inter1ipv6addresslist1, linterface1); + rules.addEdge(g, l3inter1ipv6addresslist1, subnet61); + rules.addTreeEdge(g, l3network61, subnet61); + rules.addTreeEdge(g, vserver1, tenant1); + rules.addTreeEdge(g, tenant1, cloudregion1); + rules.addEdge(g, pserver1, vserver1); + rules.addEdge(g, complex1, pserver1); + + expectedResult.add(genericvnf); + expectedResult.add(platform); + expectedResult.add(lineofbusiness); + expectedResult.add(owningentity); + expectedResult.add(project); + expectedResult.add(vnfc); + expectedResult.add(vserver); + expectedResult.add(linterface); + expectedResult.add(l3inter1ipv4addresslist); + expectedResult.add(subnet4); + expectedResult.add(l3network4); + expectedResult.add(l3inter1ipv6addresslist); + expectedResult.add(subnet6); + expectedResult.add(l3network6); + expectedResult.add(cloudregion); + expectedResult.add(complex); + + } + + @Override + protected String getQueryName() { + return "topology-detail"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("vnf-name", "vnf-name-1").has("vnf-id", "vnfid0"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromCloudRegionIdAndServiceIdTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromCloudRegionIdAndServiceIdTest.java index 266077a..250241a 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromCloudRegionIdAndServiceIdTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromCloudRegionIdAndServiceIdTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,133 +26,188 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class TopologyFromCloudRegionIdAndServiceIdTest extends QueryTest { - public TopologyFromCloudRegionIdAndServiceIdTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "61", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-owner", "cloud-owner-1"); - Vertex availibityzone1 = graph.addVertex(T.label, "cloud-region", T.id, "2", "aai-node-type", "availability-zone", "availability-zone-name", "az-name-1", "hypervisor-type", "hypervisortype-1"); - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1", "service-id", "service-id-1"); - - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1", "vserver-selflink", "vserver-selflink-1"); - Vertex flavor1 = graph.addVertex(T.label, "flavor", T.id, "8", "aai-node-type", "flavor", "flavor-id", "flavor-id-1", "flavor-name", "flavor-name-1", "flavor-selflink", "flavor-selflink-1"); - Vertex image1 = graph.addVertex(T.label, "image", T.id, "9", "aai-node-type", "image", "image-id", "image-id-1", "image-name", "image-name-1", "image-os-distro", "image-os-distro-1", "image-os-version", "image-os-version-1"); - Vertex volume1 = graph.addVertex(T.label, "volume", T.id, "10", "aai-node-type", "volume", "volume-id", "volume-id-1", "volume-selflink", "volume-selflink-1"); - Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "11", "aai-node-type", "vnfc", "vnfc-name", "vnfc-name-1", "nfc-naming-code", "nfc-naming-code-1"); - Vertex snapshot1 = graph.addVertex(T.label, "snapshot", T.id, "12", "aai-node-type", "snapshot", "snapshot-id", "snapshot-id-1"); - Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "13", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); - Vertex linter1 = graph.addVertex(T.label, "l-interface", T.id, "14", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); - Vertex logicallink1 = graph.addVertex(T.label, "logical-link", T.id, "15", "aai-node-type", "logical-link", "link-name", "link-name-1", "l-interface-name", "l-interface-name1"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "16", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-1"); - Vertex subnet14 = graph.addVertex(T.label, "subnet", T.id, "17", "aai-node-type", "subnet", "subnet-id", "subnet-id-14"); - Vertex l3network14 = graph.addVertex(T.label, "l3-network", T.id, "18", "aai-node-type", "l3-network", "network-id", "network-id-14", "network-name", "network-name-14"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "19", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-1"); - Vertex subnet16 = graph.addVertex(T.label, "subnet", T.id, "20", "aai-node-type", "subnet", "subnet-id", "subnet-id-16"); - Vertex l3network16 = graph.addVertex(T.label, "l3-network", T.id, "21", "aai-node-type", "l3-network", "network-id", "network-id-16", "network-name", "network-name16"); - - Vertex gnvf2 = graph.addVertex(T.label, "generic-vnf", T.id, "33", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2", "service-id", "service-id-wrong"); - Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "36", "aai-node-type", "service-instance", "service-instance-id", "servInstId-2", "service-type", "servType-2", "service-role", "servRole-2"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "37", "aai-node-type", "vserver", "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2", "vserver-selflink", "vserver-selflink-2"); - Vertex flavor2 = graph.addVertex(T.label, "flavor", T.id, "38", "aai-node-type", "flavor", "flavor-id", "flavor-id-2", "flavor-name", "flavor-name-2", "flavor-selflink", "flavor-selflink-2"); - Vertex image2 = graph.addVertex(T.label, "image", T.id, "39", "aai-node-type", "image", "image-id", "image-id-2", "image-name", "image-name-2", "image-os-distro", "image-os-distro-2", "image-os-version", "image-os-version-2"); - Vertex volume2 = graph.addVertex(T.label, "volume", T.id, "40", "aai-node-type", "volume", "volume-id", "volume-id-2", "volume-selflink", "volume-selflink-2"); - Vertex vnfc2 = graph.addVertex(T.label, "vnfc", T.id, "41", "aai-node-type", "vnfc", "vnfc-name", "vnfc-name-2", "nfc-naming-code", "nfc-naming-code-2"); - Vertex snapshot2 = graph.addVertex(T.label, "snapshot", T.id, "42", "aai-node-type", "snapshot", "snapshot-id", "snapshot-id-2"); - Vertex vfmodule2 = graph.addVertex(T.label, "vf-module", T.id, "43", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-2", "vf-module-name", "vf-module-name2"); - Vertex linter2 = graph.addVertex(T.label, "l-interface", T.id, "44", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); - Vertex logicallink2 = graph.addVertex(T.label, "logical-link", T.id, "45", "aai-node-type", "logical-link", "link-name", "link-name-2", "l-interface-name", "l-interface-name2"); - Vertex l3inter1ipv4addresslist2 = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "46", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "l3-interface-ipv4-address-2"); - Vertex subnet24 = graph.addVertex(T.label, "subnet", T.id, "47", "aai-node-type", "subnet", "subnet-id", "subnet-id-24"); - Vertex l3network24 = graph.addVertex(T.label, "l3-network", T.id, "48", "aai-node-type", "l3-network", "network-id", "network-id-24", "network-name", "network-name-24"); - Vertex l3inter1ipv6addresslist2 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "49", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "l3-interface-ipv6-address-2"); - Vertex subnet26 = graph.addVertex(T.label, "subnet", T.id, "50", "aai-node-type", "subnet", "subnet-id", "subnet-id-26"); - Vertex l3network26 = graph.addVertex(T.label, "l3-network", T.id, "51", "aai-node-type", "l3-network", "network-id", "network-id-26", "network-name", "network-name26"); - - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, cloudregion1, availibityzone1);//true - rules.addEdge(g, availibityzone1, gnvf1);//true - rules.addEdge(g, gnvf1, serviceinstance1);//true - rules.addEdge(g, gnvf1, vserver1);//true - - rules.addEdge(g, vserver1, flavor1);//true - rules.addEdge(g, vserver1, image1);//true - rules.addTreeEdge(g, vserver1, volume1);//true - rules.addEdge(g, vserver1, vnfc1);//true - rules.addEdge(g, vserver1, snapshot1);//true - rules.addEdge(g, vserver1, vfmodule1);//true - rules.addEdge(g, linter1, logicallink1);//true - rules.addTreeEdge(g, vserver1, linter1);//true - rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);//true - rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);//true - rules.addEdge(g, l3inter1ipv4addresslist, subnet14);//true - rules.addTreeEdge(g, subnet14, l3network14);//true - rules.addEdge(g, l3inter1ipv6addresslist, subnet16);//true - rules.addTreeEdge(g, subnet16, l3network16);//true - - // false - rules.addEdge(g, availibityzone1, gnvf2); - rules.addEdge(g, gnvf2, serviceinstance2); - rules.addEdge(g, gnvf2, vserver2); - rules.addEdge(g, vserver2, flavor2); - rules.addEdge(g, vserver2, image2); - rules.addTreeEdge(g, vserver2, volume2); - rules.addEdge(g, vserver2, vnfc2); - rules.addEdge(g, vserver2, snapshot2); - rules.addEdge(g, vserver2, vfmodule2); - rules.addEdge(g, linter2, logicallink2); - rules.addTreeEdge(g, vserver2, linter2); - rules.addTreeEdge(g, linter2, l3inter1ipv4addresslist2); - rules.addTreeEdge(g, linter2, l3inter1ipv6addresslist2); - rules.addEdge(g, l3inter1ipv4addresslist2, subnet24); - rules.addTreeEdge(g, subnet24, l3network24); - rules.addEdge(g, l3inter1ipv6addresslist2, subnet26); - rules.addTreeEdge(g, subnet26, l3network26); - - - expectedResult.add(serviceinstance1); - expectedResult.add(vserver1); - expectedResult.add(flavor1); - expectedResult.add(image1); - expectedResult.add(volume1); - expectedResult.add(vnfc1); - expectedResult.add(snapshot1); - expectedResult.add(vfmodule1); - expectedResult.add(linter1); - expectedResult.add(logicallink1); - expectedResult.add(l3inter1ipv4addresslist); - expectedResult.add(subnet14); - expectedResult.add(l3network14); - expectedResult.add(l3inter1ipv6addresslist); - expectedResult.add(subnet16); - expectedResult.add(l3network16); - - } - - @Override - protected String getQueryName() { - return "topology-fromCloudRegionIdandServiceId"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type","cloud-region").has("cloud-owner","cloud-owner-1").has("cloud-region-id","cloud-region-id-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - params.put("serviceId", "service-id-1"); - } + public TopologyFromCloudRegionIdAndServiceIdTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "61", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-owner", "cloud-owner-1"); + Vertex availibityzone1 = graph.addVertex(T.label, "cloud-region", T.id, "2", + "aai-node-type", "availability-zone", "availability-zone-name", "az-name-1", + "hypervisor-type", "hypervisortype-1"); + Vertex gnvf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", + "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1", "service-id", "service-id-1"); + + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "7", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1", "vserver-selflink", + "vserver-selflink-1"); + Vertex flavor1 = graph.addVertex(T.label, "flavor", T.id, "8", "aai-node-type", "flavor", + "flavor-id", "flavor-id-1", "flavor-name", "flavor-name-1", "flavor-selflink", + "flavor-selflink-1"); + Vertex image1 = graph.addVertex(T.label, "image", T.id, "9", "aai-node-type", "image", + "image-id", "image-id-1", "image-name", "image-name-1", "image-os-distro", + "image-os-distro-1", "image-os-version", "image-os-version-1"); + Vertex volume1 = graph.addVertex(T.label, "volume", T.id, "10", "aai-node-type", "volume", + "volume-id", "volume-id-1", "volume-selflink", "volume-selflink-1"); + Vertex vnfc1 = graph.addVertex(T.label, "vnfc", T.id, "11", "aai-node-type", "vnfc", + "vnfc-name", "vnfc-name-1", "nfc-naming-code", "nfc-naming-code-1"); + Vertex snapshot1 = graph.addVertex(T.label, "snapshot", T.id, "12", "aai-node-type", + "snapshot", "snapshot-id", "snapshot-id-1"); + Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "13", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); + Vertex linter1 = + graph.addVertex(T.label, "l-interface", T.id, "14", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); + Vertex logicallink1 = graph.addVertex(T.label, "logical-link", T.id, "15", "aai-node-type", + "logical-link", "link-name", "link-name-1", "l-interface-name", "l-interface-name1"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "16", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-1"); + Vertex subnet14 = graph.addVertex(T.label, "subnet", T.id, "17", "aai-node-type", "subnet", + "subnet-id", "subnet-id-14"); + Vertex l3network14 = graph.addVertex(T.label, "l3-network", T.id, "18", "aai-node-type", + "l3-network", "network-id", "network-id-14", "network-name", "network-name-14"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "19", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-1"); + Vertex subnet16 = graph.addVertex(T.label, "subnet", T.id, "20", "aai-node-type", "subnet", + "subnet-id", "subnet-id-16"); + Vertex l3network16 = graph.addVertex(T.label, "l3-network", T.id, "21", "aai-node-type", + "l3-network", "network-id", "network-id-16", "network-name", "network-name16"); + + Vertex gnvf2 = + graph.addVertex(T.label, "generic-vnf", T.id, "33", "aai-node-type", "generic-vnf", + "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2", "service-id", "service-id-wrong"); + Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "36", + "aai-node-type", "service-instance", "service-instance-id", "servInstId-2", + "service-type", "servType-2", "service-role", "servRole-2"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "37", "aai-node-type", + "vserver", "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2", + "vserver-selflink", "vserver-selflink-2"); + Vertex flavor2 = graph.addVertex(T.label, "flavor", T.id, "38", "aai-node-type", "flavor", + "flavor-id", "flavor-id-2", "flavor-name", "flavor-name-2", "flavor-selflink", + "flavor-selflink-2"); + Vertex image2 = graph.addVertex(T.label, "image", T.id, "39", "aai-node-type", "image", + "image-id", "image-id-2", "image-name", "image-name-2", "image-os-distro", + "image-os-distro-2", "image-os-version", "image-os-version-2"); + Vertex volume2 = graph.addVertex(T.label, "volume", T.id, "40", "aai-node-type", "volume", + "volume-id", "volume-id-2", "volume-selflink", "volume-selflink-2"); + Vertex vnfc2 = graph.addVertex(T.label, "vnfc", T.id, "41", "aai-node-type", "vnfc", + "vnfc-name", "vnfc-name-2", "nfc-naming-code", "nfc-naming-code-2"); + Vertex snapshot2 = graph.addVertex(T.label, "snapshot", T.id, "42", "aai-node-type", + "snapshot", "snapshot-id", "snapshot-id-2"); + Vertex vfmodule2 = graph.addVertex(T.label, "vf-module", T.id, "43", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-2", "vf-module-name", "vf-module-name2"); + Vertex linter2 = + graph.addVertex(T.label, "l-interface", T.id, "44", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); + Vertex logicallink2 = graph.addVertex(T.label, "logical-link", T.id, "45", "aai-node-type", + "logical-link", "link-name", "link-name-2", "l-interface-name", "l-interface-name2"); + Vertex l3inter1ipv4addresslist2 = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "46", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-2"); + Vertex subnet24 = graph.addVertex(T.label, "subnet", T.id, "47", "aai-node-type", "subnet", + "subnet-id", "subnet-id-24"); + Vertex l3network24 = graph.addVertex(T.label, "l3-network", T.id, "48", "aai-node-type", + "l3-network", "network-id", "network-id-24", "network-name", "network-name-24"); + Vertex l3inter1ipv6addresslist2 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "49", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-2"); + Vertex subnet26 = graph.addVertex(T.label, "subnet", T.id, "50", "aai-node-type", "subnet", + "subnet-id", "subnet-id-26"); + Vertex l3network26 = graph.addVertex(T.label, "l3-network", T.id, "51", "aai-node-type", + "l3-network", "network-id", "network-id-26", "network-name", "network-name26"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, cloudregion1, availibityzone1);// true + rules.addEdge(g, availibityzone1, gnvf1);// true + rules.addEdge(g, gnvf1, serviceinstance1);// true + rules.addEdge(g, gnvf1, vserver1);// true + + rules.addEdge(g, vserver1, flavor1);// true + rules.addEdge(g, vserver1, image1);// true + rules.addTreeEdge(g, vserver1, volume1);// true + rules.addEdge(g, vserver1, vnfc1);// true + rules.addEdge(g, vserver1, snapshot1);// true + rules.addEdge(g, vserver1, vfmodule1);// true + rules.addEdge(g, linter1, logicallink1);// true + rules.addTreeEdge(g, vserver1, linter1);// true + rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);// true + rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);// true + rules.addEdge(g, l3inter1ipv4addresslist, subnet14);// true + rules.addTreeEdge(g, subnet14, l3network14);// true + rules.addEdge(g, l3inter1ipv6addresslist, subnet16);// true + rules.addTreeEdge(g, subnet16, l3network16);// true + + // false + rules.addEdge(g, availibityzone1, gnvf2); + rules.addEdge(g, gnvf2, serviceinstance2); + rules.addEdge(g, gnvf2, vserver2); + rules.addEdge(g, vserver2, flavor2); + rules.addEdge(g, vserver2, image2); + rules.addTreeEdge(g, vserver2, volume2); + rules.addEdge(g, vserver2, vnfc2); + rules.addEdge(g, vserver2, snapshot2); + rules.addEdge(g, vserver2, vfmodule2); + rules.addEdge(g, linter2, logicallink2); + rules.addTreeEdge(g, vserver2, linter2); + rules.addTreeEdge(g, linter2, l3inter1ipv4addresslist2); + rules.addTreeEdge(g, linter2, l3inter1ipv6addresslist2); + rules.addEdge(g, l3inter1ipv4addresslist2, subnet24); + rules.addTreeEdge(g, subnet24, l3network24); + rules.addEdge(g, l3inter1ipv6addresslist2, subnet26); + rules.addTreeEdge(g, subnet26, l3network26); + + expectedResult.add(serviceinstance1); + expectedResult.add(vserver1); + expectedResult.add(flavor1); + expectedResult.add(image1); + expectedResult.add(volume1); + expectedResult.add(vnfc1); + expectedResult.add(snapshot1); + expectedResult.add(vfmodule1); + expectedResult.add(linter1); + expectedResult.add(logicallink1); + expectedResult.add(l3inter1ipv4addresslist); + expectedResult.add(subnet14); + expectedResult.add(l3network14); + expectedResult.add(l3inter1ipv6addresslist); + expectedResult.add(subnet16); + expectedResult.add(l3network16); + + } + + @Override + protected String getQueryName() { + return "topology-fromCloudRegionIdandServiceId"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "cloud-region").has("cloud-owner", "cloud-owner-1") + .has("cloud-region-id", "cloud-region-id-1"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("serviceId", "service-id-1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromSubscriberNameAndServiceTypeTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromSubscriberNameAndServiceTypeTest.java index 7164dba..46f47de 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromSubscriberNameAndServiceTypeTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromSubscriberNameAndServiceTypeTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,9 @@ */ package org.onap.aai.rest.search; +import com.att.eelf.configuration.EELFManager; +import com.google.common.base.CaseFormat; + import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -26,232 +29,239 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.att.eelf.configuration.EELFManager; -import com.google.common.base.CaseFormat; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class TopologyFromSubscriberNameAndServiceTypeTest extends QueryTest { - private static final Logger LOGGER = LoggerFactory - .getLogger(TopologyFromSubscriberNameAndServiceTypeTest.class); - - public TopologyFromSubscriberNameAndServiceTypeTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - // Set up the test graph - Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "1", "aai-node-type", "customer", - "global-customer-id", "global-customer-id-1", "subscriber-name", "subscriber-name-1"); - //Customer has 2 subscriptions - we filter by subscription-type - Vertex servicesubscription1 = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", - "service-subscription", "service-type", "service-type-1"); - Vertex servicesubscription112 = graph.addVertex(T.label, "service-subscription", T.id, "112", "aai-node-type", - "service-subscription", "service-type", "service-type-112"); - - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "3", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", - "service-instance-name-1"); - Vertex serviceinstance113 = graph.addVertex(T.label, "service-instance", T.id, "113", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id-113", "service-instance-name", - "service-instance-name-113"); - - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", "generic-vnf", "vnf-id", - "vnf-id-1", "vnf-name", "vnf-name-1", "service-id", "service-id-1"); - Vertex gnvf114 = graph.addVertex(T.label, "generic-vnf", T.id, "114", "aai-node-type", "generic-vnf", "vnf-id", - "vnf-id-114", "vnf-name", "vnf-name-2", "service-id", "service-id-2"); - - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", - "pservername1"); - Vertex pserver115 = graph.addVertex(T.label, "pserver", T.id, "115", "aai-node-type", "pserver", "hostname", - "pservername115"); - - Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex", - "physical-location-id", "physical-location-id-1", "country", "US"); - - Vertex pnfint1 = graph.addVertex(T.label, "p-interface", T.id, "7", "aai-node-type", "p-interface", - "interface-name", "ge0/0/0"); - - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "8", "aai-node-type", "vserver", "vserver-id", - "vserver-id-1", "vserver-name", "vserver-name-1", "vserver-selflink", "vserver-selflink-1"); - - Vertex vserver116 = graph.addVertex(T.label, "vserver", T.id, "116", "aai-node-type", "vserver", "vserver-id", - "vserver-id-116", "vserver-name", "vserver-name-116", "vserver-selflink", "vserver-selflink-116"); - - Vertex flavor1 = graph.addVertex(T.label, "flavor", T.id, "9", "aai-node-type", "flavor", "flavor-id", - "flavor-id-1", "flavor-name", "flavor-name-1", "flavor-selflink", "flavor-selflink-1"); - Vertex image1 = graph.addVertex(T.label, "image", T.id, "10", "aai-node-type", "image", "image-id", - "image-id-1", "image-name", "image-name-1", "image-os-distro", "image-os-distro-1", "image-os-version", - "image-os-version-1"); - - Vertex linter1 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", - "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); - Vertex logicallink1 = graph.addVertex(T.label, "logical-link", T.id, "12", "aai-node-type", "logical-link", - "link-name", "link-name-1", "l-interface-name", "l-interface-name1"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "13", - "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", - "l3-interface-ipv4-address-1"); - Vertex subnet1 = graph.addVertex(T.label, "subnet", T.id, "14", "aai-node-type", "subnet", "subnet-id", - "subnet-id-1"); - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "15", "aai-node-type", "l3-network", - "network-id", "network-id-1", "network-name", "network-name-1"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "16", - "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", - "l3-interface-ipv6-address-1"); - Vertex subnet2 = graph.addVertex(T.label, "subnet", T.id, "17", "aai-node-type", "subnet", "subnet-id", - "subnet-id-2"); - Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "18", "aai-node-type", "l3-network", - "network-id", "network-id-2", "network-name", "network-name2"); - - Vertex customer2 = graph.addVertex(T.label, "customer", T.id, "19", "aai-node-type", "customer", - "global-customer-id", "global-customer-id-2", "subscriber-name", "subscriber-name-2"); - Vertex servicesubscription2 = graph.addVertex(T.label, "service-subscription", T.id, "20", "aai-node-type", - "service-subscription", "service-type", "service-type-2"); - Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "21", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id-2", "service-instance-name", - "service-instance-name-2"); - Vertex gnvf2 = graph.addVertex(T.label, "generic-vnf", T.id, "22", "aai-node-type", "generic-vnf", "vnf-id", - "vnf-id-2", "vnf-name", "vnf-name-2", "service-id", "service-id-2"); - - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "23", "aai-node-type", "pserver", "hostname", - "pservername1"); - Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "24", "aai-node-type", "complex", - "physical-location-id", "physical-location-id-2", "country", "US"); - Vertex pnfint2 = graph.addVertex(T.label, "p-interface", T.id, "25", "aai-node-type", "p-interface", - "interface-name", "ge0/0/0"); - - Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "251", "aai-node-type", "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); - - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "26", "aai-node-type", "vserver", "vserver-id", - "vserver-id-2", "vserver-name", "vserver-name-2", "vserver-selflink", "vserver-selflink-2"); - Vertex flavor2 = graph.addVertex(T.label, "flavor", T.id, "27", "aai-node-type", "flavor", "flavor-id", - "flavor-id-2", "flavor-name", "flavor-name-2", "flavor-selflink", "flavor-selflink-2"); - Vertex image2 = graph.addVertex(T.label, "image", T.id, "28", "aai-node-type", "image", "image-id", - "image-id-2", "image-name", "image-name-2", "image-os-distro", "image-os-distro-2", "image-os-version", - "image-os-version-2"); - - Vertex linter2 = graph.addVertex(T.label, "l-interface", T.id, "29", "aai-node-type", "l-interface", - "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); - Vertex logicallink2 = graph.addVertex(T.label, "logical-link", T.id, "30", "aai-node-type", "logical-link", - "link-name", "link-name-2", "l-interface-name", "l-interface-name2"); - Vertex l3inter1ipv4addresslist2 = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "31", - "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", - "l3-interface-ipv4-address-2"); - Vertex subnet3 = graph.addVertex(T.label, "subnet", T.id, "32", "aai-node-type", "subnet", "subnet-id", - "subnet-id-3"); - Vertex l3network3 = graph.addVertex(T.label, "l3-network", T.id, "33", "aai-node-type", "l3-network", - "network-id", "network-id-3", "network-name", "network-name-3"); - Vertex l3inter1ipv6addresslist2 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "34", - "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", - "l3-interface-ipv6-address-2"); - Vertex subnet4 = graph.addVertex(T.label, "subnet", T.id, "35", "aai-node-type", "subnet", "subnet-id", - "subnet-id-4"); - Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "36", "aai-node-type", "l3-network", - "network-id", "network-id-4", "network-name", "network-name4"); - - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, customer1, servicesubscription1);// true - - rules.addTreeEdge(g, customer1, servicesubscription112);// true - - rules.addTreeEdge(g, servicesubscription1, serviceinstance1);// true - rules.addTreeEdge(g, servicesubscription1, serviceinstance113);// true - - - rules.addEdge(g, serviceinstance1, gnvf1);// true - rules.addEdge(g, serviceinstance113, gnvf114);// true - - rules.addEdge(g, gnvf1, vserver1);// true - rules.addEdge(g, gnvf114, vserver116);// true - - rules.addEdge(g, gnvf1, pserver1);// true - rules.addEdge(g, gnvf114, pserver115);// true - - rules.addEdge(g, pserver1, complex1);// true - rules.addTreeEdge(g, pserver1, pnfint1); - rules.addEdge(g, pnfint1, plink1); - - rules.addEdge(g, vserver1, flavor1);// true - rules.addEdge(g, vserver1, image1);// true - rules.addEdge(g, vserver1, pserver1);// true - rules.addEdge(g, linter1, logicallink1);// true - rules.addTreeEdge(g, vserver1, linter1);// true - rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);// true - rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);// true - rules.addEdge(g, l3inter1ipv4addresslist, subnet1);// true - rules.addTreeEdge(g, subnet1, l3network1);// true - rules.addEdge(g, l3inter1ipv6addresslist, subnet2);// true - rules.addTreeEdge(g, subnet2, l3network2);// true - // false - - rules.addTreeEdge(g, customer2, servicesubscription2);// true - rules.addTreeEdge(g, servicesubscription2, serviceinstance2);// true - rules.addEdge(g, serviceinstance2, gnvf2);// true - rules.addEdge(g, gnvf2, pserver2);// true - rules.addEdge(g, pserver2, complex2);// true - rules.addTreeEdge(g, pserver2, pnfint2);// true - - rules.addEdge(g, gnvf2, vserver2);// true - - rules.addEdge(g, vserver2, flavor2);// true - rules.addEdge(g, vserver2, image2);// true - rules.addEdge(g, linter2, logicallink2);// true - rules.addTreeEdge(g, vserver2, linter2);// true - rules.addTreeEdge(g, linter2, l3inter1ipv4addresslist2);// true - rules.addTreeEdge(g, linter2, l3inter1ipv6addresslist2);// true - rules.addEdge(g, l3inter1ipv4addresslist2, subnet3);// true - rules.addTreeEdge(g, subnet3, l3network3);// true - rules.addEdge(g, l3inter1ipv6addresslist2, subnet4);// true - rules.addTreeEdge(g, subnet4, l3network4);// true - - expectedResult.add(complex1); - expectedResult.add(vserver1); - expectedResult.add(vserver116); - expectedResult.add(pserver1); - expectedResult.add(flavor1); - expectedResult.add(image1); - expectedResult.add(linter1); - expectedResult.add(logicallink1); - expectedResult.add(plink1); - expectedResult.add(l3inter1ipv4addresslist); - expectedResult.add(subnet1); - expectedResult.add(l3network1); - expectedResult.add(l3inter1ipv6addresslist); - expectedResult.add(subnet2); - expectedResult.add(l3network2); - - } - - @Override - protected String getQueryName() { - return "spaas-topology-fromServiceInstance"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g - .has("aai-node-type", "customer") - .has("global-customer-id", "global-customer-id-1") - .in("org.onap.relationships.inventory.BelongsTo") - .has("aai-node-type","service-subscription") - .has("service-type", "service-type-1") - .in("org.onap.relationships.inventory.BelongsTo") - .has("aai-node-type","service-instance"); - } - - @Override - protected void addParam(Map<String, Object> params) { - //params.put("serviceType", "service-type-1"); - //params.put("subscriberName", "subscriber-name-1"); - } + private static final Logger LOGGER = + LoggerFactory.getLogger(TopologyFromSubscriberNameAndServiceTypeTest.class); + + public TopologyFromSubscriberNameAndServiceTypeTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "1", "aai-node-type", + "customer", "global-customer-id", "global-customer-id-1", "subscriber-name", + "subscriber-name-1"); + // Customer has 2 subscriptions - we filter by subscription-type + Vertex servicesubscription1 = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-type", "service-type-1"); + Vertex servicesubscription112 = graph.addVertex(T.label, "service-subscription", T.id, + "112", "aai-node-type", "service-subscription", "service-type", "service-type-112"); + + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "3", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex serviceinstance113 = graph.addVertex(T.label, "service-instance", T.id, "113", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-113", + "service-instance-name", "service-instance-name-113"); + + Vertex gnvf1 = + graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", "generic-vnf", + "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1", "service-id", "service-id-1"); + Vertex gnvf114 = + graph.addVertex(T.label, "generic-vnf", T.id, "114", "aai-node-type", "generic-vnf", + "vnf-id", "vnf-id-114", "vnf-name", "vnf-name-2", "service-id", "service-id-2"); + + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "pservername1"); + Vertex pserver115 = graph.addVertex(T.label, "pserver", T.id, "115", "aai-node-type", + "pserver", "hostname", "pservername115"); + + Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "6", "aai-node-type", "complex", + "physical-location-id", "physical-location-id-1", "country", "US"); + + Vertex pnfint1 = graph.addVertex(T.label, "p-interface", T.id, "7", "aai-node-type", + "p-interface", "interface-name", "ge0/0/0"); + + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "8", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1", "vserver-selflink", + "vserver-selflink-1"); + + Vertex vserver116 = graph.addVertex(T.label, "vserver", T.id, "116", "aai-node-type", + "vserver", "vserver-id", "vserver-id-116", "vserver-name", "vserver-name-116", + "vserver-selflink", "vserver-selflink-116"); + + Vertex flavor1 = graph.addVertex(T.label, "flavor", T.id, "9", "aai-node-type", "flavor", + "flavor-id", "flavor-id-1", "flavor-name", "flavor-name-1", "flavor-selflink", + "flavor-selflink-1"); + Vertex image1 = graph.addVertex(T.label, "image", T.id, "10", "aai-node-type", "image", + "image-id", "image-id-1", "image-name", "image-name-1", "image-os-distro", + "image-os-distro-1", "image-os-version", "image-os-version-1"); + + Vertex linter1 = + graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); + Vertex logicallink1 = graph.addVertex(T.label, "logical-link", T.id, "12", "aai-node-type", + "logical-link", "link-name", "link-name-1", "l-interface-name", "l-interface-name1"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "13", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-1"); + Vertex subnet1 = graph.addVertex(T.label, "subnet", T.id, "14", "aai-node-type", "subnet", + "subnet-id", "subnet-id-1"); + Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "15", "aai-node-type", + "l3-network", "network-id", "network-id-1", "network-name", "network-name-1"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "16", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-1"); + Vertex subnet2 = graph.addVertex(T.label, "subnet", T.id, "17", "aai-node-type", "subnet", + "subnet-id", "subnet-id-2"); + Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "18", "aai-node-type", + "l3-network", "network-id", "network-id-2", "network-name", "network-name2"); + + Vertex customer2 = graph.addVertex(T.label, "customer", T.id, "19", "aai-node-type", + "customer", "global-customer-id", "global-customer-id-2", "subscriber-name", + "subscriber-name-2"); + Vertex servicesubscription2 = graph.addVertex(T.label, "service-subscription", T.id, "20", + "aai-node-type", "service-subscription", "service-type", "service-type-2"); + Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "21", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", + "service-instance-name", "service-instance-name-2"); + Vertex gnvf2 = + graph.addVertex(T.label, "generic-vnf", T.id, "22", "aai-node-type", "generic-vnf", + "vnf-id", "vnf-id-2", "vnf-name", "vnf-name-2", "service-id", "service-id-2"); + + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "23", "aai-node-type", + "pserver", "hostname", "pservername1"); + Vertex complex2 = graph.addVertex(T.label, "complex", T.id, "24", "aai-node-type", + "complex", "physical-location-id", "physical-location-id-2", "country", "US"); + Vertex pnfint2 = graph.addVertex(T.label, "p-interface", T.id, "25", "aai-node-type", + "p-interface", "interface-name", "ge0/0/0"); + + Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "251", "aai-node-type", + "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); + + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "26", "aai-node-type", + "vserver", "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2", + "vserver-selflink", "vserver-selflink-2"); + Vertex flavor2 = graph.addVertex(T.label, "flavor", T.id, "27", "aai-node-type", "flavor", + "flavor-id", "flavor-id-2", "flavor-name", "flavor-name-2", "flavor-selflink", + "flavor-selflink-2"); + Vertex image2 = graph.addVertex(T.label, "image", T.id, "28", "aai-node-type", "image", + "image-id", "image-id-2", "image-name", "image-name-2", "image-os-distro", + "image-os-distro-2", "image-os-version", "image-os-version-2"); + + Vertex linter2 = + graph.addVertex(T.label, "l-interface", T.id, "29", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); + Vertex logicallink2 = graph.addVertex(T.label, "logical-link", T.id, "30", "aai-node-type", + "logical-link", "link-name", "link-name-2", "l-interface-name", "l-interface-name2"); + Vertex l3inter1ipv4addresslist2 = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "31", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-2"); + Vertex subnet3 = graph.addVertex(T.label, "subnet", T.id, "32", "aai-node-type", "subnet", + "subnet-id", "subnet-id-3"); + Vertex l3network3 = graph.addVertex(T.label, "l3-network", T.id, "33", "aai-node-type", + "l3-network", "network-id", "network-id-3", "network-name", "network-name-3"); + Vertex l3inter1ipv6addresslist2 = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "34", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-2"); + Vertex subnet4 = graph.addVertex(T.label, "subnet", T.id, "35", "aai-node-type", "subnet", + "subnet-id", "subnet-id-4"); + Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "36", "aai-node-type", + "l3-network", "network-id", "network-id-4", "network-name", "network-name4"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, customer1, servicesubscription1);// true + + rules.addTreeEdge(g, customer1, servicesubscription112);// true + + rules.addTreeEdge(g, servicesubscription1, serviceinstance1);// true + rules.addTreeEdge(g, servicesubscription1, serviceinstance113);// true + + rules.addEdge(g, serviceinstance1, gnvf1);// true + rules.addEdge(g, serviceinstance113, gnvf114);// true + + rules.addEdge(g, gnvf1, vserver1);// true + rules.addEdge(g, gnvf114, vserver116);// true + + rules.addEdge(g, gnvf1, pserver1);// true + rules.addEdge(g, gnvf114, pserver115);// true + + rules.addEdge(g, pserver1, complex1);// true + rules.addTreeEdge(g, pserver1, pnfint1); + rules.addEdge(g, pnfint1, plink1); + + rules.addEdge(g, vserver1, flavor1);// true + rules.addEdge(g, vserver1, image1);// true + rules.addEdge(g, vserver1, pserver1);// true + rules.addEdge(g, linter1, logicallink1);// true + rules.addTreeEdge(g, vserver1, linter1);// true + rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);// true + rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);// true + rules.addEdge(g, l3inter1ipv4addresslist, subnet1);// true + rules.addTreeEdge(g, subnet1, l3network1);// true + rules.addEdge(g, l3inter1ipv6addresslist, subnet2);// true + rules.addTreeEdge(g, subnet2, l3network2);// true + // false + + rules.addTreeEdge(g, customer2, servicesubscription2);// true + rules.addTreeEdge(g, servicesubscription2, serviceinstance2);// true + rules.addEdge(g, serviceinstance2, gnvf2);// true + rules.addEdge(g, gnvf2, pserver2);// true + rules.addEdge(g, pserver2, complex2);// true + rules.addTreeEdge(g, pserver2, pnfint2);// true + + rules.addEdge(g, gnvf2, vserver2);// true + + rules.addEdge(g, vserver2, flavor2);// true + rules.addEdge(g, vserver2, image2);// true + rules.addEdge(g, linter2, logicallink2);// true + rules.addTreeEdge(g, vserver2, linter2);// true + rules.addTreeEdge(g, linter2, l3inter1ipv4addresslist2);// true + rules.addTreeEdge(g, linter2, l3inter1ipv6addresslist2);// true + rules.addEdge(g, l3inter1ipv4addresslist2, subnet3);// true + rules.addTreeEdge(g, subnet3, l3network3);// true + rules.addEdge(g, l3inter1ipv6addresslist2, subnet4);// true + rules.addTreeEdge(g, subnet4, l3network4);// true + + expectedResult.add(complex1); + expectedResult.add(vserver1); + expectedResult.add(vserver116); + expectedResult.add(pserver1); + expectedResult.add(flavor1); + expectedResult.add(image1); + expectedResult.add(linter1); + expectedResult.add(logicallink1); + expectedResult.add(plink1); + expectedResult.add(l3inter1ipv4addresslist); + expectedResult.add(subnet1); + expectedResult.add(l3network1); + expectedResult.add(l3inter1ipv6addresslist); + expectedResult.add(subnet2); + expectedResult.add(l3network2); + + } + + @Override + protected String getQueryName() { + return "spaas-topology-fromServiceInstance"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "customer").has("global-customer-id", "global-customer-id-1") + .in("org.onap.relationships.inventory.BelongsTo") + .has("aai-node-type", "service-subscription").has("service-type", "service-type-1") + .in("org.onap.relationships.inventory.BelongsTo") + .has("aai-node-type", "service-instance"); + } + + @Override + protected void addParam(Map<String, Object> params) { + // params.put("serviceType", "service-type-1"); + // params.put("subscriberName", "subscriber-name-1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryFromCloudRegionQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryFromCloudRegionQueryTest.java index 0377182..2043706 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryFromCloudRegionQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryFromCloudRegionQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,13 +26,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -public class TopologySummaryFromCloudRegionQueryTest extends QueryTest{ +public class TopologySummaryFromCloudRegionQueryTest extends QueryTest { - public TopologySummaryFromCloudRegionQueryTest() throws AAIException, NoEdgeRuleFoundException{ + public TopologySummaryFromCloudRegionQueryTest() throws AAIException, NoEdgeRuleFoundException { super(); } @@ -43,35 +42,45 @@ public class TopologySummaryFromCloudRegionQueryTest extends QueryTest{ @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex region = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", - "cloud-region-owner", "cloud-region-owner-1","cloud-region-version","cloud-region-version-1"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "2", "aai-node-type", "tenant", "tenant-id", "tenant-id-1", - "tenant-name", "tenant-name-1"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", - "vserver-name", "vserver-name-1"); - Vertex vnf = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", "generic-vnf", "vnf-id", "vnf-uuid-1", - "vnf-name", "vnf-name=1"); - Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "13", "aai-node-type", "vnfc", "vnfc-name", "VnfcName", "nfc-naming-code", - "NfcNamingCode", "nfc-function", "NfcFunction", "in-maint", "false", "is-closed-loop-disabled", "false"); - Vertex vnfc2 = graph.addVertex(T.label, "vnfc", T.id, "15", "aai-node-type", "vnfc", "vnfc-name", "VnfcName3", "nfc-naming-code", - "NfcNamingCode3", "nfc-function", "NfcFunction3", "in-maint", "false", "is-closed-loop-disabled", "false"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", "pserver-hostname-1"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "6", "aai-node-type", "pserver", "hostname", "pserver-hostname-2"); + Vertex region = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", + "cloud-region-owner-1", "cloud-region-version", "cloud-region-version-1"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "2", "aai-node-type", "tenant", + "tenant-id", "tenant-id-1", "tenant-name", "tenant-name-1"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex vnf = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-uuid-1", "vnf-name", "vnf-name=1"); + Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "13", "aai-node-type", "vnfc", + "vnfc-name", "VnfcName", "nfc-naming-code", "NfcNamingCode", "nfc-function", + "NfcFunction", "in-maint", "false", "is-closed-loop-disabled", "false"); + Vertex vnfc2 = graph.addVertex(T.label, "vnfc", T.id, "15", "aai-node-type", "vnfc", + "vnfc-name", "VnfcName3", "nfc-naming-code", "NfcNamingCode3", "nfc-function", + "NfcFunction3", "in-maint", "false", "is-closed-loop-disabled", "false"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "pserver-hostname-1"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "6", "aai-node-type", "pserver", + "hostname", "pserver-hostname-2"); - Vertex region_exclude = graph.addVertex(T.label, "cloud-region", T.id, "7", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-2", - "cloud-region-owner", "cloud-region-owner-2","cloud-region-version","cloud-region-version-2"); - Vertex tenant_exclude = graph.addVertex(T.label, "tenant", T.id, "8", "aai-node-type", "tenant", "tenant-id", "tenant-id-2", - "tenant-name", "tenant-name-2"); - Vertex vserver_exclude = graph.addVertex(T.label, "vserver", T.id, "9", "aai-node-type", "vserver", "vserver-id", "vserver-id-2", - "vserver-name", "vserver-name-2"); - Vertex vnf_exclude = graph.addVertex(T.label, "generic-vnf", T.id, "10", "aai-node-type", "generic-vnf", "vnf-id", "vnf-uuid-2", - "vnf-name", "vnf-name=2"); - Vertex vnfc_exclude = graph.addVertex(T.label, "vnfc", T.id, "14", "aai-node-type", "vnfc", "vnfc-name", "VnfcName2", "nfc-naming-code", - "NfcNamingCode2", "nfc-function", "NfcFunction2", "in-maint", "false", "is-closed-loop-disabled", "false"); - Vertex vnfc_exclude2 = graph.addVertex(T.label, "vnfc", T.id, "16", "aai-node-type", "vnfc", "vnfc-name", "VnfcName4", "nfc-naming-code", - "NfcNamingCode4", "nfc-function", "NfcFunction4", "in-maint", "false", "is-closed-loop-disabled", "false"); - Vertex pserver_exclude = graph.addVertex(T.label, "pserver", T.id, "11", "aai-node-type", "pserver", "hostname", "pserver-hostname-2"); - Vertex pserver2_exclude = graph.addVertex(T.label, "pserver", T.id, "12", "aai-node-type", "pserver", "hostname", "pserver-hostname-3"); + Vertex region_exclude = graph.addVertex(T.label, "cloud-region", T.id, "7", "aai-node-type", + "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", + "cloud-region-owner-2", "cloud-region-version", "cloud-region-version-2"); + Vertex tenant_exclude = graph.addVertex(T.label, "tenant", T.id, "8", "aai-node-type", + "tenant", "tenant-id", "tenant-id-2", "tenant-name", "tenant-name-2"); + Vertex vserver_exclude = graph.addVertex(T.label, "vserver", T.id, "9", "aai-node-type", + "vserver", "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2"); + Vertex vnf_exclude = graph.addVertex(T.label, "generic-vnf", T.id, "10", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-uuid-2", "vnf-name", "vnf-name=2"); + Vertex vnfc_exclude = graph.addVertex(T.label, "vnfc", T.id, "14", "aai-node-type", "vnfc", + "vnfc-name", "VnfcName2", "nfc-naming-code", "NfcNamingCode2", "nfc-function", + "NfcFunction2", "in-maint", "false", "is-closed-loop-disabled", "false"); + Vertex vnfc_exclude2 = graph.addVertex(T.label, "vnfc", T.id, "16", "aai-node-type", "vnfc", + "vnfc-name", "VnfcName4", "nfc-naming-code", "NfcNamingCode4", "nfc-function", + "NfcFunction4", "in-maint", "false", "is-closed-loop-disabled", "false"); + Vertex pserver_exclude = graph.addVertex(T.label, "pserver", T.id, "11", "aai-node-type", + "pserver", "hostname", "pserver-hostname-2"); + Vertex pserver2_exclude = graph.addVertex(T.label, "pserver", T.id, "12", "aai-node-type", + "pserver", "hostname", "pserver-hostname-3"); GraphTraversalSource g = graph.traversal(); rules.addTreeEdge(g, region, tenant); @@ -79,7 +88,7 @@ public class TopologySummaryFromCloudRegionQueryTest extends QueryTest{ rules.addEdge(g, vserver, pserver); rules.addEdge(g, vserver, vnf); rules.addEdge(g, vnf, vnfc); - rules.addEdge(g, vserver, vnfc2); + rules.addEdge(g, vserver, vnfc2); rules.addEdge(g, region, pserver2); rules.addTreeEdge(g, region_exclude, tenant_exclude); @@ -107,7 +116,8 @@ public class TopologySummaryFromCloudRegionQueryTest extends QueryTest{ @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("cloud-region-id", "cloud-region-id-1").has("cloud-region-owner", "cloud-region-owner-1"); + g.has("cloud-region-id", "cloud-region-id-1").has("cloud-region-owner", + "cloud-region-owner-1"); } @Override diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryFromTenantTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryFromTenantTest.java index 36c7396..23a3754 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryFromTenantTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryFromTenantTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,63 +31,74 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class TopologySummaryFromTenantTest extends QueryTest { - public TopologySummaryFromTenantTest() throws AAIException,NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } + public TopologySummaryFromTenantTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex tenant = graph.addVertex(T.label, "tenant-id", T.id, "0", "aai-node-type", "tenant", "tenant-id", "TenantID", "tenant-name", "TenantName"); - Vertex cloudRegion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", "cloud-region", "cloud-owner", "CloudOwner", "cloud-region-id", "CloudRegionId"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", "vserver-id", "vservId-1", "vserver-name", "vserv-name-1", "vserver-selflink", "me/self"); - Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "VnfID", "vnf-name", "VnfName", "vnf-type", "VnfType"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", "pserver-id", "PserverID", "hostname", "PserverHostName"); - - Vertex tenant2 = graph.addVertex(T.label, "tenant-id2", T.id, "5", "aai-node-type", "tenant", "tenant-id", "TenantID2", "tenant-name", "TenantName2"); - Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region2", T.id, "6", "aai-node-type", "cloud-region", "cloud-owner", "CloudOwner2", "cloud-region-id", "CloudRegionId2"); - Vertex vserver2 = graph.addVertex(T.label, "vserver2", T.id, "7", "aai-node-type", "vserver", "vserver-id", "vservId-2", "vserver-name", "vserv-name-2", "vserver-selflink", "me/self"); //false - Vertex genericVnf2 = graph.addVertex(T.label, "generic-vnf2", T.id, "8", "aai-node-type", "generic-vnf", "vnf-id", "VnfID2", "vnf-name", "VnfName2", "vnf-type", "VnfType"); //false - Vertex pserver2 = graph.addVertex(T.label, "pserver2", T.id, "9", "aai-node-type", "pserver", "pserver-id", "PserverID2", "hostname", "PserverHostName2"); //false + @Test + public void run() { + super.run(); + } - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, tenant, cloudRegion); - rules.addTreeEdge(g, tenant, vserver); - rules.addEdge(g, vserver, genericVnf); - rules.addEdge(g, vserver, pserver); - - //tenant2 - rules.addTreeEdge(g, tenant2, cloudRegion2);//false - rules.addTreeEdge(g, tenant2, vserver2);//false - rules.addEdge(g, vserver2, genericVnf2); //false - rules.addEdge(g, vserver2, pserver2); //false - - - expectedResult.add(tenant); - expectedResult.add(cloudRegion); - expectedResult.add(vserver); - expectedResult.add(genericVnf); - expectedResult.add(pserver); - - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex tenant = graph.addVertex(T.label, "tenant-id", T.id, "0", "aai-node-type", "tenant", + "tenant-id", "TenantID", "tenant-name", "TenantName"); + Vertex cloudRegion = graph.addVertex(T.label, "cloud-region", T.id, "1", "aai-node-type", + "cloud-region", "cloud-owner", "CloudOwner", "cloud-region-id", "CloudRegionId"); + Vertex vserver = + graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", "vserver-id", + "vservId-1", "vserver-name", "vserv-name-1", "vserver-selflink", "me/self"); + Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", + "generic-vnf", "vnf-id", "VnfID", "vnf-name", "VnfName", "vnf-type", "VnfType"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", + "pserver-id", "PserverID", "hostname", "PserverHostName"); - @Override - protected String getQueryName() { - return "topology-summary-fromTenant"; - } + Vertex tenant2 = graph.addVertex(T.label, "tenant-id2", T.id, "5", "aai-node-type", + "tenant", "tenant-id", "TenantID2", "tenant-name", "TenantName2"); + Vertex cloudRegion2 = graph.addVertex(T.label, "cloud-region2", T.id, "6", "aai-node-type", + "cloud-region", "cloud-owner", "CloudOwner2", "cloud-region-id", "CloudRegionId2"); + Vertex vserver2 = graph.addVertex(T.label, "vserver2", T.id, "7", "aai-node-type", + "vserver", "vserver-id", "vservId-2", "vserver-name", "vserv-name-2", + "vserver-selflink", "me/self"); // false + Vertex genericVnf2 = graph.addVertex(T.label, "generic-vnf2", T.id, "8", "aai-node-type", + "generic-vnf", "vnf-id", "VnfID2", "vnf-name", "VnfName2", "vnf-type", "VnfType"); // false + Vertex pserver2 = graph.addVertex(T.label, "pserver2", T.id, "9", "aai-node-type", + "pserver", "pserver-id", "PserverID2", "hostname", "PserverHostName2"); // false - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "tenant").has("tenant-id","TenantID"); - } + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, tenant, cloudRegion); + rules.addTreeEdge(g, tenant, vserver); + rules.addEdge(g, vserver, genericVnf); + rules.addEdge(g, vserver, pserver); - @Override - protected void addParam(Map<String, Object> params) { - return; - } + // tenant2 + rules.addTreeEdge(g, tenant2, cloudRegion2);// false + rules.addTreeEdge(g, tenant2, vserver2);// false + rules.addEdge(g, vserver2, genericVnf2); // false + rules.addEdge(g, vserver2, pserver2); // false + + expectedResult.add(tenant); + expectedResult.add(cloudRegion); + expectedResult.add(vserver); + expectedResult.add(genericVnf); + expectedResult.add(pserver); + + } + + @Override + protected String getQueryName() { + return "topology-summary-fromTenant"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "tenant").has("tenant-id", "TenantID"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryQueryTest.java index 88af274..5e0f803 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologySummaryQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,91 +26,100 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class TopologySummaryQueryTest extends QueryTest { - public TopologySummaryQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public TopologySummaryQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex vnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnfuuid"); + Vertex vnfint = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", + "l-interface", "interface-name", "xe0/0/0"); + Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "1", "aai-node-type", "vnfc"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver"); + Vertex vserverint = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", + "l-interface", "interface-name", "xe0/0/0"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "3", "aai-node-type", "tenant"); + Vertex region = + graph.addVertex(T.label, "could-region", T.id, "4", "aai-node-type", "cloud-region"); + Vertex image = graph.addVertex(T.label, "image", T.id, "5", "aai-node-type", "image"); + Vertex flavor = graph.addVertex(T.label, "flavor", T.id, "6", "aai-node-type", "flavor"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "7", "aai-node-type", "pserver"); + Vertex pserverint = graph.addVertex(T.label, "p-interface", T.id, "9", "aai-node-type", + "p-interface", "interface-name", "xe0/0/0"); + Vertex complex = graph.addVertex(T.label, "complex", T.id, "8", "aai-node-type", "complex"); + Vertex lineofbusiness = graph.addVertex(T.label, "line-of-business", T.id, "12", + "aai-node-type", "line-of-business"); + Vertex platform = + graph.addVertex(T.label, "platform", T.id, "13", "aai-node-type", "platform"); + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "14", + "aai-node-type", "service-instance"); + Vertex owningentity = + graph.addVertex(T.label, "owning-entity", T.id, "15", "aai-node-type", "owning-entity"); + Vertex project = + graph.addVertex(T.label, "project", T.id, "16", "aai-node-type", "project"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, vnf, vnfc); + rules.addEdge(g, vnf, vserver); + rules.addEdge(g, vnfc, vserver); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, region); + rules.addEdge(g, vserver, image); + rules.addEdge(g, vserver, flavor); + rules.addEdge(g, vserver, pserver); + rules.addEdge(g, pserver, complex); + rules.addEdge(g, region, complex); + rules.addTreeEdge(g, pserver, pserverint); + rules.addTreeEdge(g, vnf, vnfint); + rules.addTreeEdge(g, vserver, vserverint); + rules.addEdge(g, vnf, lineofbusiness); + rules.addEdge(g, vnf, platform); + rules.addEdge(g, vnf, serviceinstance); + rules.addEdge(g, serviceinstance, owningentity); + rules.addEdge(g, serviceinstance, project); + + expectedResult.add(vnf); + expectedResult.add(vnfc); + expectedResult.add(vserver); + expectedResult.add(tenant); + expectedResult.add(region); + expectedResult.add(image); + expectedResult.add(flavor); + expectedResult.add(pserver); + expectedResult.add(complex); + expectedResult.add(lineofbusiness); + expectedResult.add(platform); + expectedResult.add(owningentity); + expectedResult.add(project); + + } - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex vnf = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnfuuid"); - Vertex vnfint = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", "l-interface", "interface-name", "xe0/0/0"); - Vertex vnfc = graph.addVertex(T.label, "vnfc", T.id, "1", "aai-node-type", "vnfc"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver"); - Vertex vserverint = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", "interface-name", "xe0/0/0"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "3", "aai-node-type", "tenant"); - Vertex region = graph.addVertex(T.label, "could-region", T.id, "4", "aai-node-type", "cloud-region"); - Vertex image = graph.addVertex(T.label, "image", T.id, "5", "aai-node-type", "image"); - Vertex flavor = graph.addVertex(T.label, "flavor", T.id, "6", "aai-node-type", "flavor"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "7", "aai-node-type", "pserver"); - Vertex pserverint = graph.addVertex(T.label, "p-interface", T.id, "9", "aai-node-type", "p-interface", "interface-name", "xe0/0/0"); - Vertex complex = graph.addVertex(T.label, "complex", T.id, "8", "aai-node-type", "complex"); - Vertex lineofbusiness = graph.addVertex(T.label, "line-of-business", T.id, "12", "aai-node-type", "line-of-business"); - Vertex platform = graph.addVertex(T.label, "platform", T.id, "13", "aai-node-type", "platform"); - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "14", "aai-node-type", "service-instance"); - Vertex owningentity = graph.addVertex(T.label, "owning-entity", T.id, "15", "aai-node-type", "owning-entity"); - Vertex project = graph.addVertex(T.label, "project", T.id, "16", "aai-node-type", "project"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, vnf, vnfc); - rules.addEdge(g, vnf, vserver); - rules.addEdge(g, vnfc, vserver); - rules.addTreeEdge(g, vserver, tenant); - rules.addTreeEdge(g, tenant, region); - rules.addEdge(g, vserver, image); - rules.addEdge(g, vserver, flavor); - rules.addEdge(g, vserver, pserver); - rules.addEdge(g, pserver, complex); - rules.addEdge(g, region, complex); - rules.addTreeEdge(g, pserver, pserverint); - rules.addTreeEdge(g, vnf, vnfint); - rules.addTreeEdge(g, vserver, vserverint); - rules.addEdge(g, vnf, lineofbusiness); - rules.addEdge(g, vnf, platform); - rules.addEdge(g, vnf, serviceinstance); - rules.addEdge(g, serviceinstance, owningentity); - rules.addEdge(g, serviceinstance, project); - - expectedResult.add(vnf); - expectedResult.add(vnfc); - expectedResult.add(vserver); - expectedResult.add(tenant); - expectedResult.add(region); - expectedResult.add(image); - expectedResult.add(flavor); - expectedResult.add(pserver); - expectedResult.add(complex); - expectedResult.add(lineofbusiness); - expectedResult.add(platform); - expectedResult.add(owningentity); - expectedResult.add(project); - - } + @Override + protected String getQueryName() { + return "topology-summary"; + } - @Override - protected String getQueryName() { - return "topology-summary"; - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("vnf-id", "vnfuuid"); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("vnf-id", "vnfuuid"); - - } + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/TreeQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/TreeQueryTest.java index 109cfc1..5912281 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/TreeQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/TreeQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,21 +19,21 @@ */ package org.onap.aai.rest.search; +import java.util.List; + import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.onap.aai.exceptions.AAIException; -import java.util.List; - public abstract class TreeQueryTest extends QueryTest { - protected List<Tree> treeList; + protected List<Tree> treeList; - public TreeQueryTest() throws AAIException { - super(); - } + public TreeQueryTest() throws AAIException { + super(); + } - @Override - public void run() { - treeList = (List<Tree>)shell.executeTraversal(query, params).toList(); - } + @Override + public void run() { + treeList = (List<Tree>) shell.executeTraversal(query, params).toList(); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeInstanceQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeInstanceQueryTest.java index 8e3bb5f..478e259 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeInstanceQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeInstanceQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,58 +26,63 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class UcpeInstanceQueryTest extends QueryTest { - public UcpeInstanceQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public UcpeInstanceQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", + "physical-location-id", "clli"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", + "hostname", "pservername"); + Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "11", "aai-node-type", "pnf", "pnf-name", + "pnfname"); + Vertex vnf = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", + "generic-vnf", "vnf-id", "vnfuuid"); + Vertex pserverint = graph.addVertex(T.label, "p-interface", T.id, "2", "aai-node-type", + "p-interface", "interface-name", "xe0/0/0"); + Vertex pnfint = graph.addVertex(T.label, "p-interface", T.id, "12", "aai-node-type", + "p-interface", "interface-name", "ge0/0/0"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, pserver, complex); + rules.addEdge(g, pnf, complex); + rules.addEdge(g, vnf, pserver); + rules.addTreeEdge(g, pserver, pserverint); + rules.addTreeEdge(g, pnf, pnfint); + + expectedResult.add(complex); + expectedResult.add(pserver); + // expectedResult.add(pnf); + + } - @Test - public void run() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", "physical-location-id", "clli"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", "hostname", "pservername"); - Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "11", "aai-node-type", "pnf", "pnf-name", "pnfname"); - Vertex vnf = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", "generic-vnf", "vnf-id", "vnfuuid"); - Vertex pserverint = graph.addVertex(T.label, "p-interface", T.id, "2", "aai-node-type", "p-interface", "interface-name", "xe0/0/0"); - Vertex pnfint = graph.addVertex(T.label, "p-interface", T.id, "12", "aai-node-type", "p-interface", "interface-name", "ge0/0/0"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, pserver, complex); - rules.addEdge(g, pnf, complex); - rules.addEdge(g, vnf, pserver); - rules.addTreeEdge(g, pserver, pserverint); - rules.addTreeEdge(g, pnf, pnfint); - - expectedResult.add(complex); - expectedResult.add(pserver); - //expectedResult.add(pnf); - - } + @Override + protected String getQueryName() { + return "ucpe-instance"; + } - @Override - protected String getQueryName() { - return "ucpe-instance"; - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("hostname", "pservername"); + // g.has("pnf-name", "pnfname"); + } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("hostname", "pservername"); - //g.has("pnf-name", "pnfname"); - } + @Override + protected void addParam(Map<String, Object> params) { + return; - @Override - protected void addParam(Map<String, Object> params) { - return; - - } + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeTopologyQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeTopologyQueryTest.java index 4503717..cf2b1c7 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeTopologyQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeTopologyQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,96 +27,114 @@ import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Ignore; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class UcpeTopologyQueryTest extends QueryTest { - public UcpeTopologyQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //Set up the test graph - Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", "physical-location-id", "clli"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", "hostname", "pservername"); - Vertex pserverint1 = graph.addVertex(T.label, "p-interface", T.id, "2", "aai-node-type", "p-interface", "interface-name", "xe0/0/0"); - Vertex pserverint2 = graph.addVertex(T.label, "p-interface", T.id, "3", "aai-node-type", "p-interface", "interface-name", "xe0/0/0"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", "vserver-name", "vservername"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "5", "aai-node-type", "tenant", "tenant-id", "tenantuuid", "tenant-name", "tenantname"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "6", "aai-node-type", "cloud-region", "cloud-region-id", "clouduuid", "cloud-region-owner", "cloudOwnername"); - Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", "generic-vnf", "vnf-id", "vnf1uuid"); - Vertex vnf1image = graph.addVertex(T.label, "vnf-image", T.id, "8", "aai-node-type", "vnf-image", "att-uuid", "vnf1imageuuid"); - Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "9", "aai-node-type", "generic-vnf", "vnf-id", "vnf1uuid"); - Vertex vnf2image = graph.addVertex(T.label, "vnf-image", T.id, "10", "aai-node-type", "vnf-image", "att-uuid", "vnf2imageuuid"); - Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "11", "aai-node-type", "pnf", "pnf-name", "pnf1name"); - Vertex pnfint = graph.addVertex(T.label, "p-interface", T.id, "12", "aai-node-type", "p-interface", "interface-name", "ge0/0/0"); - Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "13", "aai-node-type", "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); - Vertex servinst1 = graph.addVertex(T.label, "service-instance", T.id, "14", "aai-node-type", "service-instance", "service-instance-id", "servinst1uuid"); - Vertex servsub1 = graph.addVertex(T.label, "service-subscription", T.id, "15", "aai-node-type", "service-subscription", "service-type", "servType1"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "16", "aai-node-type", "customer", "global-customer-id", "custuuid"); - Vertex servinst2 = graph.addVertex(T.label, "service-instance", T.id, "17", "aai-node-type", "service-instance", "service-instance-id", "servinst2uuid"); - Vertex servsub2 = graph.addVertex(T.label, "service-subscription", T.id, "18", "aai-node-type", "service-subscription", "service-type", "servType2"); + public UcpeTopologyQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // Set up the test graph + Vertex complex = graph.addVertex(T.label, "complex", T.id, "0", "aai-node-type", "complex", + "physical-location-id", "clli"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", + "hostname", "pservername"); + Vertex pserverint1 = graph.addVertex(T.label, "p-interface", T.id, "2", "aai-node-type", + "p-interface", "interface-name", "xe0/0/0"); + Vertex pserverint2 = graph.addVertex(T.label, "p-interface", T.id, "3", "aai-node-type", + "p-interface", "interface-name", "xe0/0/0"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", + "vserver-name", "vservername"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "5", "aai-node-type", "tenant", + "tenant-id", "tenantuuid", "tenant-name", "tenantname"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "6", "aai-node-type", + "cloud-region", "cloud-region-id", "clouduuid", "cloud-region-owner", "cloudOwnername"); + Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", + "generic-vnf", "vnf-id", "vnf1uuid"); + Vertex vnf1image = graph.addVertex(T.label, "vnf-image", T.id, "8", "aai-node-type", + "vnf-image", "att-uuid", "vnf1imageuuid"); + Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "9", "aai-node-type", + "generic-vnf", "vnf-id", "vnf1uuid"); + Vertex vnf2image = graph.addVertex(T.label, "vnf-image", T.id, "10", "aai-node-type", + "vnf-image", "att-uuid", "vnf2imageuuid"); + Vertex pnf = graph.addVertex(T.label, "pnf", T.id, "11", "aai-node-type", "pnf", "pnf-name", + "pnf1name"); + Vertex pnfint = graph.addVertex(T.label, "p-interface", T.id, "12", "aai-node-type", + "p-interface", "interface-name", "ge0/0/0"); + Vertex plink1 = graph.addVertex(T.label, "physical-link", T.id, "13", "aai-node-type", + "physical-link", "link-name", "ge0/0/0-to-xe0/0/0"); + Vertex servinst1 = graph.addVertex(T.label, "service-instance", T.id, "14", "aai-node-type", + "service-instance", "service-instance-id", "servinst1uuid"); + Vertex servsub1 = graph.addVertex(T.label, "service-subscription", T.id, "15", + "aai-node-type", "service-subscription", "service-type", "servType1"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "16", "aai-node-type", + "customer", "global-customer-id", "custuuid"); + Vertex servinst2 = graph.addVertex(T.label, "service-instance", T.id, "17", "aai-node-type", + "service-instance", "service-instance-id", "servinst2uuid"); + Vertex servsub2 = graph.addVertex(T.label, "service-subscription", T.id, "18", + "aai-node-type", "service-subscription", "service-type", "servType2"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, pserver, complex); + rules.addTreeEdge(g, pserver, pserverint1); + rules.addTreeEdge(g, pserver, pserverint2); + rules.addEdge(g, pnf, complex); + rules.addTreeEdge(g, pnf, pnfint); + rules.addEdge(g, pserverint1, plink1); + rules.addEdge(g, pnfint, plink1); + rules.addEdge(g, vserver, pserver); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addEdge(g, pserver, vnf1); + rules.addEdge(g, vserver, vnf2); + rules.addEdge(g, vnf1, vnf1image); + rules.addEdge(g, vnf2, vnf2image); + rules.addEdge(g, vnf1, servinst1); + rules.addTreeEdge(g, servinst1, servsub1); + rules.addTreeEdge(g, servsub1, customer); + rules.addEdge(g, vnf2, servinst2); + rules.addTreeEdge(g, servinst2, servsub2); + rules.addTreeEdge(g, servsub2, customer); + + expectedResult.add(pnf); + expectedResult.add(complex); + expectedResult.add(pnfint); + expectedResult.add(pserver); + expectedResult.add(pserverint1); + expectedResult.add(plink1); + expectedResult.add(vnf1); + expectedResult.add(vnf1image); + expectedResult.add(vnf2); + expectedResult.add(vnf2image); + expectedResult.add(servinst1); + expectedResult.add(servinst2); + expectedResult.add(servsub1); + expectedResult.add(servsub2); + expectedResult.add(customer); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, pserver, complex); - rules.addTreeEdge(g, pserver, pserverint1); - rules.addTreeEdge(g, pserver, pserverint2); - rules.addEdge(g, pnf, complex); - rules.addTreeEdge(g, pnf, pnfint); - rules.addEdge(g, pserverint1, plink1); - rules.addEdge(g, pnfint, plink1); - rules.addEdge(g, vserver, pserver); - rules.addTreeEdge(g, vserver, tenant); - rules.addTreeEdge(g, tenant, cloudregion); - rules.addEdge(g, pserver, vnf1); - rules.addEdge(g, vserver, vnf2); - rules.addEdge(g, vnf1, vnf1image); - rules.addEdge(g, vnf2, vnf2image); - rules.addEdge(g, vnf1, servinst1); - rules.addTreeEdge(g, servinst1, servsub1); - rules.addTreeEdge(g, servsub1, customer); - rules.addEdge(g, vnf2, servinst2); - rules.addTreeEdge(g, servinst2, servsub2); - rules.addTreeEdge(g, servsub2, customer); + } - expectedResult.add(pnf); - expectedResult.add(complex); - expectedResult.add(pnfint); - expectedResult.add(pserver); - expectedResult.add(pserverint1); - expectedResult.add(plink1); - expectedResult.add(vnf1); - expectedResult.add(vnf1image); - expectedResult.add(vnf2); - expectedResult.add(vnf2image); - expectedResult.add(servinst1); - expectedResult.add(servinst2); - expectedResult.add(servsub1); - expectedResult.add(servsub2); - expectedResult.add(customer); + @Override + protected String getQueryName() { + return "ucpe-topology"; + } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("hostname", "pservername"); + } - } - @Override - protected String getQueryName() { - return "ucpe-topology"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("hostname", "pservername"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VfModuleFromServiceInstanceTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VfModuleFromServiceInstanceTest.java index 0d2d11a..9124821 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VfModuleFromServiceInstanceTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VfModuleFromServiceInstanceTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,7 +19,6 @@ */ package org.onap.aai.rest.search; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -32,53 +31,58 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VfModuleFromServiceInstanceTest extends QueryTest { - public VfModuleFromServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void test() { - super.run(); - } - - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "0", "aai-node-type", "service-instance", "service-instance-id", "s-instance-id1"); - Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "2", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-0", "vf-module-name", "vf-module-name0"); - - Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-0", "vnf-name", "vnf-name-0"); - - - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "10", "aai-node-type", "service-instance", "service-instance-id", "s-instance-id11"); - Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "12", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-01", "vf-module-name", "vf-module-name01"); - - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "11", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-01", "vnf-name", "vnf-name-01"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, serviceinstance, gnvf); - rules.addTreeEdge(g, gnvf, vfmodule); - - rules.addEdge(g, serviceinstance1, gnvf1); //false - rules.addTreeEdge(g, gnvf1, vfmodule1); //false - - expectedResult.add(vfmodule); - - } - - @Override - protected String getQueryName() { - return "vfModule-fromServiceInstance"; - } - - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "s-instance-id1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + public VfModuleFromServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void test() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "0", + "aai-node-type", "service-instance", "service-instance-id", "s-instance-id1"); + Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "2", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-0", "vf-module-name", "vf-module-name0"); + + Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-0", "vnf-name", "vnf-name-0"); + + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "10", + "aai-node-type", "service-instance", "service-instance-id", "s-instance-id11"); + Vertex vfmodule1 = graph.addVertex(T.label, "vf-module", T.id, "12", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-01", "vf-module-name", "vf-module-name01"); + + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "11", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-01", "vnf-name", "vnf-name-01"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, serviceinstance, gnvf); + rules.addTreeEdge(g, gnvf, vfmodule); + + rules.addEdge(g, serviceinstance1, gnvf1); // false + rules.addTreeEdge(g, gnvf1, vfmodule1); // false + + expectedResult.add(vfmodule); + + } + + @Override + protected String getQueryName() { + return "vfModule-fromServiceInstance"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "service-instance").has("service-instance-id", "s-instance-id1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfInstancesFromServiceInstancebyModelVersionTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfInstancesFromServiceInstancebyModelVersionTest.java index 03b4998..cf1e39e 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfInstancesFromServiceInstancebyModelVersionTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfInstancesFromServiceInstancebyModelVersionTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,54 +30,72 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VnfInstancesFromServiceInstancebyModelVersionTest extends QueryTest { - public VnfInstancesFromServiceInstancebyModelVersionTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //Set up the test graph - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", "service-subscription", "service-subscription-id", "service-subscription-id-1","service-subscription-name","service-subscription-name1"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); - - Vertex model1 = graph.addVertex(T.label, "model", T.id, "4", "aai-node-type", "model", "model-invariant-id", "modinvariant-id1", "model-type", "modtype"); - Vertex modelver1 = graph.addVertex(T.label, "model-ver", T.id, "5", "aai-node-type", "model-ver", "model-version-id", "modver-id1", "model-name", "modname1", "model-version", "v1.0"); - Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1", "vnf-name", "vnfname1", "vnf-type", "vnftype1", "model-invariant-id-local", "modinvariant-id1", "model-version-id-local", "modver-id1"); - -// Vertex model2 = graph.addVertex(T.label, "model", T.id, "7", "aai-node-type", "model", "model-invariant-id", "modinvariant-id2", "model-type", "modtype"); -// Vertex modelver2 = graph.addVertex(T.label, "model-ver", T.id, "8", "aai-node-type", "model-ver", "model-version-id", "modver-id2", "model-name", "modname2", "model-version", "v1.0"); - Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "9", "aai-node-type", "generic-vnf", "vnf-id", "vnfid2", "vnf-name", "vnfname2", "vnf-type", "vnftype2", "model-invariant-id-local", "modinvariant-id1", "model-version-id-local", "modver-id1"); + public VnfInstancesFromServiceInstancebyModelVersionTest() + throws AAIException, NoEdgeRuleFoundException { + super(); + } - - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, model1, modelver1);//true - rules.addEdge(g, vnf1, serviceinstance);//true - rules.addEdge(g, vnf2, serviceinstance);//false - rules.addTreeEdge(g, serviceinstance, servicesubscription);//true - rules.addTreeEdge(g, servicesubscription, customer);//true - - expectedResult.add(vnf1); + @Test + public void run() { + super.run(); + } - } - @Override - protected String getQueryName() { - return "vnf-instances-fromServiceInstancebyModelVersion"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "service-instance-id-1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - params.put("vnfType", "vnftype1"); - params.put("modelVersionId", "modver-id1"); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // Set up the test graph + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-subscription-id", + "service-subscription-id-1", "service-subscription-name", "service-subscription-name1"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", + "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); + + Vertex model1 = graph.addVertex(T.label, "model", T.id, "4", "aai-node-type", "model", + "model-invariant-id", "modinvariant-id1", "model-type", "modtype"); + Vertex modelver1 = graph.addVertex(T.label, "model-ver", T.id, "5", "aai-node-type", + "model-ver", "model-version-id", "modver-id1", "model-name", "modname1", + "model-version", "v1.0"); + Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid1", "vnf-name", "vnfname1", "vnf-type", "vnftype1", + "model-invariant-id-local", "modinvariant-id1", "model-version-id-local", "modver-id1"); + + // Vertex model2 = graph.addVertex(T.label, "model", T.id, "7", "aai-node-type", "model", + // "model-invariant-id", "modinvariant-id2", "model-type", "modtype"); + // Vertex modelver2 = graph.addVertex(T.label, "model-ver", T.id, "8", "aai-node-type", + // "model-ver", "model-version-id", "modver-id2", "model-name", "modname2", "model-version", + // "v1.0"); + Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "9", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid2", "vnf-name", "vnfname2", "vnf-type", "vnftype2", + "model-invariant-id-local", "modinvariant-id1", "model-version-id-local", "modver-id1"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, model1, modelver1);// true + rules.addEdge(g, vnf1, serviceinstance);// true + rules.addEdge(g, vnf2, serviceinstance);// false + rules.addTreeEdge(g, serviceinstance, servicesubscription);// true + rules.addTreeEdge(g, servicesubscription, customer);// true + + expectedResult.add(vnf1); + + } + + @Override + protected String getQueryName() { + return "vnf-instances-fromServiceInstancebyModelVersion"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "service-instance").has("service-instance-id", + "service-instance-id-1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("vnfType", "vnftype1"); + params.put("modelVersionId", "modver-id1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfSummaryFromVnfTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfSummaryFromVnfTest.java index c5dcf57..7cdbe72 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfSummaryFromVnfTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfSummaryFromVnfTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,86 +26,104 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VnfSummaryFromVnfTest extends QueryTest { - public VnfSummaryFromVnfTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public VnfSummaryFromVnfTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", + "generic-vnf", "vnf-id", "vnfId1", "vnf-name", "vnf-name-1", "vnf-type", "vnfType1"); + Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", + "generic-vnf", "vnf-id", "vnfId2", "vnf-name", "vnf-name-2", "vnf-type", "vnfType2"); + Vertex platform = graph.addVertex(T.label, "platform", T.id, "3", "aai-node-type", + "platform", "platform-name", "platform-name-1"); + Vertex platform2 = graph.addVertex(T.label, "platform", T.id, "4", "aai-node-type", + "platform", "platform-name", "platform-name-2"); + Vertex lineofbus = graph.addVertex(T.label, "line-of-business", T.id, "5", "aai-node-type", + "line-of-business", "line-of-business-name", "line-of-business-name-1"); + Vertex lineofbus2 = graph.addVertex(T.label, "line-of-business", T.id, "6", "aai-node-type", + "line-of-business", "line-of-business-name", "line-of-business-name-2"); + Vertex serviceinst = graph.addVertex(T.label, "service-instance", T.id, "7", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1"); + Vertex serviceinst2 = graph.addVertex(T.label, "service-instance", T.id, "8", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2"); + Vertex owningent = graph.addVertex(T.label, "owning-entity", T.id, "9", "aai-node-type", + "owning-entity", "owning-entity-id", "owning-entity-id-1"); + Vertex owningent2 = graph.addVertex(T.label, "owning-entity", T.id, "10", "aai-node-type", + "owning-entity", "owning-entity-id", "owning-entity-id-2"); + Vertex project = graph.addVertex(T.label, "project", T.id, "11", "aai-node-type", "project", + "project-name", "project-name-1"); + Vertex project2 = graph.addVertex(T.label, "project", T.id, "12", "aai-node-type", + "project", "project-name", "project-name-2"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "13", "aai-node-type", "pserver", + "hostname", "hostname-1"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", + "pserver", "hostname", "hostname-2"); + Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "15", "aai-node-type", + "pserver", "hostname", "hostname-2"); + Vertex pserver4 = graph.addVertex(T.label, "pserver", T.id, "16", "aai-node-type", + "pserver", "hostname", "hostname-2"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "17", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "18", "aai-node-type", + "vserver", "vserver-id", "vserver-id-2"); - //Set up the test graph - Vertex genericvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnfId1", "vnf-name", "vnf-name-1", "vnf-type", "vnfType1"); - Vertex genericvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "vnfId2", "vnf-name", "vnf-name-2", "vnf-type", "vnfType2"); - Vertex platform = graph.addVertex(T.label, "platform", T.id, "3", "aai-node-type", "platform", "platform-name", "platform-name-1"); - Vertex platform2 = graph.addVertex(T.label, "platform", T.id, "4", "aai-node-type", "platform", "platform-name", "platform-name-2"); - Vertex lineofbus = graph.addVertex(T.label, "line-of-business", T.id, "5", "aai-node-type", "line-of-business", "line-of-business-name", "line-of-business-name-1"); - Vertex lineofbus2 = graph.addVertex(T.label, "line-of-business", T.id, "6", "aai-node-type", "line-of-business", "line-of-business-name", "line-of-business-name-2"); - Vertex serviceinst = graph.addVertex(T.label, "service-instance", T.id, "7", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1"); - Vertex serviceinst2 = graph.addVertex(T.label, "service-instance", T.id, "8", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2"); - Vertex owningent = graph.addVertex(T.label, "owning-entity", T.id, "9", "aai-node-type", "owning-entity", "owning-entity-id", "owning-entity-id-1"); - Vertex owningent2 = graph.addVertex(T.label, "owning-entity", T.id, "10", "aai-node-type", "owning-entity", "owning-entity-id", "owning-entity-id-2"); - Vertex project = graph.addVertex(T.label, "project", T.id, "11", "aai-node-type", "project", "project-name", "project-name-1"); - Vertex project2 = graph.addVertex(T.label, "project", T.id, "12", "aai-node-type", "project", "project-name", "project-name-2"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "13", "aai-node-type", "pserver", "hostname", "hostname-1"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", "pserver", "hostname", "hostname-2"); - Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "15", "aai-node-type", "pserver", "hostname", "hostname-2"); - Vertex pserver4 = graph.addVertex(T.label, "pserver", T.id, "16", "aai-node-type", "pserver", "hostname", "hostname-2"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "17", "aai-node-type", "vserver", "vserver-id", "vserver-id-1"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "18", "aai-node-type", "vserver", "vserver-id", "vserver-id-2"); + GraphTraversalSource g = graph.traversal(); - GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, genericvnf1, platform); + rules.addEdge(g, genericvnf1, lineofbus); + rules.addEdge(g, genericvnf1, serviceinst); + rules.addEdge(g, serviceinst, owningent); + rules.addEdge(g, serviceinst, project); + rules.addEdge(g, genericvnf1, pserver); + rules.addEdge(g, genericvnf1, vserver); + rules.addEdge(g, vserver, pserver2); - rules.addEdge(g, genericvnf1, platform); - rules.addEdge(g, genericvnf1, lineofbus); - rules.addEdge(g, genericvnf1, serviceinst); - rules.addEdge(g, serviceinst, owningent); - rules.addEdge(g, serviceinst, project); - rules.addEdge(g, genericvnf1, pserver); - rules.addEdge(g, genericvnf1, vserver); - rules.addEdge(g, vserver, pserver2); + rules.addEdge(g, genericvnf2, platform2);// false + rules.addEdge(g, genericvnf2, lineofbus2);// false + rules.addEdge(g, genericvnf2, serviceinst2);// false + rules.addEdge(g, serviceinst2, owningent2);// false + rules.addEdge(g, serviceinst2, project2);// false + rules.addEdge(g, genericvnf2, pserver3);// false + rules.addEdge(g, genericvnf2, vserver2);// false + rules.addEdge(g, vserver2, pserver4);// false - rules.addEdge(g, genericvnf2, platform2);//false - rules.addEdge(g, genericvnf2, lineofbus2);//false - rules.addEdge(g, genericvnf2, serviceinst2);//false - rules.addEdge(g, serviceinst2, owningent2);//false - rules.addEdge(g, serviceinst2, project2);//false - rules.addEdge(g, genericvnf2, pserver3);//false - rules.addEdge(g, genericvnf2, vserver2);//false - rules.addEdge(g, vserver2, pserver4);//false + expectedResult.add(genericvnf1); + expectedResult.add(platform); + expectedResult.add(lineofbus); + expectedResult.add(serviceinst); + expectedResult.add(owningent); + expectedResult.add(project); + expectedResult.add(pserver); + expectedResult.add(vserver); + expectedResult.add(pserver2); - expectedResult.add(genericvnf1); - expectedResult.add(platform); - expectedResult.add(lineofbus); - expectedResult.add(serviceinst); - expectedResult.add(owningent); - expectedResult.add(project); - expectedResult.add(pserver); - expectedResult.add(vserver); - expectedResult.add(pserver2); + } - } + @Override + protected String getQueryName() { + return "vnf-summary-fromVnf"; + } - @Override - protected String getQueryName() { - return "vnf-summary-fromVnf"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("vnf-name","vnf-name-1"); - } + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("vnf-name", "vnf-name-1"); + } - @Override - protected void addParam(Map<String, Object> params) { - return; - } -}
\ No newline at end of file + @Override + protected void addParam(Map<String, Object> params) { + return; + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfToEsrSystemInfoQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfToEsrSystemInfoQueryTest.java index 0e82c0b..2d33395 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfToEsrSystemInfoQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfToEsrSystemInfoQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,67 +30,76 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VnfToEsrSystemInfoQueryTest extends OnapQueryTest { - public VnfToEsrSystemInfoQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public VnfToEsrSystemInfoQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vserver-id-1","vserver-name","vserver-name-1"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", "tenant-id", "tenantid01", "tenant-name", "tenantName01"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); - Vertex esr = graph.addVertex(T.label, "esr-system-info", T.id, "6", "aai-node-type", "esr-system-info", "esr-system-info-id", "esr-system-info-1"); - - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-2"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "9", "aai-node-type", "vserver", "vserver-id", "vserver-id-2","vserver-name","vserver-name-2"); - Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "10", "aai-node-type", "tenant", "tenant-id", "tenantid02", "tenant-name", "tenantName02"); - Vertex cloudregion1 = graph.addVertex(T.label, "cloud-region", T.id, "11", "aai-node-type", "cloud-region", "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2"); - Vertex esr1 = graph.addVertex(T.label, "esr-system-info", T.id, "12", "aai-node-type", "esr-system-info", "esr-system-info-id", "esr-system-info-2"); - - - - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, gnvf, vserver); - rules.addTreeEdge(g, vserver,tenant); - rules.addTreeEdge(g, tenant,cloudregion); - rules.addTreeEdge(g, cloudregion, esr); - - //Not expected in result - rules.addEdge(g, gnvf1, vserver1); - rules.addTreeEdge(g, vserver1,tenant1); - rules.addTreeEdge(g, tenant1,cloudregion1); - rules.addTreeEdge(g, cloudregion1, esr1); - //Not expected in result - - expectedResult.add(gnvf); - expectedResult.add(vserver); - expectedResult.add(tenant); - expectedResult.add(cloudregion); - expectedResult.add(esr); - - - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - @Override - protected String getQueryName() { - return "vnf-to-esr-system-info"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("vnf-id", "vnf-id-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + Vertex gnvf = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "4", "aai-node-type", "tenant", + "tenant-id", "tenantid01", "tenant-name", "tenantName01"); + Vertex cloudregion = + graph.addVertex(T.label, "cloud-region", T.id, "5", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-1", "cloud-region-owner", "cloud-owner-name-1"); + Vertex esr = graph.addVertex(T.label, "esr-system-info", T.id, "6", "aai-node-type", + "esr-system-info", "esr-system-info-id", "esr-system-info-1"); + + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-2"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "9", "aai-node-type", "vserver", + "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2"); + Vertex tenant1 = graph.addVertex(T.label, "tenant", T.id, "10", "aai-node-type", "tenant", + "tenant-id", "tenantid02", "tenant-name", "tenantName02"); + Vertex cloudregion1 = + graph.addVertex(T.label, "cloud-region", T.id, "11", "aai-node-type", "cloud-region", + "cloud-region-id", "cloud-region-id-2", "cloud-region-owner", "cloud-owner-name-2"); + Vertex esr1 = graph.addVertex(T.label, "esr-system-info", T.id, "12", "aai-node-type", + "esr-system-info", "esr-system-info-id", "esr-system-info-2"); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, gnvf, vserver); + rules.addTreeEdge(g, vserver, tenant); + rules.addTreeEdge(g, tenant, cloudregion); + rules.addTreeEdge(g, cloudregion, esr); + + // Not expected in result + rules.addEdge(g, gnvf1, vserver1); + rules.addTreeEdge(g, vserver1, tenant1); + rules.addTreeEdge(g, tenant1, cloudregion1); + rules.addTreeEdge(g, cloudregion1, esr1); + // Not expected in result + + expectedResult.add(gnvf); + expectedResult.add(vserver); + expectedResult.add(tenant); + expectedResult.add(cloudregion); + expectedResult.add(esr); + + } + + @Override + protected String getQueryName() { + return "vnf-to-esr-system-info"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("vnf-id", "vnf-id-1"); + + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfToServiceInstanceQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfToServiceInstanceQueryTest.java index dfd36b7..6a83c36 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfToServiceInstanceQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfToServiceInstanceQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,46 +30,54 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VnfToServiceInstanceQueryTest extends QueryTest { - public VnfToServiceInstanceQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //Set up the test graph - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "2", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", "service-instance-name", "service-instance-name-2"); - - Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1", "vnf-name", "vnfname1", "vnf-type", "vnftype1"); - Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", "generic-vnf", "vnf-id", "vnfid2", "vnf-name", "vnfname2", "vnf-type", "vnftype1"); - - GraphTraversalSource g = graph.traversal(); + public VnfToServiceInstanceQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - rules.addEdge(g, vnf1, serviceinstance1);//true - rules.addEdge(g, vnf2, serviceinstance1); + @Test + public void run() { + super.run(); + } - expectedResult.add(vnf1); - expectedResult.add(serviceinstance1); - expectedResult.add(vnf2); + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - } - @Override - protected String getQueryName() { - return "vnf-to-service-instance"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("vnf-id", "vnfid1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + // Set up the test graph + Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "2", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", + "service-instance-name", "service-instance-name-2"); + + Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid1", "vnf-name", "vnfname1", "vnf-type", "vnftype1"); + Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid2", "vnf-name", "vnfname2", "vnf-type", "vnftype1"); + + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, vnf1, serviceinstance1);// true + rules.addEdge(g, vnf2, serviceinstance1); + + expectedResult.add(vnf1); + expectedResult.add(serviceinstance1); + expectedResult.add(vnf2); + + } + + @Override + protected String getQueryName() { + return "vnf-to-service-instance"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("vnf-id", "vnfid1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromServiceInstanceTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromServiceInstanceTest.java index 5d593dc..aa9cc34 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromServiceInstanceTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromServiceInstanceTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -34,8 +34,8 @@ public class VnfTopologyFromServiceInstanceTest extends QueryTest { public VnfTopologyFromServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { super(); } - - @Ignore //TODO: Fix this when verification uses correct schema + + @Ignore // TODO: Fix this when verification uses correct schema @Test public void run() { super.run(); @@ -43,64 +43,113 @@ public class VnfTopologyFromServiceInstanceTest extends QueryTest { @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", "service-subscription", "service-subscription-id", "service-subscription-id-1","service-subscription-name","service-subscription-name1"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); - Vertex allottedresource = graph.addVertex(T.label, "allotted-resource", T.id, "4", "aai-node-type", "allotted-resource", "allotted-resource-id", "allotted-resource-id-1", "allotted-resource-name", "allotted-resource-name1"); - Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "5", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); - Vertex volumegroup = graph.addVertex(T.label, "volume-group", T.id, "6", "aai-node-type", "volume-group", "volume-group-id", "volume-group-id-1", "volume-group-name", "volume-group-name1"); - Vertex linter1 = graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "8", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address-list-id", "l3-interface-ipv4-address-list-id-1", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-1", "l3-network-name", "l3-network-name1"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "10", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-1", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", "vserver-name1", "vservername1"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "12", "aai-node-type", "tenant", "tenant-name1", "tenant-name-1","tenant-id", "tenant-id-1"); - Vertex region1 = graph.addVertex(T.label, "cloud-region", T.id, "13", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner1"); - Vertex range1 = graph.addVertex(T.label, "vlan-range", T.id, "26", "aai-node-type", "vlan-range", "vlan-range-id", "vlanRange1"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", "pserver", "hostname", "pservername"); - Vertex linter2 = graph.addVertex(T.label, "l-interface", T.id, "15", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); - Vertex l3inter2ipv4addresslist = graph.addVertex(T.label, "interface-ipv6-address-list", T.id, "16", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); - Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "17", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-2", "l3-network-name", "l3-network-name2"); - Vertex l3inter2ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "18", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); - Vertex l3network3 = graph.addVertex(T.label, "l3-network", T.id, "19", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-3", "l3-network-name", "l3-network-name3"); - Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "20", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-4", "l3-network-name", "l3-network-name4"); - Vertex l3network5 = graph.addVertex(T.label, "l3-network", T.id, "23", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-5", "l3-network-name", "l3-network-name5"); - Vertex l3network6 = graph.addVertex(T.label, "l3-network", T.id, "24", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-6", "l3-network-name", "l3-network-name6"); - Vertex configuration = graph.addVertex(T.label, "configuration", T.id, "21", "aai-node-type", "configuration", "configuration-id", "configuration-id-1", "configuration-type", "configuration-type-1"); - Vertex vlantag = graph.addVertex(T.label, "vlan-tag", T.id, "22", "aai-node-type", "vlan-tag", "vlan-tag-id", "vlan-tag-id-1"); - Vertex region2 = graph.addVertex(T.label, "cloud-region", T.id, "28", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner2"); - Vertex range2 = graph.addVertex(T.label, "vlan-range", T.id, "29", "aai-node-type", "vlan-range", "vlan-range-id", "vlanRange2"); - Vertex vlantag2 = graph.addVertex(T.label, "vlan-tag", T.id, "25", "aai-node-type", "vlan-tag", "vlan-tag-id", "vlan-tag-id-2"); - + // Set up the test graph + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-subscription-id", + "service-subscription-id-1", "service-subscription-name", "service-subscription-name1"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", + "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); + Vertex allottedresource = graph.addVertex(T.label, "allotted-resource", T.id, "4", + "aai-node-type", "allotted-resource", "allotted-resource-id", "allotted-resource-id-1", + "allotted-resource-name", "allotted-resource-name1"); + Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "5", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); + Vertex volumegroup = + graph.addVertex(T.label, "volume-group", T.id, "6", "aai-node-type", "volume-group", + "volume-group-id", "volume-group-id-1", "volume-group-name", "volume-group-name1"); + Vertex linter1 = + graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "8", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address-list-id", "l3-interface-ipv4-address-list-id-1", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); + Vertex l3network1 = + graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-1", "l3-network-name", "l3-network-name1"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "10", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-1", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", + "vserver-name1", "vservername1"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "12", "aai-node-type", "tenant", + "tenant-name1", "tenant-name-1", "tenant-id", "tenant-id-1"); + Vertex region1 = graph.addVertex(T.label, "cloud-region", T.id, "13", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner1"); + Vertex range1 = graph.addVertex(T.label, "vlan-range", T.id, "26", "aai-node-type", + "vlan-range", "vlan-range-id", "vlanRange1"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", "pserver", + "hostname", "pservername"); + Vertex linter2 = + graph.addVertex(T.label, "l-interface", T.id, "15", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); + Vertex l3inter2ipv4addresslist = graph.addVertex(T.label, "interface-ipv6-address-list", + T.id, "16", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); + Vertex l3network2 = + graph.addVertex(T.label, "l3-network", T.id, "17", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-2", "l3-network-name", "l3-network-name2"); + Vertex l3inter2ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "18", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); + Vertex l3network3 = + graph.addVertex(T.label, "l3-network", T.id, "19", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-3", "l3-network-name", "l3-network-name3"); + Vertex l3network4 = + graph.addVertex(T.label, "l3-network", T.id, "20", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-4", "l3-network-name", "l3-network-name4"); + Vertex l3network5 = + graph.addVertex(T.label, "l3-network", T.id, "23", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-5", "l3-network-name", "l3-network-name5"); + Vertex l3network6 = + graph.addVertex(T.label, "l3-network", T.id, "24", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-6", "l3-network-name", "l3-network-name6"); + Vertex configuration = graph.addVertex(T.label, "configuration", T.id, "21", + "aai-node-type", "configuration", "configuration-id", "configuration-id-1", + "configuration-type", "configuration-type-1"); + Vertex vlantag = graph.addVertex(T.label, "vlan-tag", T.id, "22", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlan-tag-id-1"); + Vertex region2 = graph.addVertex(T.label, "cloud-region", T.id, "28", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner2"); + Vertex range2 = graph.addVertex(T.label, "vlan-range", T.id, "29", "aai-node-type", + "vlan-range", "vlan-range-id", "vlanRange2"); + Vertex vlantag2 = graph.addVertex(T.label, "vlan-tag", T.id, "25", "aai-node-type", + "vlan-tag", "vlan-tag-id", "vlan-tag-id-2"); GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, gnvf1, serviceinstance);//false - rules.addTreeEdge(g, serviceinstance, servicesubscription);//true - rules.addTreeEdge(g, servicesubscription, customer);//true - rules.addTreeEdge(g, serviceinstance, allottedresource);//true - rules.addEdge(g, serviceinstance, configuration);//true - rules.addTreeEdge(g, gnvf1, vfmodule);//true - rules.addEdge(g, gnvf1, volumegroup);//false - rules.addEdge(g, gnvf1, l3network5);//true - rules.addEdge(g, l3network5, vlantag, "org.onap.relationships.inventory.Uses");//true - rules.addEdge(g, l3network5, l3network6);//true - rules.addEdge(g, l3network6, vlantag2, "org.onap.relationships.inventory.Uses");//true - rules.addTreeEdge(g, gnvf1, linter1);//true - rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);//true - rules.addEdge(g, l3inter1ipv4addresslist, l3network1);//false - rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);//true - rules.addEdge(g, l3inter1ipv6addresslist, l3network2);//false - rules.addEdge(g, gnvf1, vserver);//false - rules.addTreeEdge(g, vserver, tenant);//true - rules.addTreeEdge(g, tenant, region1);//true - rules.addEdge(g, vserver, pserver);//false - rules.addTreeEdge(g, vserver, linter2);//false - rules.addTreeEdge(g, linter2, l3inter2ipv4addresslist);//false - rules.addEdge(g, l3inter2ipv4addresslist, l3network3);//false - rules.addTreeEdge(g, linter2, l3inter2ipv6addresslist);//true - rules.addEdge(g, l3inter2ipv6addresslist, l3network4);//true + rules.addEdge(g, gnvf1, serviceinstance);// false + rules.addTreeEdge(g, serviceinstance, servicesubscription);// true + rules.addTreeEdge(g, servicesubscription, customer);// true + rules.addTreeEdge(g, serviceinstance, allottedresource);// true + rules.addEdge(g, serviceinstance, configuration);// true + rules.addTreeEdge(g, gnvf1, vfmodule);// true + rules.addEdge(g, gnvf1, volumegroup);// false + rules.addEdge(g, gnvf1, l3network5);// true + rules.addEdge(g, l3network5, vlantag, "org.onap.relationships.inventory.Uses");// true + rules.addEdge(g, l3network5, l3network6);// true + rules.addEdge(g, l3network6, vlantag2, "org.onap.relationships.inventory.Uses");// true + rules.addTreeEdge(g, gnvf1, linter1);// true + rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);// true + rules.addEdge(g, l3inter1ipv4addresslist, l3network1);// false + rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);// true + rules.addEdge(g, l3inter1ipv6addresslist, l3network2);// false + rules.addEdge(g, gnvf1, vserver);// false + rules.addTreeEdge(g, vserver, tenant);// true + rules.addTreeEdge(g, tenant, region1);// true + rules.addEdge(g, vserver, pserver);// false + rules.addTreeEdge(g, vserver, linter2);// false + rules.addTreeEdge(g, linter2, l3inter2ipv4addresslist);// false + rules.addEdge(g, l3inter2ipv4addresslist, l3network3);// false + rules.addTreeEdge(g, linter2, l3inter2ipv6addresslist);// true + rules.addEdge(g, l3inter2ipv6addresslist, l3network4);// true rules.addTreeEdge(g, region1, range1); rules.addTreeEdge(g, region2, range2); rules.addTreeEdge(g, range1, vlantag); @@ -134,13 +183,15 @@ public class VnfTopologyFromServiceInstanceTest extends QueryTest { @Override protected String getQueryName() { - return "vnf-topology-fromServiceInstance"; + return "vnf-topology-fromServiceInstance"; } + @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { g.has("service-instance-name", "service-instance-name-1"); } + @Override protected void addParam(Map<String, Object> params) { return; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromVfModuleTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromVfModuleTest.java index 4f1260e..54c45ca 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromVfModuleTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromVfModuleTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,7 +26,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; @@ -42,57 +41,93 @@ public class VnfTopologyFromVfModuleTest extends QueryTest { @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - - - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", "service-subscription", "service-subscription-id", "service-subscription-id-1","service-subscription-name","service-subscription-name1"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); - Vertex allottedresource = graph.addVertex(T.label, "allotted-resource", T.id, "4", "aai-node-type", "allotted-resource", "allotted-resource-id", "allotted-resource-id-1", "allotted-resource-name", "allotted-resource-name1"); - Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "5", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); - Vertex volumegroup = graph.addVertex(T.label, "volume-group", T.id, "6", "aai-node-type", "volume-group", "volume-group-id", "volume-group-id-1", "volume-group-name", "volume-group-name1"); - Vertex linter1 = graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "8", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address-list-id", "l3-interface-ipv4-address-list-id-1", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-1", "l3-network-name", "l3-network-name1"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "10", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-1", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", "vserver-name1", "vservername1"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "12", "aai-node-type", "tenant", "tenant-name1", "tenant-name-1","tenant-id", "tenant-id-1"); - Vertex region1 = graph.addVertex(T.label, "cloud-region", T.id, "13", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner1"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", "pserver", "hostname", "pservername"); - Vertex linter2 = graph.addVertex(T.label, "l-interface", T.id, "15", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); - Vertex l3inter2ipv4addresslist = graph.addVertex(T.label, "interface-ipv6-address-list", T.id, "16", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); - Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "17", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-2", "l3-network-name", "l3-network-name2"); - Vertex l3inter2ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "18", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); - Vertex l3network3 = graph.addVertex(T.label, "l3-network", T.id, "19", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-3", "l3-network-name", "l3-network-name3"); - Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "20", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-4", "l3-network-name", "l3-network-name4"); - Vertex vfmoduleStart = graph.addVertex(T.label, "vf-module", T.id, "21", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-2", "vf-module-name", "vf-module-name2"); - - + // Set up the test graph + + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-subscription-id", + "service-subscription-id-1", "service-subscription-name", "service-subscription-name1"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", + "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); + Vertex allottedresource = graph.addVertex(T.label, "allotted-resource", T.id, "4", + "aai-node-type", "allotted-resource", "allotted-resource-id", "allotted-resource-id-1", + "allotted-resource-name", "allotted-resource-name1"); + Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "5", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); + Vertex volumegroup = + graph.addVertex(T.label, "volume-group", T.id, "6", "aai-node-type", "volume-group", + "volume-group-id", "volume-group-id-1", "volume-group-name", "volume-group-name1"); + Vertex linter1 = + graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "8", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address-list-id", "l3-interface-ipv4-address-list-id-1", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); + Vertex l3network1 = + graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-1", "l3-network-name", "l3-network-name1"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "10", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-1", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", + "vserver-name1", "vservername1"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "12", "aai-node-type", "tenant", + "tenant-name1", "tenant-name-1", "tenant-id", "tenant-id-1"); + Vertex region1 = graph.addVertex(T.label, "cloud-region", T.id, "13", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner1"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", "pserver", + "hostname", "pservername"); + Vertex linter2 = + graph.addVertex(T.label, "l-interface", T.id, "15", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); + Vertex l3inter2ipv4addresslist = graph.addVertex(T.label, "interface-ipv6-address-list", + T.id, "16", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); + Vertex l3network2 = + graph.addVertex(T.label, "l3-network", T.id, "17", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-2", "l3-network-name", "l3-network-name2"); + Vertex l3inter2ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "18", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); + Vertex l3network3 = + graph.addVertex(T.label, "l3-network", T.id, "19", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-3", "l3-network-name", "l3-network-name3"); + Vertex l3network4 = + graph.addVertex(T.label, "l3-network", T.id, "20", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-4", "l3-network-name", "l3-network-name4"); + Vertex vfmoduleStart = graph.addVertex(T.label, "vf-module", T.id, "21", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-2", "vf-module-name", "vf-module-name2"); GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, gnvf1, vfmoduleStart);//true - rules.addEdge(g, gnvf1, serviceinstance);//false - rules.addTreeEdge(g, serviceinstance, servicesubscription);//true - rules.addTreeEdge(g, servicesubscription, customer);//true - rules.addTreeEdge(g, serviceinstance, allottedresource);//true - rules.addTreeEdge(g, gnvf1, vfmodule);//true - rules.addEdge(g, gnvf1, volumegroup);//false - rules.addTreeEdge(g, gnvf1, linter1);//true - rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);//true - rules.addEdge(g, l3inter1ipv4addresslist, l3network1);//false - rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);//true - rules.addEdge(g, l3inter1ipv6addresslist, l3network2);//false - rules.addEdge(g, gnvf1, vserver);//false - rules.addTreeEdge(g, vserver, tenant);//true - rules.addTreeEdge(g, tenant, region1);//true - rules.addEdge(g, vserver, pserver);//false - rules.addTreeEdge(g, vserver, linter2);//false - rules.addTreeEdge(g, linter2, l3inter2ipv4addresslist);//false - rules.addEdge(g, l3inter2ipv4addresslist, l3network3);//false - rules.addTreeEdge(g, linter2, l3inter2ipv6addresslist);//true - rules.addEdge(g, l3inter2ipv6addresslist, l3network4);//true - + rules.addTreeEdge(g, gnvf1, vfmoduleStart);// true + rules.addEdge(g, gnvf1, serviceinstance);// false + rules.addTreeEdge(g, serviceinstance, servicesubscription);// true + rules.addTreeEdge(g, servicesubscription, customer);// true + rules.addTreeEdge(g, serviceinstance, allottedresource);// true + rules.addTreeEdge(g, gnvf1, vfmodule);// true + rules.addEdge(g, gnvf1, volumegroup);// false + rules.addTreeEdge(g, gnvf1, linter1);// true + rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);// true + rules.addEdge(g, l3inter1ipv4addresslist, l3network1);// false + rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);// true + rules.addEdge(g, l3inter1ipv6addresslist, l3network2);// false + rules.addEdge(g, gnvf1, vserver);// false + rules.addTreeEdge(g, vserver, tenant);// true + rules.addTreeEdge(g, tenant, region1);// true + rules.addEdge(g, vserver, pserver);// false + rules.addTreeEdge(g, vserver, linter2);// false + rules.addTreeEdge(g, linter2, l3inter2ipv4addresslist);// false + rules.addEdge(g, l3inter2ipv4addresslist, l3network3);// false + rules.addTreeEdge(g, linter2, l3inter2ipv6addresslist);// true + rules.addEdge(g, l3inter2ipv6addresslist, l3network4);// true expectedResult.add(gnvf1); expectedResult.add(serviceinstance); @@ -118,13 +153,15 @@ public class VnfTopologyFromVfModuleTest extends QueryTest { @Override protected String getQueryName() { - return "vnf-topology-fromVfModule"; + return "vnf-topology-fromVfModule"; } + @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { g.has("vf-module-name", "vf-module-name2"); } + @Override protected void addParam(Map<String, Object> params) { return; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromVnfTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromVnfTest.java index 4441d3f..6a5f2da 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromVnfTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfTopologyFromVnfTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,105 +26,142 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VnfTopologyFromVnfTest extends QueryTest { - public VnfTopologyFromVnfTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public VnfTopologyFromVnfTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", "service-subscription", "service-subscription-id", "service-subscription-id-1","service-subscription-name","service-subscription-name1"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); - Vertex allottedresource = graph.addVertex(T.label, "allotted-resource", T.id, "4", "aai-node-type", "allotted-resource", "allotted-resource-id", "allotted-resource-id-1", "allotted-resource-name", "allotted-resource-name1"); - Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "5", "aai-node-type", "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); - Vertex volumegroup = graph.addVertex(T.label, "volume-group", T.id, "6", "aai-node-type", "volume-group", "volume-group-id", "volume-group-id-1", "volume-group-name", "volume-group-name1"); - Vertex linter1 = graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); - Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", T.id, "8", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address-list-id", "l3-interface-ipv4-address-list-id-1", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); - Vertex l3network1 = graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-1", "l3-network-name", "l3-network-name1"); - Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "10", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-1", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", "vserver-name1", "vservername1"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "12", "aai-node-type", "tenant", "tenant-name1", "tenant-name-1","tenant-id", "tenant-id-1"); - Vertex region1 = graph.addVertex(T.label, "cloud-region", T.id, "13", "aai-node-type", "cloud-region", "cloud-owner", "cloudOwner1"); - Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", "pserver", "hostname", "pservername"); - Vertex linter2 = graph.addVertex(T.label, "l-interface", T.id, "15", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); - Vertex l3inter2ipv4addresslist = graph.addVertex(T.label, "interface-ipv6-address-list", T.id, "16", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); - Vertex l3network2 = graph.addVertex(T.label, "l3-network", T.id, "17", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-2", "l3-network-name", "l3-network-name2"); - Vertex l3inter2ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", T.id, "18", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); - Vertex l3network3 = graph.addVertex(T.label, "l3-network", T.id, "19", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-3", "l3-network-name", "l3-network-name3"); - Vertex l3network4 = graph.addVertex(T.label, "l3-network", T.id, "20", "aai-node-type", "l3-network", "ll3-network-id", "l3-network-id-4", "l3-network-name", "l3-network-name4"); + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex gnvf1 = graph.addVertex(T.label, "generic-vnf", T.id, "0", "aai-node-type", + "generic-vnf", "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1"); + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-subscription-id", + "service-subscription-id-1", "service-subscription-name", "service-subscription-name1"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", + "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); + Vertex allottedresource = graph.addVertex(T.label, "allotted-resource", T.id, "4", + "aai-node-type", "allotted-resource", "allotted-resource-id", "allotted-resource-id-1", + "allotted-resource-name", "allotted-resource-name1"); + Vertex vfmodule = graph.addVertex(T.label, "vf-module", T.id, "5", "aai-node-type", + "vf-module", "vf-module-id", "vf-module-id-1", "vf-module-name", "vf-module-name1"); + Vertex volumegroup = + graph.addVertex(T.label, "volume-group", T.id, "6", "aai-node-type", "volume-group", + "volume-group-id", "volume-group-id-1", "volume-group-name", "volume-group-name1"); + Vertex linter1 = + graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-1", "l-interface-name", "l-interface-name1"); + Vertex l3inter1ipv4addresslist = graph.addVertex(T.label, "interface-ipv4-address-list", + T.id, "8", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address-list-id", "l3-interface-ipv4-address-list-id-1", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); + Vertex l3network1 = + graph.addVertex(T.label, "l3-network", T.id, "9", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-1", "l3-network-name", "l3-network-name1"); + Vertex l3inter1ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "10", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-1", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name1"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", + "vserver-name1", "vservername1"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "12", "aai-node-type", "tenant", + "tenant-name1", "tenant-name-1", "tenant-id", "tenant-id-1"); + Vertex region1 = graph.addVertex(T.label, "cloud-region", T.id, "13", "aai-node-type", + "cloud-region", "cloud-owner", "cloudOwner1"); + Vertex pserver = graph.addVertex(T.label, "pserver", T.id, "14", "aai-node-type", "pserver", + "hostname", "pservername"); + Vertex linter2 = + graph.addVertex(T.label, "l-interface", T.id, "15", "aai-node-type", "l-interface", + "l-interface-id", "l-interface-id-2", "l-interface-name", "l-interface-name2"); + Vertex l3inter2ipv4addresslist = graph.addVertex(T.label, "interface-ipv6-address-list", + T.id, "16", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); + Vertex l3network2 = + graph.addVertex(T.label, "l3-network", T.id, "17", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-2", "l3-network-name", "l3-network-name2"); + Vertex l3inter2ipv6addresslist = graph.addVertex(T.label, "l3-interface-ipv6-address-list", + T.id, "18", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address-list-id", "l3-interface-ipv6-address-list-id-2", + "l3-interface-ipv6-address-list-name", "l3-interface-ipv6-address-list-name2"); + Vertex l3network3 = + graph.addVertex(T.label, "l3-network", T.id, "19", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-3", "l3-network-name", "l3-network-name3"); + Vertex l3network4 = + graph.addVertex(T.label, "l3-network", T.id, "20", "aai-node-type", "l3-network", + "ll3-network-id", "l3-network-id-4", "l3-network-name", "l3-network-name4"); + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, gnvf1, serviceinstance);// false + rules.addTreeEdge(g, serviceinstance, servicesubscription);// true + rules.addTreeEdge(g, servicesubscription, customer);// true + rules.addTreeEdge(g, serviceinstance, allottedresource);// true + rules.addTreeEdge(g, gnvf1, vfmodule);// true + rules.addEdge(g, gnvf1, volumegroup);// false + rules.addTreeEdge(g, gnvf1, linter1);// true + rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);// true + rules.addEdge(g, l3inter1ipv4addresslist, l3network1);// false + rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);// true + rules.addEdge(g, l3inter1ipv6addresslist, l3network2);// false + rules.addEdge(g, gnvf1, vserver);// false + rules.addTreeEdge(g, vserver, tenant);// true + rules.addTreeEdge(g, tenant, region1);// true + rules.addEdge(g, vserver, pserver);// false + rules.addTreeEdge(g, vserver, linter2);// false + rules.addTreeEdge(g, linter2, l3inter2ipv4addresslist);// false + rules.addEdge(g, l3inter2ipv4addresslist, l3network3);// false + rules.addTreeEdge(g, linter2, l3inter2ipv6addresslist);// true + rules.addEdge(g, l3inter2ipv6addresslist, l3network4);// true + expectedResult.add(gnvf1); + expectedResult.add(serviceinstance); + expectedResult.add(servicesubscription); + expectedResult.add(customer); + expectedResult.add(allottedresource); + expectedResult.add(vfmodule); + expectedResult.add(volumegroup); + expectedResult.add(linter1); + expectedResult.add(l3inter1ipv4addresslist); + expectedResult.add(l3network1); + expectedResult.add(l3inter1ipv6addresslist); + expectedResult.add(l3network2); + expectedResult.add(vserver); + expectedResult.add(tenant); + expectedResult.add(region1); + expectedResult.add(pserver); + expectedResult.add(linter2); + expectedResult.add(l3inter2ipv4addresslist); + expectedResult.add(l3network3); + expectedResult.add(l3inter2ipv6addresslist); + expectedResult.add(l3network4); - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, gnvf1, serviceinstance);//false - rules.addTreeEdge(g, serviceinstance, servicesubscription);//true - rules.addTreeEdge(g, servicesubscription, customer);//true - rules.addTreeEdge(g, serviceinstance, allottedresource);//true - rules.addTreeEdge(g, gnvf1, vfmodule);//true - rules.addEdge(g, gnvf1, volumegroup);//false - rules.addTreeEdge(g, gnvf1, linter1);//true - rules.addTreeEdge(g, linter1, l3inter1ipv4addresslist);//true - rules.addEdge(g, l3inter1ipv4addresslist, l3network1);//false - rules.addTreeEdge(g, linter1, l3inter1ipv6addresslist);//true - rules.addEdge(g, l3inter1ipv6addresslist, l3network2);//false - rules.addEdge(g, gnvf1, vserver);//false - rules.addTreeEdge(g, vserver, tenant);//true - rules.addTreeEdge(g, tenant, region1);//true - rules.addEdge(g, vserver, pserver);//false - rules.addTreeEdge(g, vserver, linter2);//false - rules.addTreeEdge(g, linter2, l3inter2ipv4addresslist);//false - rules.addEdge(g, l3inter2ipv4addresslist, l3network3);//false - rules.addTreeEdge(g, linter2, l3inter2ipv6addresslist);//true - rules.addEdge(g, l3inter2ipv6addresslist, l3network4);//true + } + @Override + protected String getQueryName() { + return "vnf-topology-fromVnf"; + } - expectedResult.add(gnvf1); - expectedResult.add(serviceinstance); - expectedResult.add(servicesubscription); - expectedResult.add(customer); - expectedResult.add(allottedresource); - expectedResult.add(vfmodule); - expectedResult.add(volumegroup); - expectedResult.add(linter1); - expectedResult.add(l3inter1ipv4addresslist); - expectedResult.add(l3network1); - expectedResult.add(l3inter1ipv6addresslist); - expectedResult.add(l3network2); - expectedResult.add(vserver); - expectedResult.add(tenant); - expectedResult.add(region1); - expectedResult.add(pserver); - expectedResult.add(linter2); - expectedResult.add(l3inter2ipv4addresslist); - expectedResult.add(l3network3); - expectedResult.add(l3inter2ipv6addresslist); - expectedResult.add(l3network4); + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("vnf-name", "vnf-name-1"); - } + } - @Override - protected String getQueryName() { - return "vnf-topology-fromVnf"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("vnf-name", "vnf-name-1"); - - } - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfVserverFromCustomerTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfVserverFromCustomerTest.java index 5d70867..971ac4f 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfVserverFromCustomerTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfVserverFromCustomerTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,60 +26,71 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VnfVserverFromCustomerTest extends QueryTest { - public VnfVserverFromCustomerTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "0", "aai-node-type", "customer", "global-customer-id", "customer1","subscriber-type","INFRA"); - Vertex service1 = graph.addVertex(T.label, "service-subscription", T.id, "1", "aai-node-type", "service-subscription", "service-type", "service1"); - Vertex instance = graph.addVertex(T.label, "service-instance", T.id, "2", "aai-node-type", "service-instance"); - Vertex vnf = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver"); - - Vertex customer2 = graph.addVertex(T.label, "customer", T.id, "5", "aai-node-type", "customer", "global-customer-id", "customer2","subscriber-type","INFRA2"); - Vertex service2 = graph.addVertex(T.label, "service-subscription", T.id, "6", "aai-node-type", "service-subscription", "service-type", "service2"); - Vertex instance2 = graph.addVertex(T.label, "service-instance", T.id, "7", "aai-node-type", "service-instance"); - Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", "generic-vnf"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "9", "aai-node-type", "vserver"); - - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, customer1, service1); - rules.addTreeEdge(g, service1, instance); - rules.addEdge(g, vnf, instance); - rules.addEdge(g, vnf, vserver); - - rules.addTreeEdge(g, customer2, service2); //false - rules.addTreeEdge(g, service2, instance2); //false - rules.addEdge(g, vnf2, instance2); //false - rules.addEdge(g, vnf2, vserver2);//false - - expectedResult.add(vnf); - expectedResult.add(vserver); + public VnfVserverFromCustomerTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex customer1 = graph.addVertex(T.label, "customer", T.id, "0", "aai-node-type", + "customer", "global-customer-id", "customer1", "subscriber-type", "INFRA"); + Vertex service1 = graph.addVertex(T.label, "service-subscription", T.id, "1", + "aai-node-type", "service-subscription", "service-type", "service1"); + Vertex instance = graph.addVertex(T.label, "service-instance", T.id, "2", "aai-node-type", + "service-instance"); + Vertex vnf = + graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver"); + + Vertex customer2 = graph.addVertex(T.label, "customer", T.id, "5", "aai-node-type", + "customer", "global-customer-id", "customer2", "subscriber-type", "INFRA2"); + Vertex service2 = graph.addVertex(T.label, "service-subscription", T.id, "6", + "aai-node-type", "service-subscription", "service-type", "service2"); + Vertex instance2 = graph.addVertex(T.label, "service-instance", T.id, "7", "aai-node-type", + "service-instance"); + Vertex vnf2 = + graph.addVertex(T.label, "generic-vnf", T.id, "8", "aai-node-type", "generic-vnf"); + Vertex vserver2 = + graph.addVertex(T.label, "vserver", T.id, "9", "aai-node-type", "vserver"); + + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, customer1, service1); + rules.addTreeEdge(g, service1, instance); + rules.addEdge(g, vnf, instance); + rules.addEdge(g, vnf, vserver); + + rules.addTreeEdge(g, customer2, service2); // false + rules.addTreeEdge(g, service2, instance2); // false + rules.addEdge(g, vnf2, instance2); // false + rules.addEdge(g, vnf2, vserver2);// false + + expectedResult.add(vnf); + expectedResult.add(vserver); + + } + + @Override + protected String getQueryName() { + return "vnf-vserver-fromCustomer"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "customer").has("subscriber-type", "INFRA"); + } - } - @Override - protected String getQueryName() { - return "vnf-vserver-fromCustomer"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "customer").has("subscriber-type", "INFRA"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsFromPserverQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsFromPserverQueryTest.java index 16b9499..bb07697 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsFromPserverQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsFromPserverQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -26,64 +26,75 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; - import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VnfsFromPserverQueryTest extends QueryTest { - public VnfsFromPserverQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - - Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1", "vnf-name", "sample"); - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", "hostname", "pservername1"); - - Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", "generic-vnf", "vnf-id", "vnfid2"); - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", "hostname", "pservername2"); - - Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", "pservername3"); - Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver", "vserver-name", "vservername"); - Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "7", "aai-node-type", "tenant", "tenant-id", "tenantuuid", "tenant-name", "tenantname"); - Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "8", "aai-node-type", "cloud-region", "cloud-region-id", "clouduuid", "cloud-region-owner", "cloudOwnername"); - - Vertex vnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "9", "aai-node-type", "generic-vnf", "vnf-id", "vnfid3", "vnf-name", "sample"); - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, pserver1, vnf1); - rules.addEdge(g, pserver1, vnf2); - rules.addEdge(g, pserver1, vnf3); - - rules.addTreeEdge(g, tenant, cloudregion); - rules.addTreeEdge(g, vserver, tenant); - rules.addEdge(g, vserver, pserver3); - rules.addEdge(g, vserver, vnf2); - - //expectedResult.add(vnf2); - expectedResult.add(vnf1); - //expectedResult.add(vnf3); - - } - @Override - protected String getQueryName() { - return "vnfs-fromPserver"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - //g.has("vnf-id", "vnfid2"); - g.has("aai-node-type","generic-vnf").has("vnf-id", "vnfid1").has("vnf-name", "sample"); - } - - @Override - protected void addParam(Map<String, Object> params) { - params.put("hostname", "pservername1"); - } + public VnfsFromPserverQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } + + @Test + public void run() { + super.run(); + } + + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + + Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "1", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid1", "vnf-name", "sample"); + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "2", "aai-node-type", "pserver", + "hostname", "pservername1"); + + Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "3", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid2"); + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "4", "aai-node-type", "pserver", + "hostname", "pservername2"); + + Vertex pserver3 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "pservername3"); + Vertex vserver = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver", + "vserver-name", "vservername"); + Vertex tenant = graph.addVertex(T.label, "tenant", T.id, "7", "aai-node-type", "tenant", + "tenant-id", "tenantuuid", "tenant-name", "tenantname"); + Vertex cloudregion = graph.addVertex(T.label, "cloud-region", T.id, "8", "aai-node-type", + "cloud-region", "cloud-region-id", "clouduuid", "cloud-region-owner", "cloudOwnername"); + + Vertex vnf3 = graph.addVertex(T.label, "generic-vnf", T.id, "9", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid3", "vnf-name", "sample"); + + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, pserver1, vnf1); + rules.addEdge(g, pserver1, vnf2); + rules.addEdge(g, pserver1, vnf3); + + rules.addTreeEdge(g, tenant, cloudregion); + rules.addTreeEdge(g, vserver, tenant); + rules.addEdge(g, vserver, pserver3); + rules.addEdge(g, vserver, vnf2); + + // expectedResult.add(vnf2); + expectedResult.add(vnf1); + // expectedResult.add(vnf3); + + } + + @Override + protected String getQueryName() { + return "vnfs-fromPserver"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + // g.has("vnf-id", "vnfid2"); + g.has("aai-node-type", "generic-vnf").has("vnf-id", "vnfid1").has("vnf-name", "sample"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("hostname", "pservername1"); + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsFromServiceInstanceTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsFromServiceInstanceTest.java index 09fd515..708286d 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsFromServiceInstanceTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsFromServiceInstanceTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -30,49 +30,61 @@ import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VnfsFromServiceInstanceTest extends QueryTest { - public VnfsFromServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //Set up the test graph - Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", "service-subscription", "service-subscription-id", "service-subscription-id-1","service-subscription-name","service-subscription-name1"); - Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); - Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", "generic-vnf", "vnf-id", "vnfid1", "vnf-name", "vnfname1", "vnf-type", "vnftype1"); - Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "5", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", "service-instance-name", "service-instance-name-2"); - Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", "generic-vnf", "vnf-id", "vnfid2", "vnf-name", "vnfname2", "vnf-type", "vnftype1"); - - GraphTraversalSource g = graph.traversal(); + public VnfsFromServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - rules.addEdge(g, vnf1, serviceinstance);//true - rules.addEdge(g, vnf2, serviceinstance2); + @Test + public void run() { + super.run(); + } - rules.addTreeEdge(g, serviceinstance, servicesubscription);//true + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + + // Set up the test graph + Vertex serviceinstance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex servicesubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-subscription-id", + "service-subscription-id-1", "service-subscription-name", "service-subscription-name1"); + Vertex customer = graph.addVertex(T.label, "customer", T.id, "3", "aai-node-type", + "customer", "customer-id", "customer-id-1", "customer-name", "customer-name1"); + Vertex vnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "4", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid1", "vnf-name", "vnfname1", "vnf-type", "vnftype1"); + Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "5", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-2", + "service-instance-name", "service-instance-name-2"); + Vertex vnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "6", "aai-node-type", + "generic-vnf", "vnf-id", "vnfid2", "vnf-name", "vnfname2", "vnf-type", "vnftype1"); + + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, vnf1, serviceinstance);// true + rules.addEdge(g, vnf2, serviceinstance2); + + rules.addTreeEdge(g, serviceinstance, servicesubscription);// true rules.addTreeEdge(g, serviceinstance2, servicesubscription); - rules.addTreeEdge(g, servicesubscription, customer);//true - - expectedResult.add(vnf1); + rules.addTreeEdge(g, servicesubscription, customer);// true + + expectedResult.add(vnf1); + + } + + @Override + protected String getQueryName() { + return "vnfs-fromServiceInstance"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "service-instance").has("service-instance-id", + "service-instance-id-1"); + } - } - @Override - protected String getQueryName() { - return "vnfs-fromServiceInstance"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "service-instance-id-1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsVlansFromServiceInstanceTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsVlansFromServiceInstanceTest.java index f7c517e..936c361 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsVlansFromServiceInstanceTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VnfsVlansFromServiceInstanceTest.java @@ -1,103 +1,123 @@ package org.onap.aai.rest.search; /** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the + * License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software + * distributed under the License is distributed on an "AS IS" + * BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * See the License for the specific language governing permissions + * and + * limitations under the License. + * ============LICENSE_END========================================================= + */ /* -package org.onap.aai.rest.search; - -import java.util.Map; - -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.structure.T; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.junit.Test; -import org.onap.aai.exceptions.AAIException; -import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; - -public class VnfsVlansFromServiceInstanceTest extends QueryTest { - public VnfsVlansFromServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } - - @Test - public void run() { - super.run(); - } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - - - //Set up the test graph - Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "0", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", - "service-instance-name-1"); - - Vertex config1 = graph.addVertex(T.label, "configuration", T.id, "1", "aai-node-type", "configuration", "configuration-id", "configuration1"); - - Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", - "vnf-id", "gvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); - - Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0","network-name","networkName0"); - - Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "4", "aai-node-type", "vlan", "vlan-interface", "vlan-interface1"); - - - Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "5", "aai-node-type", - "service-instance", "service-instance-id", "service-instance-id-2", "service-instance-name", - "service-instance-name-1"); - - Vertex config2 = graph.addVertex(T.label, "configuration", T.id, "6", "aai-node-type", "configuration", "configuration-id", "configuration2"); - - Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", "generic-vnf", - "vnf-id", "gvnf2", "vnf-name", "genvnfname2", "nf-type", "sample-nf-type"); - - Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "8", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id2", "l-interface-name", "l-interface-name2","network-name","networkName1"); - - Vertex vlan2 = graph.addVertex(T.label, "vlan", T.id, "9", "aai-node-type", "vlan", "vlan-interface", "vlan-interface2"); - - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, serviceinstance1, config1); // True - rules.addEdge(g, config1, gvnf1); // True - rules.addEdge(g, config1, linterface1); // True - rules.addTreeEdge(g, linterface1, vlan1); // True - - rules.addEdge(g, serviceinstance2, config2); // False - rules.addEdge(g, config2, gvnf2); // False - rules.addEdge(g, config2, linterface2);// False - rules.addTreeEdge(g, linterface2, vlan2); // False - - expectedResult.add(gvnf1); - expectedResult.add(vlan1); - - } - @Override - protected String getQueryName() { - return "vnfs-vlans-fromServiceInstance"; - } - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "service-instance-id-1"); - } - - @Override - protected void addParam(Map<String, Object> params) { - return; - } -}*/
\ No newline at end of file + * package org.onap.aai.rest.search; + * + * import java.util.Map; + * + * import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; + * import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; + * import org.apache.tinkerpop.gremlin.structure.T; + * import org.apache.tinkerpop.gremlin.structure.Vertex; + * import org.junit.Test; + * import org.onap.aai.exceptions.AAIException; + * import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; + * + * public class VnfsVlansFromServiceInstanceTest extends QueryTest { + * public VnfsVlansFromServiceInstanceTest() throws AAIException, NoEdgeRuleFoundException { + * super(); + * } + * + * @Test + * public void run() { + * super.run(); + * } + * + * @Override + * protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + * + * + * //Set up the test graph + * Vertex serviceinstance1 = graph.addVertex(T.label, "service-instance", T.id, "0", + * "aai-node-type", + * "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", + * "service-instance-name-1"); + * + * Vertex config1 = graph.addVertex(T.label, "configuration", T.id, "1", "aai-node-type", + * "configuration", "configuration-id", "configuration1"); + * + * Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "2", "aai-node-type", "generic-vnf", + * "vnf-id", "gvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); + * + * Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", + * "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", + * "l-interface-name0","network-name","networkName0"); + * + * Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "4", "aai-node-type", "vlan", + * "vlan-interface", "vlan-interface1"); + * + * + * Vertex serviceinstance2 = graph.addVertex(T.label, "service-instance", T.id, "5", + * "aai-node-type", + * "service-instance", "service-instance-id", "service-instance-id-2", "service-instance-name", + * "service-instance-name-1"); + * + * Vertex config2 = graph.addVertex(T.label, "configuration", T.id, "6", "aai-node-type", + * "configuration", "configuration-id", "configuration2"); + * + * Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "7", "aai-node-type", "generic-vnf", + * "vnf-id", "gvnf2", "vnf-name", "genvnfname2", "nf-type", "sample-nf-type"); + * + * Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "8", "aai-node-type", + * "l-interface", "l-interface-id", "l-interface-id2", "l-interface-name", + * "l-interface-name2","network-name","networkName1"); + * + * Vertex vlan2 = graph.addVertex(T.label, "vlan", T.id, "9", "aai-node-type", "vlan", + * "vlan-interface", "vlan-interface2"); + * + * GraphTraversalSource g = graph.traversal(); + * + * rules.addEdge(g, serviceinstance1, config1); // True + * rules.addEdge(g, config1, gvnf1); // True + * rules.addEdge(g, config1, linterface1); // True + * rules.addTreeEdge(g, linterface1, vlan1); // True + * + * rules.addEdge(g, serviceinstance2, config2); // False + * rules.addEdge(g, config2, gvnf2); // False + * rules.addEdge(g, config2, linterface2);// False + * rules.addTreeEdge(g, linterface2, vlan2); // False + * + * expectedResult.add(gvnf1); + * expectedResult.add(vlan1); + * + * } + * + * @Override + * protected String getQueryName() { + * return "vnfs-vlans-fromServiceInstance"; + * } + * + * @Override + * protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + * g.has("aai-node-type", "service-instance").has("service-instance-id", "service-instance-id-1"); + * } + * + * @Override + * protected void addParam(Map<String, Object> params) { + * return; + * } + * } + */ diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverFromPserverTreeTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverFromPserverTreeTest.java index 79d070a..6b9ea12 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverFromPserverTreeTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverFromPserverTreeTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,11 @@ */ package org.onap.aai.rest.search; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.structure.T; @@ -27,11 +32,6 @@ import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - public class VserverFromPserverTreeTest extends TreeQueryTest { public VserverFromPserverTreeTest() throws AAIException, NoEdgeRuleFoundException { @@ -40,11 +40,19 @@ public class VserverFromPserverTreeTest extends TreeQueryTest { @Override protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex p1 = graph.addVertex(T.label, "pserver", T.id, "0", "aai-node-type", "pserver", "hostname", "pserver-name-1"); - Vertex p2 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", "hostname", "pserver-name-2"); - Vertex v1 = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", "vserver-id", "vservId-1", "vserver-name", "vserv-name-1", "vserver-selflink", "me/self"); - Vertex v2 = graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", "vservId-2", "vserver-name", "vserv-name-2", "vserver-selflink", "me/self"); - Vertex v3 = graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", "vserver-id", "vservId-3", "vserver-name", "vserv-name-3", "vserver-selflink", "me/self"); + Vertex p1 = graph.addVertex(T.label, "pserver", T.id, "0", "aai-node-type", "pserver", + "hostname", "pserver-name-1"); + Vertex p2 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", + "hostname", "pserver-name-2"); + Vertex v1 = + graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", "vserver-id", + "vservId-1", "vserver-name", "vserv-name-1", "vserver-selflink", "me/self"); + Vertex v2 = + graph.addVertex(T.label, "vserver", T.id, "3", "aai-node-type", "vserver", "vserver-id", + "vservId-2", "vserver-name", "vserv-name-2", "vserver-selflink", "me/self"); + Vertex v3 = + graph.addVertex(T.label, "vserver", T.id, "4", "aai-node-type", "vserver", "vserver-id", + "vservId-3", "vserver-name", "vserv-name-3", "vserver-selflink", "me/self"); rules.addEdge(gts, p1, v1); rules.addEdge(gts, p1, v2); @@ -56,11 +64,16 @@ public class VserverFromPserverTreeTest extends TreeQueryTest { super.run(); Tree tree = treeList.get(0); - Vertex p1 = graph.traversal().V().has("aai-node-type","pserver").has("hostname","pserver-name-1").next(); - Vertex p2 = graph.traversal().V().has("aai-node-type","pserver").has("hostname","pserver-name-2").next(); - Vertex v1 = graph.traversal().V().has("aai-node-type", "vserver").has("vserver-id","vservId-1").next(); - Vertex v2 = graph.traversal().V().has("aai-node-type", "vserver").has("vserver-id","vservId-2").next(); - Vertex v3 = graph.traversal().V().has("aai-node-type", "vserver").has("vserver-id","vservId-3").next(); + Vertex p1 = graph.traversal().V().has("aai-node-type", "pserver") + .has("hostname", "pserver-name-1").next(); + Vertex p2 = graph.traversal().V().has("aai-node-type", "pserver") + .has("hostname", "pserver-name-2").next(); + Vertex v1 = graph.traversal().V().has("aai-node-type", "vserver") + .has("vserver-id", "vservId-1").next(); + Vertex v2 = graph.traversal().V().has("aai-node-type", "vserver") + .has("vserver-id", "vservId-2").next(); + Vertex v3 = graph.traversal().V().has("aai-node-type", "vserver") + .has("vserver-id", "vservId-3").next(); assertTrue(tree.containsKey(p1)); assertTrue(((Tree) tree.get(p1)).containsKey(v1)); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverFromVnfQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverFromVnfQueryTest.java index 3dd7b25..26972ba 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverFromVnfQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverFromVnfQueryTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -31,70 +31,76 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VserverFromVnfQueryTest extends QueryTest { - public VserverFromVnfQueryTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public VserverFromVnfQueryTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf", "vnf-id", "gvId", "vnf-name", "gvName", "vnf-type", "some-type"); - Vertex vnfc = graph.addVertex(T.id, "10", "aai-node-type", "vnfc", - "vnfc-name", "vnfcName1", "nfc-naming-code", "blue", "nfc-function", "correct-function"); - Vertex vserv = graph.addVertex(T.id, "20", "aai-node-type", "vserver", - "vserver-id", "vservId", "vserver-name", "vservName", "vserver-selflink", "me/self"); - Vertex lint = graph.addVertex(T.id, "30", "aai-node-type", "l-interface", "interface-name", "lintName"); - Vertex ipv4 = graph.addVertex(T.id, "40", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "0.0.0.0"); - Vertex ipv6 = graph.addVertex(T.id, "50", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "0.0.0.0"); - - - Vertex gv1 = graph.addVertex(T.id, "60", "aai-node-type", "generic-vnf", "vnf-id", "gvId1", "vnf-name", "gvName1", "vnf-type", "some-type1"); - Vertex vnfc1 = graph.addVertex(T.id, "70", "aai-node-type", "vnfc", - "vnfc-name", "vnfcName11", "nfc-naming-code", "blue1", "nfc-function", "correct-function1"); - Vertex vserv1 = graph.addVertex(T.id, "80", "aai-node-type", "vserver", - "vserver-id", "vservId1", "vserver-name", "vservName1", "vserver-selflink", "me/self1"); - Vertex lint1 = graph.addVertex(T.id, "90", "aai-node-type", "l-interface", "interface-name", "lintName1"); - Vertex ipv41 = graph.addVertex(T.id, "1", "aai-node-type", "l3-interface-ipv4-address-list", "l3-interface-ipv4-address", "0.0.0.0.1"); - Vertex ipv61 = graph.addVertex(T.id, "2", "aai-node-type", "l3-interface-ipv6-address-list", "l3-interface-ipv6-address", "0.0.0.0.1"); + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf", "vnf-id", "gvId", + "vnf-name", "gvName", "vnf-type", "some-type"); + Vertex vnfc = graph.addVertex(T.id, "10", "aai-node-type", "vnfc", "vnfc-name", "vnfcName1", + "nfc-naming-code", "blue", "nfc-function", "correct-function"); + Vertex vserv = graph.addVertex(T.id, "20", "aai-node-type", "vserver", "vserver-id", + "vservId", "vserver-name", "vservName", "vserver-selflink", "me/self"); + Vertex lint = graph.addVertex(T.id, "30", "aai-node-type", "l-interface", "interface-name", + "lintName"); + Vertex ipv4 = graph.addVertex(T.id, "40", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "0.0.0.0"); + Vertex ipv6 = graph.addVertex(T.id, "50", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "0.0.0.0"); - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, gv, vnfc); - rules.addEdge(g, vserv, vnfc); - rules.addTreeEdge(g, vserv, lint); - rules.addTreeEdge(g, lint, ipv4); - rules.addTreeEdge(g, lint, ipv6); - - rules.addEdge(g, gv1, vnfc1);//false - rules.addEdge(g, vserv1, vnfc1);//false - rules.addTreeEdge(g, vserv1, lint1);//false - rules.addTreeEdge(g, lint1, ipv41);//false - rules.addTreeEdge(g, lint1, ipv61);//false - - expectedResult.add(vserv); - expectedResult.add(lint); - expectedResult.add(ipv4); - expectedResult.add(ipv6); - expectedResult.add(vnfc); - } + Vertex gv1 = graph.addVertex(T.id, "60", "aai-node-type", "generic-vnf", "vnf-id", "gvId1", + "vnf-name", "gvName1", "vnf-type", "some-type1"); + Vertex vnfc1 = graph.addVertex(T.id, "70", "aai-node-type", "vnfc", "vnfc-name", + "vnfcName11", "nfc-naming-code", "blue1", "nfc-function", "correct-function1"); + Vertex vserv1 = graph.addVertex(T.id, "80", "aai-node-type", "vserver", "vserver-id", + "vservId1", "vserver-name", "vservName1", "vserver-selflink", "me/self1"); + Vertex lint1 = graph.addVertex(T.id, "90", "aai-node-type", "l-interface", "interface-name", + "lintName1"); + Vertex ipv41 = graph.addVertex(T.id, "1", "aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "0.0.0.0.1"); + Vertex ipv61 = graph.addVertex(T.id, "2", "aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "0.0.0.0.1"); - @Override - protected String getQueryName() { - return "vserver-fromVnf"; - } + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, gv, vnfc); + rules.addEdge(g, vserv, vnfc); + rules.addTreeEdge(g, vserv, lint); + rules.addTreeEdge(g, lint, ipv4); + rules.addTreeEdge(g, lint, ipv6); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "generic-vnf").has("vnf-id", "gvId"); - } + rules.addEdge(g, gv1, vnfc1);// false + rules.addEdge(g, vserv1, vnfc1);// false + rules.addTreeEdge(g, vserv1, lint1);// false + rules.addTreeEdge(g, lint1, ipv41);// false + rules.addTreeEdge(g, lint1, ipv61);// false - @Override - protected void addParam(Map<String, Object> params) { - params.put("nfcNamingCode", "blue"); - } + expectedResult.add(vserv); + expectedResult.add(lint); + expectedResult.add(ipv4); + expectedResult.add(ipv6); + expectedResult.add(vnfc); + } + + @Override + protected String getQueryName() { + return "vserver-fromVnf"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "generic-vnf").has("vnf-id", "gvId"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("nfcNamingCode", "blue"); + } - } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLinterfacesFromVnfcTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLinterfacesFromVnfcTest.java index 2c1a0ea..d272273 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLinterfacesFromVnfcTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLinterfacesFromVnfcTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -33,66 +33,76 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VserverLinterfacesFromVnfcTest extends QueryTest { - public VserverLinterfacesFromVnfcTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public VserverLinterfacesFromVnfcTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void run() { - super.run(); - } + @Test + public void run() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - Vertex vnfc = graph.addVertex(T.label, "vnfc",T.id, "0", "aai-node-type", "vnfc", - "vnfc-name", "vnfcName1", "nfc-naming-code", "blue", "nfc-function", "correct-function"); - Vertex vserv = graph.addVertex(T.label, "vserver",T.id, "1", "aai-node-type", "vserver", - "vserver-id", "vservId", "vserver-name", "vservName", "vserver-selflink", "me/self"); - Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", "l-interface-name0","network-name","networkName0"); - Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id1", "l-interface-name", "l-interface-name1","network-name","networkName1"); - Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "4", "aai-node-type", "vlan", "vlan-interface", "vlan-interface0"); - - - Vertex vnfc1 = graph.addVertex(T.label, "vnfc",T.id, "10", "aai-node-type", "vnfc", - "vnfc-name", "vnfcName2", "nfc-naming-code", "blue-1", "nfc-function", "correct-function-1"); - Vertex vserv1 = graph.addVertex(T.label, "vserver",T.id, "11", "aai-node-type", "vserver", - "vserver-id", "vservId1", "vserver-name", "vservName1", "vserver-selflink", "me/self-1"); - Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id2", "l-interface-name", "l-interface-name2","network-name","networkName2"); - Vertex linterface21 = graph.addVertex(T.label, "l-interface", T.id, "13", "aai-node-type", "l-interface", "l-interface-id", "l-interface-id21", "l-interface-name", "l-interface-name21","network-name","networkName21"); - Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "14", "aai-node-type", "vlan", "vlan-interface", "vlan-interface1"); + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + Vertex vnfc = + graph.addVertex(T.label, "vnfc", T.id, "0", "aai-node-type", "vnfc", "vnfc-name", + "vnfcName1", "nfc-naming-code", "blue", "nfc-function", "correct-function"); + Vertex vserv = graph.addVertex(T.label, "vserver", T.id, "1", "aai-node-type", "vserver", + "vserver-id", "vservId", "vserver-name", "vservName", "vserver-selflink", "me/self"); + Vertex linterface = graph.addVertex(T.label, "l-interface", T.id, "2", "aai-node-type", + "l-interface", "l-interface-id", "l-interface-id0", "l-interface-name", + "l-interface-name0", "network-name", "networkName0"); + Vertex linterface1 = graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", + "l-interface", "l-interface-id", "l-interface-id1", "l-interface-name", + "l-interface-name1", "network-name", "networkName1"); + Vertex vlan = graph.addVertex(T.label, "vlan", T.id, "4", "aai-node-type", "vlan", + "vlan-interface", "vlan-interface0"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, vnfc,vserv); - rules.addTreeEdge(g, vserv, linterface); - rules.addTreeEdge(g, linterface, linterface1); - rules.addTreeEdge(g, linterface1, vlan); - - rules.addEdge(g, vnfc1,vserv1);//false - rules.addTreeEdge(g, vserv1, linterface2);//false - rules.addTreeEdge(g, linterface2, linterface21);//false - rules.addTreeEdge(g, linterface21, vlan1);//false - - expectedResult.add(vserv); - expectedResult.add(linterface); - expectedResult.add(linterface1); - expectedResult.add(vlan); - } + Vertex vnfc1 = + graph.addVertex(T.label, "vnfc", T.id, "10", "aai-node-type", "vnfc", "vnfc-name", + "vnfcName2", "nfc-naming-code", "blue-1", "nfc-function", "correct-function-1"); + Vertex vserv1 = graph.addVertex(T.label, "vserver", T.id, "11", "aai-node-type", "vserver", + "vserver-id", "vservId1", "vserver-name", "vservName1", "vserver-selflink", + "me/self-1"); + Vertex linterface2 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", + "l-interface", "l-interface-id", "l-interface-id2", "l-interface-name", + "l-interface-name2", "network-name", "networkName2"); + Vertex linterface21 = graph.addVertex(T.label, "l-interface", T.id, "13", "aai-node-type", + "l-interface", "l-interface-id", "l-interface-id21", "l-interface-name", + "l-interface-name21", "network-name", "networkName21"); + Vertex vlan1 = graph.addVertex(T.label, "vlan", T.id, "14", "aai-node-type", "vlan", + "vlan-interface", "vlan-interface1"); - @Override - protected String getQueryName() { - return "vserver-l-interfaces-fromVnfc"; - } + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, vnfc, vserv); + rules.addTreeEdge(g, vserv, linterface); + rules.addTreeEdge(g, linterface, linterface1); + rules.addTreeEdge(g, linterface1, vlan); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "vnfc").has("vnfc-name", "vnfcName1"); - } + rules.addEdge(g, vnfc1, vserv1);// false + rules.addTreeEdge(g, vserv1, linterface2);// false + rules.addTreeEdge(g, linterface2, linterface21);// false + rules.addTreeEdge(g, linterface21, vlan1);// false - @Override - protected void addParam(Map<String, Object> params) { - params.put("networkName", "networkName0"); - } + expectedResult.add(vserv); + expectedResult.add(linterface); + expectedResult.add(linterface1); + expectedResult.add(vlan); + } + + @Override + protected String getQueryName() { + return "vserver-l-interfaces-fromVnfc"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("aai-node-type", "vnfc").has("vnfc-name", "vnfcName1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + params.put("networkName", "networkName0"); + } - } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLogicallinkFromPServerTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLogicallinkFromPServerTest.java index 03a7757..aa3a9d1 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLogicallinkFromPServerTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLogicallinkFromPServerTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -33,54 +33,62 @@ import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; public class VserverLogicallinkFromPServerTest extends QueryTest { - public VserverLogicallinkFromPServerTest() throws AAIException, NoEdgeRuleFoundException { - super(); - } + public VserverLogicallinkFromPServerTest() throws AAIException, NoEdgeRuleFoundException { + super(); + } - @Test - public void test() { - super.run(); - } + @Test + public void test() { + super.run(); + } - @Override - protected void createGraph() throws AAIException, NoEdgeRuleFoundException { - //Set up the test graph - Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", "hostname", "hostname-1"); - Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); - Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", "l-interface", "interface-name", "interface-name-1"); - Vertex logicalLink1 = graph.addVertex(T.label, "l", T.id, "4", "aai-node-type", "logical-link", "link-name", "link-name-1"); - - Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", "hostname", "hostname-2"); - Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver", "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2"); - Vertex lInterface2 = graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", "l-interface", "interface-name", "interface-name-2"); - Vertex logicalLink2 = graph.addVertex(T.label, "l", T.id, "8", "aai-node-type", "logical-link", "link-name", "link-name-2"); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, pserver1, vserver1); - rules.addTreeEdge(g, vserver1, lInterface1); - rules.addEdge(g, lInterface1, logicalLink1); - - rules.addEdge(g, pserver2, vserver2); - rules.addTreeEdge(g, vserver2, lInterface2); - rules.addEdge(g, lInterface2, logicalLink2); - - expectedResult.add(vserver1); - expectedResult.add(logicalLink1); - } + @Override + protected void createGraph() throws AAIException, NoEdgeRuleFoundException { + // Set up the test graph + Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "1", "aai-node-type", "pserver", + "hostname", "hostname-1"); + Vertex vserver1 = graph.addVertex(T.label, "vserver", T.id, "2", "aai-node-type", "vserver", + "vserver-id", "vserver-id-1", "vserver-name", "vserver-name-1"); + Vertex lInterface1 = graph.addVertex(T.label, "l-interface", T.id, "3", "aai-node-type", + "l-interface", "interface-name", "interface-name-1"); + Vertex logicalLink1 = graph.addVertex(T.label, "l", T.id, "4", "aai-node-type", + "logical-link", "link-name", "link-name-1"); - @Override - protected String getQueryName() { - return "vserverlogicallink-frompServer"; - } + Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "5", "aai-node-type", "pserver", + "hostname", "hostname-2"); + Vertex vserver2 = graph.addVertex(T.label, "vserver", T.id, "6", "aai-node-type", "vserver", + "vserver-id", "vserver-id-2", "vserver-name", "vserver-name-2"); + Vertex lInterface2 = graph.addVertex(T.label, "l-interface", T.id, "7", "aai-node-type", + "l-interface", "interface-name", "interface-name-2"); + Vertex logicalLink2 = graph.addVertex(T.label, "l", T.id, "8", "aai-node-type", + "logical-link", "link-name", "link-name-2"); - @Override - protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("hostname", "hostname-1"); - } + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, pserver1, vserver1); + rules.addTreeEdge(g, vserver1, lInterface1); + rules.addEdge(g, lInterface1, logicalLink1); - @Override - protected void addParam(Map<String, Object> params) { - return; - } + rules.addEdge(g, pserver2, vserver2); + rules.addTreeEdge(g, vserver2, lInterface2); + rules.addEdge(g, lInterface2, logicalLink2); + + expectedResult.add(vserver1); + expectedResult.add(logicalLink1); + } + + @Override + protected String getQueryName() { + return "vserverlogicallink-frompServer"; + } + + @Override + protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { + g.has("hostname", "hostname-1"); + } + + @Override + protected void addParam(Map<String, Object> params) { + return; + } } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/getSvcSubscriberModelInfoTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/getSvcSubscriberModelInfoTest.java index c854f43..2414d5a 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/getSvcSubscriberModelInfoTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/getSvcSubscriberModelInfoTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,6 +19,8 @@ */ package org.onap.aai.rest.search; +import java.util.Map; + import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; @@ -29,30 +31,32 @@ import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; -import java.util.Map; - public class getSvcSubscriberModelInfoTest extends QueryTest { public getSvcSubscriberModelInfoTest() throws AAIException, NoEdgeRuleFoundException { super(); } + @Test public void run() { super.run(); } - - @Override - protected void createGraph() throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException { + protected void createGraph() + throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException { - Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "1", "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", "service-instance-name", "service-instance-name-1"); - Vertex serviceSubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", "aai-node-type", "service-subscription", "service-type", "service-subcription-1"); - Vertex modelver = graph.addVertex(T.label, "model-ver", T.id, "3", "aai-node-type", "model-ver"); + Vertex serviceInstance = graph.addVertex(T.label, "service-instance", T.id, "1", + "aai-node-type", "service-instance", "service-instance-id", "service-instance-id-1", + "service-instance-name", "service-instance-name-1"); + Vertex serviceSubscription = graph.addVertex(T.label, "service-subscription", T.id, "2", + "aai-node-type", "service-subscription", "service-type", "service-subcription-1"); + Vertex modelver = + graph.addVertex(T.label, "model-ver", T.id, "3", "aai-node-type", "model-ver"); GraphTraversalSource g = graph.traversal(); rules.addTreeEdge(g, serviceInstance, serviceSubscription); - rules.addPrivateEdge(g, serviceInstance, modelver,null); + rules.addPrivateEdge(g, serviceInstance, modelver, null); expectedResult.add(serviceInstance); expectedResult.add(serviceSubscription); @@ -60,15 +64,17 @@ public class getSvcSubscriberModelInfoTest extends QueryTest { } - @Override protected String getQueryName() { - return "getSvcSubscriberModelInfo"; + return "getSvcSubscriberModelInfo"; } + @Override protected void addStartNode(GraphTraversal<Vertex, Vertex> g) { - g.has("aai-node-type", "service-instance").has("service-instance-id", "service-instance-id-1"); + g.has("aai-node-type", "service-instance").has("service-instance-id", + "service-instance-id-1"); } + @Override protected void addParam(Map<String, Object> params) { return; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJsonTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJsonTest.java index d15545f..c7e550e 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJsonTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJsonTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -27,23 +27,27 @@ import org.junit.Test; public class ConvertQueryPropertiesToJsonTest { @Test - public void testRqdProperty(){ + public void testRqdProperty() { ConvertQueryPropertiesToJson convert = new ConvertQueryPropertiesToJson(); Properties props = new Properties(); - props.setProperty("queryName1", "builder.getVerticesByProperty('rqdProp', rqdPropId).getVerticesByProperty('rqdProp2', rqdPropId2).createEdgeTraversal(EdgeType.TREE, 'node1', 'child-node1')"); - props.setProperty("lastQueryName", "builder.getVerticesByProperty('notRqdProp', \"OUT\").createEdgeTraversal(EdgeType.TREE, 'node2', 'child-node2')"); + props.setProperty("queryName1", + "builder.getVerticesByProperty('rqdProp', rqdPropId).getVerticesByProperty('rqdProp2', rqdPropId2).createEdgeTraversal(EdgeType.TREE, 'node1', 'child-node1')"); + props.setProperty("lastQueryName", + "builder.getVerticesByProperty('notRqdProp', \"OUT\").createEdgeTraversal(EdgeType.TREE, 'node2', 'child-node2')"); String json = convert.convertProperties(props); assertNotNull(json); } - + @Test - public void testLastQueryRqdProperty(){ + public void testLastQueryRqdProperty() { ConvertQueryPropertiesToJson convert = new ConvertQueryPropertiesToJson(); Properties props = new Properties(); - props.setProperty("queryName1", "builder.createEdgeTraversal(EdgeType.TREE, 'node1', 'child-node1')"); - props.setProperty("lastQueryName", "builder.getVerticesByProperty('rqdProp', rqdPropId).createEdgeTraversal(EdgeType.TREE, 'node2', 'child-node2')"); + props.setProperty("queryName1", + "builder.createEdgeTraversal(EdgeType.TREE, 'node1', 'child-node1')"); + props.setProperty("lastQueryName", + "builder.getVerticesByProperty('rqdProp', rqdPropId).createEdgeTraversal(EdgeType.TREE, 'node2', 'child-node2')"); String json = convert.convertProperties(props); assertNotNull(json); } diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/util/EchoResponseTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/util/EchoResponseTest.java index a07dfa6..46ff650 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/util/EchoResponseTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/util/EchoResponseTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,22 +19,24 @@ */ package org.onap.aai.rest.util; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.att.eelf.configuration.EELFManager; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; - -import javax.ws.rs.core.*; -import java.util.*; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import com.att.eelf.configuration.EELFManager; + +import java.util.*; + +import javax.ws.rs.core.*; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class EchoResponseTest { protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json"); @@ -63,15 +65,15 @@ public class EchoResponseTest { private static final Logger logger = LoggerFactory.getLogger(EchoResponseTest.class.getName()); @Before - public void setup(){ + public void setup() { logger.info("Starting the setup for the integration tests of Rest Endpoints"); - echoResponse = new EchoResponse(); - httpHeaders = mock(HttpHeaders.class); - uriInfo = mock(UriInfo.class); + echoResponse = new EchoResponse(); + httpHeaders = mock(HttpHeaders.class); + uriInfo = mock(UriInfo.class); - headersMultiMap = new MultivaluedHashMap<>(); - queryParameters = Mockito.spy(new MultivaluedHashMap<>()); + headersMultiMap = new MultivaluedHashMap<>(); + queryParameters = Mockito.spy(new MultivaluedHashMap<>()); headersMultiMap.add("X-FromAppId", "JUNIT"); headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString()); @@ -92,11 +94,11 @@ public class EchoResponseTest { when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList); - when(uriInfo.getQueryParameters()).thenReturn(queryParameters); when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters); - // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable + // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very + // unreasonable Mockito.doReturn(null).when(queryParameters).remove(anyObject()); when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON); @@ -125,11 +127,11 @@ public class EchoResponseTest { public void testEchoResultWhenValidHeadersButMediaTypeWrong() throws Exception { when(httpHeaders.getAcceptableMediaTypes()).thenThrow(new IllegalStateException()) - .thenReturn(outputMediaTypes); + .thenReturn(outputMediaTypes); Response response = echoResponse.echoResult(httpHeaders, null, ""); assertNotNull(response); assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus()); } -}
\ No newline at end of file +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/util/LogFormatToolsTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/util/LogFormatToolsTest.java index f17257b..44b72a5 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/util/LogFormatToolsTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/util/LogFormatToolsTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,14 +19,14 @@ */ package org.onap.aai.rest.util; -import org.junit.Test; - import static org.junit.Assert.assertNotNull; +import org.junit.Test; + public class LogFormatToolsTest { @Test - public void testLogFormatTools(){ + public void testLogFormatTools() { String dateTime = new LogFormatTools().getCurrentDateTime(); assertNotNull(dateTime); diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/util/ValidateEncodingTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/util/ValidateEncodingTest.java index bf7612b..d627072 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/util/ValidateEncodingTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/util/ValidateEncodingTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -32,82 +32,83 @@ import org.mockito.Mockito; public class ValidateEncodingTest { - - @Test - public void badPath() throws UnsupportedEncodingException { - String badPath = "/aai/v6/network/vces/vce/blahh::blach/others/other/jklfea{}"; - UriInfo mockUriInfo = getMockUriInfo(badPath, new MultivaluedHashMap<String, String>()); - ValidateEncoding validator = ValidateEncoding.getInstance(); - - assertEquals(false, validator.validate(mockUriInfo)); - } - - @Test - public void goodPath() throws UnsupportedEncodingException { - String goodPath = "/aai/v6/network/vces/vce/blahh%3A%3Ablach/others/other/jklfea%7B%7D"; - UriInfo mockUriInfo = getMockUriInfo(goodPath, new MultivaluedHashMap<String, String>()); - ValidateEncoding validator = ValidateEncoding.getInstance(); - - assertEquals(true, validator.validate(mockUriInfo)); - } - - @Test - public void badQueryParamsKey() throws UnsupportedEncodingException { - MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>(); - map.putSingle("blahblah", "test"); - map.putSingle("blahblah", "test2"); - map.putSingle("bad::bad", "test3"); - UriInfo mockUriInfo = getMockUriInfo("", map); - - ValidateEncoding validator = ValidateEncoding.getInstance(); - - assertEquals(false, validator.validate(mockUriInfo)); - - } - @Test - public void badQueryParamsValue() throws UnsupportedEncodingException { - MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>(); - map.putSingle("blahblah", "test"); - map.putSingle("blahblah", "test//:2"); - map.putSingle("badbad", "test3"); - UriInfo mockUriInfo = getMockUriInfo("", map); - - ValidateEncoding validator = ValidateEncoding.getInstance(); - - assertEquals(false, validator.validate(mockUriInfo)); - } - - @Test - public void goodQueryParams() throws UnsupportedEncodingException { - MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>(); - map.putSingle("blahblah", "test"); - map.putSingle("blahblah", "test2"); - map.putSingle("badbad", "~test%2F%2F%3A3"); - UriInfo mockUriInfo = getMockUriInfo("", map); - - ValidateEncoding validator = ValidateEncoding.getInstance(); - - assertEquals(true, validator.validate(mockUriInfo)); - } - - @Test - public void testWhenQueryParameterHasPlusSignItShouldPass() throws UnsupportedEncodingException { - - MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>(); - map.putSingle("some-key", "test+one+two+three"); - UriInfo mockUriInfo = getMockUriInfo("", map); - - ValidateEncoding validator = ValidateEncoding.getInstance(); - - assertEquals(true, validator.validate(mockUriInfo)); - } - - private UriInfo getMockUriInfo(String path, MultivaluedMap<String, String> map) { - UriInfo mockUriInfo = Mockito.mock(UriInfo.class); - Mockito.when(mockUriInfo.getPath(false)).thenReturn(path); - Mockito.when(mockUriInfo.getQueryParameters(false)).thenReturn(map); - - return mockUriInfo; - } - + @Test + public void badPath() throws UnsupportedEncodingException { + String badPath = "/aai/v6/network/vces/vce/blahh::blach/others/other/jklfea{}"; + UriInfo mockUriInfo = getMockUriInfo(badPath, new MultivaluedHashMap<String, String>()); + ValidateEncoding validator = ValidateEncoding.getInstance(); + + assertEquals(false, validator.validate(mockUriInfo)); + } + + @Test + public void goodPath() throws UnsupportedEncodingException { + String goodPath = "/aai/v6/network/vces/vce/blahh%3A%3Ablach/others/other/jklfea%7B%7D"; + UriInfo mockUriInfo = getMockUriInfo(goodPath, new MultivaluedHashMap<String, String>()); + ValidateEncoding validator = ValidateEncoding.getInstance(); + + assertEquals(true, validator.validate(mockUriInfo)); + } + + @Test + public void badQueryParamsKey() throws UnsupportedEncodingException { + MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>(); + map.putSingle("blahblah", "test"); + map.putSingle("blahblah", "test2"); + map.putSingle("bad::bad", "test3"); + UriInfo mockUriInfo = getMockUriInfo("", map); + + ValidateEncoding validator = ValidateEncoding.getInstance(); + + assertEquals(false, validator.validate(mockUriInfo)); + + } + + @Test + public void badQueryParamsValue() throws UnsupportedEncodingException { + MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>(); + map.putSingle("blahblah", "test"); + map.putSingle("blahblah", "test//:2"); + map.putSingle("badbad", "test3"); + UriInfo mockUriInfo = getMockUriInfo("", map); + + ValidateEncoding validator = ValidateEncoding.getInstance(); + + assertEquals(false, validator.validate(mockUriInfo)); + } + + @Test + public void goodQueryParams() throws UnsupportedEncodingException { + MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>(); + map.putSingle("blahblah", "test"); + map.putSingle("blahblah", "test2"); + map.putSingle("badbad", "~test%2F%2F%3A3"); + UriInfo mockUriInfo = getMockUriInfo("", map); + + ValidateEncoding validator = ValidateEncoding.getInstance(); + + assertEquals(true, validator.validate(mockUriInfo)); + } + + @Test + public void testWhenQueryParameterHasPlusSignItShouldPass() + throws UnsupportedEncodingException { + + MultivaluedHashMap<String, String> map = new MultivaluedHashMap<String, String>(); + map.putSingle("some-key", "test+one+two+three"); + UriInfo mockUriInfo = getMockUriInfo("", map); + + ValidateEncoding validator = ValidateEncoding.getInstance(); + + assertEquals(true, validator.validate(mockUriInfo)); + } + + private UriInfo getMockUriInfo(String path, MultivaluedMap<String, String> map) { + UriInfo mockUriInfo = Mockito.mock(UriInfo.class); + Mockito.when(mockUriInfo.getPath(false)).thenReturn(path); + Mockito.when(mockUriInfo.getQueryParameters(false)).thenReturn(map); + + return mockUriInfo; + } + } diff --git a/aai-traversal/src/test/java/org/onap/aai/transforms/JoltTestUtil.java b/aai-traversal/src/test/java/org/onap/aai/transforms/JoltTestUtil.java index 78f7471..d07fd97 100644 --- a/aai-traversal/src/test/java/org/onap/aai/transforms/JoltTestUtil.java +++ b/aai-traversal/src/test/java/org/onap/aai/transforms/JoltTestUtil.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,42 +19,45 @@ */ package org.onap.aai.transforms; +import com.bazaarvoice.jolt.ArrayOrderObliviousDiffy; +import com.bazaarvoice.jolt.Diffy; +import com.bazaarvoice.jolt.JsonUtils; import java.io.IOException; import org.junit.Assert; -import com.bazaarvoice.jolt.ArrayOrderObliviousDiffy; -import com.bazaarvoice.jolt.Diffy; -import com.bazaarvoice.jolt.JsonUtils; - public class JoltTestUtil { private static final Diffy diffy = new Diffy(); private static final Diffy arrayOrderObliviousDiffy = new ArrayOrderObliviousDiffy(); - public static void runDiffy( String failureMessage, Object expected, Object actual ) throws IOException { - runDiffy( diffy, failureMessage, expected, actual ); + public static void runDiffy(String failureMessage, Object expected, Object actual) + throws IOException { + runDiffy(diffy, failureMessage, expected, actual); } - public static void runDiffy( Object expected, Object actual ) throws IOException { - runDiffy( diffy, "Failed", expected, actual ); + public static void runDiffy(Object expected, Object actual) throws IOException { + runDiffy(diffy, "Failed", expected, actual); } - public static void runArrayOrderObliviousDiffy( String failureMessage, Object expected, Object actual ) throws IOException { - runDiffy( arrayOrderObliviousDiffy, failureMessage, expected, actual ); + public static void runArrayOrderObliviousDiffy(String failureMessage, Object expected, + Object actual) throws IOException { + runDiffy(arrayOrderObliviousDiffy, failureMessage, expected, actual); } - public static void runArrayOrderObliviousDiffy( Object expected, Object actual ) throws IOException { - runDiffy( arrayOrderObliviousDiffy, "Failed", expected, actual ); + public static void runArrayOrderObliviousDiffy(Object expected, Object actual) + throws IOException { + runDiffy(arrayOrderObliviousDiffy, "Failed", expected, actual); } - - private static void runDiffy( Diffy diffy, String failureMessage, Object expected, Object actual ) { - String actualObject = JsonUtils.toPrettyJsonString( actual ); - Diffy.Result result = diffy.diff( expected, actual ); + private static void runDiffy(Diffy diffy, String failureMessage, Object expected, + Object actual) { + String actualObject = JsonUtils.toPrettyJsonString(actual); + Diffy.Result result = diffy.diff(expected, actual); if (!result.isEmpty()) { - Assert.fail( "\nActual object\n" + actualObject + "\n" + failureMessage + "\nDiffy output\n" + result.toString()); + Assert.fail("\nActual object\n" + actualObject + "\n" + failureMessage + + "\nDiffy output\n" + result.toString()); } } } diff --git a/aai-traversal/src/test/java/org/onap/aai/transforms/LowerHyphenToLowerCamelConverterTest.java b/aai-traversal/src/test/java/org/onap/aai/transforms/LowerHyphenToLowerCamelConverterTest.java index 2f7d336..f8b4613 100644 --- a/aai-traversal/src/test/java/org/onap/aai/transforms/LowerHyphenToLowerCamelConverterTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/transforms/LowerHyphenToLowerCamelConverterTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,15 +19,15 @@ */ package org.onap.aai.transforms; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; +import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; -import static org.junit.Assert.*; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class LowerHyphenToLowerCamelConverterTest { @@ -37,35 +37,32 @@ public class LowerHyphenToLowerCamelConverterTest { private String input; private String expected; - public LowerHyphenToLowerCamelConverterTest(String input, String expected){ - this.input = input; + public LowerHyphenToLowerCamelConverterTest(String input, String expected) { + this.input = input; this.expected = expected; } /** * Data Provider for the Lower Hyphen to Camel Converter Tests * Make sure the capitalization is not lost during the conversion + * * @return */ @Parameters - public static Collection<Object[]> data(){ + public static Collection<Object[]> data() { - return Arrays.asList(new Object[][]{ - {null, null}, - {"test-name", "testName"}, - {"test---name", "testName"}, // Case multiple - {"testName", "testName"}, // Case where upper case word shouldn't be lowercased - {"test-name-cool", "testNameCool"}, - {"test-name-Cool", "testNameCool"}, - {"test-name-Cool-Name-wow----Rest", "testNameCoolNameWowRest"}, - {"test-name#fast#", "testName#fast#"}, - {"test-name---", "testName"}, - {"----test-name", "TestName"}, - }); + return Arrays.asList( + new Object[][] {{null, null}, {"test-name", "testName"}, {"test---name", "testName"}, // Case + // multiple + {"testName", "testName"}, // Case where upper case word shouldn't be lowercased + {"test-name-cool", "testNameCool"}, {"test-name-Cool", "testNameCool"}, + {"test-name-Cool-Name-wow----Rest", "testNameCoolNameWowRest"}, + {"test-name#fast#", "testName#fast#"}, {"test-name---", "testName"}, + {"----test-name", "TestName"},}); } @Test - public void testIfInputSuccessfullyModified(){ + public void testIfInputSuccessfullyModified() { String actual = converter.convert(input); assertEquals(expected, actual); } diff --git a/aai-traversal/src/test/java/org/onap/aai/transforms/MapTraverserTest.java b/aai-traversal/src/test/java/org/onap/aai/transforms/MapTraverserTest.java index bfaeb8f..5ae5603 100644 --- a/aai-traversal/src/test/java/org/onap/aai/transforms/MapTraverserTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/transforms/MapTraverserTest.java @@ -8,7 +8,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -19,23 +19,24 @@ */ package org.onap.aai.transforms; -import org.onap.aai.transforms.LowerCamelToLowerHyphenConverter; -import org.onap.aai.transforms.MapTraverser; import com.bazaarvoice.jolt.JsonUtils; -import org.junit.Test; import java.io.IOException; import java.util.Map; +import org.junit.Test; +import org.onap.aai.transforms.LowerCamelToLowerHyphenConverter; +import org.onap.aai.transforms.MapTraverser; + public class MapTraverserTest { private final String testResources = "src/test/resources/maputils/testcases/"; - private String[] testCases = { "TestCase1.json", "TestCase2.json" }; + private String[] testCases = {"TestCase1.json", "TestCase2.json"}; private MapTraverser traverser = new MapTraverser(new LowerCamelToLowerHyphenConverter()); @Test(expected = NullPointerException.class) - public void testIfMapIsNullThrowNullPointerException(){ + public void testIfMapIsNullThrowNullPointerException() { Map<String, Object> map = null; traverser.convertKeys(map); } @@ -43,13 +44,13 @@ public class MapTraverserTest { @Test public void runTestCases() throws IOException { - for(String testCase : testCases){ + for (String testCase : testCases) { Map<String, Object> values = JsonUtils.filepathToMap(testResources + testCase); Object input = values.get("input"); - Object actual = traverser.convertKeys((Map<String, Object>)input); + Object actual = traverser.convertKeys((Map<String, Object>) input); Object output = values.get("output"); - JoltTestUtil.runArrayOrderObliviousDiffy( "failed case " + testCase, output, actual ); + JoltTestUtil.runArrayOrderObliviousDiffy("failed case " + testCase, output, actual); } } } |