<artifactId>sdc-tosca</artifactId>\r
<name>sdc-sdc-tosca</name>\r
<description>SDC Tosca Parser JAR file for use by consumers</description>\r
- <version>1.2.0-SNAPSHOT</version>\r
+ <version>1.2.1-SNAPSHOT</version>\r
<packaging>jar</packaging>\r
\r
<properties>\r
private static final String CONFIGURATION_DIR = "config/";
private static volatile ConfigurationManager instance;
-// private Configuration configuration;
-// private ErrorConfiguration errorConfiguration;
-
- Map<String, Object> configurations = new HashMap<String, Object>();
+ Map<String, Object> configurations = new HashMap<String, Object>();
private ConfigurationManager() {
initialConfigObjectsFromFiles();
configurations.put(clazz.getSimpleName(), object);
}
+ private <T> void loadConfigurationClass(Class<T> clazz, String fileName) {
+ T object = getObjectFromYaml(clazz,fileName);
+ configurations.put(clazz.getSimpleName(), object);
+ }
+
+ public static <T> T getObjectFromYaml(Class<T> className) {
+ return getObjectFromYaml(className, null);
+ }
- public <T> T getObjectFromYaml(Class<T> className) {
+ public static <T> T getObjectFromYaml(Class<T> className, String fileName) {
- String configFileName = calculateFileName(className);
+ String configFileName = fileName != null ? fileName : calculateFileName(className); ;
URL url = Resources.getResource(CONFIGURATION_DIR + configFileName);
String configFileContents = null;
try {
configFileContents = Resources.toString(url, Charsets.UTF_8);
} catch (IOException e) {
- log.error("ConfigurationManager - Failed to load configuration file");
+ log.error("ConfigurationManager - Failed to load configuration file {}", configFileName, e);
}
YamlToObjectConverter yamlToObjectConverter = new YamlToObjectConverter();
T object = yamlToObjectConverter.convertFromString(configFileContents, className);
public static ConfigurationManager getInstance() {
- // if (instance == null) {
- // synchronized (ConfigurationManager.class) {
- // if (instance == null) {
+ if (instance == null) {
+ synchronized (ConfigurationManager.class) {
+ if (instance == null) {
instance = new ConfigurationManager();
- // }
- // }
- // }
+ }
+ }
+ }
return instance;
}
public JtoscaValidationIssueConfiguration getJtoscaValidationIssueConfiguration() {
return (JtoscaValidationIssueConfiguration) configurations.get((JtoscaValidationIssueConfiguration.class.getSimpleName()));
}
-
+ public void setJtoscaValidationIssueConfiguration(String fileName) {
+ loadConfigurationClass(JtoscaValidationIssueConfiguration.class, fileName);
+ }
public Configuration getConfiguration() {
return (Configuration) configurations.get((Configuration.class.getSimpleName()));
}
\r
public class SdcToscaParserFactory {\r
private static Logger log = LoggerFactory.getLogger(SdcToscaParserFactory.class.getName());\r
- \r
+\r
+ private static ConfigurationManager configurationManager;\r
private static volatile SdcToscaParserFactory instance;\r
- private static Configuration configuration;\r
- private static ErrorConfiguration errorConfiguration;\r
- private static JtoscaValidationIssueConfiguration jtoscaValidationIssueConfiguration;\r
private List<JToscaValidationIssue> criticalExceptions = new ArrayList<>();\r
private List<JToscaValidationIssue> warningExceptions = new ArrayList<>();\r
private List<JToscaValidationIssue> notAnalyzadExceptions = new ArrayList<>();\r
- private SdcToscaParserFactory() {\r
-\r
- }\r
+ private SdcToscaParserFactory() {}\r
\r
/**\r
* Get an SdcToscaParserFactory instance.\r
synchronized (SdcToscaParserFactory.class) {\r
if (instance == null) {\r
instance = new SdcToscaParserFactory();\r
- configuration = ConfigurationManager.getInstance().getConfiguration();\r
- errorConfiguration = ConfigurationManager.getInstance().getErrorConfiguration();\r
- jtoscaValidationIssueConfiguration = ConfigurationManager.getInstance().getJtoscaValidationIssueConfiguration();\r
+ configurationManager = ConfigurationManager.getInstance();\r
}\r
}\r
}\r
return instance;\r
}\r
\r
+ public static void setConfigurationManager(ConfigurationManager configurationManager) {\r
+ SdcToscaParserFactory.configurationManager = configurationManager;\r
+ }\r
+\r
/**\r
* Get an ISdcCsarHelper object for this CSAR file.\r
*\r
try {\r
handleErrorsByTypes(csarPath, cSarConformanceLevel);\r
} catch (JToscaException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
+ throwSdcToscaParserException(e);\r
}\r
return sdcCsarHelperImpl;\r
}\r
private void handleErrorsByTypes(String csarPath, String cSarConformanceLevel) throws JToscaException {\r
clearValidationIssuesLists();\r
for(JToscaValidationIssue toscaValidationIssue : ThreadLocalsHolder.getCollector().getValidationIssues().values()){\r
- List<JToscaValidationIssueInfo> issueInfos = jtoscaValidationIssueConfiguration.getValidationIssues().get(toscaValidationIssue.getCode());\r
+ List<JToscaValidationIssueInfo> issueInfos = configurationManager.getJtoscaValidationIssueConfiguration().getValidationIssues().get(toscaValidationIssue.getCode());\r
if(issueInfos != null && !issueInfos.isEmpty()){\r
JToscaValidationIssueInfo issueInfo = null;\r
issueInfo = issueInfos.stream()\r
\r
\r
private void validateCsarVersion(String cSarVersion) throws SdcToscaParserException {\r
- ConformanceLevel level = configuration.getConformanceLevel();\r
+ ConformanceLevel level = configurationManager.getConfiguration().getConformanceLevel();\r
String minVersion = level.getMinVersion();\r
String maxVersion = level.getMaxVersion();\r
if (cSarVersion != null) {\r
return false;\r
}\r
private void throwConformanceLevelException(String minVersion, String maxVersion) throws SdcToscaParserException {\r
- ErrorInfo errorInfo = errorConfiguration.getErrorInfo(SdcToscaParserErrors.CONFORMANCE_LEVEL_ERROR.toString());\r
+ ErrorInfo errorInfo = configurationManager.getErrorConfiguration().getErrorInfo(SdcToscaParserErrors.CONFORMANCE_LEVEL_ERROR.toString());\r
throw new SdcToscaParserException(String.format(errorInfo.getMessage(), minVersion, maxVersion), errorInfo.getCode());\r
}\r
\r
private void throwSdcToscaParserException(JToscaException e) throws SdcToscaParserException {\r
- ErrorInfo errorInfo = errorConfiguration.getErrorInfo(SdcToscaParserErrors.getSdcErrorByJToscaError(JToscaErrorCodes.getByCode(e.getCode())).toString());\r
+ ErrorInfo errorInfo = configurationManager.getErrorConfiguration().getErrorInfo(SdcToscaParserErrors.getSdcErrorByJToscaError(JToscaErrorCodes.getByCode(e.getCode())).toString());\r
throw new SdcToscaParserException(errorInfo.getMessage(), errorInfo.getCode());\r
}\r
\r
+\r
+\r
}
\ No newline at end of file
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeSuite;
public abstract class SdcToscaParserBasicTest {
static Map<String, HashMap<String, List<String>>> fdntCsarHelper_Data;
- @BeforeClass
+ @BeforeSuite
public static void init() throws SdcToscaParserException, JToscaException, IOException {
factory = SdcToscaParserFactory.getInstance();
package org.openecomp.sdc.impl;
-import static org.testng.Assert.assertEquals;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
+import org.apache.commons.io.IOUtils;
import org.openecomp.sdc.tosca.parser.api.ISdcCsarHelper;
+import org.openecomp.sdc.tosca.parser.config.ConfigurationManager;
+import org.openecomp.sdc.tosca.parser.config.JtoscaValidationIssueConfiguration;
import org.openecomp.sdc.tosca.parser.exceptions.SdcToscaParserException;
import org.openecomp.sdc.toscaparser.api.common.JToscaValidationIssue;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import java.io.IOException;
+import java.net.URL;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.testng.Assert.assertEquals;
+
public class ToscaParserValidationIssueTest extends SdcToscaParserBasicTest {
+ protected static ConfigurationManager configurationManager = ConfigurationManager.getInstance();
+
+ @BeforeClass
+ public void loadJtoscaValidationIssueConfiguration() throws IOException {
+ //load the tests dedicated configuration
+ configurationManager.setJtoscaValidationIssueConfiguration( "jtosca-validation-issue-configuration-test.yaml");
+ factory.setConfigurationManager(configurationManager);
+ }
+
+ @AfterClass
+ public void loadJtoscaValidationIssueOriginalConfiguration() throws IOException {
+ //load the tests dedicated configuration
+ configurationManager.setJtoscaValidationIssueConfiguration("jtosca-validation-issue-configuration.yaml");
+ factory.setConfigurationManager(configurationManager);
+
+ }
+
@Test
public void testNoValidationIssues() throws SdcToscaParserException {
List<JToscaValidationIssue> criticalsReport = factory.getCriticalExceptions();
assertEquals( criticalsReport.size(),0);
}
+
+ @Test(expectedExceptions = SdcToscaParserException.class)
+ public void testCriticalIssueThrowsSdcToscaParserException() throws SdcToscaParserException {
+ getCsarHelper("csars/service-Nfod2images-csar.csar");//conformance level 4.0
+ }
+
@Test
- public void testMultiSinceConformanceLevelIssues() throws SdcToscaParserException {
- ISdcCsarHelper Nfod2images = getCsarHelper("csars/service-Nfod2images-csar.csar");//conformance level 4.0
+ public void testMultiSinceConformanceLevelIssues() {
+ try {
+ ISdcCsarHelper Nfod2images = getCsarHelper("csars/service-Nfod2images-csar.csar");//conformance level 4.0
+ } catch (SdcToscaParserException e) {
+ System.out.println("SdcToscaParserException is caught here - this is WAD in this specific test.");
+ }
List<JToscaValidationIssue> notAnalyzedReport = factory.getNotAnalyzadExceptions();
- assertEquals( notAnalyzedReport.size(),2);
+ assertEquals(2, notAnalyzedReport.size());
List<JToscaValidationIssue> warningsReport = factory.getWarningExceptions();
- assertEquals( warningsReport.size(),0);
+ assertEquals( 0, warningsReport.size());
List<JToscaValidationIssue> criticalsReport = factory.getCriticalExceptions();
- assertEquals( criticalsReport.size(),24);
+ assertEquals( 24, criticalsReport.size());
//JE006 multy values sinceCsarConformanceLevel
assertEquals( criticalsReport.stream().filter(c->c.getCode().equals("JE006")).collect(Collectors.toList()).size(), 18);
assertEquals( criticalsReport.stream().filter(c->c.getCode().equals("JE003")).collect(Collectors.toList()).size(), 6);
--- /dev/null
+# jTosca validation issues
+#by error code, type the validation issue to be CRITICAL/WARNING
+# since Conformance level considered to this type. for example:
+#JE001:
+# - type: WARNING,
+# sinceCsarConformanceLevel: 3.0
+# - type: WARNING,
+# sinceCsarConformanceLevel: 5.0
+validationIssues:
+ # TypeMismatchError
+ JE001:
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 3.0
+ - issueType: CRITICAL
+ sinceCsarConformanceLevel: 4.0
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 5.0
+ # MissingType
+ JE002:
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 3.0
+ #MissingRequiredFieldError
+ JE003:
+ - issueType: CRITICAL
+ sinceCsarConformanceLevel: 4.0
+ #MissingRequiredFieldError2
+ JE004:
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 2.0
+ #InvalidGroupTargetException
+ JE005:
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 3.0
+ #Schema definition of \"%s\" has \"status\" attribute with an invalid value
+ JE006:
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 3.0
+ - issueType: CRITICAL
+ sinceCsarConformanceLevel: 4.0
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 5.0
+ #The unit \"%s\" is not valid
+ JE007:
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 3.0
+ #ValidationError
+ JE008:
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 3.0
+ #ValueError: Expected max 2 arguments for function \"get_input\" but received \"%s\"",args.size())
+ JE009:
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 3.0
+ #MissingRequiredFieldError3
+ JE010:
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 3.0
\ No newline at end of file
-# jTosca validation issues
-#by error code, type the validation issue to be CRITICAL/WARNING
+# jTosca validation issues
+#by error code, type the validation issue to be CRITICAL/WARNING
# since Conformance level considered to this type. for example:
-#JE001:
-# - type: WARNING,
-# sinceCsarConformanceLevel: 3.0
-# - type: WARNING,
+#JE001:
+# - issueType: WARNING
+# sinceCsarConformanceLevel: 3.0
+# - issueType: WARNING
# sinceCsarConformanceLevel: 5.0
validationIssues:
# TypeMismatchError
- JE001:
+ JE001:
- issueType: WARNING
sinceCsarConformanceLevel: 3.0
- - issueType: CRITICAL
- sinceCsarConformanceLevel: 4.0
- - issueType: WARNING
- sinceCsarConformanceLevel: 5.0
# MissingType
JE002:
- issueType: WARNING
sinceCsarConformanceLevel: 3.0
#MissingRequiredFieldError
JE003:
- - issueType: CRITICAL
- sinceCsarConformanceLevel: 4.0
+ - issueType: WARNING
+ sinceCsarConformanceLevel: 3.0
#MissingRequiredFieldError2
JE004:
- issueType: WARNING
- sinceCsarConformanceLevel: 2.0
+ sinceCsarConformanceLevel: 3.0
#InvalidGroupTargetException
JE005:
- issueType: WARNING
JE006:
- issueType: WARNING
sinceCsarConformanceLevel: 3.0
- - issueType: CRITICAL
- sinceCsarConformanceLevel: 4.0
- - issueType: WARNING
- sinceCsarConformanceLevel: 5.0
#The unit \"%s\" is not valid
JE007:
- issueType: WARNING
major=1
minor=2
-patch=0
+patch=1
base_version=${major}.${minor}.${patch}