diff options
author | ChrisC <cc697w@intl.att.com> | 2017-01-31 11:40:03 +0100 |
---|---|---|
committer | ChrisC <cc697w@intl.att.com> | 2017-01-31 12:59:33 +0100 |
commit | 025301d08b061482c1f046d562bf017c8cbcfe8d (patch) | |
tree | 68a2a549736c9bf0f7cd4e71c76e40ef7e2606f2 /bpmn/MSOCoreBPMN | |
parent | 2754ad52f833278a5c925bd788a16d1dce16a598 (diff) |
Initial OpenECOMP MSO commit
Change-Id: Ia6a7574859480717402cc2f22534d9973a78fa6d
Signed-off-by: ChrisC <cc697w@intl.att.com>
Diffstat (limited to 'bpmn/MSOCoreBPMN')
59 files changed, 8868 insertions, 0 deletions
diff --git a/bpmn/MSOCoreBPMN/pom.xml b/bpmn/MSOCoreBPMN/pom.xml new file mode 100644 index 0000000000..db0f7cf30a --- /dev/null +++ b/bpmn/MSOCoreBPMN/pom.xml @@ -0,0 +1,181 @@ +<?xml version="1.0"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <groupId>org.openecomp.mso</groupId> + <artifactId>bpmn</artifactId> + <version>0.0.4-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <groupId>org.openecomp.mso</groupId> + <artifactId>MSOCoreBPMN</artifactId> + <packaging>jar</packaging> + + <build> + <plugins> + <!-- Note: test utilities really ought to exist only in the test scope but --> + <!-- this doesn't seem to work in the jenkins build environment. When unit --> + <!-- tests are disabled, maven skips building the test scoped jar but then --> + <!-- it inexplicably requires the jar when it is included as a test-scoped --> + <!-- dependency in other projects. There might be something strange in the --> + <!-- jenkins configuration because I don't have this problem on my PC, and --> + <!-- I'm using the same version of maven/surefire --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <version>2.6</version> + <executions> + <execution> + <!-- Build MSOCoreBPMN-${version}.jar --> + <!-- excluding unit test utilities --> + <id>default-jar</id> + <phase>package</phase> + <goals> + <goal>jar</goal> + </goals> + <configuration> + <excludes> + <exclude>org/openecomp/mso/bpmn/test/**</exclude> + </excludes> + </configuration> + </execution> + <execution> + <!-- Build MSOCoreBPMN-${version}-test.jar --> + <!-- containing only the unit test utilities --> + <id>test-utilities</id> + <phase>package</phase> + <goals> + <goal>jar</goal> + </goals> + <configuration> + <classifier>test</classifier> + <includes> + <include>org/openecomp/mso/bpmn/test/**</include> + </includes> + </configuration> + </execution> + </executions> + </plugin> + + </plugins> + </build> + + <dependencies> + <dependency> + <groupId>org.camunda.bpm</groupId> + <artifactId>camunda-engine</artifactId> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.camunda.bpm</groupId> + <artifactId>camunda-engine-rest</artifactId> + <classifier>classes</classifier> + <!-- exclusion to use latest commons-fileupload --> + <exclusions> + <exclusion> + <groupId>commons-fileupload</groupId> + <artifactId>commons-fileupload</artifactId> + </exclusion> + </exclusions> + </dependency> + <!-- latest commons-fileupload --> + <dependency> + <groupId>commons-fileupload</groupId> + <artifactId>commons-fileupload</artifactId> + <version>1.3.2</version> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + <version>3.0.1</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-all</artifactId> + <version>1.10.19</version> + <scope>test</scope> + </dependency> + <!-- Connectors, in compile scope to include it in the war file --> + <dependency> + <groupId>org.camunda.connect</groupId> + <artifactId>camunda-connect-connectors-all</artifactId> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>org.camunda.template-engines</groupId> + <artifactId>camunda-template-engines-freemarker</artifactId> + </dependency> + <dependency> + <groupId>org.camunda.bpm</groupId> + <artifactId>camunda-engine-plugin-spin</artifactId> + </dependency> + <!-- OPTIONAL: spin dataformats --> + <dependency> + <groupId>org.camunda.spin</groupId> + <artifactId>camunda-spin-dataformat-json-jackson</artifactId> + </dependency> + <dependency> + <groupId>org.camunda.spin</groupId> + <artifactId>camunda-spin-dataformat-xml-dom</artifactId> + </dependency> + <dependency> + <groupId>org.camunda.bpm</groupId> + <artifactId>camunda-engine-plugin-connect</artifactId> + </dependency> + <dependency> + <groupId>org.codehaus.groovy</groupId> + <artifactId>groovy-all</artifactId> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>net.sf.saxon</groupId> + <artifactId>Saxon-HE</artifactId> + </dependency> + <dependency> + <groupId>org.openecomp.mso</groupId> + <artifactId>common</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.jboss.resteasy</groupId> + <artifactId>resteasy-jaxrs</artifactId> + <version>3.0.19.Final</version> + <scope>provided</scope> + <exclusions> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </exclusion> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + </exclusion> + <exclusion> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.json</groupId> + <artifactId>json</artifactId> + <version>20160212</version> + </dependency> + <dependency> + <groupId>xmlunit</groupId> + <artifactId>xmlunit</artifactId> + <version>1.6</version> + </dependency> + </dependencies> +</project> diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/BPMNLogger.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/BPMNLogger.java new file mode 100644 index 0000000000..821380f562 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/BPMNLogger.java @@ -0,0 +1,33 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import org.openecomp.mso.logger.MsoLogger; + +public class BPMNLogger { + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + + public static void debug (String isDebugLogEnabled, String LogText) { + if (("true").equalsIgnoreCase(isDebugLogEnabled)) + msoLogger.debug(LogText); + } +} + diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/BadInjectedFieldException.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/BadInjectedFieldException.java new file mode 100644 index 0000000000..84c0954386 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/BadInjectedFieldException.java @@ -0,0 +1,52 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +public class BadInjectedFieldException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + /** + * Constructor. + * + * @param fieldName the field name + * @param taskName the task name + * @param info additional information, e.g. the field value + */ + public BadInjectedFieldException(String fieldName, String taskName, + Object info) { + super(taskName + " injected field '" + fieldName + "' is bad: " + info); + } + + /** + * Constructor. + * + * @param fieldName the field name + * @param taskName the task name + * @param info additional information, e.g. the field value + * @param cause the cause + */ + public BadInjectedFieldException(String fieldName, + String taskName, Object info, Throwable cause) { + super(taskName + " injected field '" + fieldName + "' is bad: " + + info, cause); + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/BaseTask.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/BaseTask.java new file mode 100644 index 0000000000..849c8ba4f8 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/BaseTask.java @@ -0,0 +1,529 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.engine.delegate.Expression; +import org.camunda.bpm.engine.delegate.JavaDelegate; + +/** + * Base class for service tasks. + */ +public abstract class BaseTask implements JavaDelegate { + + /** + * Get the value of a required field. This method throws + * MissingInjectedFieldException if the expression is null, and + * BadInjectedFieldException if the expression evaluates to a null + * value. + * + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @return the field value + */ + protected Object getField(Expression expression, + DelegateExecution execution, String fieldName) { + return getFieldImpl(expression, execution, fieldName, false); + } + + /** + * Gets the value of an optional field. There are three conditions + * in which this method returns null: + * <p> + * <ol> + * <li> The expression itself is null (i.e. the field is missing + * altogether.</li> + * <li>The expression evaluates to a null value.</li> + * <li>The expression references a single variable which has not + * been set.</li> + * </ol> + * <p> + * Examples:<br> + * Expression ${x} when x is null: return null<br> + * Expression ${x} when x is unset: return null<br> + * Expression ${x+y} when x and/or y are unset: exception<br> + * + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @return the field value, possibly null + */ + protected Object getOptionalField(Expression expression, + DelegateExecution execution, String fieldName) { + return getFieldImpl(expression, execution, fieldName, true); + } + + /** + * Get the value of a required output variable field. This method + * throws MissingInjectedFieldException if the expression is null, and + * BadInjectedFieldException if the expression produces a null or + * illegal variable name. Legal variable names contain only letters, + * numbers, and the underscore character ('_'). + * + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @return the output variable name + */ + protected String getOutputField(Expression expression, + DelegateExecution execution, String fieldName) { + Object o = getFieldImpl(expression, execution, fieldName, false); + if (o instanceof String) { + String variable = (String) o; + if (!isLegalVariable(variable)) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), "'" + variable + + "' is not a legal variable name"); + } + return variable; + } else { + throw new BadInjectedFieldException( + fieldName, getTaskName(), "expected a variable name string" + + ", got object of type " + o.getClass().getName()); + } + } + + /** + * Get the value of an optional output variable field. This method + * throws BadInjectedFieldException if the expression produces an illegal + * variable name. Legal variable names contain only letters, numbers, + * and the underscore character ('_'). + * + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @return the output variable name, possibly null + */ + protected String getOptionalOutputField(Expression expression, + DelegateExecution execution, String fieldName) { + Object o = getFieldImpl(expression, execution, fieldName, true); + if (o instanceof String) { + String variable = (String) o; + if (!isLegalVariable(variable)) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), "'" + variable + + "' is not a legal variable name"); + } + return variable; + } else if (o == null) { + return null; + } else { + throw new BadInjectedFieldException( + fieldName, getTaskName(), "expected a variable name string" + + ", got object of type " + o.getClass().getName()); + } + } + + /** + * Get the value of a required string field. This method throws + * MissingInjectedFieldException if the expression is null, and + * BadInjectedFieldException if the expression evaluates to a null + * value. + * <p> + * Note: the result is coerced to a string value, if necessary. + * + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @return the field value + */ + protected String getStringField(Expression expression, + DelegateExecution execution, String fieldName) { + Object o = getFieldImpl(expression, execution, fieldName, false); + if (o instanceof String) { + return (String) o; + } else { + throw new BadInjectedFieldException( + fieldName, getTaskName(), "cannot convert '" + o.toString() + + "' to Integer"); + } + } + + /** + * Gets the value of an optional string field. There are three conditions + * in which this method returns null: + * <p> + * <ol> + * <li> The expression itself is null (i.e. the field is missing + * altogether.</li> + * <li>The expression evaluates to a null value.</li> + * <li>The expression references a single variable which has not + * been set.</li> + * </ol> + * <p> + * Examples:<br> + * Expression ${x} when x is null: return null<br> + * Expression ${x} when x is unset: return null<br> + * Expression ${x+y} when x and/or y are unset: exception<br> + * <p> + * Note: the result is coerced to a string value, if necessary. + * + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @return the field value, possibly null + */ + protected String getOptionalStringField(Expression expression, + DelegateExecution execution, String fieldName) { + Object o = getFieldImpl(expression, execution, fieldName, true); + if (o instanceof String) { + return (String) o; + } else if (o == null) { + return null; + } else { + return o.toString(); + } + } + + /** + * Get the value of a required integer field. This method throws + * MissingInjectedFieldException if the expression is null, and + * BadInjectedFieldException if the expression evaluates to a null + * value or a value that cannot be coerced to an integer. + * + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @return the field value + */ + protected Integer getIntegerField(Expression expression, + DelegateExecution execution, String fieldName) { + Object o = getFieldImpl(expression, execution, fieldName, false); + if (o instanceof Integer) { + return (Integer) o; + } else { + try { + return Integer.parseInt(o.toString()); + } catch (NumberFormatException e) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), "cannot convert '" + o.toString() + + "' to Integer"); + } + } + } + + /** + * Gets the value of an optional integer field. There are three conditions + * in which this method returns null: + * <p> + * <ol> + * <li> The expression itself is null (i.e. the field is missing + * altogether.</li> + * <li>The expression evaluates to a null value.</li> + * <li>The expression references a single variable which has not + * been set.</li> + * </ol> + * <p> + * Examples:<br> + * Expression ${x} when x is null: return null<br> + * Expression ${x} when x is unset: return null<br> + * Expression ${x+y} when x and/or y are unset: exception<br> + * <p> + * Note: the result is coerced to an integer value, if necessary. This + * method throws BadInjectedFieldException if the result cannot be coerced + * to an integer. + * + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @return the field value, possibly null + */ + protected Integer getOptionalIntegerField(Expression expression, + DelegateExecution execution, String fieldName) { + Object o = getFieldImpl(expression, execution, fieldName, true); + if (o instanceof Integer) { + return (Integer) o; + } else if (o == null) { + return null; + } else { + try { + return Integer.parseInt(o.toString()); + } catch (NumberFormatException e) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), "cannot convert '" + o.toString() + + "' to Integer"); + } + } + } + + /** + * Gets the value of an optional long field. There are three conditions + * in which this method returns null: + * <p> + * <ol> + * <li> The expression itself is null (i.e. the field is missing + * altogether.</li> + * <li>The expression evaluates to a null value.</li> + * <li>The expression references a single variable which has not + * been set.</li> + * </ol> + * <p> + * Examples:<br> + * Expression ${x} when x is null: return null<br> + * Expression ${x} when x is unset: return null<br> + * Expression ${x+y} when x and/or y are unset: exception<br> + * <p> + * Note: the result is coerced to a long value, if necessary. This + * method throws BadInjectedFieldException if the result cannot be coerced + * to a long. + * + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @return the field value, possibly null + */ + protected Long getOptionalLongField(Expression expression, + DelegateExecution execution, String fieldName) { + Object o = getFieldImpl(expression, execution, fieldName, true); + if (o instanceof Long) { + return (Long) o; + } else if (o == null) { + return null; + } else { + try { + return Long.parseLong(o.toString()); + } catch (NumberFormatException e) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), "cannot convert '" + o.toString() + + "' to Long"); + } + } + } + + /** + * Get the value of a required long field. This method throws + * MissingInjectedFieldException if the expression is null, and + * BadInjectedFieldException if the expression evaluates to a null + * value or a value that cannot be coerced to a long. + * + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @return the field value + */ + protected Long getLongField(Expression expression, + DelegateExecution execution, String fieldName) { + Object o = getFieldImpl(expression, execution, fieldName, false); + if (o instanceof Long) { + return (Long) o; + } else { + try { + return Long.parseLong(o.toString()); + } catch (NumberFormatException e) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), "cannot convert '" + o.toString() + + "' to Long"); + } + } + } + + /** + * Common implementation for field "getter" methods. + * @param expression the expression + * @param execution the execution + * @param fieldName the field name (for logging and exceptions) + * @param optional true if the field is optional + * @return the field value, possibly null + */ + private Object getFieldImpl(Expression expression, + DelegateExecution execution, String fieldName, boolean optional) { + if (expression == null) { + if (!optional) { + throw new MissingInjectedFieldException( + fieldName, getTaskName()); + } + return null; + } + + Object value; + + try { + value = expression.getValue(execution); + } catch (Exception e) { + if (!optional) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), e.getClass().getSimpleName(), e); + } + + // At this point, we have an exception that occurred while + // evaluating an expression for an optional field. A common + // problem is that the expression is a simple reference to a + // variable which has never been set, e.g. the expression is + // ${x}. The normal activiti behavior is to throw an exception, + // but we don't like that, so we have the following workaround, + // which parses the expression text to see if it is a "simple" + // variable reference, and if so, returns null. If the + // expression is anything other than a single variable + // reference, then an exception is thrown, as it would have + // been without this workaround. + + // Get the expression text so we can parse it + String s = expression.getExpressionText(); + +// if (isDebugEnabled(execution)) { +// logDebug(execution, getTaskName() + " field '" + fieldName +// + "' expression evaluation failed: " + s); +// } + + int len = s.length(); + int i = 0; + + // Skip whitespace + while (i < len && Character.isWhitespace(s.charAt(i))) { + i++; + } + + // Next character must be '$' + if (i == len || s.charAt(i++) != '$') { + throw new BadInjectedFieldException( + fieldName, getTaskName(), e.getClass().getSimpleName(), e); + } + + // Skip whitespace + while (i < len && Character.isWhitespace(s.charAt(i))) { + i++; + } + + // Next character must be '{' + if (i == len || s.charAt(i++) != '{') { + throw new BadInjectedFieldException( + fieldName, getTaskName(), e.getClass().getSimpleName(), e); + } + + // Skip whitespace + while (i < len && Character.isWhitespace(s.charAt(i))) { + i++; + } + + // Collect the variable name + StringBuilder variable = new StringBuilder(); + while (i < len && isWordCharacter(s.charAt(i))) { + variable.append(s.charAt(i)); + i++; + } + + if (variable.length() == 0) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), e.getClass().getSimpleName(), e); + } + + // Skip whitespace + while (i < len && Character.isWhitespace(s.charAt(i))) { + i++; + } + + // Next character must be '}' + if (i == len || s.charAt(i++) != '}') { + throw new BadInjectedFieldException( + fieldName, getTaskName(), e.getClass().getSimpleName(), e); + } + + // Skip whitespace + while (i < len && Character.isWhitespace(s.charAt(i))) { + i++; + } + + // Must be at end of string + if (i != len) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), e.getClass().getSimpleName(), e); + } + +// if (isDebugEnabled(execution)) { +// logDebug(execution, "Checking if variable '" +// + variable.toString() + "' exists"); +// } + + // If the variable exists then the problem was + // something else... + if (execution.hasVariable(variable.toString())) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), e.getClass().getSimpleName(), e); + } + + // The variable doesn't exist. + +// if (isDebugEnabled(execution)) { +// logDebug(execution, "Variable '" + variable.toString() +// + "' does not exist [ok]"); +// } + + value = null; + } + + if (value == null && !optional) { + throw new BadInjectedFieldException( + fieldName, getTaskName(), "required field has null value"); + } + + return value; + } + + /** + * Tests if a character is a "word" character. + * @param c the character + * @return true if the character is a "word" character. + */ + private boolean isWordCharacter(char c) { + return (Character.isLetterOrDigit(c) || c == '_'); + } + + /** + * Tests if the specified string is a legal flow variable name. + * @param name the string + * @return true if the string is a legal flow variable name + */ + private boolean isLegalVariable(String name) { + if (name == null) { + return false; + } + + int len = name.length(); + + if (len == 0) { + return false; + } + + char c = name.charAt(0); + + if (!Character.isLetter(c) && c != '_') { + return false; + } + + for (int i = 1; i < len; i++) { + c = name.charAt(i); + if (!Character.isLetterOrDigit(c) && c != '_') { + return false; + } + } + + return true; + } + + /** + * Returns the name of the task (normally the java class name). + * @return the name of the task + */ + public String getTaskName() { + return getClass().getSimpleName(); + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/HealthCheckHandler.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/HealthCheckHandler.java new file mode 100644 index 0000000000..df6213284c --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/HealthCheckHandler.java @@ -0,0 +1,203 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import org.apache.http.client.config.RequestConfig; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.Map; +import java.util.UUID; + +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.logger.MessageEnum; +import javax.ws.rs.GET; +import javax.ws.rs.HEAD; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; + +import org.camunda.bpm.engine.ProcessEngines; + +@Path("/") +public class HealthCheckHandler { + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + private static final String SITENAME = "mso.sitename"; + private static final String ADPTER_ENDPOINT = "mso.adapters.db.endpoint"; + private static final String CONFIG = "mso.bpmn.urn.properties"; + + private static final String CHECK_HTML = "<!DOCTYPE html><html><head><meta charset=\"ISO-8859-1\"><title>Health Check</title></head><body>Application ready</body></html>"; + private static final String NOT_FOUND = "<!DOCTYPE html><html><head><meta charset=\"ISO-8859-1\"><title>Application Not Started</title></head><body>Application not started. Properties file missing or invalid or database Connection failed</body></html>"; + private static final String NOT_HEALTHY = "<!DOCTYPE html><html><head><meta charset=\"ISO-8859-1\"><title>Application Not Started</title></head><body>Application not available or at least one of the sub-modules is not available.</body></html>"; + public static final Response HEALTH_CHECK_RESPONSE = Response.status (HttpStatus.SC_OK) + .entity (CHECK_HTML) + .build (); + public static final Response HEALTH_CHECK_NOK_RESPONSE = Response.status (HttpStatus.SC_SERVICE_UNAVAILABLE) + .entity (NOT_HEALTHY) + . build (); + public static final Response NOT_STARTED_RESPONSE = Response.status (HttpStatus.SC_SERVICE_UNAVAILABLE) + .entity (NOT_FOUND) + .build (); + + @HEAD + @GET + @Path("/healthcheck") + @Produces("text/html") + public Response healthcheck (@QueryParam("requestId") String requestId) { + MsoLogger.setServiceName ("Healthcheck"); + verifyOldUUID(requestId); + + PropertyConfiguration propertyConfiguration = PropertyConfiguration.getInstance(); + Map<String,String> props = propertyConfiguration.getProperties(CONFIG); + + if (props == null) { + + msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.AvailabilityError, "Unable to load " + CONFIG); + + return NOT_STARTED_RESPONSE; + } + + String siteName = props.get(SITENAME); + String endpoint = props.get(ADPTER_ENDPOINT); + + if (null == siteName || siteName.length () == 0 || null == endpoint || endpoint.length () == 0) { + + msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.DataError, "Unable to load key attributes (" + SITENAME + " or " + ADPTER_ENDPOINT + ") from the config file:" + CONFIG); + + return NOT_STARTED_RESPONSE; + } + + try { + if (!this.getSiteStatus (endpoint, siteName)) { + msoLogger.debug("This site is currently disabled for maintenance."); + return HEALTH_CHECK_NOK_RESPONSE; + } + } catch (Exception e) { + + msoLogger.error(MessageEnum.GENERAL_EXCEPTION_ARG, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception while getting SiteStatus", e); + + msoLogger.debug("Exception while getting SiteStatus"); + return NOT_STARTED_RESPONSE; + } + + try { + ProcessEngines.getDefaultProcessEngine().getIdentityService().createGroupQuery().list(); + } catch (final Exception e) { + + msoLogger.error(MessageEnum.GENERAL_EXCEPTION_ARG, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "Exception while verifying Camunda engine", e); + + msoLogger.debug("Exception while verifying Camunda engine"); + return NOT_STARTED_RESPONSE; + } + + return HEALTH_CHECK_RESPONSE; + } + + + private String verifyOldUUID (String oldId) { + if (!isValidUUID(oldId)) { + String newId = UUID.randomUUID().toString(); + MsoLogger.setLogContext(newId, null); + return newId; + } + MsoLogger.setLogContext(oldId, null); + return oldId; + } + + + private boolean isValidUUID (String id) { + try { + if (null == id) { + return false; + } + UUID uuid = UUID.fromString(id); + return uuid.toString().equalsIgnoreCase(id); + } catch (IllegalArgumentException iae) { + return false; + } + } + + private boolean getSiteStatus (String url, String site) throws Exception { + HttpResponse response; + // set the connection timeout value to 30 seconds (30000 milliseconds) + RequestConfig.Builder requestBuilder = RequestConfig.custom(); + requestBuilder = requestBuilder.setConnectTimeout(30000); + requestBuilder = requestBuilder.setConnectionRequestTimeout(30000); + HttpClientBuilder builder = HttpClientBuilder.create (); + builder.setDefaultRequestConfig (requestBuilder.build ()); + + HttpPost post = new HttpPost(url); + msoLogger.debug("Post url is: " + url); + + //now create a soap request message as follows: + final StringBuffer payload = new StringBuffer(); + payload.append("\n"); + payload.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:req=\"http://com.att.mso/requestsdb\">\n"); + payload.append("<soapenv:Header/>\n"); + payload.append("<soapenv:Body>\n"); + payload.append("<req:getSiteStatus>\n"); + payload.append("<siteName>" + site + "</siteName>\n"); + payload.append("</req:getSiteStatus>\n"); + payload.append("</soapenv:Body>\n"); + payload.append("</soapenv:Envelope>\n"); + + msoLogger.debug ("Initialize SOAP request to url:" + url); + msoLogger.debug ("The payload of the request is:" + payload); + HttpEntity entity = new StringEntity(payload.toString(),"UTF-8"); + post.setEntity(entity); + + try (CloseableHttpClient client = builder.build()) { + response = client.execute(post); + msoLogger.debug("Response received is:" + response); + + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode != 200) { + + msoLogger.error(MessageEnum.GENERAL_EXCEPTION_ARG, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.DataError, + "Communication with DB Adapter failed, The response received from DB Adapter is with failed status code:" + statusCode); + + Exception e = new Exception("Communication with DB Adapter failed"); + throw e; + } + BufferedReader rd = new BufferedReader( + new InputStreamReader(response.getEntity().getContent())); + + StringBuffer result = new StringBuffer(); + String line = ""; + while ((line = rd.readLine()) != null) { + result.append(line); + } + msoLogger.debug("Content of the response is:" + result); + String status = result.substring(result.indexOf("<return>") + 8, result.indexOf("</return>")); + + return Boolean.valueOf(status); + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/LogTask.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/LogTask.java new file mode 100644 index 0000000000..41033d9e12 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/LogTask.java @@ -0,0 +1,98 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.engine.delegate.Expression; + +import org.openecomp.mso.logger.MsoAlarmLogger; +import org.openecomp.mso.logger.MsoLogger; + +/** + * Logs a text message. The text may contain variable references. + * For example:<br/><br/> + * name=$name, address=$address + * <p> + * Required fields:<br/><br/> + * text: The text to log<br/> + * Optional fields:<br/><br/> + * level: The log level (TRACE, DEBUG, INFO, WARN, ERROR)<br/> + */ +public class LogTask extends BaseTask { + + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger(); + + private Expression text; + private Expression level; + + public void execute(DelegateExecution execution) throws Exception { + String theText = getStringField(text, execution, "text"); + + + + StringBuilder out = new StringBuilder(); + StringBuilder var = new StringBuilder(); + boolean inVar = false; + + int pos = 0; + int len = theText.length(); + + while (pos < len) { + char c = theText.charAt(pos++); + + if (inVar && !Character.isLetterOrDigit(c) && c != '_') { + if (var.length() > 0) { + Object value = execution.getVariable(var.toString()); + + if (value != null) { + out.append(value.toString()); + } + + var.setLength(0); + } + + inVar = false; + } + + if (c == '$') { + inVar = true; + } else { + if (inVar) { + var.append(c); + } else { + out.append(c); + } + } + } + + if (inVar && var.length() > 0) { + Object value = execution.getVariable(var.toString()); + if (value != null) { + out.append(value.toString()); + } + } + + + + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/MissingInjectedFieldException.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/MissingInjectedFieldException.java new file mode 100644 index 0000000000..589a111b3b --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/MissingInjectedFieldException.java @@ -0,0 +1,39 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +/** + * A BadInjectedFieldException that indicates a required field is missing. + */ +public class MissingInjectedFieldException extends BadInjectedFieldException { + + private static final long serialVersionUID = 1L; + + /** + * Constructor. + * + * @param fieldName the field name + * @param taskName the task name + */ + public MissingInjectedFieldException(String fieldName, String taskName) { + super(fieldName, taskName, "missing required field"); + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfiguration.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfiguration.java new file mode 100644 index 0000000000..90df1da7e5 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfiguration.java @@ -0,0 +1,440 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.ClosedWatchServiceException; +import java.nio.file.FileSystems; +import java.nio.file.Path; +import java.nio.file.WatchEvent; +import java.nio.file.WatchKey; +import java.nio.file.WatchService; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.ConcurrentHashMap; + +import org.slf4j.MDC; + +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoLogger; + +/** + * Loads the property configuration from file system and refreshes the + * properties when the property gets changed. + * + * WARNING: automatic refreshes might not work on network filesystems. + */ +public class PropertyConfiguration { + + /** + * The base name of the MSO BPMN properties file (mso.bpmn.properties). + */ + public static final String MSO_BPMN_PROPERTIES = "mso.bpmn.properties"; + + /** + * The base name of the MSO BPMN URN-Mappings properties file (mso.bpmn.urn.properties). + */ + public static final String MSO_BPMN_URN_PROPERTIES = "mso.bpmn.urn.properties"; + + /** + * The name of the meta-property holding the time the properties were loaded + * from the file. + */ + public static final String TIMESTAMP_PROPERTY = "mso.properties.timestamp"; + + private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + + private static final List<String> SUPPORTED_FILES = + Arrays.asList(MSO_BPMN_PROPERTIES, MSO_BPMN_URN_PROPERTIES); + + private volatile String msoConfigPath = null; + + private final ConcurrentHashMap<String, Map<String, String>> propFileCache = + new ConcurrentHashMap<String, Map<String, String>>(); + + private final Object CACHELOCK = new Object(); + private FileWatcherThread fileWatcherThread = null; + + // The key is the file name + private Map<String, TimerTask> timerTaskMap = new HashMap<String, TimerTask>(); + + /** + * Singleton holder pattern eliminates locking when accessing the instance + * and still provides for lazy initialization. + */ + private static class PropertyConfigurationInstanceHolder { + private static PropertyConfiguration instance = new PropertyConfiguration(); + } + + /** + * Gets the one and only instance of this class. + */ + public static PropertyConfiguration getInstance() { + return PropertyConfigurationInstanceHolder.instance; + } + + /** + * Returns the list of supported files. + */ + public static List<String> supportedFiles() { + return new ArrayList<String>(SUPPORTED_FILES); + } + + /** + * Private Constructor. + */ + private PropertyConfiguration() { + startUp(); + } + + /** + * May be called to restart the PropertyConfiguration if it was previously shut down. + */ + public synchronized void startUp() { + msoConfigPath = System.getProperty("mso.config.path"); + + if (msoConfigPath == null) { + LOGGER.debug("mso.config.path JVM system property is not set"); + return; + } + + try { + Path directory = FileSystems.getDefault().getPath(msoConfigPath); + WatchService watchService = FileSystems.getDefault().newWatchService(); + directory.register(watchService, ENTRY_MODIFY); + + LOGGER.info(MessageEnum.BPMN_GENERAL_INFO, "BPMN", "Starting FileWatcherThread"); + LOGGER.debug("Starting FileWatcherThread"); + fileWatcherThread = new FileWatcherThread(watchService); + fileWatcherThread.start(); + } catch (Exception e) { + LOGGER.debug("Error occurred while starting FileWatcherThread:", e); + LOGGER.error( + MessageEnum.BPMN_GENERAL_EXCEPTION, + "BPMN", + "Property Configuration", + MsoLogger.ErrorCode.UnknownError, + "Error occurred while starting FileWatcherThread:" + e); + } + } + + /** + * May be called to shut down the PropertyConfiguration. A shutDown followed + * by a startUp will reset the PropertyConfiguration to its initial state. + */ + public synchronized void shutDown() { + if (fileWatcherThread != null) { + LOGGER.debug("Shutting down FileWatcherThread " + System.identityHashCode(fileWatcherThread)); + fileWatcherThread.shutdown(); + + long waitInSeconds = 10; + + try { + fileWatcherThread.join(waitInSeconds * 1000); + } catch (InterruptedException e) { + LOGGER.debug("FileWatcherThread " + System.identityHashCode(fileWatcherThread) + + " shutdown did not occur within " + waitInSeconds + " seconds"); + } + + LOGGER.debug("Finished shutting down FileWatcherThread " + System.identityHashCode(fileWatcherThread)); + fileWatcherThread = null; + } + + clearCache(); + msoConfigPath = null; + } + + public synchronized boolean isFileWatcherRunning() { + return fileWatcherThread != null; + } + + public void clearCache() { + synchronized(CACHELOCK) { + propFileCache.clear(); + } + } + + public int cacheSize() { + return propFileCache.size(); + } + + // TODO: throw IOException? + public Map<String, String> getProperties(String fileName) { + Map<String, String> properties = propFileCache.get(fileName); + + if (properties == null) { + if (!SUPPORTED_FILES.contains(fileName)) { + throw new IllegalArgumentException("Not a supported property file: " + fileName); + } + + if (msoConfigPath == null) { + LOGGER.debug("mso.config.path JVM system property must be set to load " + fileName); + + LOGGER.error( + MessageEnum.BPMN_GENERAL_EXCEPTION, + "BPMN", + MDC.get(fileName), + MsoLogger.ErrorCode.UnknownError, + "mso.config.path JVM system property must be set to load " + fileName); + + return null; + } + + try { + properties = readProperties(new File(msoConfigPath, fileName)); + } catch (Exception e) { + LOGGER.debug("Error loading " + fileName); + + LOGGER.error( + MessageEnum.BPMN_GENERAL_EXCEPTION, + "BPMN", + MDC.get(fileName), + MsoLogger.ErrorCode.UnknownError, + "Error loading " + fileName, e); + + return null; + } + } + + return Collections.unmodifiableMap(properties); + } + + /** + * Reads properties from the specified file, updates the property file cache, and + * returns the properties in a map. + * @param file the file to read + * @param reload true if this is a reload event + * @return a map of properties + */ + private Map<String, String> readProperties(File file) throws IOException { + String fileName = file.getName(); + LOGGER.debug("Reading " + fileName); + + Map<String, String> properties = new HashMap<String, String>(); + Properties newProperties = new Properties(); + + FileReader reader = null; + try { + reader = new FileReader(file); + newProperties.load(reader); + } finally { + if (reader != null) { + try { + reader.close(); + LOGGER.debug("Closed " + fileName); + } catch (Exception e) { + // Ignore + } + } + } + + for (Entry<Object, Object> entry : newProperties.entrySet()) { + properties.put(entry.getKey().toString(), entry.getValue().toString()); + } + + properties.put(TIMESTAMP_PROPERTY, String.valueOf(System.currentTimeMillis())); + + synchronized(CACHELOCK) { + propFileCache.put(fileName, properties); + } + + return properties; + } + + /** + * File watcher thread which monitors a directory for file modification. + */ + private class FileWatcherThread extends Thread { + private final WatchService watchService; + private final Timer timer = new Timer("FileWatcherTimer"); + + public FileWatcherThread(WatchService service) { + this.watchService = service; + } + + public void shutdown() { + interrupt(); + } + + public void run() { + LOGGER.info(MessageEnum.BPMN_GENERAL_INFO, "BPMN", + "FileWatcherThread started"); + + LOGGER.debug("Started FileWatcherThread " + System.identityHashCode(fileWatcherThread)); + + try { + WatchKey watchKey = null; + + while (!isInterrupted()) { + try { + if (watchKey != null) { + watchKey.reset(); + } + + watchKey = watchService.take(); + + for (WatchEvent<?> event : watchKey.pollEvents()) { + @SuppressWarnings("unchecked") + WatchEvent<Path> pathEvent = (WatchEvent<Path>) event; + + if ("EVENT_OVERFLOW".equals(pathEvent.kind())) { + LOGGER.debug("Ignored overflow event for " + msoConfigPath); + continue; + } + + String fileName = pathEvent.context().getFileName().toString(); + + if (!SUPPORTED_FILES.contains(fileName)) { + LOGGER.debug("Ignored modify event for " + fileName); + continue; + } + + LOGGER.debug("Configuration file has changed: " + fileName); + + LOGGER.info(MessageEnum.BPMN_GENERAL_INFO, "BPMN", + "Configuation file has changed: " + fileName); + + // There's a potential problem here. The MODIFY event is + // triggered as soon as somebody starts writing the file but + // there's no obvious way to know when the write is done. If we + // read the file while the write is still in progress, then the + // cache can really be messed up. As a workaround, we use a timer + // to sleep for at least one second, and then we sleep for as long + // as it takes for the file's lastModified time to stop changing. + // The timer has another benefit: it consolidates multiple events + // that we seem to receive when a file is modified. + + synchronized(timerTaskMap) { + TimerTask task = timerTaskMap.get(fileName); + + if (task != null) { + task.cancel(); + } + + File file = new File(msoConfigPath, fileName); + task = new DelayTimerTask(timer, file, 1000); + timerTaskMap.put(fileName, task); + } + } + } catch (InterruptedException e) { + break; + } catch (ClosedWatchServiceException e) { + LOGGER.info( + MessageEnum.BPMN_GENERAL_INFO, + "BPMN", + "FileWatcherThread shut down because the watch service was closed"); + break; + } catch (Exception e) { + LOGGER.error( + MessageEnum.BPMN_GENERAL_EXCEPTION, + "BPMN", + "Property Configuration", + MsoLogger.ErrorCode.UnknownError, + "FileWatcherThread caught unexpected " + e.getClass().getSimpleName(), e); + } + + } + } finally { + timer.cancel(); + + synchronized(timerTaskMap) { + timerTaskMap.clear(); + } + + try { + watchService.close(); + } catch (IOException e) { + LOGGER.debug("FileWatcherThread caught " + e.getClass().getSimpleName() + + " while closing the watch service"); + } + + LOGGER.info(MessageEnum.BPMN_GENERAL_INFO, "BPMN", + "FileWatcherThread stopped"); + } + } + } + + private class DelayTimerTask extends TimerTask { + private final File file; + private final long lastModifiedTime; + private final Timer timer; + + public DelayTimerTask(Timer timer, File file, long delay) { + this.timer = timer; + this.file = file; + this.lastModifiedTime = file.lastModified(); + timer.schedule(this, delay); + } + + @Override + public void run() { + try { + long newLastModifiedTime = file.lastModified(); + + if (newLastModifiedTime == lastModifiedTime) { + try { + readProperties(file); + } catch (Exception e) { + LOGGER.error( + MessageEnum.BPMN_GENERAL_EXCEPTION, + "BPMN", + "Property Configuration", + MsoLogger.ErrorCode.UnknownError, + "Unable to reload " + file, e); + } + } else { + LOGGER.debug("Delaying reload of " + file + " by 1 second"); + + synchronized(timerTaskMap) { + TimerTask task = timerTaskMap.get(file.getName()); + + if (task != null && task != this) { + task.cancel(); + } + + task = new DelayTimerTask(timer, file, 1000); + timerTaskMap.put(file.getName(), task); + } + } + } finally { + synchronized(timerTaskMap) { + TimerTask task = timerTaskMap.get(file.getName()); + + if (task == this) { + timerTaskMap.remove(file.getName()); + } + } + } + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/ReadConfigTask.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/ReadConfigTask.java new file mode 100644 index 0000000000..b46ffcd7f7 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/ReadConfigTask.java @@ -0,0 +1,111 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import org.camunda.bpm.engine.ProcessEngineException; +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.engine.delegate.Expression; + +import org.openecomp.mso.logger.MsoLogger; + +/** + * Reads the contents of a resource file as a string and stores it in an + * execution variable. + * <p> + * Required fields:<br/><br/> + * file: the resource file path<br/> + * outputVariable: the output variable name<br/> + */ +public class ReadConfigTask extends BaseTask { + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + private static Properties properties = null; + + private Expression propertiesFile; + + public void execute(DelegateExecution execution) throws Exception { + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("Started Executing " + getTaskName()); + } + + String thePropertiesFile = + getStringField(propertiesFile, execution, "propertiesFile"); + + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("propertiesFile = " + thePropertiesFile); + } + + Boolean shouldFail = (Boolean) execution.getVariable("shouldFail"); + + if (shouldFail != null && shouldFail) { + throw new ProcessEngineException(getClass().getSimpleName() + " Failed"); + } + + synchronized (ReadConfigTask.class) { + if (properties == null) { + properties = new Properties(); + + InputStream stream = null; + + try { + stream = getClass().getResourceAsStream(thePropertiesFile); + + if (stream == null) { + throw new IOException("Resource not found: " + thePropertiesFile); + } + + properties.load(stream); + + stream.close(); + stream = null; + + } finally { + if (stream != null) { + try { + stream.close(); + } catch (Exception e) { + // Do nothing + } + } + } + } + } + + for (Object objectKey : properties.keySet()) { + String key = (String) objectKey; + String value = properties.getProperty(key); + + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("Setting variable '" + key + "' to '" + value + "'"); + } + + execution.setVariable(key, value); + } + + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("Done Executing " + getTaskName()); + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/ReadFileTask.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/ReadFileTask.java new file mode 100644 index 0000000000..389fdc0518 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/ReadFileTask.java @@ -0,0 +1,117 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import org.camunda.bpm.engine.ProcessEngineException; +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.engine.delegate.Expression; + +import org.openecomp.mso.logger.MsoLogger; + +/** + * Conditionally reads the contents of a resource file as a string and stores it + * in an execution variable. The file is read only if the value of the input + * variable is null. + * <p> + * Required fields:<br/><br/> + * file: the resource file path<br/> + * inputVariable: the input variable name<br/> + * outputVariable: the output variable name<br/> + */ +public class ReadFileTask extends BaseTask { + + private Expression file; + private Expression inputVariable; + private Expression outputVariable; + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + + public void execute(DelegateExecution execution) throws Exception { + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("Started Executing " + getTaskName()); + } + + String theInputVariable = + getStringField(inputVariable, execution, "inputVariable"); + String theOutputVariable = + getOutputField(outputVariable, execution, "outputVariable"); + String theFile =getStringField(file, execution, "file"); + + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("inputVariable = " + theInputVariable + + " outputVariable = " + theOutputVariable + + "file = " + theFile); + } + + Boolean shouldFail = (Boolean) execution.getVariable("shouldFail"); + + if (shouldFail != null && shouldFail) { + throw new ProcessEngineException(getClass().getSimpleName() + " Failed"); + } + + Object value = execution.getVariable(theInputVariable); + + if (value == null) { + InputStream xmlStream = null; + + try { + xmlStream = getClass().getResourceAsStream(theFile); + + if (xmlStream == null) { + throw new IOException("Resource not found: " + theFile); + } + + BufferedReader reader = new BufferedReader(new InputStreamReader(xmlStream)); + StringBuilder output = new StringBuilder(); + String line; + + while ((line = reader.readLine()) != null) { + output.append(line); + } + + xmlStream.close(); + xmlStream = null; + + value = output.toString(); + + } finally { + if (xmlStream != null) { + try { + xmlStream.close(); + } catch (Exception e) { + // Do nothing + } + } + } + } + execution.setVariable(theInputVariable, value); + execution.setVariable(theOutputVariable, value); + System.out.println("ServiceInput - " + execution.getVariable("gServiceInput")); + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("Done Executing " + getTaskName()); + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/ResponseBuilder.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/ResponseBuilder.java new file mode 100644 index 0000000000..632933d3a3 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/ResponseBuilder.java @@ -0,0 +1,297 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import org.camunda.bpm.engine.delegate.DelegateExecution; + +/** + * Used in the output variable mapping configuration of subflow call activity + * tasks to normalize subflow responses. The output mapping is normally set up + * as follows. Note that the order of these mappings is important! + * <p> + * OUTPUT MAPPING + * <pre> + * SOURCE EXPRESSION TARGET + * ${ResponseBuilder.buildWorkflowException(execution)} WorkflowException + * ${ResponseBuilder.buildWorkflowResponse(execution)} SomeResponseVariable + * </pre> + */ +public class ResponseBuilder implements java.io.Serializable { + private static final long serialVersionUID = 1L; + + /** + * Creates a WorkflowException using data from the execution variables. + * If the variables do not indicate that there was an error, null + * is returned. + * @param execution the execution + */ + public WorkflowException buildWorkflowException(DelegateExecution execution) { + + String method = getClass().getSimpleName() + ".buildWorkflowException(" + + "execution=" + execution.getId() + + ")"; + String isDebugLogEnabled = (String) execution.getVariable("isDebugLogEnabled"); + logDebug("Entered " + method, isDebugLogEnabled); + + String prefix = (String) execution.getVariable("prefix"); + String processKey = getProcessKey(execution); + + logDebug("processKey=" + processKey, isDebugLogEnabled); + + // See if there"s already a WorkflowException object in the execution. + WorkflowException theException = (WorkflowException) execution.getVariable("WorkflowException"); + + if (theException != null) { + logDebug("Exited " + method + " - propagated " + theException, isDebugLogEnabled); + return theException; + } + + // Look in the legacy variables: ErrorResponse and ResponseCode + + String errorResponse = trimString(execution.getVariable(prefix + "ErrorResponse"), null); + String responseCode = trimString(execution.getVariable(prefix + "ResponseCode"), null); + logDebug("errorResponse=" + errorResponse, isDebugLogEnabled); + logDebug("responseCode=" + responseCode, isDebugLogEnabled); + if (errorResponse != null || !isOneOf(responseCode, null, "0", "200", "201", "202", "204")) { + // This is an error condition. We need to return a WorkflowExcpetion + + if (errorResponse == null) { + // No errorResponse string. See if there"s something in the Response variable + String response = trimString(execution.getVariable(processKey + "Response"), null); + if (response == null) { + errorResponse = "Received response code " + responseCode + " from " + processKey; + } else { + errorResponse = response; + } + } + + // Some subflows may try to return a WorkflowException as XML in the + // errorResponse. If provided, use the errorCode and errorMessage + // from the XML + + String maybeXML = removeXMLNamespaces(errorResponse); + + String xmlErrorMessage = trimString(getXMLTextElement(maybeXML, "ErrorMessage"), null); + String xmlErrorCode = trimString(getXMLTextElement(maybeXML, "ErrorCode"), null); + + if (xmlErrorMessage != null || xmlErrorCode != null) { + logDebug("xmlErrorMessage=" + xmlErrorMessage, isDebugLogEnabled); + logDebug("xmlErrorCode=" + xmlErrorCode, isDebugLogEnabled); + + if (xmlErrorMessage == null) { + errorResponse = "Received error code " + xmlErrorCode + " from " + processKey; + } else { + errorResponse = xmlErrorMessage; + } + + if (xmlErrorCode != null) { + responseCode = xmlErrorCode; + } + } + + // Convert the responseCode to an integer + + int intResponseCode; + + try { + intResponseCode = Integer.valueOf(responseCode); + } catch (NumberFormatException e) { + // Internal Error + intResponseCode = 2000; + } + + // Convert 3-digit HTTP response codes (we should not be using them here) + // to appropriate 4-digit response codes + + if (intResponseCode < 1000) { + if (intResponseCode >= 400 && intResponseCode <= 499) { + // Invalid Message + intResponseCode = 1002; + } else { + // Internal Error + intResponseCode = 2000; + } + } + + // Create a new WorkflowException object + + theException = new WorkflowException(processKey, intResponseCode, errorResponse); + execution.setVariable("WorkflowException", theException); + logDebug("Exited " + method + " - created " + theException, isDebugLogEnabled); + return theException; + } + + logDebug("Exited " + method + " - no WorkflowException", isDebugLogEnabled); + return null; + } + + /** + * Returns the "Response" variable, unless the execution variables + * indicate there was an error. In that case, null is returned. + * @param execution the execution + */ + public Object buildWorkflowResponse(DelegateExecution execution) { + + String method = getClass().getSimpleName() + ".buildWorkflowResponse(" + + "execution=" + execution.getId() + + ")"; + String isDebugLogEnabled = (String) execution.getVariable("isDebugLogEnabled"); + logDebug("Entered " + method, isDebugLogEnabled); + + String prefix = (String) execution.getVariable("prefix"); + String processKey = getProcessKey(execution); + + Object theResponse = null; + + WorkflowException theException = (WorkflowException) execution.getVariable("WorkflowException"); + String errorResponse = trimString(execution.getVariable(prefix + "ErrorResponse"), null); + String responseCode = trimString(execution.getVariable(prefix + "ResponseCode"), null); + + if (theException == null && errorResponse == null && + isOneOf(responseCode, null, "0", "200", "201", "202", "204")) { + + theResponse = execution.getVariable("WorkflowResponse"); + + if (theResponse == null) { + theResponse = execution.getVariable(processKey + "Response"); + } + } + + logDebug("Exited " + method, isDebugLogEnabled); + return theResponse; + } + + /** + * Checks if the specified item is one of the specified values. + * @param item the item + * @param values the list of values + * @return true if the item is in the list of values + */ + private boolean isOneOf(Object item, Object ... values) { + if (values == null) { + return item == null; + } + + for (Object value : values) { + if (value == null) { + if (item == null) { + return true; + } + } else { + if (value.equals(item)) { + return true; + } + } + } + + return false; + } + + /** + * Creates a string value of the specified object, trimming whitespace in + * the process. If the result is null or empty, the specified empty string + * value is returned. Otherwise the trimmed value is returned. This method + * helps ensure consistent treatment of empty and null strings. + * @param object the object to convert (possibly null) + * @param emptyStringValue the desired value for empty results + */ + private String trimString(Object object, String emptyStringValue) { + if (object == null) { + return emptyStringValue; + } + + String s = String.valueOf(object).trim(); + return s.equals("") ? emptyStringValue : s; + } + + /** + * Returns the process definition key (i.e. the process name) from the + * execution. + * @param execution the execution + */ + private String getProcessKey(DelegateExecution execution) { + Object testKey = execution.getVariable("testProcessKey"); + + if (testKey instanceof String) { + return (String) testKey; + } + + return execution.getProcessEngineServices().getRepositoryService() + .getProcessDefinition(execution.getProcessDefinitionId()).getKey(); + } + + /** + * Logs a message at the DEBUG level. + * @param message the message + * @param isDebugLogEnabled a flag indicating if DEBUG level is enabled + */ + private void logDebug(String message, String isDebugLogEnabled) { + BPMNLogger.debug(isDebugLogEnabled, message); + } + + /** + * Removes namespace definitions and prefixes from XML, if any. + */ + private String removeXMLNamespaces(String xml) { + // remove xmlns declaration + xml = xml.replaceAll("xmlns.*?(\"|\').*?(\"|\')", ""); + + // remove opening tag prefix + xml = xml.replaceAll("(<)(\\w+:)(.*?>)", "$1$3"); + + // remove closing tags prefix + xml = xml.replaceAll("(</)(\\w+:)(.*?>)", "$1$3"); + + // remove extra spaces left when xmlns declarations are removed + xml = xml.replaceAll("\\s+>", ">"); + + return xml; + } + + /** + * Extracts text from an XML element. This method is not namespace aware + * (namespaces are ignored). The first matching element is selected. + * @param xml the XML document or fragment + * @param tag the desired element, e.g. "<name>" + * @return the element text, or null if the element was not found + */ + private String getXMLTextElement(String xml, String tag) { + xml = removeXMLNamespaces(xml); + + if (!tag.startsWith("<")) { + tag = "<" + tag + ">"; + } + + int start = xml.indexOf(tag); + + if (start == -1) { + return null; + } + + int end = xml.indexOf('<', start + tag.length()); + + if (end == -1) { + return null; + } + + return xml.substring(start + tag.length(), end); + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/RollbackData.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/RollbackData.java new file mode 100644 index 0000000000..1b2bb8752c --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/RollbackData.java @@ -0,0 +1,108 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +/** + * An object that stores data for rollbacks. Data is organized by type. A + * type is simply a string identifier. Multiple types of data may be stored + * in the same object for separate rollback operations. + */ +public class RollbackData implements Serializable { + private static final long serialVersionUID = 1L; + + private Map<String, Map<String, Serializable>> dictionary = + new HashMap<String, Map<String, Serializable>>(); + + /** + * Returns true if the specified type is stored in this object. + * @param type the data type + */ + public boolean hasType(String type) { + return dictionary.containsKey(type); + } + + /** + * Stores a single item. + * @param type the data type + * @param key the key + * @param value the value + */ + public void put(String type, String key, String value) { + Map<String, Serializable> mapForType = dictionary.get(type); + + if (mapForType == null) { + mapForType = new HashMap<String, Serializable>(); + dictionary.put(type, mapForType); + } + + mapForType.put(key, value); + } + + /** + * Gets a single item. + * @param type the data type + * @param key the key + * @return the item or null if there is no item for the specified type and key + */ + public Serializable get(String type, String key) { + Map<String, Serializable> mapForType = dictionary.get(type); + + if (mapForType == null) { + return null; + } + + return mapForType.get(key); + } + + /** + * Gets a map containing all items associated with the specified data type. + * @param type the data type + * @return a map, or null if there are no items associated with the specified + * data type + */ + public Map<String, Serializable> get(String type) { + return dictionary.get(type); + } + + /** + * Returns a string representation of this object. + */ + public String toString() { + StringBuilder out = new StringBuilder(); + out.append(getClass().getSimpleName()); + out.append('['); + boolean hasOne = false; + for (String type : dictionary.keySet()) { + if (hasOne) { + out.append(','); + } + out.append(type); + out.append(dictionary.get(type)); + hasOne = true; + } + out.append(']'); + return out.toString(); + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/URNMappingsTask.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/URNMappingsTask.java new file mode 100644 index 0000000000..6c6d96ad2c --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/URNMappingsTask.java @@ -0,0 +1,32 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import org.camunda.bpm.engine.delegate.DelegateExecution; + +/** + * DEPRECATION WARNING: setting of URN mappings is now done by a plugin. + */ +@Deprecated +public class URNMappingsTask extends BaseTask { + public void execute(DelegateExecution execution) throws Exception { + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/WorkflowException.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/WorkflowException.java new file mode 100644 index 0000000000..559ec6df00 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/WorkflowException.java @@ -0,0 +1,84 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import java.io.Serializable; + +/** + * An object that represents a workflow exception. + */ +public class WorkflowException implements Serializable { + private static final long serialVersionUID = 1L; + + private final String processKey; + private final int errorCode; + private final String errorMessage; + + /** + * Constructor + * @param processKey the process key for the process that generated the exception + * @param errorCode the numeric error code (normally 1xxx or greater) + * @param errorMessage a short error message + */ + public WorkflowException(String processKey, int errorCode, + String errorMessage) { + this.processKey = processKey; + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } + + /** + * Returns the process key. + */ + public String getProcessKey() { + return processKey; + } + + /** + * Returns the error code. + */ + public int getErrorCode() { + return errorCode; + } + + /** + * Returns the error message. + */ + public String getErrorMessage() { + return errorMessage; + } + + /** + * Returns a string representation of this object. + */ + public String toString() { + StringBuilder out = new StringBuilder(); + out.append(getClass().getSimpleName()); + out.append("[processKey="); + out.append(getProcessKey()); + out.append(",errorCode="); + out.append(getErrorCode()); + out.append(",errorMessage="); + out.append(getErrorMessage()); + out.append("]"); + return out.toString(); + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/XQueryScriptTask.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/XQueryScriptTask.java new file mode 100644 index 0000000000..8a7b20016b --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/XQueryScriptTask.java @@ -0,0 +1,243 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.net.URI; +import java.util.Iterator; + +import javax.xml.transform.stream.StreamSource; + +import org.camunda.bpm.engine.ProcessEngineException; +import org.camunda.bpm.engine.delegate.DelegateExecution; +//import java.util.logging.Logger; +import org.camunda.bpm.engine.delegate.Expression; + +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoLogger; + +import net.sf.saxon.Configuration; +import net.sf.saxon.s9api.DocumentBuilder; +import net.sf.saxon.s9api.Processor; +import net.sf.saxon.s9api.QName; +import net.sf.saxon.s9api.XQueryCompiler; +import net.sf.saxon.s9api.XQueryEvaluator; +import net.sf.saxon.s9api.XQueryExecutable; +import net.sf.saxon.s9api.XdmAtomicValue; +import net.sf.saxon.s9api.XdmItem; +import net.sf.saxon.s9api.XdmNode; + +/** + * Executes an XQuery script. + * <p> + * Required fields:<br/><br/> + * scriptFile: the XQuery script file path<br/> + * outputVariable: the output variable name<br/> + * <p> + * Optional fields:<br/><br/> + * xmlInputVariables: CSV list of variables containing + * XML data to be injected into the script<br/> + * atomicInputVariables: CSV list of variables containing + * atomic data to be injected into the script<br/> + */ +public class XQueryScriptTask extends BaseTask { + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + + private Expression scriptFile; + private Expression xmlInputVariables; + private Expression atomicInputVariables; + private Expression outputVariable; + + public void execute(DelegateExecution execution) throws Exception { + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("Started Executing " + getTaskName()); + } + + String theScriptFile = + getStringField(scriptFile, execution, "scriptFile"); + String theXmlInputVariables = + getOptionalStringField(xmlInputVariables, execution, "xmlInputVariables"); + String theAtomicInputVariables = + getOptionalStringField(atomicInputVariables, execution, "atomicInputVariables"); + String theOutputVariable = + getStringField(outputVariable, execution, "outputVariable"); + + if (msoLogger.isDebugEnabled()) { + System.out.println("scriptFile = " + theScriptFile + + " xmlInputVariables = " + theXmlInputVariables + + " atomicInputVariables = " + theAtomicInputVariables + + "outputVariable = " + theOutputVariable); + } + + String[] xmlInputVariableArray = (theXmlInputVariables == null) + ? new String[0] : theXmlInputVariables.split(",[ ]*"); + + String[] atomicInputVariableArray = (theAtomicInputVariables == null) + ? new String[0] : theAtomicInputVariables.split(",[ ]*"); + + Boolean shouldFail = (Boolean) execution.getVariable("shouldFail"); + + if (shouldFail != null && shouldFail) { + throw new ProcessEngineException(getClass().getSimpleName() + " Failed"); + } + + // The script could be compiled once and reused, but we are reading it + // and compiling it every time. + Configuration configuration = new Configuration(); + Processor processor = new Processor(configuration); + XQueryCompiler compiler = processor.newXQueryCompiler(); + XQueryExecutable executable = compile(compiler, theScriptFile); + + // The evaluator must not be shared by multiple threads. Here is where + // the initial context may be set, as well as values of external variables. + XQueryEvaluator evaluator = executable.load(); + + // Convert XML string variable content to document-node objects and inject + // these into the evaluator. Note: the script must accept the document-node + // type. Most MSO scripts today expect element() input, not document-node + // input. TODO: figure out how to pass the variable data as element() types. + + for (String xmlInputVariable : xmlInputVariableArray) { + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("Injecting XML variable '" + xmlInputVariable + "'"); + msoLogger.debug("printing the variable content>>'" + execution.getVariable(xmlInputVariable) +"'"); + } + + String xml = (String) execution.getVariable(xmlInputVariable); + DocumentBuilder documentBuilder = processor.newDocumentBuilder(); + StreamSource source = new StreamSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))); + XdmNode xdmNode = documentBuilder.build(source); + + // Inject the document-node object into the XQueryEvaluator. + // TODO: transform it to an element() + QName variable = new QName(xmlInputVariable); + evaluator.setExternalVariable(variable, xdmNode); + } + + // Inject atomic variables into the evaluator. + + for (String atomicInputVariable : atomicInputVariableArray) { + + if (msoLogger.isDebugEnabled()) { + System.out.println("Injecting object variable '" + + atomicInputVariable + "'"); + } + + QName variable = new QName(atomicInputVariable); + Object value = execution.getVariable(atomicInputVariable); + + if (value == null) { + // The variable value is null, so we have no way to know what + // type it is. I don't know how to deal with this, so for + // now, just skip it. + + msoLogger.warn (MessageEnum.BPMN_VARIABLE_NULL, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.DataError, atomicInputVariable); + + continue; + } + + // There might be a better way to do this... + if (value instanceof BigDecimal) { + evaluator.setExternalVariable(variable, + new XdmAtomicValue((BigDecimal) value)); + } else if (value instanceof Boolean) { + evaluator.setExternalVariable(variable, + new XdmAtomicValue((Boolean) value)); + } else if (value instanceof Double) { + evaluator.setExternalVariable(variable, + new XdmAtomicValue((Double) value)); + } else if (value instanceof Float) { + evaluator.setExternalVariable(variable, + new XdmAtomicValue((Float) value)); + } else if (value instanceof Long) { + evaluator.setExternalVariable(variable, + new XdmAtomicValue((Long) value)); + } else if (value instanceof String) { + evaluator.setExternalVariable(variable, + new XdmAtomicValue((String) value)); + } else if (value instanceof URI) { + evaluator.setExternalVariable(variable, + new XdmAtomicValue((URI) value)); + } else { + throw new BadInjectedFieldException( + "atomicInputVariables", getTaskName(), + "'" + atomicInputVariable + "' type is not supported: " + + value.getClass()); + } + } + + // Evaluate the query and collect the output. + StringBuilder output = new StringBuilder(); + Iterator<XdmItem> xdmItems = evaluator.iterator(); + while (xdmItems.hasNext()) { + XdmItem item = xdmItems.next(); + + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("XQuery result item = " + item); + } + + output.append(item.toString()); + } + + // Set the output variable. + execution.setVariable(theOutputVariable, output.toString()); + + if (msoLogger.isDebugEnabled()) { + msoLogger.debug("Done Executing " + getTaskName()); + } + } + + /** + * Compiles an XQuery script contained in a resource (file). + * @param compiler the XQueryCompiler + * @param resource the resource path + * @return an XQueryExecutable + * @throws Exception on error + */ + private XQueryExecutable compile(XQueryCompiler compiler, String resource) + throws Exception { + InputStream xqStream = null; + try { + xqStream = getClass().getResourceAsStream(resource); + + if (xqStream == null) { + throw new IOException("Resource not found: " + resource); + } + + XQueryExecutable executable = compiler.compile(xqStream); + xqStream.close(); + xqStream = null; + return executable; + } finally { + if (xqStream != null) { + try { + xqStream.close(); + } catch (Exception e) { + // Do nothing + } + } + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java new file mode 100644 index 0000000000..8329746347 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java @@ -0,0 +1,443 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core.json; + +import java.util.Iterator; +import java.util.StringTokenizer; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.json.XML; + +//import org.openecomp.mso.bpmn.core.BPMNLogger; +import org.openecomp.mso.bpmn.core.xml.XmlTool; +import org.openecomp.mso.logger.MsoLogger; + +/** + * Utility class for JSON processing + * + * @version 1.0 + */ + +public class JsonUtils { + + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + private static int MSOJsonIndentFactor = 3; + + /** + * Uses the JSONObject static method to convert a XML doc to JSON. + * + * @param xml String containing the XML doc + * @param pretty flag to determine if the output should be formatted + * @return String containing the JSON translation + */ + public static String xml2json(String xml, Boolean pretty) { +// String isDebugLogEnabled = "true"; + try { + // name spaces cause problems, so just remove them + JSONObject jsonObj = XML.toJSONObject(XmlTool.removeNamespaces(xml)); + if (!pretty) { + return jsonObj.toString(); + } else { + // add an indent to make it 'pretty' + return jsonObj.toString(MSOJsonIndentFactor); + } + } catch (Exception e){ + msoLogger.debug("xml2json(): unable to parse xml and convert to json. Exception was: " + e.toString()); + return null; + } + } + + /** + * Invokes xml2json(String, Boolean) defaulting to 'pretty' output. + * + * @param xml String containing the XML doc + * @return String containing the JSON translation + */ + public static String xml2json(String xml) { + return xml2json(xml, true); + } + + /** + * Uses the JSONObject static method to convert a JSON doc to XML. + * Note: this method will not generate valid XML if the JSONObject + * contains JSONArrays which are used to represent XML attributes + * in the JSON doc. + * + * @param jsonStr String containing the JSON doc + * @param pretty flag to determine if the output should be formatted + * @return String containing the XML translation + */ + public static String json2xml(String jsonStr, Boolean pretty) { +// String isDebugLogEnabled = "true"; + try { + JSONObject jsonObj = new JSONObject(jsonStr); + if (pretty) { + return XmlTool.normalize(XML.toString(jsonObj)); + } else { + return XML.toString(jsonObj); + } + } catch (Exception e){ + msoLogger.debug("json2xml(): unable to parse json and convert to xml. Exception was: " + e.toString()); + return null; + } + } + + /** + * Invokes json2xml(String, Boolean) defaulting to 'pretty' output. + * + * @param jsonStr String containing the XML doc + * @return String containing the JSON translation + */ + public static String json2xml(String jsonStr) { + return json2xml(jsonStr, true); + } + + /** + * Uses the JSONObject static method to convert a JSON doc to XML. + * + * @param jsonStr String containing the JSON doc + * @return Iterator over the JSON keys + */ + public static Iterator <String> getJsonIterator(String jsonStr) { +// String isDebugLogEnabled = "true"; + try { + JSONObject json = new JSONObject(jsonStr); + return json.keys(); + + } catch (Exception e){ + msoLogger.debug("getJsonIterator(): unable to parse json to retrieve the keys iterator. Exception was: " + e.toString()); + return null; + } + } + + /** + * Invokes the getJsonRawValue() method and returns the String equivalent of + * the object returned. + * + * TBD: May need separate methods for boolean, float, and integer fields if the + * String representation is not sufficient to meet client needs. + * + * @param jsonStr String containing the JSON doc + * @param keys full key path to the target value in the format of "key1.key2.key3..." + * @return String field value associated with keys + */ + public static String getJsonValue(String jsonStr, String keys) { +// String isDebugLogEnabled = "true"; + try { + Object rawValue = getJsonRawValue(jsonStr, keys); + if (rawValue == null) { + return null; + } else { + if (rawValue instanceof String) { + msoLogger.debug("getJsonValue(): the raw value is a String Object=" + ((String) rawValue).toString()); + return (String) rawValue; + } else { + msoLogger.debug("getJsonValue(): the raw value is NOT a String Object=" + rawValue.toString()); + return rawValue.toString(); + } + } + } catch (Exception e) { + msoLogger.debug("getJsonValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString()); + } + return null; + } + + /** + * Invokes the getJsonRawValue() method to obtain the JSONArray associated with + * the specified keys. The JSONArray is then walked to retrieve the content value of + * the specified field name. + * + * @param jsonStr String containing the JSON doc + * @param keys full key path to the target value in the format of "key1.key2.key3..." + * @param name field name for the param to be retrieved + * @return String param value associated with field name + */ + public static String getJsonParamValue(String jsonStr, String keys, String name) { +// String isDebugLogEnabled = "true"; + try { + Object rawValue = getJsonRawValue(jsonStr, keys); + if (rawValue == null) { + return null; + } else { + if (rawValue instanceof JSONArray) { + msoLogger.debug("getJsonParamValue(): keys=" + keys + " points to JSONArray: " + ((JSONArray) rawValue).toString()); + for (int i = 0; i < ((JSONArray) rawValue).length(); i++) { + msoLogger.debug("getJsonParamValue(): index: " + i + ", value: " + ((JSONArray) rawValue).get(i).toString()); + if (((JSONArray) rawValue).get(i) instanceof JSONObject) { + msoLogger.debug("getJsonParamValue(): index: " + i + " is a JSONObject"); + JSONObject jsonObj = (JSONObject)((JSONArray) rawValue).get(i); + if (jsonObj.get("name").equals(name)) { + msoLogger.debug("getJsonParamValue(): found value: " + (String) jsonObj.get("content") + " for name: " + name); + return (String) jsonObj.get("content"); + } + } else { + msoLogger.debug("getJsonParamValue(): the JSONArray element is NOT a JSONObject=" + rawValue.toString()); + return null; + } + } + msoLogger.debug("getJsonParamValue(): content value NOT found for name: " + name); + return null; + } else { + msoLogger.debug("getJsonParamValue(): the raw value is NOT a JSONArray Object=" + rawValue.toString()); + return null; + } + } + } catch (JSONException je) { + // JSONObject::get() throws this exception if one of the specified keys is not found + msoLogger.debug("getJsonParamValue(): caught JSONException attempting to retrieve param value for keys:" + keys + ", name=" + name); + } catch (Exception e) { + msoLogger.debug("getJsonParamValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString()); + } + return null; + } + + /** + * Wrapper to generate the JSONObject to pass to the getJsonValueForKey(JSONObject, String) + * method so that recursion over the subobjects can be supported there + * + * @param jsonStr String containing the JSON doc + * @param key key to the target value + * @return String field value associated with key + */ + public static String getJsonValueForKey(String jsonStr, String key) { +// String isDebugLogEnabled = "true"; + try { + JSONObject jsonObj = new JSONObject(jsonStr); + if (jsonObj != null) { + return getJsonValueForKey(jsonObj, key); + } + } catch (Exception e) { + msoLogger.debug("getJsonValueForKey(): unable to parse json to retrieve value for field=" + key + ". Exception was: " + e.toString()); + } + return null; + } + + /** + * Walks the JSONObject (and sub-objects recursively), searching for the first value associated with the + * single key/field name specified. Returns the associated value if found or null if the key is not found + * + * @param jsonObj JSONObject representation of the the JSON doc + * @param key key to the target value + * @return String field value associated with key + */ + public static String getJsonValueForKey(JSONObject jsonObj, String key) { +// String isDebugLogEnabled = "true"; + String keyValue = null; + try { + if (jsonObj.has(key)) { + msoLogger.debug("getJsonValueForKey(): found value for key=" + key); + return ((String) jsonObj.get(key)); + } else { + msoLogger.debug("getJsonValueForKey(): iterating over the keys"); + Iterator <String> itr = jsonObj.keys(); + while (itr.hasNext()) { + String nextKey = (String) itr.next(); + Object obj = jsonObj.get(nextKey); + if (obj instanceof JSONObject) { + msoLogger.debug("getJsonValueForKey(): key=" + nextKey + ", points to JSONObject, recursive call"); + keyValue = getJsonValueForKey((JSONObject) obj, key); + if (keyValue != null) { + msoLogger.debug("getJsonValueForKey(): found value=" + keyValue + ", for key=" + key); + break; + } + } else { + msoLogger.debug("getJsonValueForKey(): key=" + nextKey + ", does not point to a JSONObject, next key"); + } + } + } + } catch (JSONException je) { + // JSONObject::get() throws this exception if one of the specified keys is not found + msoLogger.debug("getJsonValueForKey(): caught JSONException attempting to retrieve value for key=" + key); + keyValue = null; + } catch (Exception e) { + msoLogger.debug("getJsonValueForKey(): unable to parse json to retrieve value for field=" + key + ". Exception was: " + e.toString()); + } + return keyValue; + } + + /** + * Boolean method to determine if a key path is valid for the JSON doc. Invokes + * getJsonValue(). + * + * @param jsonStr String containing the JSON doc + * @param keys full key path to the target value in the format of "key1.key2.key3..." + * @return Boolean true if keys points to value in the JSON doc + */ + public static Boolean jsonValueExists(String jsonStr, String keys) { + if (getJsonRawValue(jsonStr, keys) == null) { + return false; + } else { + return true; + } + } + + /** + * Inserts the new key/value pair at the appropriate location in the JSON + * document after first determining if keyed field already exists. If + * it does exist, return the JSON unmodified, otherwise return the new JSON + * Note: this method currently only supports String value inserts. + * + * @param jsonStr String containing the JSON doc + * @param keys full key path to the value to be added in the format of "key1.key2.key3..." + * @return String containing the updated JSON doc + */ + public static String addJsonValue(String jsonStr, String keys, String value) { +// String isDebugLogEnabled = "true"; + // only attempt to insert the key/value pair if it does not exist + if (!jsonValueExists(jsonStr, keys)) { + return putJsonValue(jsonStr, keys, value); + } else { + msoLogger.debug("addJsonValue(): JSON add failed, key=" + keys + "/value=" + (String) value + " already exists"); + return jsonStr; + } + } + + /** + * Updates the value for the specified key in the JSON document + * after first determining if keyed field exists. If it does + * not exist, return the JSON unmodified, otherwise return the updated JSON. + * Note: this method currently only supports String value updates. + * + * @param jsonStr String containing the JSON doc + * @param keys full key path to the value to be updated in the format of "key1.key2.key3..." + * @return String containing the updated JSON doc + */ + public static String updJsonValue(String jsonStr, String keys, String newValue) { +// String isDebugLogEnabled = "true"; + // only attempt to modify the key/value pair if it exists + if (jsonValueExists(jsonStr, keys)) { + return putJsonValue(jsonStr, keys, newValue); + } else { + msoLogger.debug("updJsonValue(): JSON update failed, no value exists for key=" + keys); + return jsonStr; + } + } + + /** + * Deletes the value for the specified key in the JSON document + * after first determining if keyed field exists. If it does + * not exist, return the JSON unmodified, otherwise return the updated JSON + * + * @param jsonStr String containing the JSON doc + * @param keys full key path to the value to be deleted in the format of "key1.key2.key3..." + * @return String containing the updated JSON doc + */ + public static String delJsonValue(String jsonStr, String keys) { +// String isDebugLogEnabled = "true"; + // only attempt to remove the key/value pair if it exists + if (jsonValueExists(jsonStr, keys)) { + // passing a null value results in a delete + return putJsonValue(jsonStr, keys, null); + } else { + msoLogger.debug("delJsonValue(): JSON delete failed, no value exists for key=" + keys); + return jsonStr; + } + } + + /** + * Walks the JSON doc using the full key path to retrieve the associated + * value. All but the last key points to the 'parent' object name(s) in order + * in the JSON hierarchy with the last key pointing to the target value. + * The value returned is a Java object. + * + * @param jsonStr String containing the JSON doc + * @param keys full key path to the target value in the format of "key1.key2.key3..." + * @return Object field value associated with keys + */ + private static Object getJsonRawValue(String jsonStr, String keys) { +// String isDebugLogEnabled = "true"; + String keyStr = ""; + try { + JSONObject jsonObj = new JSONObject(jsonStr); + StringTokenizer keyTokens = new StringTokenizer(keys, "."); + while (keyTokens.hasMoreElements()) { + keyStr = keyTokens.nextToken(); + Object keyValue = jsonObj.get(keyStr); + if (keyValue instanceof JSONObject) { + msoLogger.debug("getJsonRawValue(): key=" + keyStr + " points to json object"); + jsonObj = (JSONObject) keyValue; + } else { + if (keyTokens.hasMoreElements()) { + msoLogger.debug("getJsonRawValue(): value found prior to last key for key=" + keyStr); + } + return keyValue; + } + } + // we should not hit this point: either the key points to a valid value and + // we return it above or the key is invalid and we handle the JSONException + // below and return null + return null; + + } catch (JSONException je) { + // JSONObject::get() throws this exception if one of the specified keys is not found + msoLogger.debug("getJsonRawValue(): caught JSONException attempting to retrieve raw value for key=" + keyStr); + } catch (Exception e) { + msoLogger.debug("getJsonRawValue(): unable to parse json to retrieve value for field=" + keys + ". Exception was: " + e.toString()); + } + return null; + } + + /** + * Private method invoked by the public add, update, and delete methods. + * + * @param jsonStr String containing the JSON doc + * @param keys full key path to the value to be deleted in the format of "key1.key2.key3..." + * @return String containing the updated JSON doc + */ + private static String putJsonValue(String jsonStr, String keys, String value) { +// String isDebugLogEnabled = "true"; + String keyStr = ""; + try { + JSONObject jsonObj = new JSONObject(jsonStr); + JSONObject jsonObjOut = jsonObj; + StringTokenizer keyTokens = new StringTokenizer(keys, "."); + while (keyTokens.hasMoreElements()) { + keyStr = keyTokens.nextToken(); + if (keyTokens.hasMoreElements()) { + Object keyValue = jsonObj.get(keyStr); + if (keyValue instanceof JSONObject) { + msoLogger.debug("putJsonValue(): key=" + keyStr + " points to json object"); + jsonObj = (JSONObject) keyValue; + } else { + msoLogger.debug("putJsonValue(): key=" + keyStr + " not the last key but points to non-json object: " + (String) keyValue); + return null; + } + } else { // at the last/new key value + jsonObj.put(keyStr, value); + return jsonObjOut.toString(3); + } + } + // should not hit this point if the key points to a valid key value + return null; + + } catch (JSONException je) { + // JSONObject::get() throws this exception if one of the specified keys is not found + msoLogger.debug("putJsonValue(): caught JSONException attempting to retrieve value for key=" + keyStr); + return null; + } catch (Exception e) { + msoLogger.debug("putJsonValue(): unable to parse json to put value for key=" + keys + ". Exception was: " + e.toString()); + } + return null; + } +} + diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/mybatis/CustomMyBatisSessionFactory.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/mybatis/CustomMyBatisSessionFactory.java new file mode 100644 index 0000000000..3a731558a4 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/mybatis/CustomMyBatisSessionFactory.java @@ -0,0 +1,102 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core.mybatis; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.camunda.bpm.engine.impl.cfg.StandaloneProcessEngineConfiguration; +import org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor; +import org.camunda.bpm.engine.impl.interceptor.CommandInterceptor; +import org.camunda.bpm.engine.impl.interceptor.LogInterceptor; +import org.camunda.bpm.engine.impl.util.ReflectUtil; + + +/** + * A special process engine that provides access to MyBatis mappings. + * @version 1.0 + */ +public class CustomMyBatisSessionFactory extends + StandaloneProcessEngineConfiguration { + + private String resourceName; + + /** + * Overridden to ensure nobody ever tries to initialize this process engine + * in the normal way. We are using this process engine only for MyBatis + * access. + */ + @Override + protected void init() { + throw new UnsupportedOperationException("init"); + } + + /** + * Initialize the ProcessEngineConfiguration from an existing one, just + * using the database settings to initialize the database / MyBatis stuff. + */ + public void initFromProcessEngineConfiguration( + ProcessEngineConfigurationImpl processEngineConfiguration, + String resourceName) { + this.resourceName = resourceName; + + setDatabaseType(processEngineConfiguration.getDatabaseType()); + setDataSource(processEngineConfiguration.getDataSource()); + setDatabaseTablePrefix(processEngineConfiguration + .getDatabaseTablePrefix()); + + initDataSource(); + // initVariableTypes(); + initCommandContextFactory(); + initTransactionFactory(); + initTransactionContextFactory(); + initCommandExecutors(); + initSqlSessionFactory(); + initIncidentHandlers(); + initIdentityProviderSessionFactory(); + initSessionFactories(); + } + + /** + * In order to always open a new command context set the property + * "alwaysOpenNew" to true inside the CommandContextInterceptor. + * + * If you execute the custom queries inside the process engine (for example + * in a service task), you have to do this. + */ + @Override + protected Collection<? extends CommandInterceptor> getDefaultCommandInterceptorsTxRequired() { + List<CommandInterceptor> defaultCommandInterceptorsTxRequired = + new ArrayList<CommandInterceptor>(); + defaultCommandInterceptorsTxRequired.add(new LogInterceptor()); + defaultCommandInterceptorsTxRequired.add(new CommandContextInterceptor( + commandContextFactory, this, true)); + return defaultCommandInterceptorsTxRequired; + } + + @Override + protected InputStream getMyBatisXmlConfigurationSteam() { + return ReflectUtil.getResourceAsStream(resourceName); + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/mybatis/URNMapping.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/mybatis/URNMapping.java new file mode 100644 index 0000000000..07959cb016 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/mybatis/URNMapping.java @@ -0,0 +1,122 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core.mybatis; + +/** + * A bean that represents a single URN mapping. + */ +public class URNMapping { + private String name; + private String value; + private String rev; + + /** + * Get the name. + * @return the name + */ + public String getName() { + return name; + } + + /** + * Set the name. + * @param name the name + */ + public void setName(String name) { + this.name = name; + } + + /** + * Get the value mapped to the name. + * @return the value mapped to the name + */ + public String getValue() { + return value; + } + + /** + * Set the value mapped to the name. + * @param value the value mapped to the name + */ + public void setValue(String value) { + this.value = value; + } + + /** + * Get the revision attribute (currently unused). + * @return the revision attribute + */ + public String getRev() { + return rev; + } + + /** + * Set the revision attribute (currently unused). + * @param rev the revision attribute + */ + public void setRev(String rev) { + this.rev = rev; + } + + /** + * Converts a URN to "normal" form so it can used as a java or groovy + * variable identifier. This is done in a way that makes the identifier + * as readable as possible, but note that it might result in a loss of + * uniqueness. + * <ol> + * <li> URN_ is prepended </li> + * <li> All characters that are not letters or digits are converted to + * underscore characters </li> + * <li> Sequences of multiple underscores are collapsed to a single + * underscore character </li> + * </ol> + * Examples: + * <p> + * aai:endpoint becomes URN_aai_endpoint <br/> + * ae:internal-reporting becomes URN_ae_internal_reporting <br/> + * + * @param name the URN + * @return a normalized identifier + */ + public static String createIdentifierFromURN(String urn) { + StringBuilder builder = new StringBuilder(); + builder.append("URN_"); + char last = builder.charAt(builder.length() - 1); + + int len = urn.length(); + + for (int i = 0; i < len; i++) { + char c = urn.charAt(i); + + if (!Character.isLetterOrDigit(c) && c != '_') { + c = '_'; + } + + if (!(c == '_' && last == '_')) { + builder.append(c); + } + + last = c; + } + + return builder.toString(); + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/plugins/LoggingAndURNMappingPlugin.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/plugins/LoggingAndURNMappingPlugin.java new file mode 100644 index 0000000000..8e3f254def --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/plugins/LoggingAndURNMappingPlugin.java @@ -0,0 +1,424 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core.plugins; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.engine.delegate.ExecutionListener; +import org.camunda.bpm.engine.impl.bpmn.parser.AbstractBpmnParseListener; +import org.camunda.bpm.engine.impl.bpmn.parser.BpmnParseListener; +import org.camunda.bpm.engine.impl.cfg.AbstractProcessEnginePlugin; +import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.camunda.bpm.engine.impl.context.Context; +import org.camunda.bpm.engine.impl.interceptor.Command; +import org.camunda.bpm.engine.impl.interceptor.CommandContext; +import org.camunda.bpm.engine.impl.persistence.entity.ProcessDefinitionEntity; +import org.camunda.bpm.engine.impl.pvm.process.ActivityImpl; +import org.camunda.bpm.engine.impl.pvm.process.ScopeImpl; +import org.camunda.bpm.engine.impl.pvm.process.TransitionImpl; +import org.camunda.bpm.engine.impl.util.xml.Element; +import org.camunda.bpm.engine.impl.variable.VariableDeclaration; + +import org.openecomp.mso.bpmn.core.BPMNLogger; +import org.openecomp.mso.bpmn.core.PropertyConfiguration; +import org.openecomp.mso.bpmn.core.mybatis.CustomMyBatisSessionFactory; +import org.openecomp.mso.bpmn.core.mybatis.URNMapping; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoLogger; + +/** + * Plugin for MSO logging and URN mapping. + */ +public class LoggingAndURNMappingPlugin extends AbstractProcessEnginePlugin { + private static MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + private static final String FSPROPKEY = "URNMapping.FileSystemLoading.Enabled"; + + @Override + public void preInit( + ProcessEngineConfigurationImpl processEngineConfiguration) { + List<BpmnParseListener> preParseListeners = processEngineConfiguration + .getCustomPreBPMNParseListeners(); + if (preParseListeners == null) { + preParseListeners = new ArrayList<BpmnParseListener>(); + processEngineConfiguration.setCustomPreBPMNParseListeners(preParseListeners); + } + preParseListeners.add(new LoggingParseListener()); + } + + /** + * Called when a process flow is parsed so we can inject listeners. + */ + public static class LoggingParseListener extends AbstractBpmnParseListener { + private void injectLogExecutionListener(ActivityImpl activity) { + activity.addListener( + ExecutionListener.EVENTNAME_END, + new LoggingExecutionListener("END")); + + activity.addListener( + ExecutionListener.EVENTNAME_START, + new LoggingExecutionListener("START")); + + activity.addListener( + ExecutionListener.EVENTNAME_TAKE, + new LoggingExecutionListener("TAKE")); + } + + public void parseProcess(Element processElement, ProcessDefinitionEntity processDefinition) { + } + + public void parseStartEvent(Element startEventElement, ScopeImpl scope, ActivityImpl startEventActivity) { + // Inject these listeners only on the main start event for the flow, not on any embedded subflow start events + if (scope instanceof ProcessDefinitionEntity) { + startEventActivity.addListener(ExecutionListener.EVENTNAME_START, new URNMappingInitializerListener("START")); + startEventActivity.addListener(ExecutionListener.EVENTNAME_START, new LoggingInitializerListener("START")); + } + + injectLogExecutionListener(startEventActivity); + } + + public void parseServiceTask(Element serviceTaskElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseExclusiveGateway(Element exclusiveGwElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseInclusiveGateway(Element inclusiveGwElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseParallelGateway(Element parallelGwElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseScriptTask(Element scriptTaskElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseBusinessRuleTask(Element businessRuleTaskElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseTask(Element taskElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseManualTask(Element manualTaskElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseUserTask(Element userTaskElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseEndEvent(Element endEventElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseBoundaryTimerEventDefinition(Element timerEventDefinition, boolean interrupting, ActivityImpl timerActivity) { + injectLogExecutionListener(timerActivity); + } + + public void parseBoundaryErrorEventDefinition(Element errorEventDefinition, boolean interrupting, ActivityImpl activity, ActivityImpl nestedErrorEventActivity) { + injectLogExecutionListener(activity); + } + + public void parseSubProcess(Element subProcessElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseCallActivity(Element callActivityElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseProperty(Element propertyElement, VariableDeclaration variableDeclaration, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseSequenceFlow(Element sequenceFlowElement, ScopeImpl scopeElement, TransitionImpl transition) { + //injectLogExecutionListener(activity); + } + + public void parseSendTask(Element sendTaskElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseMultiInstanceLoopCharacteristics(Element activityElement, Element multiInstanceLoopCharacteristicsElement, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseIntermediateTimerEventDefinition(Element timerEventDefinition, ActivityImpl timerActivity) { + injectLogExecutionListener(timerActivity); + } + + public void parseRootElement(Element rootElement, List<ProcessDefinitionEntity> processDefinitions) { + //injectLogExecutionListener(activity); + } + + public void parseReceiveTask(Element receiveTaskElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseIntermediateSignalCatchEventDefinition(Element signalEventDefinition, ActivityImpl signalActivity) { + injectLogExecutionListener(signalActivity); + } + + public void parseBoundarySignalEventDefinition(Element signalEventDefinition, boolean interrupting, ActivityImpl signalActivity) { + injectLogExecutionListener(signalActivity); + } + + public void parseEventBasedGateway(Element eventBasedGwElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseTransaction(Element transactionElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseCompensateEventDefinition(Element compensateEventDefinition, ActivityImpl compensationActivity) { + injectLogExecutionListener(compensationActivity); + } + + public void parseIntermediateThrowEvent(Element intermediateEventElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseIntermediateCatchEvent(Element intermediateEventElement, ScopeImpl scope, ActivityImpl activity) { + injectLogExecutionListener(activity); + } + + public void parseBoundaryEvent(Element boundaryEventElement, ScopeImpl scopeElement, ActivityImpl nestedActivity) { + injectLogExecutionListener(nestedActivity); + } + + public void parseIntermediateMessageCatchEventDefinition(Element messageEventDefinition, ActivityImpl nestedActivity) { + injectLogExecutionListener(nestedActivity); + } + + public void parseBoundaryMessageEventDefinition(Element element, boolean interrupting, ActivityImpl messageActivity) { + injectLogExecutionListener(messageActivity); + } + } + + /** + * Initializes URN mapping variables on process entry. + */ + public static class URNMappingInitializerListener implements ExecutionListener { + private String event; + + public URNMappingInitializerListener(String eventData) { + this.event = eventData; + } + + public String getEvent() { + return event; + } + + public void notify(DelegateExecution execution) throws Exception { + ProcessEngineConfigurationImpl processEngineConfiguration = + Context.getProcessEngineConfiguration(); + loadURNProperties(execution, processEngineConfiguration); + } + + private void loadURNProperties(DelegateExecution execution, + ProcessEngineConfigurationImpl processEngineConfiguration) { + Map<String,String> bpmnProps = PropertyConfiguration.getInstance().getProperties("mso.bpmn.properties"); + if (bpmnProps == null) { + LOGGER.debug("Unable to load mso.bpmn.properties; loading URN Mapping from DB"); + + LOGGER.error (MessageEnum.BPMN_GENERAL_EXCEPTION, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, + "Unable to load mso.bpmn.properties; loading URN Mapping from DB"); + + loadFromDB(execution, processEngineConfiguration); + } else { + String fsEnabled = bpmnProps.get(FSPROPKEY); + if (fsEnabled != null) { + if (Boolean.parseBoolean(fsEnabled)) { + LOGGER.debug("File system loading is enabled; loading URN properties from File system"); + LOGGER.info(MessageEnum.BPMN_GENERAL_INFO, "BPMN", "File system loading is enabled; loading URN properties from File System"); + loadFromFileSystem(execution); + } else { + LOGGER.debug("File system loading is disabled; loading URN properties from DB"); + LOGGER.info (MessageEnum.BPMN_GENERAL_INFO, "BPMN", "File system loading is disabled; loading URN properties from DB"); + + loadFromDB(execution, processEngineConfiguration); + } + } else { + + LOGGER.error (MessageEnum.BPMN_GENERAL_EXCEPTION, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, + "Unable to retrieve URNMapping.FileSystemLoading.Enabled from mso.bpmn.properties; loading URN Mapping from DB"); + + loadFromDB(execution, processEngineConfiguration); + } + } + } + + private void loadFromFileSystem(DelegateExecution execution) { + PropertyConfiguration propertyConfiguration = PropertyConfiguration.getInstance(); + Map<String,String> props = propertyConfiguration.getProperties("mso.bpmn.urn.properties"); + for (String key : props.keySet()) { + String varName = URNMapping.createIdentifierFromURN(key); + String varValue = props.get(key); + execution.setVariable(varName, varValue); + } + } + + private void loadFromDB(DelegateExecution execution, ProcessEngineConfigurationImpl processEngineConfiguration) { + Command<List<URNMapping>> command = new Command<List<URNMapping>>() { + @SuppressWarnings("unchecked") + public List<URNMapping> execute(CommandContext commandContext) { + return (List<URNMapping>) commandContext.getDbSqlSession().selectList( + "mso.urnMapping.selectAll", null); + } + }; + + CustomMyBatisSessionFactory sessionFactory = new CustomMyBatisSessionFactory(); + sessionFactory.initFromProcessEngineConfiguration(processEngineConfiguration, + "customMyBatisConfiguration.xml"); + + List<URNMapping> mappings = sessionFactory.getCommandExecutorTxRequired().execute(command); + + if (mappings != null && mappings.size() > 0) { + for (URNMapping mapping : mappings) { + String varName = URNMapping.createIdentifierFromURN(mapping.getName()); + String varValue = mapping.getValue(); + + LOGGER.debug("URN Mapping = '" + mapping.getName() + + "', setting variable '" + varName + "' to '" + varValue + "'"); + + execution.setVariable(varName, varValue); + } + } + } + } + + /** + * Sets the isDebugLogEnabled variable on process entry. + */ + public static class LoggingInitializerListener implements ExecutionListener { + private String event; + + public LoggingInitializerListener(String eventData) { + this.event = eventData; + } + + public String getEvent() { + return event; + } + + public void notify(DelegateExecution execution) throws Exception { + String processKey = execution.getProcessEngineServices().getRepositoryService() + .getProcessDefinition(execution.getProcessDefinitionId()).getKey(); + + // If a "true" value is already injected, e.g. from a top-level flow, it SHOULD NOT be + // overridden by the value in the URN mapping. This allows a top-level flow and all + // invoked subflows to be debugged by turning on the debug flag for just the top-level + // flow, assuming the isDebugEnabled flag variable is passed from the top-level flow to + // its subflows. + + // If a "false" value is already injected, e.g. from a top-level flow, it SHOULD be + // overridden by the value in the URN mapping. This allows a subflow to be debugged + // without turning on the the debug flag for the top-level flow. + + String injectedValue = (String) execution.getVariable("isDebugLogEnabled"); + String urnValue = "true".equals(execution.getVariable("URN_log_debug_" + processKey)) ? "true" : "false"; + + if ("true".equals(injectedValue)) { + LOGGER.debug("Setting isDebugLogEnabled to \"" + injectedValue + "\" for process: " + processKey + " (injected value)"); + execution.setVariable("isDebugLogEnabled", injectedValue); + } else { + LOGGER.debug("Setting isDebugLogEnabled to \"" + urnValue + "\" for process: " + processKey + " (from URN mapping)"); + execution.setVariable("isDebugLogEnabled", urnValue); + } + } + } + + /** + * Logs details about the current activity. + */ + public static class LoggingExecutionListener implements ExecutionListener { + private static MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + private static ConcurrentHashMap<String, Long> startTimes = new ConcurrentHashMap<String, Long>(); + + private String event; + + public LoggingExecutionListener(String event) { + this.event = event; + } + + public String getEvent() { + return event; + } + + public void notify(DelegateExecution execution) throws Exception { + BPMNLogger.debug( + (String) execution.getVariable("isDebugLogEnabled"), + "Logging for activity---------------:" + event + ":" + + execution.getCurrentActivityName() + + ", processDefinitionId=" + + execution.getProcessDefinitionId() + ", activtyId=" + + execution.getCurrentActivityId() + ", activtyName='" + + execution.getCurrentActivityName() + "'" + + ", processInstanceId=" + + execution.getProcessInstanceId() + ", businessKey=" + + execution.getProcessBusinessKey() + ", executionId=" + + execution.getId()); + + if (!isBlank(execution.getCurrentActivityName())) { + try { + String id = execution.getId(); + if ("START".equals(event) && id != null ) { + startTimes.put(id, (Long)System.currentTimeMillis()); + } else if ("END".equals(event) && id != null) { + String prefix = (String) execution.getVariable("prefix"); + + if (prefix != null ) { + MsoLogger.setServiceName("MSO." + prefix.substring(0,prefix.length()-1)); + } + + String requestId = (String) execution.getVariable("att-mso-request-id"); + String svcid = (String) execution.getVariable("att-mso-service-instance-id"); + MsoLogger.setLogContext(requestId, svcid); + long startTime = startTimes.remove(id); + + if (startTime != 0) { + + LOGGER.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, + event + ": " + execution.getCurrentActivityName(), "BPMN", execution.getCurrentActivityName(), null); + + } + } + } catch(Exception e) { + // Do nothing + } + } + } + + private boolean isBlank(Object object) { + return object == null || object.toString().trim().equals(""); + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/plugins/WorkflowExceptionPlugin.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/plugins/WorkflowExceptionPlugin.java new file mode 100644 index 0000000000..10386d721e --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/plugins/WorkflowExceptionPlugin.java @@ -0,0 +1,170 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core.plugins; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +import org.camunda.bpm.engine.delegate.BpmnError; +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.engine.delegate.ExecutionListener; +import org.camunda.bpm.engine.delegate.JavaDelegate; +import org.camunda.bpm.engine.impl.bpmn.behavior.ClassDelegateActivityBehavior; +import org.camunda.bpm.engine.impl.bpmn.parser.AbstractBpmnParseListener; +import org.camunda.bpm.engine.impl.bpmn.parser.BpmnParseListener; +import org.camunda.bpm.engine.impl.bpmn.parser.FieldDeclaration; +import org.camunda.bpm.engine.impl.cfg.AbstractProcessEnginePlugin; +import org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.camunda.bpm.engine.impl.persistence.entity.ProcessDefinitionEntity; +import org.camunda.bpm.engine.impl.pvm.PvmTransition; +import org.camunda.bpm.engine.impl.pvm.process.ActivityImpl; +import org.camunda.bpm.engine.impl.pvm.process.TransitionImpl; +import org.camunda.bpm.engine.impl.util.xml.Element; + +import org.openecomp.mso.bpmn.core.BPMNLogger; +import org.openecomp.mso.bpmn.core.WorkflowException; + +/** + * This plugin does the following: + * <ol> + * <li> + * Adds logic at the start of every Call Activity to remove any existing + * WorkflowException object from the execution (saving a copy of it in a + * different variable). + * </li> + * <li> + * Adds logic at the end of every Call Activity to generate a MSOWorkflowException + * event if there is a WorkflowException object in the execution. + * </li> + * </ol> + */ +public class WorkflowExceptionPlugin extends AbstractProcessEnginePlugin { + + @Override + public void preInit(ProcessEngineConfigurationImpl processEngineConfiguration) { + List<BpmnParseListener> preParseListeners = + processEngineConfiguration.getCustomPreBPMNParseListeners(); + + if (preParseListeners == null) { + preParseListeners = new ArrayList<BpmnParseListener>(); + processEngineConfiguration.setCustomPreBPMNParseListeners(preParseListeners); + } + + preParseListeners.add(new WorkflowExceptionParseListener()); + } + + public static class WorkflowExceptionParseListener extends AbstractBpmnParseListener { + @Override + public void parseProcess(Element processElement, ProcessDefinitionEntity processDefinition) { + AtomicInteger triggerTaskIndex = new AtomicInteger(1); + List<ActivityImpl> activities = new ArrayList<ActivityImpl>(processDefinition.getActivities()); + recurse(activities, triggerTaskIndex); + } + + /** + * Helper method that recurses (into subprocesses) over all the listed activities. + * @param activities a list of workflow activities + * @param triggerTaskIndex the index of the next trigger task (mutable) + */ + private void recurse(List<ActivityImpl> activities, AtomicInteger triggerTaskIndex) { + for (ActivityImpl activity : activities) { + String type = (String) activity.getProperty("type"); + + if ("callActivity".equals(type)) { + // Add a WorkflowExceptionResetListener to clear the WorkflowException + // variable when each Call Activity starts. + + activity.addListener( + ExecutionListener.EVENTNAME_START, + new WorkflowExceptionResetListener()); + + // Add a WorkflowExceptionTriggerTask after the call activity. + // It must be a task because a listener cannot be used to generate + // an event. Throwing BpmnError from an execution listener will + // cause the process to die. + + List<PvmTransition> outTransitions = + new ArrayList<PvmTransition>(activity.getOutgoingTransitions()); + + for (PvmTransition transition : outTransitions) { + String triggerTaskId = "WorkflowExceptionTriggerTask_" + triggerTaskIndex; + + ActivityImpl triggerTask = activity.getFlowScope().createActivity(triggerTaskId); + + ClassDelegateActivityBehavior behavior = new ClassDelegateActivityBehavior( + WorkflowExceptionTriggerTask.class.getName(), + new ArrayList<FieldDeclaration>(0)); + + triggerTask.setActivityBehavior(behavior); + triggerTask.setName("Workflow Exception Trigger Task " + triggerTaskIndex); + triggerTaskIndex.getAndIncrement(); + + TransitionImpl transitionImpl = (TransitionImpl) transition; + TransitionImpl triggerTaskOutTransition = triggerTask.createOutgoingTransition(); + triggerTaskOutTransition.setDestination((ActivityImpl)transitionImpl.getDestination()); + transitionImpl.setDestination(triggerTask); + } + } else if ("subProcess".equals(type)) { + recurse(new ArrayList<ActivityImpl>(activity.getActivities()), triggerTaskIndex); + } + } + } + } + + /** + * If there is a WorkflowException object in the execution, this method + * removes it (saving a copy of it in a different variable). + */ + public static class WorkflowExceptionResetListener implements ExecutionListener { + public void notify(DelegateExecution execution) throws Exception { + Object workflowException = execution.getVariable("WorkflowException"); + + if (workflowException instanceof WorkflowException) { + int index = 1; + String saveName = "SavedWorkflowException" + index; + while (execution.getVariable(saveName) != null) { + saveName = "SavedWorkflowException" + (++index); + } + + BPMNLogger.debug((String)execution.getVariable("isDebugLogEnabled"), + "WorkflowExceptionResetTask is moving WorkflowException to " + saveName); + + execution.setVariable(saveName, workflowException); + execution.setVariable("WorkflowException", null); + } + } + } + + /** + * Generates an MSOWorkflowException event if there is a WorkflowException + * object in the execution. + */ + public static class WorkflowExceptionTriggerTask implements JavaDelegate { + public void execute(DelegateExecution execution) throws Exception { + if (execution.getVariable("WorkflowException") instanceof WorkflowException) { + BPMNLogger.debug((String)execution.getVariable("isDebugLogEnabled"), + "WorkflowExceptionTriggerTask is generating a MSOWorkflowException event"); + throw new BpmnError("MSOWorkflowException"); + } + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/xml/XmlTool.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/xml/XmlTool.java new file mode 100644 index 0000000000..42114758b0 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/xml/XmlTool.java @@ -0,0 +1,340 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core.xml; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +/** + * XML transformation methods and other useful functions. + */ +public final class XmlTool { + + private static final Map<String, Integer> ENTITIES = new HashMap<String, Integer>(); + + static { + ENTITIES.put("amp", new Integer(38)); + ENTITIES.put("quot", new Integer(34)); + ENTITIES.put("lt", new Integer(60)); + ENTITIES.put("gt", new Integer(62)); + } + + /** + * Normalizes and formats XML. This method consolidates and moves all namespace + * declarations to the root element. The result will not have an XML prolog or + * a trailing newline. + * @param xml the XML to normalize + * @throws IOException + * @throws TransformerException + * @throws ParserConfigurationException + * @throws SAXException + * @throws XPathExpressionException + */ + public static String normalize(Object xml) throws IOException, TransformerException, + ParserConfigurationException, SAXException, XPathExpressionException { + + if (xml == null) { + return null; + } + + Source xsltSource = new StreamSource(new StringReader( + readResourceFile("normalize-namespaces.xsl"))); + + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + dbFactory.setNamespaceAware(true); + DocumentBuilder db = dbFactory.newDocumentBuilder(); + InputSource source = new InputSource(new StringReader(String.valueOf(xml))); + Document doc = db.parse(source); + + // Start of code to remove whitespace outside of tags + XPath xPath = XPathFactory.newInstance().newXPath(); + NodeList nodeList = (NodeList) xPath.evaluate( + "//text()[normalize-space()='']", doc, XPathConstants.NODESET); + + for (int i = 0; i < nodeList.getLength(); ++i) { + Node node = nodeList.item(i); + node.getParentNode().removeChild(node); + } + // End of code to remove whitespace outside of tags + + // the factory pattern supports different XSLT processors + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(xsltSource); + + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); + + StringWriter writer = new StringWriter(); + transformer.transform(new DOMSource(doc), new StreamResult(writer)); + return writer.toString().trim(); + } + + /** + * Encodes a value so it can be used inside an XML text element. + * @param s the string to encode + * @return the encoded string + */ + public static String encode(Object value) { + if (value == null) { + return null; + } + + String s = String.valueOf(value); + StringBuilder out = new StringBuilder(); + boolean modified = false; + + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + + if (c == '<') { + out.append("<"); + modified = true; + } else if (c == '>') { + out.append(">"); + modified = true; + } else if (c == '&') { + out.append("&"); + modified = true; + } else if (c < 32 || c > 126) { + out.append("&#" + (int)c + ";"); + modified = true; + } else { + out.append(c); + } + } + + if (modified) { + return out.toString(); + } else { + return s; + } + } + + /** + * Encodes a value so it can be used inside an XML attribute. + * @param s the string to encode + * @return the encoded string + */ + public static String encodeAttr(Object value) { + if (value == null) { + return null; + } + + String s = String.valueOf(value); + StringBuilder out = new StringBuilder(); + boolean modified = false; + + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + + if (c == '<') { + out.append("<"); + modified = true; + } else if (c == '>') { + out.append(">"); + modified = true; + } else if (c == '"') { + out.append("""); + modified = true; + } else if (c == '&') { + out.append("&"); + modified = true; + } else if (c < 32 || c > 126) { + out.append("&#" + (int)c + ";"); + modified = true; + } else { + out.append(c); + } + } + + if (modified) { + return out.toString(); + } else { + return s; + } + } + + /** + * Decodes XML entities in a string value + * @param value a value with embedded XML entities + * @return the decoded string + */ + public static String decode(Object value) { + if (value == null) { + return null; + } + + String s = String.valueOf(value); + + StringBuilder out = new StringBuilder(s.length()); + int ampIndex = s.indexOf("&"); + int lastEnd = 0; + + while (ampIndex >= 0) { + int nextAmpIndex = s.indexOf("&", ampIndex + 1); + int nextSemiIndex = s.indexOf(";", ampIndex + 1); + if (nextSemiIndex != -1 && (nextAmpIndex == -1 || nextSemiIndex < nextAmpIndex)) { + int code = -1; + String entity = s.substring(ampIndex + 1, nextSemiIndex); + + try { + if (entity.startsWith("#")) { + code = Integer.parseInt(entity.substring(1), 10); + } else { + if (ENTITIES.containsKey(entity)) { + code = ENTITIES.get(entity); + } + } + } catch (NumberFormatException x) { + // Do nothing + } + + out.append(s.substring(lastEnd, ampIndex)); + lastEnd = nextSemiIndex + 1; + if (code >= 0 && code <= 0xffff) { + out.append((char) code); + } else { + out.append("&"); + out.append(entity); + out.append(";"); + } + } + + ampIndex = nextAmpIndex; + } + + out.append(s.substring(lastEnd)); + return out.toString(); + } + + /** + * Removes the preamble, if present, from an XML document. + * @param xml the XML document + * @return a possibly modified document + */ + public static String removePreamble(Object xml) { + if (xml == null) { + return null; + } + + return String.valueOf(xml).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", ""); + } + + /** + * Removes namespaces and namespace declarations from an XML document. + * @param xml the XML document + * @return a possibly modified document + */ + public static String removeNamespaces(Object xml) { + if (xml == null) { + return null; + } + + String text = String.valueOf(xml); + + // remove xmlns declaration + text = text.replaceAll("xmlns.*?(\"|\').*?(\"|\')", ""); + // remove opening tag prefix + text = text.replaceAll("(<)(\\w+:)(.*?>)", "$1$3"); + // remove closing tags prefix + text = text.replaceAll("(</)(\\w+:)(.*?>)", "$1$3"); + // remove extra spaces left when xmlns declarations are removed + text = text.replaceAll("\\s+>", ">"); + + return text; + } + + + /** + * Reads the specified resource file and return the contents as a string. + * @param file Name of the resource file + * @return the contents of the resource file as a String + * @throws IOException if there is a problem reading the file + */ + private static String readResourceFile(String file) throws IOException { + InputStream stream = null; + try { + stream = XmlTool.class.getClassLoader().getResourceAsStream(file); + + if (stream == null) { + throw new FileNotFoundException("No such resource file: " + file); + } + + Reader reader = new InputStreamReader(stream, "UTF-8"); + StringBuilder out = new StringBuilder(); + char[] buf = new char[1024]; + int n; + + while ((n = reader.read(buf)) >= 0) { + out.append(buf, 0, n); + } + + stream.close(); + stream = null; + return out.toString(); + } finally { + if (stream != null) { + try { + stream.close(); + } catch (Exception e) { + // Ignore + } + } + } + } + + /** + * Instantiation is not allowed. + */ + private XmlTool() { + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/test/CamundaDBSetup.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/test/CamundaDBSetup.java new file mode 100644 index 0000000000..13eed2d530 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/test/CamundaDBSetup.java @@ -0,0 +1,108 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +/** + * Sets up the unit test (H2) database for Camunda. + */ +public class CamundaDBSetup { + private static boolean isDBConfigured = false; + + public static synchronized void configure() throws SQLException { + if (isDBConfigured) { + return; + } + + System.out.println("Configuring the Camunda H2 database for MSO"); + + Connection connection = null; + PreparedStatement stmt = null; + + try { + connection = DriverManager.getConnection( + "jdbc:h2:mem:camunda;DB_CLOSE_DELAY=-1", "sa", ""); + + stmt = connection.prepareStatement("delete from ACT_HI_VARINST"); + stmt.executeUpdate(); + stmt.close(); + stmt = null; + + stmt = connection.prepareStatement("ALTER TABLE ACT_HI_VARINST alter column TEXT_ clob"); + stmt.executeUpdate(); + stmt.close(); + stmt = null; + + stmt = connection.prepareStatement("ALTER TABLE ACT_HI_VARINST alter column NAME_ clob"); + stmt.executeUpdate(); + stmt.close(); + stmt = null; + + stmt = connection.prepareStatement("delete from ACT_HI_DETAIL"); + stmt.executeUpdate(); + stmt.close(); + stmt = null; + + stmt = connection.prepareStatement("ALTER TABLE ACT_HI_DETAIL alter column TEXT_ clob"); + stmt.executeUpdate(); + stmt.close(); + stmt = null; + + stmt = connection.prepareStatement("ALTER TABLE ACT_HI_DETAIL alter column NAME_ clob"); + stmt.executeUpdate(); + stmt.close(); + stmt = null; + + stmt = connection.prepareStatement("ALTER TABLE ACT_RU_VARIABLE alter column TEXT_ clob"); + stmt.executeUpdate(); + stmt.close(); + stmt = null; + + connection.close(); + connection = null; + + isDBConfigured = true; + } catch (SQLException e) { + System.out.println("CamundaDBSetup caught " + e.getClass().getSimpleName()); + e.printStackTrace(); + } finally { + if (stmt != null) { + try { + stmt.close(); + } catch (Exception e) { + // Ignore + } + } + + if (connection != null) { + try { + connection.close(); + } catch (Exception e) { + // Ignore + } + } + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/test/PropertyConfigurationSetup.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/test/PropertyConfigurationSetup.java new file mode 100644 index 0000000000..6f1cd7d8cc --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/test/PropertyConfigurationSetup.java @@ -0,0 +1,315 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.test; + +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import org.openecomp.mso.bpmn.core.PropertyConfiguration; + +/** + * Sets up mso.bpmn.properties and mso.bpmn.urn.properties for unit tests. + */ +public class PropertyConfigurationSetup { + + private static Path msoConfigPath = null; + private static Path bpmnPropertiesPath = null; + private static Path bpmnUrnPropertiesPath = null; + private static boolean modifiedConfiguration = false; + + /** + * Ensures that the the PropertyConfiguration is initialized and that the + * property data is reset to initial values. Any extra properties that are + * specified will be merged with the initial values. The following example + * shows how a test can specify a replacement URN mapping property. + * <pre> + * Map<String, String> urnProperties = + * PropertyConfigurationSetup.createBpmnUrnProperties(); + * urnProperties.add("mso.po.timeout", "PT1M"); + * PropertyConfiguration.init(urnProperties); + * </pre> + * @param args one or more maps created with createBpmnProperties() + * and/or createBpmnUrnProperties() + */ + public static synchronized void init(Object ... args) throws IOException { + + Map<String, String> extraBpmnProperties = null; + Map<String, String> extraBpmnUrnProperties = null; + + boolean propertiesSpecified = false; + + for (Object arg : args) { + @SuppressWarnings("unchecked") + Map<String, String> properties = (Map<String, String>) arg; + + String type = properties.get("PROPERTIES-TYPE"); + + if (PropertyConfiguration.MSO_BPMN_PROPERTIES.equals(type)) { + if (properties.size() > 1) { + extraBpmnProperties = properties; + propertiesSpecified = false; + } + } else if (PropertyConfiguration.MSO_BPMN_URN_PROPERTIES.equals(type)) { + if (properties.size() > 1) { + extraBpmnUrnProperties = properties; + propertiesSpecified = false; + } + } else { + throw new IllegalArgumentException("Not a supported PROPERTIES-TYPE map"); + } + } + + // There are three cases in which we need to change the existing configuration: + // 1) There is no existing configuration, i.e. first time setup + // 2) The existing configuration was modified, i.e. it has non-default values + // 3) Non-default values are specified for this initialization + + if (msoConfigPath == null || modifiedConfiguration || propertiesSpecified) { + modifiedConfiguration = propertiesSpecified; + + Path bpmnPropertiesSourcePath = Paths.get("src", "test", "resources", "mso.bpmn.properties"); + Path bpmnUrnPropertiesSourcePath = Paths.get("src", "test", "resources", "mso.bpmn.urn.properties"); + + if (msoConfigPath == null) { + // Initialize from scratch. + msoConfigPath = Files.createTempDirectory("mso-config-path-"); + System.setProperty("mso.config.path", msoConfigPath.toString()); + msoConfigPath.toFile().deleteOnExit(); + + bpmnPropertiesPath = msoConfigPath.resolve("mso.bpmn.properties"); + mergeCopy(bpmnPropertiesSourcePath, extraBpmnProperties, bpmnPropertiesPath); + bpmnPropertiesPath.toFile().deleteOnExit(); + + bpmnUrnPropertiesPath = msoConfigPath.resolve("mso.bpmn.urn.properties"); + mergeCopy(bpmnUrnPropertiesSourcePath, extraBpmnUrnProperties, bpmnUrnPropertiesPath); + bpmnUrnPropertiesPath.toFile().deleteOnExit(); + + PropertyConfiguration.getInstance(); + } else { + // Just reset the data. + PropertyConfiguration.getInstance().clearCache(); + mergeCopy(bpmnPropertiesSourcePath, extraBpmnProperties, bpmnPropertiesPath); + mergeCopy(bpmnUrnPropertiesSourcePath, extraBpmnUrnProperties, bpmnUrnPropertiesPath); + } + } + } + + /** + * Resets the PropertyConfiguration to its initial state, as if it had never + * been started. Note that this is a very expensive option and should not + * be needed by most unit tests. + * @throws IOException + */ + public static synchronized void nuke() throws IOException { + if (msoConfigPath == null) { + return; + } + + PropertyConfiguration.getInstance().shutDown(); + + bpmnUrnPropertiesPath.toFile().delete(); + bpmnUrnPropertiesPath = null; + + bpmnPropertiesPath.toFile().delete(); + bpmnPropertiesPath = null; + + msoConfigPath.toFile().delete(); + msoConfigPath = null; + + System.setProperty("mso.config.path", null); + + modifiedConfiguration = false; + } + + /** + * Create a map to hold properties to be added to mso.bpmn.properties. + */ + public static Map<String, String> createBpmnProperties() { + Map<String, String> properties = new HashMap<String, String>(); + properties.put("PROPERTIES-TYPE", PropertyConfiguration.MSO_BPMN_PROPERTIES); + return properties; + } + + /** + * Create a map to hold properties to be added to mso.bpmn.urn.properties. + */ + public static Map<String, String> createBpmnUrnProperties() { + Map<String, String> properties = new HashMap<String, String>(); + properties.put("PROPERTIES-TYPE", PropertyConfiguration.MSO_BPMN_URN_PROPERTIES); + return properties; + } + + /** + * Adds (or replaces) the specified values in the mso.bpmn.urn.properties file. + * Note that properties added this way may take some time to be loaded by the + * PropertyConfiguration, just like they do when a property file is updated on + * a real MSO system. This method will optionally wait for the new properties + * to be loaded. Timeout results in an IOException. + * @param values new properties + * @param wait maximum amount of time to wait for new properties to be loaded, + * in milliseconds. A value of zero means, "Do not wait." + * @throws IOException + */ + public static synchronized void addProperties(Map<String, String> properties, long wait) + throws IOException, InterruptedException { + + if (msoConfigPath == null) { + throw new IllegalStateException(); + } + + String type = properties.get("PROPERTIES-TYPE"); + Path path; + + if (PropertyConfiguration.MSO_BPMN_PROPERTIES.equals(type)) { + path = bpmnPropertiesPath; + } else if (PropertyConfiguration.MSO_BPMN_URN_PROPERTIES.equals(type)) { + path = bpmnUrnPropertiesPath; + } else { + throw new IllegalArgumentException("Not a supported PROPERTIES-TYPE map"); + } + + String oldTimestamp = PropertyConfiguration.getInstance().getProperties(type) + .get(PropertyConfiguration.TIMESTAMP_PROPERTY); + + modifiedConfiguration = true; + addProperties(properties, path); + + if (wait <= 0) { + return; + } + + long endTime = System.currentTimeMillis() + wait; + + while (true) { + Thread.sleep(250); + + String newTimestamp = PropertyConfiguration.getInstance().getProperties(type) + .get(PropertyConfiguration.TIMESTAMP_PROPERTY); + + if (newTimestamp != oldTimestamp) { + return; + } + + long now = System.currentTimeMillis(); + + if (now >= endTime) { + throw new IOException("Timed out after " + wait + + "ms waiting for PropertyConfiguration change"); + } + } + } + + /** + * Helper method that adds properties to the specified file. + */ + private static void addProperties(Map<String, String> values, Path path) + throws IOException { + + FileReader fileReader = null; + FileOutputStream outputStream = null; + + try { + fileReader = new FileReader(path.toFile()); + Properties properties = new Properties(); + properties.load(fileReader); + + for (String key : values.keySet()) { + if (!key.equals("PROPERTIES-TYPE")) { + properties.setProperty(key, values.get(key)); + } + } + + outputStream = new FileOutputStream(path.toFile()); + properties.store(outputStream, "Custom Test Properties"); + } finally { + if (fileReader != null) { + try { + fileReader.close(); + } catch (IOException e) { + // Ignore + } + } + + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + // Ignore + } + } + } + } + + /** + * Helper method that copies properties from the specified source file, and + * optionally merges them with the specified extra values, then writes the + * whole mess to the destination file. + */ + private static void mergeCopy(Path sourcePath, Map<String, String> extraValues, Path destPath) + throws IOException { + if (extraValues == null || extraValues.isEmpty()) { + Files.copy(sourcePath, destPath, StandardCopyOption.REPLACE_EXISTING); + return; + } + + FileReader fileReader = null; + FileOutputStream outputStream = null; + + try { + fileReader = new FileReader(sourcePath.toFile()); + Properties properties = new Properties(); + properties.load(fileReader); + + for (String key : extraValues.keySet()) { + if (!key.equals("PROPERTIES-TYPE")) { + properties.setProperty(key, extraValues.get(key)); + } + } + + outputStream = new FileOutputStream(destPath.toFile()); + properties.store(outputStream, "Custom Test Properties"); + } finally { + if (fileReader != null) { + try { + fileReader.close(); + } catch (IOException e) { + // Ignore + } + } + + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + // Ignore + } + } + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/main/resources/customMyBatisConfiguration.xml b/bpmn/MSOCoreBPMN/src/main/resources/customMyBatisConfiguration.xml new file mode 100644 index 0000000000..2c3d5dad0a --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/resources/customMyBatisConfiguration.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + ECOMP MSO + ================================================================================ + Copyright (C) 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========================================================= + --> + + +<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> + +<configuration> + <settings> + <setting name="lazyLoadingEnabled" value="false" /> + </settings> + <mappers> + <mapper resource="urnMapping.xml" /> + </mappers> +</configuration> diff --git a/bpmn/MSOCoreBPMN/src/main/resources/normalize-namespaces.xsl b/bpmn/MSOCoreBPMN/src/main/resources/normalize-namespaces.xsl new file mode 100644 index 0000000000..56c8a00987 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/resources/normalize-namespaces.xsl @@ -0,0 +1,185 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + ECOMP MSO + ================================================================================ + Copyright (C) 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========================================================= + --> + +<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" version="1.0" extension-element-prefixes="exsl"> + <!-- + Select one namespace node for each unique URI (almost), excluding + the implicit "xml" namespace. This does not filter out namespace + nodes declared on the same element with the same URI (thanks to + limitations of XPath 1.0); we take care of that later... Note that if + we had a distinct() function, this would be much, much simpler, + e.g. distinct(//namespace::*) + --> + <xsl:variable name="almost-unique-uri-namespace-nodes" select="//namespace::*[name()!='xml'][not(.=../preceding::*/namespace::* or .=ancestor::*[position()>1]/namespace::*)]"/> + + <!-- EXSLT functions are not supported by Saxon HE. Define the function we need here --> + <xsl:function name="exsl:node-set" as="node()"> + <xsl:param name="n" as="node()"/> + <xsl:sequence select="$n"/> + </xsl:function> + + <!-- Create a table of URI-prefix bindings --> + <xsl:variable name="almost-unique-uri-bindings-tree"> + <xsl:for-each select="$almost-unique-uri-namespace-nodes"> + <binding> + <prefix> + <xsl:choose> + <!-- + If there are any unqualified element names or + attributes in this namespace in our document, + then force default namespaces to use an arbitrary + prefix, because we want to guarantee that the + only namespace declarations in our result will + be attached to the root element. + --> + <xsl:when test="not(name()) and (//*[namespace-uri()=''] or //@*[namespace-uri()=current()])"> + <xsl:variable name="alternate-prefix-candidate" select="//namespace::*[count(.|current())!=1][.=current()][name()!=''][1]"/> + <xsl:choose> + <xsl:when test="$alternate-prefix-candidate"> + <xsl:value-of select="name($alternate-prefix-candidate)"/> + </xsl:when> + <xsl:otherwise> + <!-- + If no alternative candidates exist, then generate a + "random" one. + --> + <xsl:value-of select="generate-id()"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="name()"/> + </xsl:otherwise> + </xsl:choose> + </prefix> + <uri> + <xsl:value-of select="."/> + </uri> + </binding> + </xsl:for-each> + </xsl:variable> + + <!-- Select the first binding from the table for each unique URI --> + <xsl:variable name="unique-uri-bindings" select="exsl:node-set($almost-unique-uri-bindings-tree)/binding[not(uri=preceding::uri)]"/> + + <!-- + Since there is no <xsl:namespace/> instruction, the only way we + can create the namespace nodes we want is to create elements in + a certain namespace and with a certain (prefixed) name. + --> + <xsl:variable name="created-namespace-nodes-tree"> + <xsl:for-each select="$unique-uri-bindings"> + <xsl:variable name="prefix"> + <xsl:choose> + <!-- Replace a duplicated prefix with a different prefix. --> + <xsl:when test="prefix=preceding::prefix"> + <xsl:value-of select="generate-id()"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="prefix"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="maybe-colon"> + <xsl:if test="string($prefix)">:</xsl:if> + </xsl:variable> + <xsl:element name="{$prefix}{$maybe-colon}temporary" namespace="{uri}"/> + </xsl:for-each> + </xsl:variable> + + <!-- + Select all the namespace nodes from our temporary tree + of namespace-decorated elements. + --> + <xsl:variable name="created-namespace-nodes" select="exsl:node-set($created-namespace-nodes-tree)//namespace::*"/> + + <!-- + Do for the root element the same thing we do for every element, + except that we explicitly copy all of our namespace nodes onto + the root element, eliminating the need for namespace declarations + to appear anywhere else in the output. + --> + <xsl:template match="/*"> + <xsl:call-template name="copy"> + <xsl:with-param name="insert-namespace-declarations" select="true()"/> + </xsl:call-template> + <!-- <xsl:call-template name="do-xsl-message-diagnostics"/> --> + </xsl:template> + + <!-- + For each element, create a new element with the same expanded name, + but not necessarily the same QName. We create a new element instead + of copying the original, because, besides potentially having a + QName we don't want, a copy would include with it all of the + namespace nodes attached to the original, and we don't necessarily + want that. + --> + <xsl:template match="*" name="copy"> + <xsl:param name="insert-namespace-declarations"/> + <xsl:variable name="prefix" select="name($created-namespace-nodes[.=namespace-uri(current())])"/> + <xsl:variable name="maybe-colon"> + <xsl:if test="$prefix">:</xsl:if> + </xsl:variable> + <xsl:element name="{$prefix}{$maybe-colon}{local-name()}" namespace="{namespace-uri()}"> + <xsl:if test="$insert-namespace-declarations"> + <xsl:copy-of select="$created-namespace-nodes"/> + </xsl:if> + <xsl:apply-templates select="@*|node()"/> + </xsl:element> + </xsl:template> + + <!-- + For each attribute, create a new attribute with the same expanded + name, but not necessarily the same QName. + --> + <xsl:template match="@*"> + <xsl:variable name="prefix" select="name($created-namespace-nodes[.=namespace-uri(current())])"/> + <xsl:variable name="maybe-colon"> + <xsl:if test="$prefix">:</xsl:if> + </xsl:variable> + <xsl:attribute name="{$prefix}{$maybe-colon}{local-name()}" namespace="{namespace-uri()}"> + <xsl:value-of select="."/> + </xsl:attribute> + </xsl:template> + + <!-- Do a simple copy of text, comments, and processing instructions --> + <xsl:template match="text()|comment()|processing-instruction()"> + <xsl:copy/> + </xsl:template> + + <!-- Print out some diagnostics to show what's going on beneath the covers. --> + <xsl:template name="do-xsl-message-diagnostics"> + <xsl:message> + <diagnostics xml:space="preserve"> + <diagnostic name="almost-unique-uri-bindings-tree"> + <xsl:copy-of select="$almost-unique-uri-bindings-tree"/> + </diagnostic> + <diagnostic name="unique-uri-bindings"> + <xsl:copy-of select="$unique-uri-bindings"/> + </diagnostic> + <diagnostic name="created-namespace-nodes-tree"> + <xsl:copy-of select="$created-namespace-nodes-tree"/> + </diagnostic> + </diagnostics> + </xsl:message> + </xsl:template> + +</xsl:transform> diff --git a/bpmn/MSOCoreBPMN/src/main/resources/urnMapping.xml b/bpmn/MSOCoreBPMN/src/main/resources/urnMapping.xml new file mode 100644 index 0000000000..fd5d586278 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/main/resources/urnMapping.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + ============LICENSE_START======================================================= + ECOMP MSO + ================================================================================ + Copyright (C) 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========================================================= + --> + + +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="mso.urnMapping"> + + <resultMap id="urnMapping" type="org.openecomp.mso.bpmn.core.mybatis.URNMapping"> + <result property="name" column="NAME_" jdbcType="VARCHAR"/> + <result property="value" column="VALUE_" jdbcType="VARCHAR" /> + <result property="rev" column="REV_" jdbcType="INTEGER" /> + </resultMap> + + <select id="selectAll" resultMap="urnMapping"> + select NAME_, VALUE_, REV_ + from ATT_URN_MAPPING + </select> + + <select id="selectOne" resultMap="urnMapping"> + select NAME_, VALUE_, REV_ + from ATT_URN_MAPPING + where name = #{name} + </select> + +</mapper> diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BPMNLoggerESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BPMNLoggerESTest.java new file mode 100644 index 0000000000..71b9e089c3 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BPMNLoggerESTest.java @@ -0,0 +1,30 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:35:04 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.junit.Test; +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class BPMNLoggerESTest extends BPMNLoggerESTestscaffolding { + + @Test(timeout = 4000) + public void test0() throws Throwable { + BPMNLogger.debug("true", "<,A1M\"[ K3\\u"); + } + + @Test(timeout = 4000) + public void test1() throws Throwable { + BPMNLogger.debug("trud", (String) null); + } + + @Test(timeout = 4000) + public void test2() throws Throwable { + BPMNLogger bPMNLogger0 = new BPMNLogger(); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BPMNLoggerESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BPMNLoggerESTestscaffolding.java new file mode 100644 index 0000000000..2449157b43 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BPMNLoggerESTestscaffolding.java @@ -0,0 +1,106 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:35:04 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class BPMNLoggerESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.BPMNLogger"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(BPMNLoggerESTestscaffolding.class.getClassLoader() , + "org.openecomp.mso.logger.MsoLogger", + "org.openecomp.mso.logger.MessageEnum", + "com.att.eelf.i18n.EELFResolvableErrorEnum", + "org.openecomp.mso.logger.MsoLogger$ResponseCode", + "org.openecomp.mso.entity.MsoRequest", + "org.openecomp.mso.logger.MsoLogger$StatusCode", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "com.att.eelf.configuration.EELFManager", + "org.openecomp.mso.logger.MsoLogger$ErrorCode", + "com.att.eelf.configuration.EELFLogger", + "com.att.eelf.i18n.EELFMsgs", + "com.att.eelf.configuration.EELFLogger$Level", + "org.openecomp.mso.logger.MsoLogger$Catalog", + "com.att.eelf.configuration.SLF4jWrapper", + "org.openecomp.mso.bpmn.core.BPMNLogger", + "com.att.eelf.i18n.EELFResourceManager" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(BPMNLoggerESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "org.openecomp.mso.logger.MsoLogger$Catalog", + "org.openecomp.mso.logger.MsoLogger", + "com.att.eelf.i18n.EELFResourceManager", + "com.att.eelf.i18n.EELFMsgs", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "com.att.eelf.configuration.EELFLogger$Level", + "com.att.eelf.configuration.EELFManager", + "org.openecomp.mso.logger.MessageEnum", + "org.openecomp.mso.bpmn.core.BPMNLogger" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BadInjectedFieldExceptionESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BadInjectedFieldExceptionESTest.java new file mode 100644 index 0000000000..113c819f8c --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BadInjectedFieldExceptionESTest.java @@ -0,0 +1,24 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:35:23 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.junit.Test; +import static org.junit.Assert.*; + +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class BadInjectedFieldExceptionESTest extends BadInjectedFieldExceptionESTestscaffolding { + + @Test(timeout = 4000) + public void test0() throws Throwable { + BadInjectedFieldException badInjectedFieldException0 = new BadInjectedFieldException("", "", ""); + BadInjectedFieldException badInjectedFieldException1 = new BadInjectedFieldException("y#,,", "4tX0!<", (Object) badInjectedFieldException0, (Throwable) badInjectedFieldException0); + assertFalse(badInjectedFieldException1.equals((Object)badInjectedFieldException0)); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BadInjectedFieldExceptionESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BadInjectedFieldExceptionESTestscaffolding.java new file mode 100644 index 0000000000..69ee3dcd48 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/BadInjectedFieldExceptionESTestscaffolding.java @@ -0,0 +1,83 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:35:23 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class BadInjectedFieldExceptionESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.BadInjectedFieldException"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(BadInjectedFieldExceptionESTestscaffolding.class.getClassLoader() , + "org.openecomp.mso.bpmn.core.BadInjectedFieldException" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(BadInjectedFieldExceptionESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "org.openecomp.mso.bpmn.core.BadInjectedFieldException" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/JsonUtilsTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/JsonUtilsTest.java new file mode 100644 index 0000000000..6176029075 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/JsonUtilsTest.java @@ -0,0 +1,255 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.xml.sax.SAXException; +import org.custommonkey.xmlunit.Diff; + +import org.openecomp.mso.bpmn.core.json.JsonUtils; +import org.openecomp.mso.bpmn.core.xml.XmlTool; + +/** + * @version 1.0 + */ +public class JsonUtilsTest { + + private static final String EOL = "\n"; + private String xmlReq = + "<vnf-request xmlns=\"http://ecomp.att.com/mso/infra/vnf-request/v1\">" + EOL + + " <request-info>" + EOL + + " <request-id>DEV-VF-0021</request-id>" + EOL + + " <action>CREATE_VF_MODULE</action>" + EOL + + " <source>PORTAL</source>" + EOL + + " </request-info>" + EOL + + " <vnf-inputs>" + EOL + + " <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL + + " <vnf-name>STMTN5MMSC21</vnf-name>" + EOL + + " <vnf-type>asc_heat-int</vnf-type>" + EOL + + " <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL + + " <vf-module-model-name>STMTN5MMSC21-MMSC::model-1-0</vf-module-model-name>" + EOL + + " <is-base-module>true</is-base-module>" + EOL + + " <persona-model-id>00000000-0000-0000-0000-000000000000</persona-model-id>" + EOL + + " <persona-model-version>1.0</persona-model-version>" + EOL + + " <vnf-persona-model-id>999999999-0000-0000-0000-000000000000</vnf-persona-model-id>" + EOL + + " <vnf-persona-model-version>1.5</vnf-persona-model-version>" + EOL + + " <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL + + " <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL + + " <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL + + " <orchestration-status>pending-delete</orchestration-status>" + EOL + + " <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL + + " <asdc-service-model-version>1</asdc-service-model-version>" + EOL + + " </vnf-inputs>" + EOL + + " <vnf-params xmlns:tns=\"http://ecomp.att.com/mso/infra/vnf-request/v1\">" + EOL + + " <param name=\"network\">network1111</param>" + EOL + + " <param name=\"server\">server1111</param>" + EOL + + " </vnf-params> " + EOL + + "</vnf-request>" + EOL; + + private String xmlReqNoAttrs = + "<vnf-request xmlns=\"http://ecomp.att.com/mso/infra/vnf-request/v1\">" + EOL + + " <request-info>" + EOL + + " <action>DELETE_VF_MODULE</action>" + EOL + + " <source>PORTAL</source>" + EOL + + " </request-info>" + EOL + + " <vnf-inputs>" + EOL + + " <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL + + " <vnf-name>STMTN5MMSC21</vnf-name>" + EOL + + " <vnf-type>asc_heat-int</vnf-type>" + EOL + + " <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL + + " <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL + + " <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL + + " <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL + + " <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL + + " <orchestration-status>pending-delete</orchestration-status>" + EOL + + " <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL + + " </vnf-inputs>" + EOL + + " <vnf-params xmlns:tns=\"http://ecomp.att.com/mso/infra/vnf-request/v1\"/>" + EOL + + "</vnf-request>" + EOL; + + // JSON request w/ embedded XML will be read from a file + private String jsonReq = null; + + @Before + public void initialize() { + File file = new File("src/test/resources/request.json"); + FileInputStream fis = null; + + try { + fis = new FileInputStream(file); + BufferedReader br = new BufferedReader(new InputStreamReader(fis)); + jsonReq = br.readLine(); + if (jsonReq != null) { + System.out.println("initialize(): json request: " + jsonReq); + } else { + System.out.println("initialize(): failed to read json request from src/test/resources/request.json"); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (fis != null) + fis.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + } + + @After + public void cleanup(){ + } + + @Test + public void testConversion() { + // Note: the current version of the JsonUtils.json2xml() method + // does not support converting the JSONObject representation + // of XML attributes (JSONArray) back to XML. So this test will + // only succeed if the original XML does not contain attributes + + // save a copy of the xml with the namespaces removed + String xmlIn = XmlTool.removeNamespaces(xmlReqNoAttrs); + // strip all the whitespace + xmlIn = xmlIn.replaceAll("\\s+",""); + String json = JsonUtils.xml2json(xmlReqNoAttrs); + System.out.println("testConversion(): xml request to json: " + json); + String xmlOut = JsonUtils.json2xml(json); + System.out.println("testConversion(): json request back to xml: " + xmlOut); + + // strip all the whitespace + xmlOut = xmlOut.replaceAll("\\s+",""); +// System.out.println("testConversion(): xml in: " + xmlIn); +// System.out.println("testConversion(): xml out: " + xmlOut); + + Diff diffXml; + try { + diffXml = new Diff(xmlIn, xmlOut); + Assert.assertTrue(diffXml.similar()); +// Assert.assertTrue(diffXml.identical()); + } catch (SAXException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + public void testRetrieval() { + String json = JsonUtils.xml2json(xmlReq); + System.out.println("testRetrieval(): xml request to json: " + json); + // full JSON path + String value = JsonUtils.getJsonValue(json, "vnf-request.vnf-inputs.vnf-name"); + Assert.assertEquals(value, "STMTN5MMSC21"); + value = JsonUtils.getJsonValue(json, "vnf-request.request-info.action"); + Assert.assertEquals(value, "CREATE_VF_MODULE"); + // retrieving an integer + value = JsonUtils.getJsonValue(json, "vnf-request.vnf-inputs.persona-model-version"); + Assert.assertEquals(value, "1"); + // retrieving a float + value = JsonUtils.getJsonValue(json, "vnf-request.vnf-inputs.vnf-persona-model-version"); + Assert.assertEquals(value, "1.5"); + // retrieving a boolean + value = JsonUtils.getJsonValue(json, "vnf-request.vnf-inputs.is-base-module"); + Assert.assertEquals(value, "true"); + // attempt to retrieve a value for a non-existent field + value = JsonUtils.getJsonValue(json, "vnf-request.vnf-inputs.bad"); + Assert.assertEquals(value, null); + // retrieving a parameter value (originally a XML attribute) + value = JsonUtils.getJsonParamValue(json, "vnf-request.vnf-params.param", "server"); +// Assert.assertEquals(value, "[{\"content\":\"network1111\",\"name\":\"network\"},{\"content\":\"server1111\",\"name\":\"server\"}]"); + Assert.assertEquals(value, "server1111"); + value = JsonUtils.getJsonParamValue(json, "vnf-request.vnf-params.param", "badParam"); + Assert.assertEquals(value, null); + // by field name/key + value = JsonUtils.getJsonValueForKey(json, "source"); + Assert.assertEquals(value, "PORTAL"); + value = JsonUtils.getJsonValueForKey(json, "vnf-module"); + Assert.assertEquals(value, null); + } + + @Test + public void testUpdate() { + String json = JsonUtils.xml2json(xmlReq); + System.out.println("testUpdate(): xml request to json: " + json); + // the add should be successful + String jsonUpd = JsonUtils.addJsonValue(json, "vnf-request.request-info.comment", "Some comment"); +// System.out.println("testUpdate(): post add json request: " + jsonUpd); + String value = JsonUtils.getJsonValue(jsonUpd, "vnf-request.request-info.comment"); + Assert.assertEquals(value, "Some comment"); + // the add should be ignored as the field already exists + jsonUpd = JsonUtils.addJsonValue(jsonUpd, "vnf-request.vnf-inputs.vnf-name", "STMTN5MMSC22"); + value = JsonUtils.getJsonValue(jsonUpd, "vnf-request.vnf-inputs.vnf-name"); + Assert.assertEquals(value, "STMTN5MMSC21"); + // the update should be successful + jsonUpd = JsonUtils.updJsonValue(jsonUpd, "vnf-request.vnf-inputs.vnf-name", "STMTN5MMSC22"); +// System.out.println("testUpdate(): post update json request: " + jsonUpd); + value = JsonUtils.getJsonValue(jsonUpd, "vnf-request.vnf-inputs.vnf-name"); + Assert.assertEquals(value, "STMTN5MMSC22"); + // the delete should be successful + jsonUpd = JsonUtils.delJsonValue(jsonUpd, "vnf-request.request-info.comment"); +// System.out.println("testUpdate(): post delete json request: " + jsonUpd); + value = JsonUtils.getJsonValue(jsonUpd, "vnf-request.request-info.comment"); + Assert.assertEquals(value, null); + // the delete should fail as field 'vnf-model' does not exist + String jsonCur = jsonUpd; + jsonUpd = JsonUtils.delJsonValue(jsonUpd, "vnf-request.vnf-inputs.vnf-module"); + Assert.assertEquals(jsonCur, jsonUpd); + } + + @Test + public void testEmbededXmlRetrievalConversion() { + try { + // extract the embedded XML from the request + String value = JsonUtils.getJsonValue(jsonReq, "variables.bpmnRequest.value"); + String xmlReq = XmlTool.removeNamespaces(XmlTool.normalize(value)); + System.out.println("testEmbededXmlRetrievalConversion(): xml payload: " + xmlReq); + // strip all the whitespace +// xmlIn = xmlIn.replaceAll("\\s+",""); + String json = JsonUtils.xml2json(xmlReq); + System.out.println("testEmbededXmlRetrievalConversion(): xml request to json: " + json); + String xmlOut = JsonUtils.json2xml(json); + System.out.println("testEmbededXmlRetrievalConversion(): json request back to xml: " + xmlOut); + Diff diffXml; + try { + // compare the XML before and after + diffXml = new Diff(xmlReq, xmlOut); + Assert.assertTrue(diffXml.similar()); + } catch (SAXException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/LogTaskESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/LogTaskESTest.java new file mode 100644 index 0000000000..70e505095e --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/LogTaskESTest.java @@ -0,0 +1,41 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:29:34 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.junit.Test; +import static org.junit.Assert.*; + +import org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl; +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class LogTaskESTest extends LogTaskESTestscaffolding { + + @Test(timeout = 4000) + public void test0() throws Throwable { + LogTask logTask0 = null; + try { + logTask0 = new LogTask(); + fail("Expecting exception: NoClassDefFoundError"); + + } catch(NoClassDefFoundError e) { + } + } + + @Test(timeout = 4000) + public void test1() throws Throwable { + ExecutionImpl executionImpl0 = new ExecutionImpl(); + LogTask logTask0 = null; + try { + logTask0 = new LogTask(); + fail("Expecting exception: NoClassDefFoundError"); + + } catch(NoClassDefFoundError e) { + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/LogTaskESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/LogTaskESTestscaffolding.java new file mode 100644 index 0000000000..ab7ee56884 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/LogTaskESTestscaffolding.java @@ -0,0 +1,342 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:29:34 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class LogTaskESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.LogTask"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(LogTaskESTestscaffolding.class.getClassLoader() , + "org.camunda.bpm.engine.impl.persistence.entity.IdentityLinkEntity", + "org.camunda.bpm.engine.impl.pvm.process.TransitionImpl", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnExecution", + "org.camunda.bpm.engine.impl.context.CaseExecutionContext", + "org.camunda.bpm.engine.impl.cmmn.transformer.CmmnTransformFactory", + "org.camunda.bpm.engine.impl.pvm.PvmScope", + "org.camunda.bpm.engine.delegate.JavaDelegate", + "org.camunda.bpm.engine.runtime.ProcessInstance", + "org.camunda.bpm.engine.impl.tree.TreeWalker$WalkCondition", + "org.camunda.bpm.application.ProcessApplicationReference", + "org.camunda.bpm.engine.delegate.BpmnModelExecutionContext", + "org.camunda.bpm.engine.impl.jobexecutor.FailedJobCommandFactory", + "org.camunda.bpm.engine.delegate.DelegateExecution", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnIfPartDeclaration", + "org.camunda.bpm.engine.delegate.CmmnModelExecutionContext", + "org.camunda.bpm.engine.impl.persistence.entity.util.FormPropertyStartContext", + "com.att.eelf.i18n.EELFMsgs", + "org.camunda.bpm.engine.impl.javax.el.ELContext", + "org.camunda.bpm.engine.impl.core.variable.event.VariableEventDispatcher", + "org.camunda.bpm.engine.variable.type.ValueType", + "org.camunda.bpm.engine.impl.interceptor.CommandContextListener", + "org.camunda.bpm.engine.impl.core.variable.mapping.IoMapping", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnCaseInstance", + "org.camunda.bpm.engine.repository.CaseDefinition", + "org.camunda.bpm.engine.impl.cmmn.entity.repository.CaseDefinitionEntity", + "org.camunda.bpm.engine.impl.db.HasDbRevision", + "org.camunda.bpm.model.bpmn.instance.FlowElement", + "org.camunda.bpm.engine.delegate.Expression", + "org.camunda.bpm.engine.variable.type.SerializableValueType", + "org.camunda.bpm.engine.impl.pvm.PvmActivity", + "org.camunda.bpm.engine.impl.cfg.BpmnParseFactory", + "org.camunda.bpm.model.bpmn.instance.BpmnModelElementInstance", + "org.camunda.bpm.model.cmmn.instance.CmmnModelElementInstance", + "org.camunda.bpm.engine.impl.pvm.PvmException", + "org.camunda.bpm.engine.task.DelegationState", + "org.camunda.bpm.engine.impl.core.variable.VariableMapImpl", + "org.camunda.bpm.application.ProcessApplicationUnavailableException", + "org.camunda.bpm.engine.impl.pvm.PvmProcessDefinition", + "org.camunda.bpm.engine.delegate.DelegateCaseExecution", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnOnPartDeclaration", + "org.camunda.bpm.engine.runtime.CaseExecution", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnCaseDefinition", + "org.camunda.bpm.engine.impl.core.variable.scope.SimpleVariableStore", + "org.camunda.bpm.engine.repository.ProcessDefinition", + "org.camunda.bpm.engine.impl.pvm.process.ScopeImpl", + "org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.AtomicOperation", + "org.openecomp.mso.logger.MsoLogger$ErrorCode", + "org.camunda.bpm.engine.task.IdentityLink", + "org.camunda.bpm.engine.impl.interceptor.SessionFactory", + "org.camunda.bpm.engine.delegate.DelegateTask", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation", + "org.camunda.bpm.engine.impl.pvm.process.ActivityStartBehavior", + "org.camunda.bpm.engine.impl.core.model.CoreActivity", + "org.camunda.bpm.model.bpmn.BpmnModelInstance", + "org.camunda.bpm.engine.delegate.VariableScope", + "org.camunda.bpm.engine.ProcessEngine", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionImpl", + "org.camunda.bpm.engine.impl.interceptor.CommandContext", + "org.camunda.bpm.engine.impl.variable.listener.CaseVariableListenerInvocation", + "org.camunda.bpm.engine.impl.cfg.auth.ResourceAuthorizationProvider", + "org.openecomp.mso.logger.MsoLogger$Catalog", + "org.camunda.bpm.engine.BadUserRequestException", + "org.camunda.bpm.engine.impl.persistence.entity.AuthorizationEntity", + "org.camunda.bpm.engine.impl.context.ExecutionContext", + "org.camunda.bpm.engine.impl.persistence.entity.TaskEntity", + "org.camunda.bpm.engine.impl.context.Context", + "org.camunda.bpm.engine.authorization.Authorization", + "org.camunda.bpm.engine.ProcessEngineServices", + "org.camunda.bpm.engine.runtime.Execution", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl", + "org.camunda.bpm.engine.impl.pvm.process.Lane", + "org.camunda.bpm.engine.impl.pvm.process.ParticipantProcess", + "org.camunda.bpm.engine.impl.interceptor.CommandExecutor", + "org.camunda.bpm.engine.delegate.ProcessEngineServicesAware", + "org.camunda.bpm.engine.ProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnActivity", + "org.camunda.bpm.engine.impl.util.BitMaskUtil", + "org.camunda.bpm.engine.impl.pvm.ReadOnlyProcessDefinition", + "org.camunda.bpm.engine.impl.cmmn.behavior.CmmnActivityBehavior", + "org.camunda.bpm.engine.impl.core.variable.event.VariableEvent", + "org.camunda.bpm.engine.delegate.BaseDelegateExecution", + "org.camunda.bpm.engine.impl.pvm.PvmExecution", + "org.camunda.bpm.engine.impl.persistence.entity.ProcessDefinitionEntity", + "org.camunda.bpm.engine.runtime.VariableInstance", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableStore", + "org.camunda.bpm.engine.runtime.Job", + "org.camunda.bpm.engine.runtime.Incident", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionState$CaseExecutionStateImpl", + "org.camunda.bpm.model.xml.ModelInstance", + "org.camunda.bpm.engine.impl.pvm.process.ProcessDefinitionImpl", + "org.camunda.bpm.engine.impl.cmmn.entity.runtime.CaseExecutionEntity", + "org.openecomp.mso.entity.MsoRequest", + "org.camunda.bpm.engine.impl.core.variable.value.NullValueImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl", + "org.camunda.bpm.model.bpmn.instance.UserTask", + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.camunda.bpm.engine.impl.variable.serializer.ValueFields", + "org.camunda.bpm.engine.impl.core.operation.AbstractEventAtomicOperation", + "org.camunda.bpm.engine.impl.task.TaskDecorator", + "org.camunda.bpm.engine.impl.jobexecutor.JobExecutorContext", + "org.camunda.bpm.engine.impl.task.delegate.TaskListenerInvocation", + "org.camunda.bpm.engine.impl.persistence.entity.EventSubscriptionEntity", + "org.camunda.bpm.model.xml.instance.ModelElementInstance", + "org.camunda.bpm.engine.ProcessEngineException", + "org.camunda.bpm.engine.impl.cfg.StandaloneProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState$SuspensionStateImpl", + "org.camunda.bpm.engine.impl.db.DbEntity", + "org.camunda.bpm.model.bpmn.instance.InteractionNode", + "org.camunda.bpm.engine.impl.task.TaskDefinition", + "org.camunda.bpm.engine.impl.pvm.delegate.ActivityExecution", + "org.camunda.bpm.engine.runtime.EventSubscription", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionDestroyScope", + "org.camunda.bpm.engine.impl.core.variable.value.UntypedValueImpl", + "org.camunda.bpm.model.bpmn.instance.Activity", + "org.camunda.bpm.engine.management.JobDefinition", + "com.att.eelf.i18n.EELFResolvableErrorEnum", + "com.att.eelf.configuration.EELFLogger$Level", + "org.camunda.bpm.engine.impl.pvm.delegate.ActivityBehavior", + "org.camunda.bpm.engine.impl.core.variable.scope.MapBasedVariableStore", + "org.camunda.bpm.engine.impl.javax.el.ValueReference", + "org.camunda.bpm.engine.impl.persistence.entity.JobEntity", + "org.camunda.bpm.engine.impl.persistence.entity.ByteArrayEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.ProcessInstanceStartContext", + "org.camunda.bpm.engine.delegate.DelegateCaseVariableInstance", + "org.camunda.bpm.engine.impl.pvm.PvmProcessElement", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntityVariableStore", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "org.camunda.bpm.engine.impl.delegate.DelegateInvocation", + "org.camunda.bpm.engine.impl.javax.el.ValueExpression", + "com.att.eelf.configuration.EELFLogger", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationFireProcessStart", + "org.camunda.bpm.engine.runtime.CaseInstance", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCreateScope", + "org.camunda.bpm.engine.impl.db.DbEntityLifecycleAware", + "org.camunda.bpm.engine.impl.pvm.process.ActivityImpl", + "org.camunda.bpm.engine.impl.core.model.CoreModelElement", + "org.camunda.bpm.engine.impl.interceptor.CommandInterceptor", + "org.camunda.bpm.engine.impl.pvm.PvmProcessInstance", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseSentryPartImpl", + "org.camunda.bpm.engine.variable.value.TypedValue", + "org.openecomp.mso.logger.MsoAlarmLogger", + "org.apache.ibatis.transaction.TransactionFactory", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnSentryPart", + "org.camunda.bpm.engine.impl.pvm.process.LaneSet", + "org.camunda.bpm.engine.delegate.DelegateListener", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnActivityExecution", + "org.camunda.bpm.engine.impl.persistence.entity.TaskEntityVariableStore", + "org.camunda.bpm.engine.delegate.ExecutionListener", + "org.camunda.bpm.engine.exception.NotAllowedException", + "org.camunda.bpm.engine.impl.history.event.HistoryEventType", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException", + "org.openecomp.mso.bpmn.core.LogTask", + "org.camunda.bpm.engine.impl.pvm.process.HasDIBounds", + "com.att.eelf.configuration.SLF4jWrapper", + "org.camunda.bpm.engine.task.Task", + "org.camunda.bpm.engine.impl.javax.el.Expression", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.AbstractPvmEventAtomicOperation", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInstanceEnd", + "org.camunda.bpm.engine.impl.context.CoreExecutionContext", + "org.camunda.bpm.engine.delegate.DelegateVariableInstance", + "org.camunda.bpm.model.bpmn.instance.FlowNode", + "org.openecomp.mso.logger.MsoLogger", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope", + "org.camunda.bpm.model.cmmn.CmmnModelInstance", + "org.camunda.bpm.model.bpmn.instance.Task", + "org.camunda.bpm.engine.variable.VariableMap", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState$ActivityInstanceStateImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationProcessEnd", + "org.camunda.bpm.engine.impl.interceptor.CommandExecutorImpl", + "org.camunda.bpm.model.bpmn.instance.BaseElement", + "org.camunda.bpm.engine.exception.NullValueException", + "org.camunda.bpm.engine.impl.core.variable.scope.CoreVariableStore", + "org.camunda.bpm.engine.impl.context.BpmnExecutionContext", + "org.openecomp.mso.bpmn.core.BaseTask", + "org.camunda.bpm.engine.impl.persistence.entity.VariableInstanceEntity", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionState", + "org.apache.ibatis.session.SqlSessionFactory", + "org.camunda.bpm.engine.impl.variable.AbstractPersistentVariableStore", + "org.camunda.bpm.engine.impl.interceptor.CommandInvocationContext", + "com.att.eelf.i18n.EELFResourceManager", + "org.camunda.bpm.engine.impl.el.FixedValue", + "org.camunda.bpm.engine.impl.core.delegate.CoreActivityBehavior", + "org.openecomp.mso.logger.MessageEnum", + "org.openecomp.mso.logger.MsoLogger$ResponseCode", + "org.camunda.bpm.engine.SuspendedEntityInteractionException", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState", + "org.openecomp.mso.logger.MsoLogger$StatusCode", + "org.camunda.bpm.engine.impl.db.HasDbReferences", + "org.camunda.bpm.engine.impl.tree.Collector", + "com.att.eelf.configuration.EELFManager", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionStartContext", + "org.camunda.bpm.engine.impl.core.operation.CoreAtomicOperation", + "org.camunda.bpm.engine.impl.el.Expression", + "org.camunda.bpm.engine.impl.pvm.PvmTransition", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState", + "org.camunda.bpm.model.cmmn.instance.CmmnElement", + "org.camunda.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.persistence.entity.IncidentEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationProcessStart", + "org.camunda.bpm.engine.impl.jobexecutor.JobHandler", + "com.att.eelf.i18n.EELFResourceManager$1", + "org.camunda.bpm.engine.impl.core.instance.CoreExecution", + "org.camunda.bpm.engine.impl.core.variable.CoreVariableInstance", + "org.camunda.bpm.engine.variable.type.PrimitiveValueType", + "org.camunda.bpm.engine.delegate.VariableListener", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityExecute", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnSentryDeclaration", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl$1" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(LogTaskESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "org.openecomp.mso.logger.MsoLogger$Catalog", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope", + "org.camunda.bpm.engine.impl.core.instance.CoreExecution", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntityVariableStore", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState", + "org.camunda.bpm.engine.impl.context.Context", + "org.camunda.bpm.engine.impl.javax.el.Expression", + "org.camunda.bpm.engine.impl.javax.el.ValueExpression", + "org.camunda.bpm.engine.ProcessEngineException", + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl", + "org.camunda.bpm.engine.impl.core.model.CoreModelElement", + "org.camunda.bpm.engine.impl.core.model.CoreActivity", + "org.camunda.bpm.engine.impl.pvm.process.ScopeImpl", + "org.camunda.bpm.engine.impl.pvm.process.ProcessDefinitionImpl", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException", + "org.camunda.bpm.engine.impl.pvm.PvmException", + "org.camunda.bpm.engine.exception.NullValueException", + "org.camunda.bpm.engine.impl.core.variable.VariableMapImpl", + "org.camunda.bpm.engine.impl.persistence.entity.TaskEntity", + "org.camunda.bpm.engine.impl.pvm.process.ActivityImpl", + "org.camunda.bpm.engine.impl.pvm.process.ActivityStartBehavior", + "org.camunda.bpm.engine.impl.util.BitMaskUtil", + "org.camunda.bpm.engine.impl.core.variable.value.NullValueImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInstanceEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationProcessEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCreateScope", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityExecute", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionDestroyScope", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation", + "org.camunda.bpm.engine.impl.core.variable.value.UntypedValueImpl", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnActivity", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnCaseDefinition", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl$1", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnExecution", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionImpl", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionState", + "org.camunda.bpm.engine.impl.persistence.entity.JobEntity", + "org.camunda.bpm.engine.impl.persistence.entity.EventSubscriptionEntity", + "org.openecomp.mso.logger.MsoLogger", + "com.att.eelf.i18n.EELFResourceManager", + "com.att.eelf.i18n.EELFMsgs", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "com.att.eelf.configuration.EELFLogger$Level", + "com.att.eelf.configuration.EELFManager", + "org.openecomp.mso.logger.MessageEnum", + "org.openecomp.mso.logger.MsoAlarmLogger", + "org.openecomp.mso.bpmn.core.LogTask" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/MissingInjectedFieldExceptionESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/MissingInjectedFieldExceptionESTest.java new file mode 100644 index 0000000000..f62d6afaf0 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/MissingInjectedFieldExceptionESTest.java @@ -0,0 +1,20 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:35:52 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.junit.Test; +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class MissingInjectedFieldExceptionESTest extends MissingInjectedFieldExceptionESTestscaffolding { + + @Test(timeout = 4000) + public void test0() throws Throwable { + MissingInjectedFieldException missingInjectedFieldException0 = new MissingInjectedFieldException("", ""); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/MissingInjectedFieldExceptionESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/MissingInjectedFieldExceptionESTestscaffolding.java new file mode 100644 index 0000000000..03cb94f4e6 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/MissingInjectedFieldExceptionESTestscaffolding.java @@ -0,0 +1,85 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:35:52 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class MissingInjectedFieldExceptionESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.MissingInjectedFieldException"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(MissingInjectedFieldExceptionESTestscaffolding.class.getClassLoader() , + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(MissingInjectedFieldExceptionESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/PropertyConfigurationTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/PropertyConfigurationTest.java new file mode 100644 index 0000000000..ff92355b8a --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/PropertyConfigurationTest.java @@ -0,0 +1,115 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import org.openecomp.mso.bpmn.test.PropertyConfigurationSetup; + +public class PropertyConfigurationTest { + @Before + public void beforeTest() throws IOException { + Map<String, String> defaultProperties = PropertyConfigurationSetup.createBpmnProperties(); + defaultProperties.put("testValue", "testKey"); + PropertyConfigurationSetup.init(defaultProperties); + } + + @Test + public void testPropertyFileWatcher() throws InterruptedException, IOException { + Assert.assertEquals(true, PropertyConfiguration.getInstance().isFileWatcherRunning()); + } + + @Test + public void testPropertyLoading() throws IOException, InterruptedException { + PropertyConfiguration propertyConfiguration = PropertyConfiguration.getInstance(); + Map<String,String> props = propertyConfiguration.getProperties(PropertyConfiguration.MSO_BPMN_PROPERTIES); + Assert.assertNotNull(props); + Assert.assertEquals("testValue", props.get("testKey")); + } + + @Test + public void testPropertyReload() throws IOException, InterruptedException { + PropertyConfiguration propertyConfiguration = PropertyConfiguration.getInstance(); + Map<String,String> properties = propertyConfiguration.getProperties(PropertyConfiguration.MSO_BPMN_PROPERTIES); + Assert.assertNotNull(properties); + Assert.assertEquals("testValue", properties.get("testKey")); + + Map<String, String> newProperties = PropertyConfigurationSetup.createBpmnProperties(); + newProperties.put("newKey", "newValue"); + PropertyConfigurationSetup.addProperties(newProperties, 10000); + + // Reload and check for the new value + properties = propertyConfiguration.getProperties(PropertyConfiguration.MSO_BPMN_PROPERTIES); + Assert.assertNotNull(properties); + Assert.assertEquals("newValue", properties.get("newKey")); + } + + @Test(expected=IllegalArgumentException.class) + public void testPropertyFileDoesNotExists_NotIntheList() throws IOException { + PropertyConfiguration propertyConfiguration = PropertyConfiguration.getInstance(); + propertyConfiguration.getProperties("badfile.properties"); + Assert.fail("Expected IllegalArgumentException"); + } + + @Test(expected=java.lang.UnsupportedOperationException.class) + public void testPropertyModificationException() throws IOException { + PropertyConfiguration propertyConfiguration = PropertyConfiguration.getInstance(); + Map<String,String> props = propertyConfiguration.getProperties(PropertyConfiguration.MSO_BPMN_PROPERTIES); + Assert.assertNotNull(props); + Assert.assertEquals("testValue", props.get("testKey")); + props.put("newKey", "newvalue"); + } + + @Test + public void testNotAllowedPropertyReloading() throws IOException { + Path msoConfigPath = Paths.get(System.getProperty("mso.config.path")); + Path backupPropFilePath = msoConfigPath.resolve("backup-" + PropertyConfiguration.MSO_BPMN_PROPERTIES); + + try { + // Create a new file... a backup file + Files.createFile(backupPropFilePath); + + // Load properties + PropertyConfiguration propertyConfiguration = PropertyConfiguration.getInstance(); + Map<String,String> props = propertyConfiguration.getProperties(PropertyConfiguration.MSO_BPMN_PROPERTIES); + Assert.assertNotNull(props); + Assert.assertEquals("testValue", props.get("testKey")); + + // Update the backup file + Path bpmnPropertiesSourcePath = Paths.get("src", "test", "resources", "mso.bpmn.properties"); + Files.copy(bpmnPropertiesSourcePath, backupPropFilePath, StandardCopyOption.REPLACE_EXISTING); + + // Cache size should remain the same + Assert.assertEquals(1, PropertyConfiguration.getInstance().cacheSize()); + } finally { + backupPropFilePath.toFile().delete(); + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadConfigTaskESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadConfigTaskESTest.java new file mode 100644 index 0000000000..6422685f92 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadConfigTaskESTest.java @@ -0,0 +1,58 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:29:36 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.junit.Test; +import static org.junit.Assert.*; +import static org.evosuite.shaded.org.mockito.Mockito.*; +import static org.evosuite.runtime.EvoAssertions.*; + +import org.camunda.bpm.engine.delegate.Expression; +import org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl; +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.evosuite.runtime.PrivateAccess; +import org.evosuite.runtime.ViolatedAssumptionAnswer; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class ReadConfigTaskESTest extends ReadConfigTaskESTestscaffolding { + + @Test(timeout = 4000) + public void test0() throws Throwable { + ReadConfigTask readConfigTask0 = new ReadConfigTask(); + ExecutionImpl executionImpl0 = new ExecutionImpl(); + Expression expression0 = mock(Expression.class, new ViolatedAssumptionAnswer()); + doReturn((Object) null).when(expression0).getValue(any(org.camunda.bpm.engine.delegate.VariableScope.class)); + PrivateAccess.setVariable((Class<ReadConfigTask>) ReadConfigTask.class, readConfigTask0, "propertiesFile", (Object) expression0); + try { + readConfigTask0.execute(executionImpl0); + fail("Expecting exception: RuntimeException"); + + } catch(RuntimeException e) { + // + // ReadConfigTask injected field 'propertiesFile' is bad: required field has null value + // + verifyException("org.openecomp.mso.bpmn.core.BaseTask", e); + } + } + + @Test(timeout = 4000) + public void test1() throws Throwable { + ReadConfigTask readConfigTask0 = new ReadConfigTask(); + ExecutionImpl executionImpl0 = new ExecutionImpl(); + try { + readConfigTask0.execute(executionImpl0); + fail("Expecting exception: RuntimeException"); + + } catch(RuntimeException e) { + // + // ReadConfigTask injected field 'propertiesFile' is bad: missing required field + // + verifyException("org.openecomp.mso.bpmn.core.BaseTask", e); + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadConfigTaskESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadConfigTaskESTestscaffolding.java new file mode 100644 index 0000000000..c134c9cca9 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadConfigTaskESTestscaffolding.java @@ -0,0 +1,331 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:29:36 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class ReadConfigTaskESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.ReadConfigTask"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(ReadConfigTaskESTestscaffolding.class.getClassLoader() , + "org.camunda.bpm.engine.impl.pvm.process.TransitionImpl", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnExecution", + "org.camunda.bpm.engine.impl.context.CaseExecutionContext", + "org.camunda.bpm.engine.impl.cmmn.transformer.CmmnTransformFactory", + "org.camunda.bpm.engine.impl.pvm.PvmScope", + "org.camunda.bpm.engine.delegate.JavaDelegate", + "org.camunda.bpm.engine.impl.tree.TreeWalker$WalkCondition", + "org.camunda.bpm.engine.runtime.ProcessInstance", + "org.camunda.bpm.application.ProcessApplicationReference", + "org.camunda.bpm.engine.delegate.BpmnModelExecutionContext", + "org.camunda.bpm.engine.impl.jobexecutor.FailedJobCommandFactory", + "org.camunda.bpm.engine.delegate.DelegateExecution", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnIfPartDeclaration", + "org.camunda.bpm.engine.delegate.CmmnModelExecutionContext", + "org.camunda.bpm.engine.impl.persistence.entity.util.FormPropertyStartContext", + "com.att.eelf.i18n.EELFMsgs", + "org.camunda.bpm.engine.impl.javax.el.ELContext", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInstanceStart", + "org.camunda.bpm.engine.impl.core.variable.event.VariableEventDispatcher", + "org.camunda.bpm.engine.variable.type.ValueType", + "org.camunda.bpm.engine.impl.interceptor.CommandContextListener", + "org.camunda.bpm.engine.impl.core.variable.mapping.IoMapping", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationInterruptScope", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnCaseInstance", + "org.camunda.bpm.engine.repository.CaseDefinition", + "org.camunda.bpm.engine.impl.db.HasDbRevision", + "org.camunda.bpm.model.bpmn.instance.FlowElement", + "org.camunda.bpm.engine.delegate.Expression", + "org.camunda.bpm.engine.variable.type.SerializableValueType", + "org.camunda.bpm.engine.impl.pvm.PvmActivity", + "org.camunda.bpm.engine.impl.cfg.BpmnParseFactory", + "org.camunda.bpm.model.bpmn.instance.BpmnModelElementInstance", + "org.camunda.bpm.model.cmmn.instance.CmmnModelElementInstance", + "org.camunda.bpm.engine.impl.pvm.PvmException", + "org.camunda.bpm.engine.impl.core.variable.VariableMapImpl", + "org.camunda.bpm.application.ProcessApplicationUnavailableException", + "org.camunda.bpm.engine.impl.pvm.PvmProcessDefinition", + "org.camunda.bpm.engine.delegate.DelegateCaseExecution", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionNotifyListenerTake", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityNotifyListenerEnd", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnOnPartDeclaration", + "org.camunda.bpm.engine.runtime.CaseExecution", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnCaseDefinition", + "org.camunda.bpm.engine.impl.core.variable.scope.SimpleVariableStore", + "org.camunda.bpm.engine.repository.ProcessDefinition", + "org.camunda.bpm.engine.impl.pvm.process.ScopeImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionNotifyListenerStart", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityStartConcurrent", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.AbstractPvmAtomicOperationTransitionNotifyListenerTake", + "org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl", + "org.openecomp.mso.logger.MsoLogger$ErrorCode", + "org.camunda.bpm.engine.impl.pvm.runtime.AtomicOperation", + "org.camunda.bpm.engine.impl.interceptor.SessionFactory", + "org.camunda.bpm.engine.delegate.DelegateTask", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation", + "org.camunda.bpm.engine.impl.pvm.process.ActivityStartBehavior", + "org.camunda.bpm.engine.impl.core.model.CoreActivity", + "org.camunda.bpm.model.bpmn.BpmnModelInstance", + "org.camunda.bpm.engine.delegate.VariableScope", + "org.camunda.bpm.engine.ProcessEngine", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionImpl", + "org.camunda.bpm.engine.impl.interceptor.CommandContext", + "org.camunda.bpm.engine.impl.variable.listener.CaseVariableListenerInvocation", + "org.openecomp.mso.logger.MsoLogger$Catalog", + "org.camunda.bpm.engine.BadUserRequestException", + "org.camunda.bpm.engine.impl.context.ExecutionContext", + "org.camunda.bpm.engine.impl.persistence.entity.TaskEntity", + "org.camunda.bpm.engine.impl.context.Context", + "org.camunda.bpm.engine.ProcessEngineServices", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl", + "org.camunda.bpm.engine.runtime.Execution", + "org.camunda.bpm.engine.impl.pvm.process.Lane", + "org.camunda.bpm.engine.impl.pvm.process.ParticipantProcess", + "org.camunda.bpm.engine.impl.interceptor.CommandExecutor", + "org.camunda.bpm.engine.delegate.ProcessEngineServicesAware", + "org.camunda.bpm.engine.ProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnActivity", + "org.camunda.bpm.engine.impl.pvm.ReadOnlyProcessDefinition", + "org.camunda.bpm.engine.impl.cmmn.behavior.CmmnActivityBehavior", + "org.camunda.bpm.engine.impl.core.variable.event.VariableEvent", + "org.camunda.bpm.engine.delegate.BaseDelegateExecution", + "org.camunda.bpm.engine.impl.pvm.PvmExecution", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityStartCreateScope", + "org.camunda.bpm.engine.impl.persistence.entity.ProcessDefinitionEntity", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableStore", + "org.camunda.bpm.engine.runtime.VariableInstance", + "org.camunda.bpm.engine.runtime.Job", + "org.camunda.bpm.engine.runtime.Incident", + "org.camunda.bpm.model.xml.ModelInstance", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityStart", + "org.camunda.bpm.engine.impl.pvm.process.ProcessDefinitionImpl", + "org.camunda.bpm.engine.impl.cmmn.entity.runtime.CaseExecutionEntity", + "org.openecomp.mso.entity.MsoRequest", + "org.camunda.bpm.engine.impl.core.variable.value.NullValueImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl", + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.camunda.bpm.engine.impl.variable.serializer.ValueFields", + "org.camunda.bpm.engine.impl.core.operation.AbstractEventAtomicOperation", + "org.camunda.bpm.engine.impl.task.TaskDecorator", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInitStackNotifyListenerStart", + "org.camunda.bpm.engine.impl.jobexecutor.JobExecutorContext", + "org.camunda.bpm.engine.impl.task.delegate.TaskListenerInvocation", + "org.camunda.bpm.engine.impl.persistence.entity.EventSubscriptionEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationsTransitionInterruptFlowScope", + "org.camunda.bpm.model.xml.instance.ModelElementInstance", + "org.camunda.bpm.engine.ProcessEngineException", + "org.camunda.bpm.engine.impl.cfg.StandaloneProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState$SuspensionStateImpl", + "org.camunda.bpm.engine.impl.db.DbEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionNotifyListenerEnd", + "org.camunda.bpm.engine.impl.pvm.delegate.ActivityExecution", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationFireActivityEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationStartTransitionNotifyListenerTake", + "org.camunda.bpm.engine.runtime.EventSubscription", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionDestroyScope", + "org.camunda.bpm.engine.impl.core.variable.value.UntypedValueImpl", + "org.camunda.bpm.engine.management.JobDefinition", + "com.att.eelf.i18n.EELFResolvableErrorEnum", + "com.att.eelf.configuration.EELFLogger$Level", + "org.camunda.bpm.engine.impl.pvm.delegate.ActivityBehavior", + "org.camunda.bpm.engine.impl.core.variable.scope.MapBasedVariableStore", + "org.camunda.bpm.engine.impl.persistence.entity.JobEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.ProcessInstanceStartContext", + "org.camunda.bpm.engine.delegate.DelegateCaseVariableInstance", + "org.camunda.bpm.engine.impl.pvm.PvmProcessElement", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntityVariableStore", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "org.camunda.bpm.engine.impl.delegate.DelegateInvocation", + "com.att.eelf.configuration.EELFLogger", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationFireProcessStart", + "org.camunda.bpm.engine.runtime.CaseInstance", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCreateScope", + "org.camunda.bpm.engine.impl.db.DbEntityLifecycleAware", + "org.openecomp.mso.bpmn.core.ReadConfigTask", + "org.camunda.bpm.engine.impl.pvm.process.ActivityImpl", + "org.camunda.bpm.engine.impl.core.model.CoreModelElement", + "org.camunda.bpm.engine.impl.interceptor.CommandInterceptor", + "org.camunda.bpm.engine.impl.pvm.PvmProcessInstance", + "org.camunda.bpm.engine.variable.value.TypedValue", + "org.apache.ibatis.transaction.TransactionFactory", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnSentryPart", + "org.camunda.bpm.engine.impl.pvm.process.LaneSet", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInitStack", + "org.camunda.bpm.engine.delegate.DelegateListener", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnActivityExecution", + "org.camunda.bpm.engine.delegate.ExecutionListener", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationDeleteCascadeFireActivityEnd", + "org.camunda.bpm.engine.exception.NotAllowedException", + "org.camunda.bpm.engine.impl.history.event.HistoryEventType", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException", + "org.camunda.bpm.engine.impl.pvm.process.HasDIBounds", + "com.att.eelf.configuration.SLF4jWrapper", + "org.camunda.bpm.engine.task.Task", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.AbstractPvmEventAtomicOperation", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInstanceEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationDeleteCascade", + "org.camunda.bpm.engine.impl.context.CoreExecutionContext", + "org.camunda.bpm.engine.delegate.DelegateVariableInstance", + "org.openecomp.mso.logger.MsoLogger", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope", + "org.camunda.bpm.engine.variable.VariableMap", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState$ActivityInstanceStateImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationProcessEnd", + "org.camunda.bpm.engine.impl.interceptor.CommandExecutorImpl", + "org.camunda.bpm.model.bpmn.instance.BaseElement", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCreateConcurrentExecution", + "org.camunda.bpm.engine.exception.NullValueException", + "org.camunda.bpm.engine.impl.core.variable.scope.CoreVariableStore", + "org.camunda.bpm.engine.impl.context.BpmnExecutionContext", + "org.openecomp.mso.bpmn.core.BaseTask", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityStartInterruptEventScope", + "org.camunda.bpm.engine.impl.persistence.entity.VariableInstanceEntity", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionState", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityStartCancelScope", + "org.apache.ibatis.session.SqlSessionFactory", + "org.camunda.bpm.engine.impl.variable.AbstractPersistentVariableStore", + "org.camunda.bpm.engine.impl.interceptor.CommandInvocationContext", + "com.att.eelf.i18n.EELFResourceManager", + "org.camunda.bpm.engine.impl.core.delegate.CoreActivityBehavior", + "org.openecomp.mso.logger.MessageEnum", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionCreateScope", + "org.openecomp.mso.logger.MsoLogger$ResponseCode", + "org.camunda.bpm.engine.SuspendedEntityInteractionException", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCancelActivity", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState", + "org.openecomp.mso.logger.MsoLogger$StatusCode", + "org.camunda.bpm.engine.impl.db.HasDbReferences", + "org.camunda.bpm.engine.impl.tree.Collector", + "com.att.eelf.configuration.EELFManager", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionStartContext", + "org.camunda.bpm.engine.impl.core.operation.CoreAtomicOperation", + "org.camunda.bpm.engine.impl.pvm.PvmTransition", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState", + "org.camunda.bpm.model.cmmn.instance.CmmnElement", + "org.camunda.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.persistence.entity.IncidentEntity", + "com.att.eelf.i18n.EELFResourceManager$1", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationProcessStart", + "org.camunda.bpm.engine.impl.core.instance.CoreExecution", + "org.camunda.bpm.engine.impl.core.variable.CoreVariableInstance", + "org.camunda.bpm.engine.variable.type.PrimitiveValueType", + "org.camunda.bpm.engine.delegate.VariableListener", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityExecute", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnSentryDeclaration", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl$1" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(ReadConfigTaskESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "org.openecomp.mso.logger.MsoLogger$Catalog", + "org.openecomp.mso.logger.MsoLogger", + "com.att.eelf.i18n.EELFResourceManager", + "com.att.eelf.i18n.EELFMsgs", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "com.att.eelf.configuration.EELFLogger$Level", + "com.att.eelf.configuration.EELFManager", + "org.openecomp.mso.logger.MessageEnum", + "org.openecomp.mso.bpmn.core.ReadConfigTask", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope", + "org.camunda.bpm.engine.impl.core.instance.CoreExecution", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntityVariableStore", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState", + "org.camunda.bpm.engine.impl.context.Context", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl", + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.camunda.bpm.engine.ProcessEngineException", + "org.camunda.bpm.engine.exception.NullValueException", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInstanceEnd", + "org.camunda.bpm.engine.impl.core.variable.value.UntypedValueImpl", + "org.camunda.bpm.engine.impl.core.variable.VariableMapImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationProcessEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCreateScope", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityExecute", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionDestroyScope", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation", + "org.camunda.bpm.engine.impl.pvm.PvmException", + "org.camunda.bpm.engine.impl.core.model.CoreModelElement", + "org.camunda.bpm.engine.impl.core.model.CoreActivity", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnActivity", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnCaseDefinition", + "org.camunda.bpm.engine.impl.core.variable.value.NullValueImpl", + "org.camunda.bpm.engine.impl.pvm.process.ScopeImpl", + "org.camunda.bpm.engine.impl.pvm.process.ProcessDefinitionImpl", + "org.camunda.bpm.engine.impl.pvm.process.ActivityImpl", + "org.camunda.bpm.engine.impl.pvm.process.ActivityStartBehavior", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl$1", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnExecution", + "org.camunda.bpm.engine.impl.persistence.entity.EventSubscriptionEntity" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadFileTaskESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadFileTaskESTest.java new file mode 100644 index 0000000000..741872af7a --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadFileTaskESTest.java @@ -0,0 +1,58 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:30:51 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.junit.Test; +import static org.junit.Assert.*; +import static org.evosuite.shaded.org.mockito.Mockito.*; +import static org.evosuite.runtime.EvoAssertions.*; + +import org.camunda.bpm.engine.delegate.Expression; +import org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl; +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.evosuite.runtime.PrivateAccess; +import org.evosuite.runtime.ViolatedAssumptionAnswer; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class ReadFileTaskESTest extends ReadFileTaskESTestscaffolding { + + @Test(timeout = 4000) + public void test0() throws Throwable { + ReadFileTask readFileTask0 = new ReadFileTask(); + ExecutionImpl executionImpl0 = new ExecutionImpl(); + Expression expression0 = mock(Expression.class, new ViolatedAssumptionAnswer()); + doReturn((Object) null).when(expression0).getValue(any(org.camunda.bpm.engine.delegate.VariableScope.class)); + PrivateAccess.setVariable((Class<ReadFileTask>) ReadFileTask.class, readFileTask0, "inputVariable", (Object) expression0); + try { + readFileTask0.execute(executionImpl0); + fail("Expecting exception: RuntimeException"); + + } catch(RuntimeException e) { + // + // ReadFileTask injected field 'inputVariable' is bad: required field has null value + // + verifyException("org.openecomp.mso.bpmn.core.BaseTask", e); + } + } + + @Test(timeout = 4000) + public void test1() throws Throwable { + ReadFileTask readFileTask0 = new ReadFileTask(); + ExecutionImpl executionImpl0 = new ExecutionImpl(); + try { + readFileTask0.execute(executionImpl0); + fail("Expecting exception: RuntimeException"); + + } catch(RuntimeException e) { + // + // ReadFileTask injected field 'inputVariable' is bad: missing required field + // + verifyException("org.openecomp.mso.bpmn.core.BaseTask", e); + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadFileTaskESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadFileTaskESTestscaffolding.java new file mode 100644 index 0000000000..4b11c761cc --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/ReadFileTaskESTestscaffolding.java @@ -0,0 +1,339 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:30:51 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class ReadFileTaskESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.ReadFileTask"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(ReadFileTaskESTestscaffolding.class.getClassLoader() , + "org.camunda.bpm.engine.impl.pvm.process.TransitionImpl", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnExecution", + "org.camunda.bpm.engine.impl.context.CaseExecutionContext", + "org.camunda.bpm.engine.impl.cmmn.transformer.CmmnTransformFactory", + "org.camunda.bpm.engine.impl.pvm.PvmScope", + "org.camunda.bpm.engine.delegate.JavaDelegate", + "org.camunda.bpm.engine.impl.tree.TreeWalker$WalkCondition", + "org.camunda.bpm.engine.runtime.ProcessInstance", + "org.camunda.bpm.application.ProcessApplicationReference", + "org.camunda.bpm.engine.delegate.BpmnModelExecutionContext", + "org.camunda.bpm.engine.impl.jobexecutor.FailedJobCommandFactory", + "org.openecomp.mso.bpmn.core.ReadFileTask", + "org.camunda.bpm.engine.delegate.DelegateExecution", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnIfPartDeclaration", + "org.camunda.bpm.engine.delegate.CmmnModelExecutionContext", + "org.camunda.bpm.engine.impl.persistence.entity.util.FormPropertyStartContext", + "com.att.eelf.i18n.EELFMsgs", + "org.camunda.bpm.engine.impl.javax.el.ELContext", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInstanceStart", + "org.camunda.bpm.engine.impl.core.variable.event.VariableEventDispatcher", + "org.camunda.bpm.engine.variable.type.ValueType", + "org.camunda.bpm.engine.impl.interceptor.CommandContextListener", + "org.camunda.bpm.engine.impl.core.variable.mapping.IoMapping", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationInterruptScope", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnCaseInstance", + "org.camunda.bpm.engine.impl.db.HasDbRevision", + "org.camunda.bpm.model.bpmn.instance.FlowElement", + "org.camunda.bpm.engine.delegate.Expression", + "org.camunda.bpm.engine.variable.type.SerializableValueType", + "org.camunda.bpm.engine.impl.pvm.PvmActivity", + "org.camunda.bpm.engine.impl.cfg.BpmnParseFactory", + "org.camunda.bpm.model.bpmn.instance.BpmnModelElementInstance", + "org.camunda.bpm.model.cmmn.instance.CmmnModelElementInstance", + "org.camunda.bpm.engine.impl.pvm.PvmException", + "org.camunda.bpm.engine.impl.core.variable.VariableMapImpl", + "org.camunda.bpm.application.ProcessApplicationUnavailableException", + "org.camunda.bpm.engine.impl.pvm.PvmProcessDefinition", + "org.camunda.bpm.engine.delegate.DelegateCaseExecution", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionNotifyListenerTake", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityNotifyListenerEnd", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnOnPartDeclaration", + "org.camunda.bpm.engine.runtime.CaseExecution", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnCaseDefinition", + "org.camunda.bpm.engine.impl.core.variable.scope.SimpleVariableStore", + "org.camunda.bpm.engine.repository.ProcessDefinition", + "org.camunda.bpm.engine.impl.pvm.process.ScopeImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionNotifyListenerStart", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityStartConcurrent", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.AbstractPvmAtomicOperationTransitionNotifyListenerTake", + "org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl", + "org.openecomp.mso.logger.MsoLogger$ErrorCode", + "org.camunda.bpm.engine.impl.pvm.runtime.AtomicOperation", + "org.camunda.bpm.engine.impl.interceptor.SessionFactory", + "org.camunda.bpm.engine.delegate.DelegateTask", + "org.camunda.bpm.engine.impl.pvm.process.ActivityStartBehavior", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation", + "org.camunda.bpm.engine.impl.core.model.CoreActivity", + "org.camunda.bpm.model.bpmn.BpmnModelInstance", + "org.camunda.bpm.engine.delegate.VariableScope", + "org.camunda.bpm.engine.ProcessEngine", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionImpl", + "org.camunda.bpm.engine.impl.interceptor.CommandContext", + "org.camunda.bpm.engine.impl.variable.listener.CaseVariableListenerInvocation", + "org.openecomp.mso.logger.MsoLogger$Catalog", + "org.camunda.bpm.engine.BadUserRequestException", + "org.camunda.bpm.engine.impl.context.ExecutionContext", + "org.camunda.bpm.engine.impl.persistence.entity.TaskEntity", + "org.camunda.bpm.engine.impl.context.Context", + "org.camunda.bpm.engine.ProcessEngineServices", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl", + "org.camunda.bpm.engine.runtime.Execution", + "org.camunda.bpm.engine.impl.pvm.process.Lane", + "org.camunda.bpm.engine.impl.pvm.process.ParticipantProcess", + "org.camunda.bpm.engine.impl.interceptor.CommandExecutor", + "org.camunda.bpm.engine.delegate.ProcessEngineServicesAware", + "org.camunda.bpm.engine.ProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnActivity", + "org.camunda.bpm.engine.impl.util.BitMaskUtil", + "org.camunda.bpm.engine.impl.pvm.ReadOnlyProcessDefinition", + "org.camunda.bpm.engine.impl.cmmn.behavior.CmmnActivityBehavior", + "org.camunda.bpm.engine.impl.core.variable.event.VariableEvent", + "org.camunda.bpm.engine.delegate.BaseDelegateExecution", + "org.camunda.bpm.engine.impl.pvm.PvmExecution", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityStartCreateScope", + "org.camunda.bpm.engine.impl.persistence.entity.ProcessDefinitionEntity", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableStore", + "org.camunda.bpm.engine.runtime.VariableInstance", + "org.camunda.bpm.engine.runtime.Job", + "org.camunda.bpm.engine.runtime.Incident", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionState$CaseExecutionStateImpl", + "org.camunda.bpm.model.xml.ModelInstance", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityStart", + "org.camunda.bpm.engine.impl.pvm.process.ProcessDefinitionImpl", + "org.camunda.bpm.engine.impl.cmmn.entity.runtime.CaseExecutionEntity", + "org.openecomp.mso.entity.MsoRequest", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl", + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.camunda.bpm.engine.impl.variable.serializer.ValueFields", + "org.camunda.bpm.engine.impl.core.operation.AbstractEventAtomicOperation", + "org.camunda.bpm.engine.impl.task.TaskDecorator", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInitStackNotifyListenerStart", + "org.camunda.bpm.engine.impl.jobexecutor.JobExecutorContext", + "org.camunda.bpm.engine.impl.task.delegate.TaskListenerInvocation", + "org.camunda.bpm.engine.impl.persistence.entity.EventSubscriptionEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationsTransitionInterruptFlowScope", + "org.camunda.bpm.model.xml.instance.ModelElementInstance", + "org.camunda.bpm.engine.ProcessEngineException", + "org.camunda.bpm.engine.impl.cfg.StandaloneProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState$SuspensionStateImpl", + "org.camunda.bpm.engine.impl.db.DbEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionNotifyListenerEnd", + "org.camunda.bpm.engine.impl.pvm.delegate.ActivityExecution", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationFireActivityEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationStartTransitionNotifyListenerTake", + "org.camunda.bpm.engine.runtime.EventSubscription", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionDestroyScope", + "org.camunda.bpm.engine.impl.core.variable.value.UntypedValueImpl", + "org.camunda.bpm.engine.management.JobDefinition", + "com.att.eelf.i18n.EELFResolvableErrorEnum", + "com.att.eelf.configuration.EELFLogger$Level", + "org.camunda.bpm.engine.impl.pvm.delegate.ActivityBehavior", + "org.camunda.bpm.engine.impl.core.variable.scope.MapBasedVariableStore", + "org.camunda.bpm.engine.impl.javax.el.ValueReference", + "org.camunda.bpm.engine.impl.persistence.entity.JobEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.ProcessInstanceStartContext", + "org.camunda.bpm.engine.delegate.DelegateCaseVariableInstance", + "org.camunda.bpm.engine.impl.pvm.PvmProcessElement", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntityVariableStore", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "org.camunda.bpm.engine.impl.delegate.DelegateInvocation", + "org.camunda.bpm.engine.impl.javax.el.ValueExpression", + "com.att.eelf.configuration.EELFLogger", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationFireProcessStart", + "org.camunda.bpm.engine.runtime.CaseInstance", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCreateScope", + "org.camunda.bpm.engine.impl.db.DbEntityLifecycleAware", + "org.camunda.bpm.engine.impl.pvm.process.ActivityImpl", + "org.camunda.bpm.engine.impl.core.model.CoreModelElement", + "org.camunda.bpm.engine.impl.interceptor.CommandInterceptor", + "org.camunda.bpm.engine.impl.pvm.PvmProcessInstance", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseSentryPartImpl", + "org.camunda.bpm.engine.variable.value.TypedValue", + "org.apache.ibatis.transaction.TransactionFactory", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnSentryPart", + "org.camunda.bpm.engine.impl.pvm.process.LaneSet", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInitStack", + "org.camunda.bpm.engine.delegate.DelegateListener", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnActivityExecution", + "org.camunda.bpm.engine.delegate.ExecutionListener", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationDeleteCascadeFireActivityEnd", + "org.camunda.bpm.engine.exception.NotAllowedException", + "org.camunda.bpm.engine.impl.history.event.HistoryEventType", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException", + "org.camunda.bpm.engine.impl.pvm.process.HasDIBounds", + "com.att.eelf.configuration.SLF4jWrapper", + "org.camunda.bpm.engine.task.Task", + "org.camunda.bpm.engine.impl.javax.el.Expression", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.AbstractPvmEventAtomicOperation", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInstanceEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationDeleteCascade", + "org.camunda.bpm.engine.impl.context.CoreExecutionContext", + "org.camunda.bpm.engine.delegate.DelegateVariableInstance", + "org.openecomp.mso.logger.MsoLogger", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope", + "org.camunda.bpm.model.cmmn.CmmnModelInstance", + "org.camunda.bpm.engine.variable.VariableMap", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState$ActivityInstanceStateImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationProcessEnd", + "org.camunda.bpm.engine.impl.interceptor.CommandExecutorImpl", + "org.camunda.bpm.model.bpmn.instance.BaseElement", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCreateConcurrentExecution", + "org.camunda.bpm.engine.exception.NullValueException", + "org.camunda.bpm.engine.impl.core.variable.scope.CoreVariableStore", + "org.camunda.bpm.engine.impl.context.BpmnExecutionContext", + "org.openecomp.mso.bpmn.core.BaseTask", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityStartInterruptEventScope", + "org.camunda.bpm.engine.impl.persistence.entity.VariableInstanceEntity", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionState", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityStartCancelScope", + "org.apache.ibatis.session.SqlSessionFactory", + "org.camunda.bpm.engine.impl.variable.AbstractPersistentVariableStore", + "org.camunda.bpm.engine.impl.interceptor.CommandInvocationContext", + "com.att.eelf.i18n.EELFResourceManager", + "org.camunda.bpm.engine.impl.core.delegate.CoreActivityBehavior", + "org.openecomp.mso.logger.MessageEnum", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionCreateScope", + "org.openecomp.mso.logger.MsoLogger$ResponseCode", + "org.camunda.bpm.engine.SuspendedEntityInteractionException", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCancelActivity", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState", + "org.openecomp.mso.logger.MsoLogger$StatusCode", + "org.camunda.bpm.engine.impl.db.HasDbReferences", + "org.camunda.bpm.engine.impl.tree.Collector", + "com.att.eelf.configuration.EELFManager", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionStartContext", + "org.camunda.bpm.engine.impl.core.operation.CoreAtomicOperation", + "org.camunda.bpm.engine.impl.pvm.PvmTransition", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState", + "org.camunda.bpm.model.cmmn.instance.CmmnElement", + "org.camunda.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.persistence.entity.IncidentEntity", + "com.att.eelf.i18n.EELFResourceManager$1", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationProcessStart", + "org.camunda.bpm.engine.impl.core.instance.CoreExecution", + "org.camunda.bpm.engine.impl.core.variable.CoreVariableInstance", + "org.camunda.bpm.engine.variable.type.PrimitiveValueType", + "org.camunda.bpm.engine.delegate.VariableListener", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnSentryDeclaration", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityExecute", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl$1" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(ReadFileTaskESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "org.openecomp.mso.logger.MsoLogger$Catalog", + "org.openecomp.mso.logger.MsoLogger", + "com.att.eelf.i18n.EELFResourceManager", + "com.att.eelf.i18n.EELFMsgs", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "com.att.eelf.configuration.EELFLogger$Level", + "com.att.eelf.configuration.EELFManager", + "org.openecomp.mso.logger.MessageEnum", + "org.openecomp.mso.bpmn.core.ReadFileTask", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope", + "org.camunda.bpm.engine.impl.core.instance.CoreExecution", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntityVariableStore", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState", + "org.camunda.bpm.engine.impl.javax.el.Expression", + "org.camunda.bpm.engine.impl.javax.el.ValueExpression", + "org.camunda.bpm.engine.impl.context.Context", + "org.camunda.bpm.engine.ProcessEngineException", + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.camunda.bpm.engine.exception.NullValueException", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException", + "org.camunda.bpm.engine.impl.core.model.CoreModelElement", + "org.camunda.bpm.engine.impl.core.model.CoreActivity", + "org.camunda.bpm.engine.impl.pvm.process.ScopeImpl", + "org.camunda.bpm.engine.impl.pvm.process.ProcessDefinitionImpl", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnActivity", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnCaseDefinition", + "org.camunda.bpm.engine.impl.pvm.PvmException", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnExecution", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionImpl", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionState", + "org.camunda.bpm.engine.impl.core.variable.VariableMapImpl", + "org.camunda.bpm.engine.impl.pvm.process.ActivityImpl", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityInstanceEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationProcessEnd", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCreateScope", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityExecute", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionDestroyScope", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl$1", + "org.camunda.bpm.engine.impl.util.BitMaskUtil", + "org.camunda.bpm.engine.impl.pvm.process.TransitionImpl", + "org.camunda.bpm.engine.impl.core.variable.value.UntypedValueImpl" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/RollbackDataESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/RollbackDataESTest.java new file mode 100644 index 0000000000..e26f5a9a46 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/RollbackDataESTest.java @@ -0,0 +1,117 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:33:44 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.junit.Test; +import static org.junit.Assert.*; +import static org.evosuite.runtime.EvoAssertions.*; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.evosuite.runtime.PrivateAccess; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class RollbackDataESTest extends RollbackDataESTestscaffolding { + + @Test(timeout = 4000) + public void test0() throws Throwable { + RollbackData rollbackData0 = new RollbackData(); + rollbackData0.put("", "", ""); + String string0 = (String)rollbackData0.get("", "0-0|Ox?"); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test1() throws Throwable { + RollbackData rollbackData0 = new RollbackData(); + Serializable serializable0 = rollbackData0.get("", "0-0|Ox?"); + assertNull(serializable0); + } + + @Test(timeout = 4000) + public void test2() throws Throwable { + RollbackData rollbackData0 = new RollbackData(); + rollbackData0.put("", "", ""); + String string0 = (String)rollbackData0.get("", ""); + assertEquals("", string0); + } + + @Test(timeout = 4000) + public void test3() throws Throwable { + RollbackData rollbackData0 = new RollbackData(); + HashMap<String, Object> hashMap0 = new HashMap<String, Object>(); + HashMap<Serializable, Integer> hashMap1 = new HashMap<Serializable, Integer>(); + hashMap0.put("/0H\"wnR=^l|l$+qQDi", hashMap1); + PrivateAccess.setVariable((Class<RollbackData>) RollbackData.class, rollbackData0, "dictionary", (Object) hashMap0); + Map<String, Serializable> map0 = rollbackData0.get("/0H\"wnR=^l|l$+qQDi"); + assertEquals(0, map0.size()); + } + + @Test(timeout = 4000) + public void test4() throws Throwable { + RollbackData rollbackData0 = new RollbackData(); + rollbackData0.put("RollbackData[]", "$", "RollbackData[]"); + Map<String, Serializable> map0 = rollbackData0.get("RollbackData[]"); + assertFalse(map0.isEmpty()); + } + + @Test(timeout = 4000) + public void test5() throws Throwable { + RollbackData rollbackData0 = new RollbackData(); + rollbackData0.put("org.openecomp.mso.bpmn.core.RollbackData", "org.openecomp.mso.bpmn.core.RollbackData", "!{=|?cluq? yk])."); + rollbackData0.get(""); + PrivateAccess.setVariable((Class<RollbackData>) RollbackData.class, rollbackData0, "dictionary", (Object) null); + // Undeclared exception! + try { + rollbackData0.get("org.openecomp.mso.bpmn.core.RollbackData"); + fail("Expecting exception: NullPointerException"); + + } catch(NullPointerException e) { + // + // no message in exception (getMessage() returned null) + // + verifyException("org.openecomp.mso.bpmn.core.RollbackData", e); + } + } + + @Test(timeout = 4000) + public void test6() throws Throwable { + RollbackData rollbackData0 = new RollbackData(); + rollbackData0.put("$", "$", "RollbackData[]"); + rollbackData0.put("RollbackData[]", "$", "RollbackData[]"); + String string0 = rollbackData0.toString(); + assertEquals("RollbackData[${$=RollbackData[]},RollbackData[]{$=RollbackData[]}]", string0); + } + + @Test(timeout = 4000) + public void test7() throws Throwable { + RollbackData rollbackData0 = new RollbackData(); + rollbackData0.put("$", "$", "RollbackData[]"); + rollbackData0.put("$", "RollbackData[]", "RollbackData[]"); + } + + @Test(timeout = 4000) + public void test8() throws Throwable { + RollbackData rollbackData0 = new RollbackData(); + HashMap<String, Object> hashMap0 = new HashMap<String, Object>(); + HashMap<Serializable, Integer> hashMap1 = new HashMap<Serializable, Integer>(); + hashMap0.put("/0H\"wnR=^l|l$+qQDi", hashMap1); + PrivateAccess.setVariable((Class<RollbackData>) RollbackData.class, rollbackData0, "dictionary", (Object) hashMap0); + boolean boolean0 = rollbackData0.hasType("/0H\"wnR=^l|l$+qQDi"); + assertTrue(boolean0); + } + + @Test(timeout = 4000) + public void test9() throws Throwable { + RollbackData rollbackData0 = new RollbackData(); + boolean boolean0 = rollbackData0.hasType("RollbackData[]"); + assertFalse(boolean0); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/RollbackDataESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/RollbackDataESTestscaffolding.java new file mode 100644 index 0000000000..7dc6ca1e4e --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/RollbackDataESTestscaffolding.java @@ -0,0 +1,83 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:33:44 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class RollbackDataESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.RollbackData"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(RollbackDataESTestscaffolding.class.getClassLoader() , + "org.openecomp.mso.bpmn.core.RollbackData" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(RollbackDataESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "org.openecomp.mso.bpmn.core.RollbackData" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/TestBaseTask.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/TestBaseTask.java new file mode 100644 index 0000000000..3f2f74d2f7 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/TestBaseTask.java @@ -0,0 +1,262 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 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========================================================= + */ + +package org.openecomp.mso.bpmn.core; + +import java.util.HashMap; +import java.util.Map; + +import org.camunda.bpm.engine.RuntimeService; +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.engine.delegate.Expression; +import org.camunda.bpm.engine.test.Deployment; +import org.camunda.bpm.engine.test.ProcessEngineRule; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import org.openecomp.mso.bpmn.test.CamundaDBSetup; +import org.openecomp.mso.bpmn.test.PropertyConfigurationSetup; +import org.openecomp.mso.logger.MsoLogger; + +/** + * Unit test for BaseTask class. + */ +public class TestBaseTask { + + @Rule + public ProcessEngineRule processEngineRule = new ProcessEngineRule(); + + @Before + public void beforeTest() throws Exception { + CamundaDBSetup.configure(); + PropertyConfigurationSetup.init(); + } + + @Test + @Deployment(resources={"BaseTaskTest.bpmn"}) + public void shouldInvokeService() { + Map<String, Object> variables = new HashMap<String, Object>(); + variables.put("firstName", "Jane"); + variables.put("lastName", "Doe"); + variables.put("age", (Integer)25); + variables.put("lastVisit", (Long)1438270117000L); + + RuntimeService runtimeService = processEngineRule.getRuntimeService(); + processEngineRule.getTaskService(); + runtimeService.startProcessInstanceByKey("BaseTaskTest", variables); + } + + /** + * Unit test code for BaseTask. + */ + public static class TestTask extends BaseTask { + private static MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL); + + private Expression existingString; + private Expression nonExistingString; + private Expression existingStringFromVar; + private Expression nonExistingStringFromVar; + + private Expression existingInteger; + private Expression nonExistingInteger; + private Expression existingIntegerFromVar; + private Expression nonExistingIntegerFromVar; + + private Expression existingLong; + private Expression nonExistingLong; + private Expression existingLongFromVar; + private Expression nonExistingLongFromVar; + + private Expression existingOutputVar; + private Expression nonExistingOutputVar; + private Expression existingBadOutputVar; + + public void execute(DelegateExecution execution) throws Exception { + msoLogger.debug("Started executing " + getClass().getSimpleName()); + + /*********************************************************************/ + msoLogger.debug("Running String Field Tests"); + /*********************************************************************/ + + String s = getStringField(existingString, execution, "existingString"); + Assert.assertEquals("Hello World", s); + + try { + s = getStringField(nonExistingString, execution, "nonExistingString"); + Assert.fail("Expected BadInjectedFieldException for nonExistingString"); + } catch (Exception e) { + if (!(e instanceof BadInjectedFieldException)) { + Assert.fail("Expected BadInjectedFieldException for nonExistingString"); + } + } + + s = getOptionalStringField(existingString, execution, "existingString"); + Assert.assertEquals("Hello World", s); + + s = getOptionalStringField(nonExistingString, execution, "nonExistingString"); + Assert.assertEquals(null, s); + + /*********************************************************************/ + msoLogger.debug("Running String Expression Tests"); + /*********************************************************************/ + + s = getStringField(existingStringFromVar, execution, "existingStringFromVar"); + Assert.assertEquals("Jane", s); + + try { + s = getStringField(nonExistingStringFromVar, execution, "nonExistingStringFromVar"); + Assert.fail("Expected BadInjectedFieldException for nonExistingString"); + } catch (Exception e) { + if (!(e instanceof BadInjectedFieldException)) { + Assert.fail("Expected BadInjectedFieldException for nonExistingStringFromVar"); + } + } + + s = getOptionalStringField(existingStringFromVar, execution, "existingStringFromVar"); + Assert.assertEquals("Jane", s); + + s = getOptionalStringField(nonExistingStringFromVar, execution, "nonExistingStringFromVar"); + Assert.assertEquals(null, s); + + /*********************************************************************/ + msoLogger.debug("Running Integer Field Tests"); + /*********************************************************************/ + + Integer i = getIntegerField(existingInteger, execution, "existingInteger"); + Assert.assertEquals((Integer)42, i); + + try { + i = getIntegerField(nonExistingInteger, execution, "nonExistingInteger"); + Assert.fail("Expected BadInjectedFieldException for nonExistingInteger"); + } catch (Exception e) { + if (!(e instanceof BadInjectedFieldException)) { + Assert.fail("Expected BadInjectedFieldException for nonExistingInteger"); + } + } + + i = getOptionalIntegerField(existingInteger, execution, "existingInteger"); + Assert.assertEquals((Integer)42, i); + + i = getOptionalIntegerField(nonExistingInteger, execution, "nonExistingInteger"); + Assert.assertEquals(null, i); + + /*********************************************************************/ + msoLogger.debug("Running Integer Expression Tests"); + /*********************************************************************/ + + i = getIntegerField(existingIntegerFromVar, execution, "existingIntegerFromVar"); + Assert.assertEquals((Integer)25, i); + + try { + i = getIntegerField(nonExistingIntegerFromVar, execution, "nonExistingIntegerFromVar"); + Assert.fail("Expected BadInjectedFieldException for nonExistingInteger"); + } catch (Exception e) { + if (!(e instanceof BadInjectedFieldException)) { + Assert.fail("Expected BadInjectedFieldException for nonExistingIntegerFromVar"); + } + } + + i = getOptionalIntegerField(existingIntegerFromVar, execution, "existingIntegerFromVar"); + Assert.assertEquals((Integer)25, i); + + i = getOptionalIntegerField(nonExistingIntegerFromVar, execution, "nonExistingIntegerFromVar"); + Assert.assertEquals(null, i); + + /*********************************************************************/ + msoLogger.debug("Running Long Field Tests"); + /*********************************************************************/ + + Long l = getLongField(existingLong, execution, "existingLong"); + Assert.assertEquals((Long)123456789L, l); + + try { + l = getLongField(nonExistingLong, execution, "nonExistingLong"); + Assert.fail("Expected BadInjectedFieldException for nonExistingLong"); + } catch (Exception e) { + if (!(e instanceof BadInjectedFieldException)) { + Assert.fail("Expected BadInjectedFieldException for nonExistingLong"); + } + } + + l = getOptionalLongField(existingLong, execution, "existingLong"); + Assert.assertEquals((Long)123456789L, l); + + l = getOptionalLongField(nonExistingLong, execution, "nonExistingLong"); + Assert.assertEquals(null, l); + + /*********************************************************************/ + msoLogger.debug("Running Long Expression Tests"); + /*********************************************************************/ + + l = getLongField(existingLongFromVar, execution, "existingLongFromVar"); + Assert.assertEquals((Long)1438270117000L, l); + + try { + l = getLongField(nonExistingLongFromVar, execution, "nonExistingLongFromVar"); + Assert.fail("Expected BadInjectedFieldException for nonExistingLong"); + } catch (Exception e) { + if (!(e instanceof BadInjectedFieldException)) { + Assert.fail("Expected BadInjectedFieldException for nonExistingLongFromVar"); + } + } + + l = getOptionalLongField(existingLongFromVar, execution, "existingLongFromVar"); + Assert.assertEquals((Long)1438270117000L, l); + + l = getOptionalLongField(nonExistingLongFromVar, execution, "nonExistingLongFromVar"); + Assert.assertEquals(null, i); + + /*********************************************************************/ + msoLogger.debug("Running Output Variable Field Tests"); + /*********************************************************************/ + + String var = getOutputField(existingOutputVar, execution, "existingOutputVar"); + Assert.assertEquals("goodVariable", var); + + try { + var = getOutputField(nonExistingOutputVar, execution, "nonExistingOutputVar"); + Assert.fail("Expected BadInjectedFieldException for nonExistingString"); + } catch (Exception e) { + if (!(e instanceof BadInjectedFieldException)) { + Assert.fail("Expected BadInjectedFieldException for nonExistingString"); + } + } + + var = getOptionalOutputField(existingOutputVar, execution, "existingOutputVar"); + Assert.assertEquals("goodVariable", var); + + var = getOptionalOutputField(nonExistingOutputVar, execution, "nonExistingOutputVar"); + Assert.assertEquals(null, var); + + try { + var = getOutputField(existingBadOutputVar, execution, "existingBadOutputVar"); + Assert.fail("Expected BadInjectedFieldException for nonExistingString"); + } catch (Exception e) { + if (!(e instanceof BadInjectedFieldException)) { + Assert.fail("Expected BadInjectedFieldException for nonExistingString"); + } + } + + msoLogger.debug("Finished executing " + getClass().getSimpleName()); + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/URNMappingsTaskESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/URNMappingsTaskESTest.java new file mode 100644 index 0000000000..64220f016d --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/URNMappingsTaskESTest.java @@ -0,0 +1,27 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:35:51 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.junit.Test; + +import static org.evosuite.shaded.org.mockito.Mockito.*; + +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.evosuite.runtime.ViolatedAssumptionAnswer; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class URNMappingsTaskESTest extends URNMappingsTaskESTestscaffolding { + + @Test(timeout = 4000) + public void test0() throws Throwable { + URNMappingsTask uRNMappingsTask0 = new URNMappingsTask(); + DelegateExecution delegateExecution0 = mock(DelegateExecution.class, new ViolatedAssumptionAnswer()); + uRNMappingsTask0.execute(delegateExecution0); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/URNMappingsTaskESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/URNMappingsTaskESTestscaffolding.java new file mode 100644 index 0000000000..93151d3271 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/URNMappingsTaskESTestscaffolding.java @@ -0,0 +1,103 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:35:51 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class URNMappingsTaskESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.URNMappingsTask"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(URNMappingsTaskESTestscaffolding.class.getClassLoader() , + "org.camunda.bpm.engine.delegate.BpmnModelExecutionContext", + "org.camunda.bpm.model.xml.instance.ModelElementInstance", + "org.camunda.bpm.engine.delegate.VariableScope", + "org.camunda.bpm.engine.delegate.ProcessEngineServicesAware", + "org.camunda.bpm.engine.variable.value.TypedValue", + "org.camunda.bpm.engine.delegate.DelegateExecution", + "org.camunda.bpm.engine.delegate.Expression", + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.camunda.bpm.model.bpmn.instance.BpmnModelElementInstance", + "org.openecomp.mso.bpmn.core.URNMappingsTask", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException", + "org.openecomp.mso.bpmn.core.BaseTask", + "org.camunda.bpm.engine.delegate.BaseDelegateExecution", + "org.camunda.bpm.engine.variable.VariableMap", + "org.camunda.bpm.engine.delegate.JavaDelegate", + "org.camunda.bpm.engine.ProcessEngineServices", + "org.camunda.bpm.model.bpmn.BpmnModelInstance", + "org.camunda.bpm.model.bpmn.instance.BaseElement", + "org.camunda.bpm.model.xml.ModelInstance", + "org.camunda.bpm.model.bpmn.instance.FlowElement" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(URNMappingsTaskESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/WorkflowExceptionESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/WorkflowExceptionESTest.java new file mode 100644 index 0000000000..1891c8d478 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/WorkflowExceptionESTest.java @@ -0,0 +1,88 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:35:37 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.junit.Test; +import static org.junit.Assert.*; + +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class WorkflowExceptionESTest extends WorkflowExceptionESTestscaffolding { + + @Test(timeout = 4000) + public void test0() throws Throwable { + WorkflowException workflowException0 = new WorkflowException("(YdK~.N3;c2C", 336, "(YdK~.N3;c2C"); + workflowException0.getProcessKey(); + assertEquals(336, workflowException0.getErrorCode()); + } + + @Test(timeout = 4000) + public void test1() throws Throwable { + WorkflowException workflowException0 = new WorkflowException("", 0, ""); + workflowException0.getProcessKey(); + assertEquals(0, workflowException0.getErrorCode()); + } + + @Test(timeout = 4000) + public void test2() throws Throwable { + WorkflowException workflowException0 = new WorkflowException((String) null, 0, "^Y:"); + String string0 = workflowException0.getErrorMessage(); + assertEquals(0, workflowException0.getErrorCode()); + assertNotNull(string0); + } + + @Test(timeout = 4000) + public void test3() throws Throwable { + WorkflowException workflowException0 = new WorkflowException("", 1216, ""); + workflowException0.getErrorMessage(); + assertEquals(1216, workflowException0.getErrorCode()); + } + + @Test(timeout = 4000) + public void test4() throws Throwable { + WorkflowException workflowException0 = new WorkflowException("", 0, ""); + int int0 = workflowException0.getErrorCode(); + assertEquals(0, int0); + } + + @Test(timeout = 4000) + public void test5() throws Throwable { + WorkflowException workflowException0 = new WorkflowException((String) null, (-1911), (String) null); + int int0 = workflowException0.getErrorCode(); + assertEquals((-1911), int0); + } + + @Test(timeout = 4000) + public void test6() throws Throwable { + WorkflowException workflowException0 = new WorkflowException((String) null, 336, (String) null); + workflowException0.getErrorMessage(); + assertEquals(336, workflowException0.getErrorCode()); + } + + @Test(timeout = 4000) + public void test7() throws Throwable { + WorkflowException workflowException0 = new WorkflowException((String) null, 336, (String) null); + int int0 = workflowException0.getErrorCode(); + assertEquals(336, int0); + } + + @Test(timeout = 4000) + public void test8() throws Throwable { + WorkflowException workflowException0 = new WorkflowException((String) null, 336, (String) null); + workflowException0.getProcessKey(); + assertEquals(336, workflowException0.getErrorCode()); + } + + @Test(timeout = 4000) + public void test9() throws Throwable { + WorkflowException workflowException0 = new WorkflowException((String) null, 336, (String) null); + String string0 = workflowException0.toString(); + assertEquals("WorkflowException[processKey=null,errorCode=336,errorMessage=null]", string0); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/WorkflowExceptionESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/WorkflowExceptionESTestscaffolding.java new file mode 100644 index 0000000000..88e0e0f96f --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/WorkflowExceptionESTestscaffolding.java @@ -0,0 +1,83 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:35:37 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class WorkflowExceptionESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.WorkflowException"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(WorkflowExceptionESTestscaffolding.class.getClassLoader() , + "org.openecomp.mso.bpmn.core.WorkflowException" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(WorkflowExceptionESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "org.openecomp.mso.bpmn.core.WorkflowException" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/XQueryScriptTaskESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/XQueryScriptTaskESTest.java new file mode 100644 index 0000000000..a14934193e --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/XQueryScriptTaskESTest.java @@ -0,0 +1,81 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:28:14 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.junit.Test; +import static org.junit.Assert.*; +import static org.evosuite.shaded.org.mockito.Mockito.*; +import static org.evosuite.runtime.EvoAssertions.*; + +import java.io.IOException; +import net.sf.saxon.s9api.XQueryCompiler; +import net.sf.saxon.s9api.XQueryExecutable; +import org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl; +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.evosuite.runtime.PrivateAccess; +import org.evosuite.runtime.ViolatedAssumptionAnswer; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class XQueryScriptTaskESTest extends XQueryScriptTaskESTestscaffolding { + + @Test(timeout = 4000) + public void test0() throws Throwable { + XQueryScriptTask xQueryScriptTask0 = new XQueryScriptTask(); + XQueryCompiler xQueryCompiler0 = mock(XQueryCompiler.class, new ViolatedAssumptionAnswer()); + doReturn((XQueryExecutable) null).when(xQueryCompiler0).compile(any(java.io.InputStream.class)); + Object object0 = PrivateAccess.callMethod((Class<XQueryScriptTask>) XQueryScriptTask.class, xQueryScriptTask0, "compile", (Object) xQueryCompiler0, (Class<?>) XQueryCompiler.class, (Object) "", (Class<?>) String.class); + assertNull(object0); + } + + @Test(timeout = 4000) + public void test1() throws Throwable { + XQueryScriptTask xQueryScriptTask0 = new XQueryScriptTask(); + XQueryCompiler xQueryCompiler0 = mock(XQueryCompiler.class, new ViolatedAssumptionAnswer()); + try { + PrivateAccess.callMethod((Class<XQueryScriptTask>) XQueryScriptTask.class, xQueryScriptTask0, "compile", (Object) xQueryCompiler0, (Class<?>) XQueryCompiler.class, (Object) "Sk##N$V^.", (Class<?>) String.class); + fail("Expecting exception: IOException"); + + } catch(IOException e) { + // + // Resource not found: Sk##N$V^. + // + verifyException("org.openecomp.mso.bpmn.core.XQueryScriptTask", e); + } + } + + @Test(timeout = 4000) + public void test2() throws Throwable { + XQueryScriptTask xQueryScriptTask0 = new XQueryScriptTask(); + try { + PrivateAccess.callMethod((Class<XQueryScriptTask>) XQueryScriptTask.class, xQueryScriptTask0, "compile", (Object) null, (Class<?>) XQueryCompiler.class, (Object) "", (Class<?>) String.class); + fail("Expecting exception: NullPointerException"); + + } catch(NullPointerException e) { + // + // no message in exception (getMessage() returned null) + // + verifyException("org.openecomp.mso.bpmn.core.XQueryScriptTask", e); + } + } + + @Test(timeout = 4000) + public void test3() throws Throwable { + XQueryScriptTask xQueryScriptTask0 = new XQueryScriptTask(); + ExecutionImpl executionImpl0 = new ExecutionImpl(); + try { + xQueryScriptTask0.execute(executionImpl0); + fail("Expecting exception: RuntimeException"); + + } catch(RuntimeException e) { + // + // XQueryScriptTask injected field 'scriptFile' is bad: missing required field + // + verifyException("org.openecomp.mso.bpmn.core.BaseTask", e); + } + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/XQueryScriptTaskESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/XQueryScriptTaskESTestscaffolding.java new file mode 100644 index 0000000000..b0c1585e59 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/XQueryScriptTaskESTestscaffolding.java @@ -0,0 +1,533 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:28:14 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class XQueryScriptTaskESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.XQueryScriptTask"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(XQueryScriptTaskESTestscaffolding.class.getClassLoader() , + "net.sf.saxon.pattern.PatternFinder", + "net.sf.saxon.pattern.AnyNodeTest", + "net.sf.saxon.tree.linked.TextImpl", + "net.sf.saxon.tree.linked.ElementImpl", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnExecution", + "org.camunda.bpm.engine.impl.context.CaseExecutionContext", + "org.camunda.bpm.engine.impl.cmmn.transformer.CmmnTransformFactory", + "org.camunda.bpm.engine.impl.pvm.PvmScope", + "net.sf.saxon.type.TypeHierarchy", + "net.sf.saxon.trans.Mode", + "org.camunda.bpm.engine.impl.tree.TreeWalker$WalkCondition", + "org.camunda.bpm.engine.runtime.ProcessInstance", + "net.sf.saxon.trans.CompilerInfo", + "net.sf.saxon.type.ConversionResult", + "net.sf.saxon.type.ItemType", + "net.sf.saxon.om.NamePool", + "net.sf.saxon.value.NumericValue", + "org.camunda.bpm.engine.impl.jobexecutor.FailedJobCommandFactory", + "net.sf.saxon.s9api.Processor", + "net.sf.saxon.om.NameChecker", + "org.camunda.bpm.engine.impl.persistence.entity.util.FormPropertyStartContext", + "net.sf.saxon.expr.sort.SimpleCollation", + "net.sf.saxon.z.IntIterator", + "net.sf.saxon.expr.PendingUpdateList", + "net.sf.saxon.om.NamespaceBinding", + "net.sf.saxon.lib.StaticQueryContextFactory", + "net.sf.saxon.serialize.charcode.CharacterSet", + "net.sf.saxon.event.Receiver", + "org.camunda.bpm.model.bpmn.instance.FlowElement", + "net.sf.saxon.om.AbstractItem", + "net.sf.saxon.lib.ExternalObjectModel", + "net.sf.saxon.event.LocationProvider", + "org.camunda.bpm.engine.delegate.Expression", + "net.sf.saxon.value.QualifiedNameValue", + "net.sf.saxon.om.MutableDocumentInfo", + "org.camunda.bpm.engine.impl.pvm.PvmActivity", + "org.camunda.bpm.engine.impl.cfg.BpmnParseFactory", + "org.camunda.bpm.model.bpmn.instance.BpmnModelElementInstance", + "net.sf.saxon.pattern.NodeTest", + "net.sf.saxon.om.NamespaceException", + "net.sf.saxon.lib.EnvironmentVariableResolver", + "org.camunda.bpm.application.ProcessApplicationUnavailableException", + "net.sf.saxon.expr.instruct.Procedure", + "net.sf.saxon.om.Sequence", + "org.camunda.bpm.engine.impl.pvm.PvmProcessDefinition", + "net.sf.saxon.type.ValidationFailure", + "org.camunda.bpm.engine.delegate.DelegateCaseExecution", + "net.sf.saxon.tree.iter.UnfailingIterator", + "net.sf.saxon.type.AnySimpleType", + "org.camunda.bpm.engine.runtime.CaseExecution", + "net.sf.saxon.event.ProxyReceiver", + "net.sf.saxon.lib.ConversionRules", + "net.sf.saxon.lib.OutputURIResolver", + "net.sf.saxon.expr.instruct.ValidatingInstruction", + "net.sf.saxon.om.FunctionItem", + "net.sf.saxon.om.MutableNodeInfo", + "org.camunda.bpm.engine.impl.pvm.process.ScopeImpl", + "net.sf.saxon.pattern.PatternWithPredicate", + "net.sf.saxon.expr.ErrorExpression", + "net.sf.saxon.om.Name10Checker", + "net.sf.saxon.event.ComplexContentOutputter", + "org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl", + "org.openecomp.mso.logger.MsoLogger$ErrorCode", + "org.camunda.bpm.engine.impl.pvm.runtime.AtomicOperation", + "org.camunda.bpm.engine.delegate.DelegateTask", + "net.sf.saxon.style.LiteralResultElement", + "org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation", + "org.camunda.bpm.engine.impl.core.model.CoreActivity", + "net.sf.saxon.tree.iter.LookaheadIterator", + "net.sf.saxon.om.AtomicSequence", + "net.sf.saxon.s9api.XQueryCompiler", + "net.sf.saxon.pattern.LocalNameTest", + "net.sf.saxon.pattern.PatternParser", + "net.sf.saxon.expr.instruct.SlotManager", + "net.sf.saxon.PreparedStylesheet", + "org.camunda.bpm.engine.impl.interceptor.CommandContext", + "org.openecomp.mso.logger.MsoLogger$Catalog", + "net.sf.saxon.lib.ParseOptions", + "net.sf.saxon.expr.ItemMappingIterator", + "net.sf.saxon.tree.iter.EmptyIterator", + "org.camunda.bpm.engine.impl.persistence.entity.TaskEntity", + "org.camunda.bpm.engine.impl.context.Context", + "net.sf.saxon.lib.LocalizerFactory", + "org.camunda.bpm.engine.ProcessEngineServices", + "org.camunda.bpm.engine.runtime.Execution", + "org.camunda.bpm.engine.impl.interceptor.CommandExecutor", + "net.sf.saxon.s9api.ItemType$1", + "org.camunda.bpm.engine.delegate.ProcessEngineServicesAware", + "org.camunda.bpm.engine.ProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnActivity", + "net.sf.saxon.s9api.ItemType$2", + "net.sf.saxon.s9api.ItemType$3", + "org.camunda.bpm.engine.impl.pvm.ReadOnlyProcessDefinition", + "net.sf.saxon.pattern.NodeKindTest", + "org.camunda.bpm.engine.impl.core.variable.event.VariableEvent", + "net.sf.saxon.expr.LetExpression", + "org.camunda.bpm.engine.delegate.BaseDelegateExecution", + "net.sf.saxon.s9api.XdmItem", + "net.sf.saxon.expr.Binding", + "net.sf.saxon.expr.instruct.ParentNodeConstructor", + "org.camunda.bpm.engine.runtime.VariableInstance", + "org.camunda.bpm.engine.runtime.Incident", + "net.sf.saxon.om.NamespaceResolver", + "net.sf.saxon.expr.instruct.AnalyzeString", + "net.sf.saxon.z.IntHashMap", + "org.camunda.bpm.engine.impl.cmmn.entity.runtime.CaseExecutionEntity", + "net.sf.saxon.expr.instruct.ResultDocument", + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.camunda.bpm.engine.impl.variable.serializer.ValueFields", + "net.sf.saxon.type.StringToDouble", + "net.sf.saxon.value.SequenceType", + "net.sf.saxon.type.ComplexType", + "org.camunda.bpm.engine.impl.jobexecutor.JobExecutorContext", + "net.sf.saxon.type.AnyType", + "org.camunda.bpm.engine.impl.persistence.entity.EventSubscriptionEntity", + "net.sf.saxon.expr.StaticContext", + "org.camunda.bpm.engine.ProcessEngineException", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState$SuspensionStateImpl", + "net.sf.saxon.lib.SerializerFactory", + "net.sf.saxon.tree.util.SteppingNode", + "net.sf.saxon.functions.IntegratedFunctionLibrary", + "net.sf.saxon.evpull.PullEvent", + "net.sf.saxon.expr.XPathContextMinor", + "org.camunda.bpm.engine.management.JobDefinition", + "com.att.eelf.i18n.EELFResolvableErrorEnum", + "net.sf.saxon.om.DocumentInfo", + "net.sf.saxon.om.QNameException", + "org.camunda.bpm.engine.impl.javax.el.ValueReference", + "org.camunda.bpm.engine.impl.persistence.entity.JobEntity", + "net.sf.saxon.type.SchemaComponentVisitor", + "net.sf.saxon.z.AbstractIntSet", + "net.sf.saxon.tree.iter.AxisIterator", + "net.sf.saxon.s9api.XdmValue", + "net.sf.saxon.lib.CollationURIResolver", + "org.openecomp.mso.bpmn.core.XQueryScriptTask", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntityVariableStore", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "org.camunda.bpm.engine.impl.delegate.DelegateInvocation", + "net.sf.saxon.tree.tiny.AppendableCharSequence", + "net.sf.saxon.om.GroundedValue", + "net.sf.saxon.tree.linked.NodeFactory", + "net.sf.saxon.type.SchemaDeclaration", + "net.sf.saxon.tree.linked.CommentImpl", + "org.camunda.bpm.engine.impl.interceptor.CommandInterceptor", + "org.camunda.bpm.engine.variable.value.TypedValue", + "net.sf.saxon.trans.BuiltInRuleSet", + "org.apache.ibatis.transaction.TransactionFactory", + "net.sf.saxon.value.AtomicValue", + "net.sf.saxon.trans.NonDelegatingURIResolver", + "net.sf.saxon.functions.VendorFunctionLibrary", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnActivityExecution", + "net.sf.saxon.pattern.PatternParser20", + "net.sf.saxon.expr.instruct.TraceExpression", + "org.camunda.bpm.engine.exception.NotAllowedException", + "net.sf.saxon.Configuration", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException", + "net.sf.saxon.tree.util.FastStringBuffer", + "net.sf.saxon.tree.linked.NodeImpl", + "com.att.eelf.configuration.SLF4jWrapper", + "org.camunda.bpm.engine.task.Task", + "org.camunda.bpm.engine.impl.javax.el.Expression", + "net.sf.saxon.type.Type", + "net.sf.saxon.s9api.XdmNode", + "net.sf.saxon.value.QNameValue", + "org.camunda.bpm.engine.impl.context.CoreExecutionContext", + "org.openecomp.mso.logger.MsoLogger", + "net.sf.saxon.type.SchemaType", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope", + "net.sf.saxon.java.JavaPlatform$1", + "net.sf.saxon.expr.instruct.ElementCreator", + "net.sf.saxon.om.Item", + "org.camunda.bpm.engine.variable.VariableMap", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState$ActivityInstanceStateImpl", + "net.sf.saxon.lib.SchemaURIResolver", + "org.camunda.bpm.engine.impl.interceptor.CommandExecutorImpl", + "org.camunda.bpm.engine.impl.core.variable.scope.CoreVariableStore", + "net.sf.saxon.lib.ModuleURIResolver", + "org.camunda.bpm.engine.impl.context.BpmnExecutionContext", + "net.sf.saxon.expr.parser.ExpressionVisitor", + "net.sf.saxon.om.SequenceIterator", + "net.sf.saxon.z.IntHashSet", + "net.sf.saxon.type.BuiltInType", + "org.apache.ibatis.session.SqlSessionFactory", + "net.sf.saxon.expr.instruct.Executable", + "net.sf.saxon.om.DocumentPool", + "net.sf.saxon.expr.LastPositionFinder", + "net.sf.saxon.expr.instruct.TailCallReturner", + "org.openecomp.mso.logger.MsoLogger$ResponseCode", + "net.sf.saxon.type.BuiltInAtomicType", + "org.camunda.bpm.engine.SuspendedEntityInteractionException", + "org.openecomp.mso.logger.MsoLogger$StatusCode", + "com.att.eelf.configuration.EELFManager", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionStartContext", + "org.camunda.bpm.engine.impl.core.operation.CoreAtomicOperation", + "org.camunda.bpm.engine.impl.pvm.PvmTransition", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState", + "org.camunda.bpm.engine.impl.persistence.entity.IncidentEntity", + "org.camunda.bpm.engine.impl.core.variable.CoreVariableInstance", + "net.sf.saxon.pattern.ContentTypeTest", + "net.sf.saxon.query.QueryParser", + "net.sf.saxon.om.NodeName", + "net.sf.saxon.value.Closure", + "net.sf.saxon.expr.instruct.FixedElement", + "org.camunda.bpm.engine.impl.pvm.process.TransitionImpl", + "net.sf.saxon.s9api.ConstructedItemType", + "net.sf.saxon.lib.Numberer", + "org.camunda.bpm.engine.delegate.JavaDelegate", + "net.sf.saxon.om.IdentityComparable", + "net.sf.saxon.z.IntSet", + "org.camunda.bpm.application.ProcessApplicationReference", + "net.sf.saxon.pattern.QNameTest", + "org.camunda.bpm.engine.delegate.BpmnModelExecutionContext", + "net.sf.saxon.expr.sort.SortKeyDefinition", + "net.sf.saxon.style.XSLAnalyzeString", + "org.camunda.bpm.engine.delegate.DelegateExecution", + "org.camunda.bpm.engine.delegate.CmmnModelExecutionContext", + "net.sf.saxon.expr.instruct.ValueOf", + "net.sf.saxon.type.AnyItemType", + "com.att.eelf.i18n.EELFMsgs", + "org.camunda.bpm.engine.impl.javax.el.ELContext", + "net.sf.saxon.expr.instruct.WithParam", + "org.camunda.bpm.engine.impl.core.variable.event.VariableEventDispatcher", + "net.sf.saxon.expr.Assignation", + "net.sf.saxon.value.StringToDouble11", + "org.camunda.bpm.engine.variable.type.ValueType", + "net.sf.saxon.style.StylesheetModule", + "net.sf.saxon.value.EmptySequence", + "org.camunda.bpm.engine.impl.interceptor.CommandContextListener", + "org.camunda.bpm.engine.impl.cmmn.execution.CmmnCaseInstance", + "net.sf.saxon.style.PrincipalStylesheetModule", + "net.sf.saxon.type.PlainType", + "org.camunda.bpm.engine.repository.CaseDefinition", + "org.camunda.bpm.engine.impl.db.HasDbRevision", + "net.sf.saxon.query.StaticQueryContext", + "net.sf.saxon.expr.instruct.SimpleNodeConstructor", + "net.sf.saxon.trans.DynamicLoader", + "net.sf.saxon.s9api.ItemType$BuiltInAtomicItemType", + "org.camunda.bpm.engine.variable.type.SerializableValueType", + "net.sf.saxon.event.SaxonLocator", + "net.sf.saxon.expr.parser.Optimizer", + "org.camunda.bpm.engine.impl.pvm.PvmException", + "org.camunda.bpm.engine.impl.core.variable.VariableMapImpl", + "net.sf.saxon.expr.sort.Sortable", + "net.sf.saxon.type.ExternalObjectType", + "net.sf.saxon.expr.Literal", + "net.sf.saxon.style.StyleElement", + "org.camunda.bpm.engine.impl.cmmn.model.CmmnCaseDefinition", + "org.camunda.bpm.engine.impl.core.variable.scope.SimpleVariableStore", + "net.sf.saxon.type.ValidationException", + "org.camunda.bpm.engine.repository.ProcessDefinition", + "net.sf.saxon.style.AbsentExtensionElement", + "net.sf.saxon.style.XSLStylesheet", + "net.sf.saxon.query.XQueryFunctionBinder", + "net.sf.saxon.Platform", + "net.sf.saxon.om.AbsolutePath", + "net.sf.saxon.style.SourceBinding", + "org.camunda.bpm.engine.impl.interceptor.SessionFactory", + "net.sf.saxon.trace.InstructionInfo", + "net.sf.saxon.pattern.NameTest", + "net.sf.saxon.trans.XPathException", + "net.sf.saxon.pattern.ItemTypePattern", + "org.camunda.bpm.model.bpmn.BpmnModelInstance", + "net.sf.saxon.type.SimpleType", + "net.sf.saxon.tree.linked.ProcInstImpl", + "net.sf.saxon.expr.instruct.UserFunction", + "net.sf.saxon.event.SequenceReceiver", + "org.camunda.bpm.engine.delegate.VariableScope", + "net.sf.saxon.event.FilterFactory", + "org.camunda.bpm.engine.ProcessEngine", + "org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionImpl", + "org.camunda.bpm.engine.impl.variable.listener.CaseVariableListenerInvocation", + "org.camunda.bpm.engine.BadUserRequestException", + "net.sf.saxon.expr.Callable", + "org.camunda.bpm.engine.impl.context.ExecutionContext", + "net.sf.saxon.tree.tiny.TinyTree", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl", + "net.sf.saxon.tree.iter.EmptyAxisIterator", + "net.sf.saxon.om.NotationSet", + "net.sf.saxon.expr.CollationMap", + "net.sf.saxon.tree.util.AttributeCollectionImpl", + "net.sf.saxon.type.UnionType", + "net.sf.saxon.expr.instruct.GeneralVariable", + "net.sf.saxon.trans.LicenseException", + "org.camunda.bpm.engine.impl.pvm.PvmExecution", + "net.sf.saxon.functions.FunctionLibrary", + "net.sf.saxon.lib.StandardURIResolver", + "org.camunda.bpm.engine.impl.persistence.entity.ProcessDefinitionEntity", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableStore", + "net.sf.saxon.type.TypeHierarchy$2", + "net.sf.saxon.trans.Mode$RuleAction", + "org.camunda.bpm.engine.runtime.Job", + "net.sf.saxon.type.TypeHierarchy$1", + "org.camunda.bpm.model.xml.ModelInstance", + "net.sf.saxon.om.FingerprintedNode", + "org.camunda.bpm.engine.impl.pvm.process.ProcessDefinitionImpl", + "net.sf.saxon.tree.linked.ParentNodeImpl", + "net.sf.saxon.type.ErrorType", + "org.openecomp.mso.entity.MsoRequest", + "net.sf.saxon.value.NotationValue", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl", + "net.sf.saxon.s9api.ItemType", + "net.sf.saxon.type.Untyped", + "net.sf.saxon.expr.parser.PathMap$PathMapRoot", + "net.sf.saxon.expr.instruct.AttributeCreator", + "org.camunda.bpm.engine.impl.task.delegate.TaskListenerInvocation", + "net.sf.saxon.expr.instruct.AttributeSet", + "net.sf.saxon.trans.Mode$RuleFilter", + "net.sf.saxon.s9api.XdmAtomicValue", + "net.sf.saxon.om.AttributeCollection", + "org.camunda.bpm.model.xml.instance.ModelElementInstance", + "net.sf.saxon.expr.sort.RuleBasedSubstringMatcher", + "org.camunda.bpm.engine.impl.cfg.StandaloneProcessEngineConfiguration", + "org.camunda.bpm.engine.impl.db.DbEntity", + "net.sf.saxon.java.JavaPlatform", + "org.camunda.bpm.engine.impl.pvm.delegate.ActivityExecution", + "org.camunda.bpm.engine.runtime.EventSubscription", + "net.sf.saxon.lib.URIChecker", + "net.sf.saxon.tree.linked.DocumentImpl", + "net.sf.saxon.s9api.XQueryExecutable", + "net.sf.saxon.expr.instruct.FixedAttribute", + "net.sf.saxon.expr.XPathContextMajor", + "net.sf.saxon.type.AtomicType", + "net.sf.saxon.expr.instruct.DocumentInstr", + "net.sf.saxon.expr.Expression", + "net.sf.saxon.serialize.charcode.CharacterSetFactory", + "com.att.eelf.configuration.EELFLogger$Level", + "org.camunda.bpm.engine.impl.core.variable.scope.MapBasedVariableStore", + "net.sf.saxon.tree.util.Navigator", + "net.sf.saxon.pattern.NamespaceTest", + "org.camunda.bpm.engine.impl.pvm.runtime.ProcessInstanceStartContext", + "org.camunda.bpm.engine.delegate.DelegateCaseVariableInstance", + "org.camunda.bpm.engine.impl.pvm.PvmProcessElement", + "org.camunda.bpm.engine.impl.javax.el.ValueExpression", + "net.sf.saxon.tree.iter.ReversibleIterator", + "com.att.eelf.configuration.EELFLogger", + "net.sf.saxon.event.Builder", + "org.camunda.bpm.engine.runtime.CaseInstance", + "net.sf.saxon.s9api.SaxonApiException", + "org.camunda.bpm.engine.impl.db.DbEntityLifecycleAware", + "net.sf.saxon.om.StructuredQName", + "org.camunda.bpm.engine.impl.pvm.process.ActivityImpl", + "org.camunda.bpm.engine.impl.core.model.CoreModelElement", + "org.camunda.bpm.engine.impl.pvm.PvmProcessInstance", + "net.sf.saxon.style.StyleNodeFactory", + "net.sf.saxon.expr.instruct.Instruction", + "net.sf.saxon.functions.FunctionLibraryList", + "org.camunda.bpm.engine.delegate.DelegateListener", + "net.sf.saxon.event.TeeOutputter", + "net.sf.saxon.lib.CollectionURIResolver", + "net.sf.saxon.type.SchemaException", + "net.sf.saxon.serialize.CDATAFilter", + "net.sf.saxon.lib.StringCollator", + "net.sf.saxon.expr.XPathContext", + "net.sf.saxon.lib.SourceResolver", + "net.sf.saxon.expr.MappingFunction", + "net.sf.saxon.expr.Container", + "net.sf.saxon.type.SchemaComponent", + "net.sf.saxon.om.Name11Checker", + "net.sf.saxon.expr.parser.ExpressionParser", + "org.camunda.bpm.engine.impl.history.event.HistoryEventType", + "net.sf.saxon.event.PipelineConfiguration", + "net.sf.saxon.tree.wrapper.SiblingCountingNode", + "org.camunda.bpm.engine.impl.pvm.process.HasDIBounds", + "net.sf.saxon.value.MemoClosure", + "net.sf.saxon.value.DecimalValue", + "org.camunda.bpm.engine.delegate.DelegateVariableInstance", + "net.sf.saxon.TypeCheckerEnvironment", + "net.sf.saxon.serialize.AttributeSorter", + "net.sf.saxon.regex.RegularExpression", + "net.sf.saxon.style.DataElement", + "net.sf.saxon.lib.ExtensionFunctionDefinition", + "net.sf.saxon.lib.SubstringMatcher", + "net.sf.saxon.lib.TraceListener", + "org.camunda.bpm.model.bpmn.instance.BaseElement", + "net.sf.saxon.style.Declaration", + "net.sf.saxon.value.BooleanValue", + "net.sf.saxon.expr.parser.CodeInjector", + "net.sf.saxon.tree.util.DocumentNumberAllocator", + "net.sf.saxon.pattern.PatternThatSetsCurrent", + "net.sf.saxon.expr.instruct.Debugger", + "org.openecomp.mso.bpmn.core.BaseTask", + "net.sf.saxon.pattern.Pattern", + "net.sf.saxon.expr.parser.PathMap$PathMapNode", + "org.camunda.bpm.engine.impl.persistence.entity.VariableInstanceEntity", + "net.sf.saxon.expr.instruct.SavedNamespaceContext", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity", + "org.camunda.bpm.engine.impl.variable.AbstractPersistentVariableStore", + "org.camunda.bpm.engine.impl.interceptor.CommandInvocationContext", + "com.att.eelf.i18n.EELFResourceManager", + "org.camunda.bpm.engine.impl.core.delegate.CoreActivityBehavior", + "net.sf.saxon.om.NodeInfo", + "net.sf.saxon.event.NamespaceReducer", + "org.openecomp.mso.logger.MessageEnum", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState", + "org.camunda.bpm.engine.impl.db.HasDbReferences", + "org.camunda.bpm.engine.impl.tree.Collector", + "net.sf.saxon.expr.StringLiteral", + "org.camunda.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration", + "net.sf.saxon.expr.ItemMappingFunction", + "net.sf.saxon.expr.instruct.UseAttributeSets", + "com.att.eelf.i18n.EELFResourceManager$1", + "org.camunda.bpm.engine.impl.core.instance.CoreExecution", + "net.sf.saxon.tree.iter.GroundedIterator", + "org.camunda.bpm.engine.variable.type.PrimitiveValueType" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(XQueryScriptTaskESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "com.att.eelf.i18n.EELFResourceManager", + "org.openecomp.mso.logger.MessageEnum", + "org.openecomp.mso.logger.MsoLogger$Catalog", + "org.openecomp.mso.logger.MsoLogger", + "com.att.eelf.i18n.EELFMsgs", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "com.att.eelf.configuration.EELFLogger$Level", + "com.att.eelf.configuration.EELFManager", + "org.openecomp.mso.bpmn.core.XQueryScriptTask", + "org.openecomp.mso.logger.MsoLogger$ErrorCode", + "org.camunda.bpm.engine.impl.javax.el.Expression", + "org.camunda.bpm.engine.impl.javax.el.ValueExpression", + "org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope", + "org.camunda.bpm.engine.impl.core.instance.CoreExecution", + "org.camunda.bpm.engine.impl.pvm.runtime.PvmExecutionImpl", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity", + "org.camunda.bpm.engine.impl.pvm.runtime.ActivityInstanceState", + "org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntityVariableStore", + "org.camunda.bpm.engine.impl.persistence.entity.SuspensionState", + "org.camunda.bpm.engine.impl.context.Context", + "org.camunda.bpm.engine.ProcessEngineException", + "org.openecomp.mso.bpmn.core.BadInjectedFieldException", + "org.camunda.bpm.engine.impl.pvm.runtime.ExecutionImpl", + "org.openecomp.mso.bpmn.core.MissingInjectedFieldException", + "net.sf.saxon.java.JavaPlatform", + "net.sf.saxon.Configuration", + "net.sf.saxon.tree.linked.NodeImpl", + "net.sf.saxon.style.StyleElement", + "net.sf.saxon.style.LiteralResultElement", + "net.sf.saxon.style.AbsentExtensionElement", + "org.camunda.bpm.engine.impl.core.variable.VariableMapImpl", + "net.sf.saxon.tree.iter.EmptyIterator", + "net.sf.saxon.tree.iter.EmptyAxisIterator", + "net.sf.saxon.style.XSLAnalyzeString", + "net.sf.saxon.tree.util.Navigator", + "net.sf.saxon.om.NamespaceBinding", + "net.sf.saxon.type.AnySimpleType", + "net.sf.saxon.pattern.NodeTest", + "net.sf.saxon.pattern.AnyNodeTest", + "net.sf.saxon.type.AnyItemType", + "net.sf.saxon.type.Type", + "net.sf.saxon.z.IntHashMap", + "net.sf.saxon.type.AnyType", + "net.sf.saxon.type.Untyped", + "net.sf.saxon.type.ErrorType", + "net.sf.saxon.type.BuiltInType", + "net.sf.saxon.type.BuiltInAtomicType", + "net.sf.saxon.value.BooleanValue" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/json/JsonUtilsESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/json/JsonUtilsESTest.java new file mode 100644 index 0000000000..fec405ef96 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/json/JsonUtilsESTest.java @@ -0,0 +1,165 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:28:11 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core.json; + +import org.junit.Test; +import static org.junit.Assert.*; + +import java.util.Iterator; +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.json.JSONObject; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class JsonUtilsESTest extends JsonUtilsESTestscaffolding { + + @Test(timeout = 4000) + public void test00() throws Throwable { + String string0 = JsonUtils.updJsonValue((String) null, "#", "#"); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test01() throws Throwable { + String string0 = JsonUtils.getJsonValueForKey((JSONObject) null, "LPZc4`q5w]IQMS.^'3"); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test02() throws Throwable { + String string0 = JsonUtils.getJsonParamValue("", ":bnv,&jl3bK", ""); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test03() throws Throwable { + String string0 = JsonUtils.getJsonParamValue("", "", "tuw[9j$Sz"); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test04() throws Throwable { + String string0 = JsonUtils.getJsonValue((String) null, ""); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test05() throws Throwable { + String string0 = JsonUtils.addJsonValue((String) null, (String) null, (String) null); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test06() throws Throwable { + String string0 = JsonUtils.xml2json("", (Boolean) null); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test07() throws Throwable { + String string0 = JsonUtils.xml2json((String) null); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test08() throws Throwable { + String string0 = JsonUtils.updJsonValue("tV a^wGCAwX", "tV a^wGCAwX", "tV a^wGCAwX"); + assertEquals("tV a^wGCAwX", string0); + } + + @Test(timeout = 4000) + public void test09() throws Throwable { + String string0 = JsonUtils.updJsonValue("", "", ""); + assertEquals("", string0); + } + + @Test(timeout = 4000) + public void test10() throws Throwable { + Boolean boolean0 = Boolean.TRUE; + String string0 = JsonUtils.json2xml("", boolean0); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test11() throws Throwable { + String string0 = JsonUtils.getJsonValueForKey("java.io.StringWriter@0000000003", "#"); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test12() throws Throwable { + Iterator<String> iterator0 = JsonUtils.getJsonIterator((String) null); + assertNull(iterator0); + } + + @Test(timeout = 4000) + public void test13() throws Throwable { + String string0 = JsonUtils.delJsonValue("java.io.StringWriter@0000000003", "java.io.StringWriter@0000000003"); + assertNotNull(string0); + } + + @Test(timeout = 4000) + public void test14() throws Throwable { + String string0 = JsonUtils.delJsonValue("", (String) null); + assertEquals("", string0); + } + + @Test(timeout = 4000) + public void test15() throws Throwable { + Boolean boolean0 = new Boolean(true); + String string0 = JsonUtils.xml2json("Y~N~%]", boolean0); + assertNotNull(string0); + } + + @Test(timeout = 4000) + public void test16() throws Throwable { + String string0 = JsonUtils.delJsonValue((String) null, "/Y"); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test17() throws Throwable { + String string0 = JsonUtils.updJsonValue((String) null, (String) null, "/Y"); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test18() throws Throwable { + String string0 = JsonUtils.addJsonValue("java.io.StringWriter@0000000006", "/Y", (String) null); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test19() throws Throwable { + Boolean boolean0 = JsonUtils.jsonValueExists("getJsonValueForKey(): found value=", "/Y"); + String string0 = JsonUtils.xml2json("getJsonValueForKey(): found value=", boolean0); + assertNotNull(string0); + } + + @Test(timeout = 4000) + public void test20() throws Throwable { + String string0 = JsonUtils.json2xml(")?Fx+Bu:)1&$EZEmzoV"); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test21() throws Throwable { + String string0 = JsonUtils.xml2json("java.io.StringWriter@0000000006"); + assertNotNull(string0); + } + + @Test(timeout = 4000) + public void test22() throws Throwable { + Iterator<String> iterator0 = JsonUtils.getJsonIterator("{+%2:*}4"); + assertNotNull(iterator0); + } + + @Test(timeout = 4000) + public void test23() throws Throwable { + JsonUtils jsonUtils0 = new JsonUtils(); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/json/JsonUtilsESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/json/JsonUtilsESTestscaffolding.java new file mode 100644 index 0000000000..6d05db0b80 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/json/JsonUtilsESTestscaffolding.java @@ -0,0 +1,120 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:28:11 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core.json; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class JsonUtilsESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.json.JsonUtils"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(JsonUtilsESTestscaffolding.class.getClassLoader() , + "org.json.JSONObject$Null", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "org.openecomp.mso.logger.MsoLogger$ErrorCode", + "com.att.eelf.configuration.EELFLogger", + "org.json.JSONException", + "org.openecomp.mso.bpmn.core.xml.XmlTool", + "org.json.JSONObject", + "org.json.XML", + "com.att.eelf.configuration.SLF4jWrapper", + "com.att.eelf.i18n.EELFResourceManager", + "org.openecomp.mso.logger.MsoLogger", + "org.openecomp.mso.logger.MessageEnum", + "com.att.eelf.i18n.EELFResolvableErrorEnum", + "org.openecomp.mso.logger.MsoLogger$ResponseCode", + "org.openecomp.mso.entity.MsoRequest", + "org.openecomp.mso.logger.MsoLogger$StatusCode", + "org.json.JSONTokener", + "org.openecomp.mso.bpmn.core.json.JsonUtils", + "com.att.eelf.configuration.EELFManager", + "com.att.eelf.i18n.EELFMsgs", + "com.att.eelf.configuration.EELFLogger$Level", + "org.openecomp.mso.logger.MsoLogger$Catalog", + "com.att.eelf.i18n.EELFResourceManager$1", + "org.json.JSONArray", + "org.json.XMLTokener" + ); + } + + private static void resetClasses() { + org.evosuite.runtime.classhandling.ClassResetter.getInstance().setClassLoader(JsonUtilsESTestscaffolding.class.getClassLoader()); + + org.evosuite.runtime.classhandling.ClassStateSupport.resetClasses( + "org.openecomp.mso.bpmn.core.xml.XmlTool", + "org.openecomp.mso.logger.MsoLogger$Catalog", + "org.json.JSONObject", + "org.json.XML", + "org.openecomp.mso.logger.MsoLogger", + "com.att.eelf.i18n.EELFResourceManager", + "com.att.eelf.i18n.EELFMsgs", + "com.att.eelf.i18n.EELFResourceManager$RESOURCE_TYPES", + "com.att.eelf.configuration.EELFLogger$Level", + "com.att.eelf.configuration.EELFManager", + "org.openecomp.mso.logger.MessageEnum", + "org.openecomp.mso.bpmn.core.json.JsonUtils", + "org.json.JSONException", + "org.json.XMLTokener" + ); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/mybatis/URNMappingESTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/mybatis/URNMappingESTest.java new file mode 100644 index 0000000000..9c17caeaf4 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/mybatis/URNMappingESTest.java @@ -0,0 +1,114 @@ +/* + * This file was automatically generated by EvoSuite + * Mon Nov 14 11:33:04 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core.mybatis; + +import org.junit.Test; +import static org.junit.Assert.*; +import static org.evosuite.runtime.EvoAssertions.*; + +import org.evosuite.runtime.EvoRunner; +import org.evosuite.runtime.EvoRunnerParameters; +import org.junit.runner.RunWith; + +@RunWith(EvoRunner.class) @EvoRunnerParameters(mockJVMNonDeterminism = true, useVFS = true, useVNET = true, resetStaticState = true, useJEE = true) +public class URNMappingESTest extends URNMappingESTestscaffolding { + + @Test(timeout = 4000) + public void test00() throws Throwable { + String string0 = URNMapping.createIdentifierFromURN("!`OYz|WztoeK|A&=&M"); + assertEquals("URN_OYz_WztoeK_A_M", string0); + } + + @Test(timeout = 4000) + public void test01() throws Throwable { + URNMapping uRNMapping0 = new URNMapping(); + uRNMapping0.setValue("=F'A%"); + String string0 = uRNMapping0.getValue(); + assertEquals("=F'A%", string0); + } + + @Test(timeout = 4000) + public void test02() throws Throwable { + URNMapping uRNMapping0 = new URNMapping(); + uRNMapping0.setValue(""); + String string0 = uRNMapping0.getValue(); + assertEquals("", string0); + } + + @Test(timeout = 4000) + public void test03() throws Throwable { + URNMapping uRNMapping0 = new URNMapping(); + uRNMapping0.setRev(""); + String string0 = uRNMapping0.getRev(); + assertEquals("", string0); + } + + @Test(timeout = 4000) + public void test04() throws Throwable { + URNMapping uRNMapping0 = new URNMapping(); + uRNMapping0.setName(""); + String string0 = uRNMapping0.getName(); + assertEquals("", string0); + } + + @Test(timeout = 4000) + public void test05() throws Throwable { + // Undeclared exception! + try { + URNMapping.createIdentifierFromURN((String) null); + fail("Expecting exception: NullPointerException"); + + } catch(NullPointerException e) { + // + // no message in exception (getMessage() returned null) + // + verifyException("org.openecomp.mso.bpmn.core.mybatis.URNMapping", e); + } + } + + @Test(timeout = 4000) + public void test06() throws Throwable { + String string0 = URNMapping.createIdentifierFromURN("mfJ\"%euO;@S_Xm"); + assertEquals("URN_mfJ_euO_S_Xm", string0); + } + + @Test(timeout = 4000) + public void test07() throws Throwable { + URNMapping uRNMapping0 = new URNMapping(); + uRNMapping0.setRev(":pMWjfl,zq_IA"); + String string0 = uRNMapping0.getRev(); + assertEquals(":pMWjfl,zq_IA", string0); + } + + @Test(timeout = 4000) + public void test08() throws Throwable { + URNMapping uRNMapping0 = new URNMapping(); + String string0 = uRNMapping0.getName(); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test09() throws Throwable { + URNMapping uRNMapping0 = new URNMapping(); + String string0 = uRNMapping0.getRev(); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test10() throws Throwable { + URNMapping uRNMapping0 = new URNMapping(); + String string0 = uRNMapping0.getValue(); + assertNull(string0); + } + + @Test(timeout = 4000) + public void test11() throws Throwable { + URNMapping uRNMapping0 = new URNMapping(); + uRNMapping0.setName("c<"); + String string0 = uRNMapping0.getName(); + assertEquals("c<", string0); + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/mybatis/URNMappingESTestscaffolding.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/mybatis/URNMappingESTestscaffolding.java new file mode 100644 index 0000000000..183ea84b58 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/mybatis/URNMappingESTestscaffolding.java @@ -0,0 +1,78 @@ +/** + * Scaffolding file used to store all the setups needed to run + * tests automatically generated by EvoSuite + * Mon Nov 14 11:33:04 GMT 2016 + */ + +package org.openecomp.mso.bpmn.core.mybatis; + +import org.evosuite.runtime.annotation.EvoSuiteClassExclude; +import org.junit.BeforeClass; +import org.junit.Before; +import org.junit.After; +import org.junit.AfterClass; +import org.evosuite.runtime.sandbox.Sandbox; + +@EvoSuiteClassExclude +public class URNMappingESTestscaffolding { + + @org.junit.Rule + public org.evosuite.runtime.vnet.NonFunctionalRequirementRule nfr = new org.evosuite.runtime.vnet.NonFunctionalRequirementRule(); + + private static final java.util.Properties defaultProperties = (java.util.Properties) java.lang.System.getProperties().clone(); + + private org.evosuite.runtime.thread.ThreadStopper threadStopper = new org.evosuite.runtime.thread.ThreadStopper (org.evosuite.runtime.thread.KillSwitchHandler.getInstance(), 3000); + + @BeforeClass + public static void initEvoSuiteFramework() { + org.evosuite.runtime.RuntimeSettings.className = "org.openecomp.mso.bpmn.core.mybatis.URNMapping"; + org.evosuite.runtime.GuiSupport.initialize(); + org.evosuite.runtime.RuntimeSettings.maxNumberOfThreads = 100; + org.evosuite.runtime.RuntimeSettings.maxNumberOfIterationsPerLoop = 10000; + org.evosuite.runtime.RuntimeSettings.mockSystemIn = true; + org.evosuite.runtime.RuntimeSettings.sandboxMode = org.evosuite.runtime.sandbox.Sandbox.SandboxMode.RECOMMENDED; + org.evosuite.runtime.sandbox.Sandbox.initializeSecurityManagerForSUT(); + org.evosuite.runtime.classhandling.JDKClassResetter.init(); + initializeClasses(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + } + + @AfterClass + public static void clearEvoSuiteFramework(){ + Sandbox.resetDefaultSecurityManager(); + java.lang.System.setProperties((java.util.Properties) defaultProperties.clone()); + } + + @Before + public void initTestCase(){ + threadStopper.storeCurrentThreads(); + threadStopper.startRecordingTime(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().initHandler(); + org.evosuite.runtime.sandbox.Sandbox.goingToExecuteSUTCode(); + + org.evosuite.runtime.GuiSupport.setHeadless(); + org.evosuite.runtime.Runtime.getInstance().resetRuntime(); + org.evosuite.runtime.agent.InstrumentingAgent.activate(); + } + + @After + public void doneWithTestCase(){ + threadStopper.killAndJoinClientThreads(); + org.evosuite.runtime.jvm.ShutdownHookHandler.getInstance().safeExecuteAddedHooks(); + org.evosuite.runtime.classhandling.JDKClassResetter.reset(); + resetClasses(); + org.evosuite.runtime.sandbox.Sandbox.doneWithExecutingSUTCode(); + org.evosuite.runtime.agent.InstrumentingAgent.deactivate(); + org.evosuite.runtime.GuiSupport.restoreHeadlessMode(); + } + + + private static void initializeClasses() { + org.evosuite.runtime.classhandling.ClassStateSupport.initializeClasses(URNMappingESTestscaffolding.class.getClassLoader() , + "org.openecomp.mso.bpmn.core.mybatis.URNMapping" + ); + } + + private static void resetClasses() { + } +} diff --git a/bpmn/MSOCoreBPMN/src/test/resources/BaseTaskTest.bpmn b/bpmn/MSOCoreBPMN/src/test/resources/BaseTaskTest.bpmn new file mode 100644 index 0000000000..d94a0c5b21 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/resources/BaseTaskTest.bpmn @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://activiti.org/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="_IS440DbGEeWouodEI7MXGQ" exporter="camunda modeler" exporterVersion="2.7.0" targetNamespace="http://activiti.org/bpmn">
+ <bpmn2:process id="BaseTaskTest" name="BaseTaskTest" isExecutable="true">
+ <bpmn2:startEvent id="StartEvent_1">
+ <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
+ </bpmn2:startEvent>
+ <bpmn2:serviceTask id="ServiceTask_1" camunda:class="org.openecomp.mso.bpmn.core.TestBaseTask$TestTask" name="TestTask">
+ <bpmn2:extensionElements>
+ <camunda:field name="existingString">
+ <camunda:string>Hello World</camunda:string>
+ </camunda:field>
+ <camunda:field name="existingStringFromVar">
+ <camunda:expression>${firstName}</camunda:expression>
+ </camunda:field>
+ <camunda:field name="nonExistingStringFromVar">
+ <camunda:expression>${undefinedVariable}</camunda:expression>
+ </camunda:field>
+ <camunda:field name="existingInteger">
+ <camunda:string>42</camunda:string>
+ </camunda:field>
+ <camunda:field name="existingIntegerFromVar">
+ <camunda:expression>${age}</camunda:expression>
+ </camunda:field>
+ <camunda:field name="nonExistingIntegerFromVar">
+ <camunda:expression>${undefinedVariable}</camunda:expression>
+ </camunda:field>
+ <camunda:field name="existingLong">
+ <camunda:string>123456789</camunda:string>
+ </camunda:field>
+ <camunda:field name="existingLongFromVar">
+ <camunda:expression>${lastVisit}</camunda:expression>
+ </camunda:field>
+ <camunda:field name="nonExistingLongFromVar">
+ <camunda:expression>${undefinedVariable}</camunda:expression>
+ </camunda:field>
+ <camunda:field name="existingOutputVar">
+ <camunda:string>goodVariable</camunda:string>
+ </camunda:field>
+ <camunda:field name="existingBadOutputVar">
+ <camunda:string>bad Variable</camunda:string>
+ </camunda:field>
+ </bpmn2:extensionElements>
+ <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
+ <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
+ </bpmn2:serviceTask>
+ <bpmn2:sequenceFlow id="SequenceFlow_1" name="" sourceRef="StartEvent_1" targetRef="ServiceTask_1"/>
+ <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="ServiceTask_1" targetRef="EndEvent_1"/>
+ <bpmn2:endEvent id="EndEvent_1">
+ <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
+ </bpmn2:endEvent>
+ </bpmn2:process>
+ <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+ <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="BaseTaskTest">
+ <bpmndi:BPMNShape id="_BPMNShape_StartEvent_36" bpmnElement="StartEvent_1">
+ <dc:Bounds height="36.0" width="36.0" x="55.0" y="38.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNShape id="_BPMNShape_ServiceTask_68" bpmnElement="ServiceTask_1">
+ <dc:Bounds height="80.0" width="100.0" x="180.0" y="16.0"/>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="_BPMNShape_StartEvent_36" targetElement="_BPMNShape_ServiceTask_68">
+ <di:waypoint xsi:type="dc:Point" x="91.0" y="56.0"/>
+ <di:waypoint xsi:type="dc:Point" x="180.0" y="56.0"/>
+ </bpmndi:BPMNEdge>
+ <bpmndi:BPMNShape id="_BPMNShape_EndEvent_83" bpmnElement="EndEvent_1">
+ <dc:Bounds height="36.0" width="36.0" x="369.0" y="38.0"/>
+ <bpmndi:BPMNLabel>
+ <dc:Bounds height="0.0" width="0.0" x="387.0" y="79.0"/>
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNShape>
+ <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ServiceTask_68" targetElement="_BPMNShape_EndEvent_83">
+ <di:waypoint xsi:type="dc:Point" x="280.0" y="56.0"/>
+ <di:waypoint xsi:type="dc:Point" x="369.0" y="56.0"/>
+ <bpmndi:BPMNLabel>
+ <dc:Bounds height="6.0" width="6.0" x="370.0" y="57.0"/>
+ </bpmndi:BPMNLabel>
+ </bpmndi:BPMNEdge>
+ </bpmndi:BPMNPlane>
+ </bpmndi:BPMNDiagram>
+</bpmn2:definitions>
\ No newline at end of file diff --git a/bpmn/MSOCoreBPMN/src/test/resources/camunda.cfg.xml b/bpmn/MSOCoreBPMN/src/test/resources/camunda.cfg.xml new file mode 100644 index 0000000000..4858ea0c0e --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/resources/camunda.cfg.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + ECOMP MSO + ================================================================================ + Copyright (C) 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========================================================= + --> + + +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> + + <bean id="processEngineConfiguration" class="org.camunda.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"> + + <property name="jdbcUrl" value="jdbc:h2:mem:camunda;DB_CLOSE_DELAY=1000" /> + <property name="jdbcDriver" value="org.h2.Driver" /> + <property name="jdbcUsername" value="sa" /> + <property name="jdbcPassword" value="" /> + + <!-- Database configurations --> + <property name="databaseSchemaUpdate" value="true" /> + + <!-- job executor configurations --> + <property name="jobExecutorActivate" value="false" /> + + <property name="history" value="full" /> + + <property name="customPostBPMNParseListeners"> + <list> + <bean class="org.camunda.bpm.engine.impl.bpmn.parser.FoxFailedJobParseListener" /> + </list> + </property> + + <property name="failedJobCommandFactory" ref="foxFailedJobCommandFactory" /> + + <!--<property name="idGenerator" ref="uuidGenerator" />--> + + <!-- engine plugins --> + <property name="processEnginePlugins"> + <list> + <ref bean="connectProcessEnginePlugin" /> + <ref bean="spinProcessEnginePlugin" /> + <ref bean="loggingPlugin" /> + <ref bean="workflowExceptionPlugin" /> + </list> + </property> + + </bean> + + <bean id="loggingPlugin" class="org.openecomp.mso.bpmn.core.plugins.LoggingAndURNMappingPlugin" /> + + <!-- Needed until all subflows generate MSOWorkflowException events --> + <bean id="workflowExceptionPlugin" class="org.openecomp.mso.bpmn.core.plugins.WorkflowExceptionPlugin" /> + + <bean id="foxFailedJobCommandFactory" class="org.camunda.bpm.engine.impl.jobexecutor.FoxFailedJobCommandFactory" /> + + <!--<bean id="uuidGenerator" class="org.camunda.bpm.engine.impl.persistence.StrongUuidGenerator" />--> + + <!-- engine plugin beans --> + <bean id="connectProcessEnginePlugin" class="org.camunda.connect.plugin.impl.ConnectProcessEnginePlugin" /> + <bean id="spinProcessEnginePlugin" class="org.camunda.spin.plugin.impl.SpinProcessEnginePlugin" /> + +</beans> diff --git a/bpmn/MSOCoreBPMN/src/test/resources/logback-test.xml b/bpmn/MSOCoreBPMN/src/test/resources/logback-test.xml new file mode 100644 index 0000000000..92876fcb19 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/resources/logback-test.xml @@ -0,0 +1,48 @@ +<!-- + ============LICENSE_START======================================================= + ECOMP MSO + ================================================================================ + Copyright (C) 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========================================================= + --> + +<configuration > + + + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%d{MM/dd-HH:mm:ss.SSS}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{ServiceName}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}||%X{ServerIPAddress}|%X{ServerFQDN}|%X{RemoteHost}||%X{Timer}|%msg%n</pattern> + </encoder> + </appender> + + + <logger name="com.att.eelf.audit" level="info" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + + <logger name="com.att.eelf.metrics" level="info" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + + <logger name="com.att.eelf.error" level="trace" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + + <root level="info"> + <appender-ref ref="STDOUT" /> + </root> + + +</configuration> diff --git a/bpmn/MSOCoreBPMN/src/test/resources/mso.bpmn.properties b/bpmn/MSOCoreBPMN/src/test/resources/mso.bpmn.properties new file mode 100644 index 0000000000..d329dbb207 --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/resources/mso.bpmn.properties @@ -0,0 +1,22 @@ +### +# ============LICENSE_START======================================================= +# ECOMP MSO +# ================================================================================ +# Copyright (C) 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========================================================= +### + +URNMapping.FileSystemLoading.Enabled=true +testKey=testValue diff --git a/bpmn/MSOCoreBPMN/src/test/resources/mso.bpmn.urn.properties b/bpmn/MSOCoreBPMN/src/test/resources/mso.bpmn.urn.properties new file mode 100644 index 0000000000..7fa587311a --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/resources/mso.bpmn.urn.properties @@ -0,0 +1,21 @@ +### +# ============LICENSE_START======================================================= +# ECOMP MSO +# ================================================================================ +# Copyright (C) 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========================================================= +### + +log.debug.TestTask=true diff --git a/bpmn/MSOCoreBPMN/src/test/resources/request.json b/bpmn/MSOCoreBPMN/src/test/resources/request.json new file mode 100644 index 0000000000..bdca336a0b --- /dev/null +++ b/bpmn/MSOCoreBPMN/src/test/resources/request.json @@ -0,0 +1,28 @@ +{ + "variables": { + "bpmnRequest": { + "value": "<aetgt:service-request xmlns:aetgt=\"http://ecomp.att.com/mso/request/layer3serviceactivate/schema/v1\"\n xmlns=\"http://ecomp.att.com/mso/request/layer3serviceactivate/schema/v1\"\n xmlns:msoservtypes=\"http://ecomp.att.com/mso/request/types/v1\"\n xmlns:msolayer3=\"http://ecomp.att.com/mso/request/layer3/schema/v1\"\n xmlns:rest=\"http://schemas.activebpel.org/REST/2007/12/01/aeREST.xsd\">\n <msoservtypes:request-information>\n <msoservtypes:request-id>d00eb185-b1d7-429e-aca3-42a61b459535</msoservtypes:request-id>\n <msoservtypes:request-action>Layer3ServiceActivateRequest</msoservtypes:request-action>\n <msoservtypes:source>OMX</msoservtypes:source>\n <msoservtypes:notification-url>http://localhost:8080/simulada/CSI/SendManagedNetworkStatusNotification</msoservtypes:notification-url>\n <msoservtypes:order-number>19630501</msoservtypes:order-number>\n <msoservtypes:order-version>1</msoservtypes:order-version>\n </msoservtypes:request-information>\n <msoservtypes:service-information>\n <msoservtypes:service-type>SDN-ETHERNET-INTERNET</msoservtypes:service-type>\n <msoservtypes:service-instance-id>AA01|VLXM|003717||SW_INTERNET</msoservtypes:service-instance-id>\n <msoservtypes:subscriber-name>TEST_4306301</msoservtypes:subscriber-name>\n </msoservtypes:service-information>\n <service-parameters>\n <msolayer3:internet-service-information>\n <msolayer3:internet-evc-access-information>\n <msolayer3:internet-evc-speed-value>10</msolayer3:internet-evc-speed-value>\n <msolayer3:internet-evc-speed-units>Mbps</msolayer3:internet-evc-speed-units>\n <msolayer3:ip-version>ds</msolayer3:ip-version>\n </msolayer3:internet-evc-access-information>\n <msolayer3:vr-lan>\n <msolayer3:routing-protocol>none</msolayer3:routing-protocol>\n <msolayer3:vr-lan-interface>\n <msolayer3:vr-designation>primary</msolayer3:vr-designation>\n <msolayer3:v4-public-lan-prefixes>\n <msolayer3:t-provided-v4-lan-public-prefixes>\n <msolayer3:request-index>1</msolayer3:request-index>\n <msolayer3:v4-next-hop-address>32.10.30.116</msolayer3:v4-next-hop-address>\n <msolayer3:v4-lan-public-prefix-length>32</msolayer3:v4-lan-public-prefix-length>\n </msolayer3:t-provided-v4-lan-public-prefixes>\n </msolayer3:v4-public-lan-prefixes>\n <msolayer3:v6-public-lan-prefixes>\n <msolayer3:t-provided-v6-lan-public-prefixes>\n <msolayer3:request-index>1</msolayer3:request-index>\n <msolayer3:v6-next-hop-address>2507:0CB4:85A5:0030:0000:0000:0000:0010</msolayer3:v6-next-hop-address>\n <msolayer3:v6-lan-public-prefix-length>48</msolayer3:v6-lan-public-prefix-length>\n </msolayer3:t-provided-v6-lan-public-prefixes>\n </msolayer3:v6-public-lan-prefixes>\n <msolayer3:dhcp>\n <msolayer3:v4-dhcp-server-enabled>Y</msolayer3:v4-dhcp-server-enabled>\n <msolayer3:v6-dhcp-server-enabled>Y</msolayer3:v6-dhcp-server-enabled>\n <msolayer3:use-v4-default-pool>Y</msolayer3:use-v4-default-pool>\n <msolayer3:use-v6-default-pool>Y</msolayer3:use-v6-default-pool>\n </msolayer3:dhcp>\n <msolayer3:pat>\n <msolayer3:v4-pat-enabled>Y</msolayer3:v4-pat-enabled>\n <msolayer3:use-v4-default-pool>N</msolayer3:use-v4-default-pool>\n </msolayer3:pat>\n <msolayer3:firewall-lite>\n <msolayer3:stateful-firewall-lite-v4-enabled>Y</msolayer3:stateful-firewall-lite-v4-enabled>\n <msolayer3:stateful-firewall-lite-v6-enabled>Y</msolayer3:stateful-firewall-lite-v6-enabled>\n </msolayer3:firewall-lite>\n </msolayer3:vr-lan-interface>\n </msolayer3:vr-lan>\n </msolayer3:internet-service-information>\n </service-parameters>\n</aetgt:service-request>\n", + "type": "String" + }, + "host": { + "value": "localhost", + "type": "String" + }, + "att-mso-schema-version": { + "value": "v1", + "type": "String" + }, + "att-mso-request-id": { + "value": "d00eb185-b1d7-429e-aca3-42a61b459535", + "type": "String" + }, + "att-mso-service-instance-id": { + "value": "AA01|VLXM|003717||SW_INTERNET", + "type": "String" + }, + "att-mso-service-request-timeout": { + "value": "180", + "type": "String" + } + } +} |