X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=dcae-analytics-test%2Fsrc%2Fmain%2Fjava%2Forg%2Fopenecomp%2Fdcae%2Fapod%2Fanalytics%2Ftest%2FBaseDCAEAnalyticsCommonTest.java;h=4f5015bc8fa4bfa3c16c04494f2e4da1644ab4b5;hb=06044df56fb07f4b368888581752855595e7b147;hp=4698f21cd6efbf58bfa1cf8edca8f5363b44b95e;hpb=475cb8c867038acd73ff540173d54bac3947c610;p=dcaegen2%2Fanalytics%2Ftca.git diff --git a/dcae-analytics-test/src/main/java/org/openecomp/dcae/apod/analytics/test/BaseDCAEAnalyticsCommonTest.java b/dcae-analytics-test/src/main/java/org/openecomp/dcae/apod/analytics/test/BaseDCAEAnalyticsCommonTest.java index 4698f21..4f5015b 100644 --- a/dcae-analytics-test/src/main/java/org/openecomp/dcae/apod/analytics/test/BaseDCAEAnalyticsCommonTest.java +++ b/dcae-analytics-test/src/main/java/org/openecomp/dcae/apod/analytics/test/BaseDCAEAnalyticsCommonTest.java @@ -1,243 +1,243 @@ -/* - * ===============================LICENSE_START====================================== - * dcae-analytics - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================LICENSE_END=========================================== - */ - -package org.openecomp.dcae.apod.analytics.test; - -import org.json.JSONException; -import org.junit.Assert; -import org.skyscreamer.jsonassert.JSONAssert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.ObjectOutputStream; -import java.io.OutputStreamWriter; -import java.lang.reflect.Field; -import java.net.URL; -import java.net.URLClassLoader; -import java.nio.charset.Charset; -import java.nio.file.Paths; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.Arrays; - -import static java.nio.file.Files.deleteIfExists; -import static java.nio.file.Files.exists; - -/** - * Base common test class for all DCAE Analytics Test e.g. unit tests, integration test, CDAP tests etc. - *

- * @author Rajiv Singla . Creation Date: 10/19/2016. - */ -abstract class BaseDCAEAnalyticsCommonTest { - - protected static final Logger LOG = LoggerFactory.getLogger(BaseDCAEAnalyticsCommonTest.class); - - /** - * Asserts if expected Json String and actual Json String contain the same properties ignoring - * property order. Simple String assertion might fail as property order during serialization and deserialization - * is generally non-deterministic. Also proper error message are generated more missing or unexpected - * properties - * - * @param expectedJsonString expected Json String - * @param actualJsonString actual Json String - * @throws JSONException Json Exception - */ - public static void assertJson(String expectedJsonString, String actualJsonString) throws JSONException { - JSONAssert.assertEquals(expectedJsonString, actualJsonString, true); - } - - /** - * Converts given file location to String - * - * @param fileLocation location of the file which needs to be converted to String - * @return Contents of file as string - * @throws IOException IOException - */ - public static String fromStream(String fileLocation) throws IOException { - final InputStream jsonFileInputStream = - BaseDCAEAnalyticsCommonTest.class.getClassLoader().getResourceAsStream(fileLocation); - Assert.assertNotNull("Json File Location must be valid", jsonFileInputStream); - try (BufferedReader reader = - new BufferedReader(new InputStreamReader(jsonFileInputStream, Charset.forName("UTF-8")))) { - final StringBuilder result = new StringBuilder(); - final String newLine = System.getProperty("line.separator"); - String line = reader.readLine(); - while (line != null) { - result.append(line) - .append(newLine); - line = reader.readLine(); - } - jsonFileInputStream.close(); - return result.toString(); - } - } - - - /** - * Checks if object can be serialized properly - * - * @param object input object - * @param callingClass calling class - * @throws IOException IOException - */ - public static void testSerialization(Object object, Class callingClass) throws IOException { - final URL location = callingClass.getProtectionDomain().getCodeSource().getLocation(); - final File serializedOutputFile = - new File(location.getPath() + String.format("serialization/%s.ser", object.getClass().getSimpleName())); - - // Maybe file already try deleting it first - final boolean deleteIfExists = deleteIfExists(Paths.get(serializedOutputFile.getPath())); - - if (deleteIfExists) { - LOG.warn("Previous serialization file was overwritten at location: {}", serializedOutputFile.getPath()); - } - - boolean mkdirs = true; - if (!exists(Paths.get(serializedOutputFile.getParentFile().getPath()))) { - mkdirs = serializedOutputFile.getParentFile().mkdirs(); - } - if (mkdirs) { - try (FileOutputStream fileOutputStream = new FileOutputStream(serializedOutputFile); - ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) { - objectOutputStream.writeObject(object); - LOG.debug("Successfully created serialization file at location: {}", serializedOutputFile.getPath()); - } - } else { - throw new IllegalStateException( - String.format("Failed to create location to store serialization file: %s", - serializedOutputFile)); - } - } - - /** - * Writes Text to Output file - * - * @param textFileLocation - location of text file e.g. textfiles/fileName.json - * @param content - file content - * @param callingClass - calling class - * @throws IOException - ioException - */ - public static void writeToOutputTextFile(String textFileLocation, String content, Class callingClass) throws - IOException { - final URL location = callingClass.getProtectionDomain().getCodeSource().getLocation(); - final File fileLocation = new File(location.getPath() + textFileLocation); - - // Maybe file already try deleting it first - final boolean deleteIfExists = deleteIfExists(Paths.get(fileLocation.getPath())); - - if (deleteIfExists) { - LOG.warn("Previous file will be overwritten at location: {}", fileLocation.getPath()); - } - - boolean mkdirs = true; - if (!exists(Paths.get(fileLocation.getParentFile().getPath()))) { - mkdirs = fileLocation.getParentFile().mkdirs(); - } - if (mkdirs) { - try ( - FileOutputStream fileOutputStream = new FileOutputStream(fileLocation); - OutputStreamWriter outputStream = - new OutputStreamWriter(fileOutputStream, Charset.forName("UTF-8"))) { - outputStream.write(content); - LOG.debug("Successfully created text file at location: {}", fileLocation.getPath()); - } - } else { - throw new IllegalStateException( - String.format("Failed to create location to store text file: %s", fileLocation)); - } - - } - - - /** - * For testing purposes only we may sometime we may want to access private fields of underlying - * object to confirm the values are setup correctly. - *

- * This method uses java reflection to get the value to private object in the class - * - * @param object Actual object which has the private field you want to check - * @param fieldName Field name in the Actual Object you want to get the value of - * @param privateFieldClass Type of the private field - * @param Class of Actual Object - * @param Class of private field - * @return value of the private field - */ - public static U getPrivateFiledValue(T object, String fieldName, Class privateFieldClass) { - - final Class objectClass = object.getClass(); - try { - final Field privateField = objectClass.getDeclaredField(fieldName); - try { - - // mark private field to be accessible for testing purposes - AccessController.doPrivileged(new PrivilegedAction() { - @Override - public Object run() { - privateField.setAccessible(true); - return null; - } - }); - - - return privateFieldClass.cast(privateField.get(object)); - - } catch (IllegalAccessException e) { - LOG.error("Unable to access field: {}", fieldName); - throw new IllegalStateException(e); - } - } catch (NoSuchFieldException e) { - LOG.error("Unable to locate field name: {} in class: {}", fieldName, objectClass.getSimpleName()); - throw new IllegalStateException(e); - } - - - } - - - /** - * Prints classpath jars which are visible inside the class - * - * @param classLoader classloader of the calling class - */ - public static void dumpClasspath(ClassLoader classLoader) { - - LOG.info("Dumping ClassPath for classloader: {}", classLoader); - - if (classLoader instanceof URLClassLoader) { - - URLClassLoader ucl = (URLClassLoader) classLoader; - LOG.info("\t ==========>>>" + Arrays.toString(ucl.getURLs())); - - } else { - LOG.info("\t(cannot display components as not a URLClassLoader)"); - } - - if (classLoader.getParent() != null) { - dumpClasspath(classLoader.getParent()); - } - } - -} +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================LICENSE_END=========================================== + */ + +package org.openecomp.dcae.apod.analytics.test; + +import org.json.JSONException; +import org.junit.Assert; +import org.skyscreamer.jsonassert.JSONAssert; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.ObjectOutputStream; +import java.io.OutputStreamWriter; +import java.lang.reflect.Field; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.charset.Charset; +import java.nio.file.Paths; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.Arrays; + +import static java.nio.file.Files.deleteIfExists; +import static java.nio.file.Files.exists; + +/** + * Base common test class for all DCAE Analytics Test e.g. unit tests, integration test, CDAP tests etc. + *

+ * @author Rajiv Singla . Creation Date: 10/19/2016. + */ +abstract class BaseDCAEAnalyticsCommonTest { + + protected static final Logger LOG = LoggerFactory.getLogger(BaseDCAEAnalyticsCommonTest.class); + + /** + * Asserts if expected Json String and actual Json String contain the same properties ignoring + * property order. Simple String assertion might fail as property order during serialization and deserialization + * is generally non-deterministic. Also proper error message are generated more missing or unexpected + * properties + * + * @param expectedJsonString expected Json String + * @param actualJsonString actual Json String + * @throws JSONException Json Exception + */ + public static void assertJson(String expectedJsonString, String actualJsonString) throws JSONException { + JSONAssert.assertEquals(expectedJsonString, actualJsonString, true); + } + + /** + * Converts given file location to String + * + * @param fileLocation location of the file which needs to be converted to String + * @return Contents of file as string + * @throws IOException IOException + */ + public static String fromStream(String fileLocation) throws IOException { + final InputStream jsonFileInputStream = + BaseDCAEAnalyticsCommonTest.class.getClassLoader().getResourceAsStream(fileLocation); + Assert.assertNotNull("Json File Location must be valid", jsonFileInputStream); + try (BufferedReader reader = + new BufferedReader(new InputStreamReader(jsonFileInputStream, Charset.forName("UTF-8")))) { + final StringBuilder result = new StringBuilder(); + final String newLine = System.getProperty("line.separator"); + String line = reader.readLine(); + while (line != null) { + result.append(line) + .append(newLine); + line = reader.readLine(); + } + jsonFileInputStream.close(); + return result.toString(); + } + } + + + /** + * Checks if object can be serialized properly + * + * @param object input object + * @param callingClass calling class + * @throws IOException IOException + */ + public static void testSerialization(Object object, Class callingClass) throws IOException { + final URL location = callingClass.getProtectionDomain().getCodeSource().getLocation(); + final File serializedOutputFile = + new File(location.getPath() + String.format("serialization/%s.ser", object.getClass().getSimpleName())); + + // Maybe file already try deleting it first + final boolean deleteIfExists = deleteIfExists(Paths.get(serializedOutputFile.getPath())); + + if (deleteIfExists) { + LOG.warn("Previous serialization file was overwritten at location: {}", serializedOutputFile.getPath()); + } + + boolean mkdirs = true; + if (!exists(Paths.get(serializedOutputFile.getParentFile().getPath()))) { + mkdirs = serializedOutputFile.getParentFile().mkdirs(); + } + if (mkdirs) { + try (FileOutputStream fileOutputStream = new FileOutputStream(serializedOutputFile); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) { + objectOutputStream.writeObject(object); + LOG.debug("Successfully created serialization file at location: {}", serializedOutputFile.getPath()); + } + } else { + throw new IllegalStateException( + String.format("Failed to create location to store serialization file: %s", + serializedOutputFile)); + } + } + + /** + * Writes Text to Output file + * + * @param textFileLocation - location of text file e.g. textfiles/fileName.json + * @param content - file content + * @param callingClass - calling class + * @throws IOException - ioException + */ + public static void writeToOutputTextFile(String textFileLocation, String content, Class callingClass) throws + IOException { + final URL location = callingClass.getProtectionDomain().getCodeSource().getLocation(); + final File fileLocation = new File(location.getPath() + textFileLocation); + + // Maybe file already try deleting it first + final boolean deleteIfExists = deleteIfExists(Paths.get(fileLocation.getPath())); + + if (deleteIfExists) { + LOG.warn("Previous file will be overwritten at location: {}", fileLocation.getPath()); + } + + boolean mkdirs = true; + if (!exists(Paths.get(fileLocation.getParentFile().getPath()))) { + mkdirs = fileLocation.getParentFile().mkdirs(); + } + if (mkdirs) { + try ( + FileOutputStream fileOutputStream = new FileOutputStream(fileLocation); + OutputStreamWriter outputStream = + new OutputStreamWriter(fileOutputStream, Charset.forName("UTF-8"))) { + outputStream.write(content); + LOG.debug("Successfully created text file at location: {}", fileLocation.getPath()); + } + } else { + throw new IllegalStateException( + String.format("Failed to create location to store text file: %s", fileLocation)); + } + + } + + + /** + * For testing purposes only we may sometime we may want to access private fields of underlying + * object to confirm the values are setup correctly. + *

+ * This method uses java reflection to get the value to private object in the class + * + * @param object Actual object which has the private field you want to check + * @param fieldName Field name in the Actual Object you want to get the value of + * @param privateFieldClass Type of the private field + * @param Class of Actual Object + * @param Class of private field + * @return value of the private field + */ + public static U getPrivateFiledValue(T object, String fieldName, Class privateFieldClass) { + + final Class objectClass = object.getClass(); + try { + final Field privateField = objectClass.getDeclaredField(fieldName); + try { + + // mark private field to be accessible for testing purposes + AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Object run() { + privateField.setAccessible(true); + return null; + } + }); + + + return privateFieldClass.cast(privateField.get(object)); + + } catch (IllegalAccessException e) { + LOG.error("Unable to access field: {}", fieldName); + throw new IllegalStateException(e); + } + } catch (NoSuchFieldException e) { + LOG.error("Unable to locate field name: {} in class: {}", fieldName, objectClass.getSimpleName()); + throw new IllegalStateException(e); + } + + + } + + + /** + * Prints classpath jars which are visible inside the class + * + * @param classLoader classloader of the calling class + */ + public static void dumpClasspath(ClassLoader classLoader) { + + LOG.info("Dumping ClassPath for classloader: {}", classLoader); + + if (classLoader instanceof URLClassLoader) { + + URLClassLoader ucl = (URLClassLoader) classLoader; + LOG.info("\t ==========>>>" + Arrays.toString(ucl.getURLs())); + + } else { + LOG.info("\t(cannot display components as not a URLClassLoader)"); + } + + if (classLoader.getParent() != null) { + dumpClasspath(classLoader.getParent()); + } + } + +}