a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac/*
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * CDDL HEADER START
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac *
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * The contents of this file are subject to the terms of the
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * Common Development and Distribution License, Version 1.0 only
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * (the "License"). You may not use this file except in compliance
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * with the License.
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac *
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * or http://forgerock.org/license/CDDLv1.0.html.
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * See the License for the specific language governing permissions
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * and limitations under the License.
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac *
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * When distributing Covered Code, include this CDDL HEADER in each
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * file and include the License file at legal-notices/CDDLv1_0.txt.
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * If applicable, add the following below this CDDL HEADER, with the
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * fields enclosed by brackets "[]" replaced with your own identifying
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * information:
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * Portions Copyright [yyyy] [name of copyright owner]
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac *
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * CDDL HEADER END
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac *
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac * Copyright 2014 ForgeRock AS
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac */
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignacpackage org.opends.server.util;
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignacimport java.lang.reflect.InvocationTargetException;
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignacimport org.testng.annotations.DataProvider;
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignacimport org.testng.annotations.Test;
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignacimport static org.assertj.core.api.Assertions.*;
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac@SuppressWarnings("javadoc")
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignacpublic class StaticUtilsTest extends UtilTestCase
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac{
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac @DataProvider
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac public Object[][] stackTraceToSingleLineString()
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac {
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac final String message = "This is a tremendous error message";
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac final String noMessageStackTrace = "Exception (" + getClass().getSimpleName() + ".java:";
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac final String messageStackTrace = "Exception: " + message + " (" + getClass().getSimpleName() + ".java:";
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac return new Object[][] {
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { null, "" },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new Exception(), noMessageStackTrace },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new Exception(message), messageStackTrace },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new Exception(new Exception()), "Exception: java.lang.Exception (" + getClass().getSimpleName() + ".java:" },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new Exception(message, new Exception()), messageStackTrace },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new InvocationTargetException(null), "InvocationTargetException (" + getClass().getSimpleName() + ".java:" },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new InvocationTargetException(new Exception()), noMessageStackTrace },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new InvocationTargetException(new Exception(message)), messageStackTrace },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac };
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac }
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac @Test(dataProvider = "stackTraceToSingleLineString")
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac public void stackTraceToSingleLineString(Throwable t, String startOfOutput)
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac {
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac assertThat(StaticUtils.stackTraceToSingleLineString(t)).startsWith(startOfOutput);
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac }
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac @DataProvider
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac public Object[][] stackTraceToSingleLineStringInDebugBuild()
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac {
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac final String message = "This is a tremendous error message";
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac final String messageStackTrace = "java.lang.Exception: " + message + " / " + getClass().getSimpleName() + ".java:";
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac return new Object[][] {
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { null, "" },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new Exception(), "java.lang.Exception / " + getClass().getSimpleName() + ".java:" },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new Exception(message), messageStackTrace },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new Exception(new Exception()), "java.lang.Exception: java.lang.Exception / " + getClass().getSimpleName() + ".java:" },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac { new Exception(message, new Exception()), messageStackTrace },
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac };
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac }
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac @Test(dataProvider = "stackTraceToSingleLineStringInDebugBuild")
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac public void stackTraceToSingleLineStringInDebugBuild(Throwable t, String startOfOutput)
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac {
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac final boolean orig = DynamicConstants.DEBUG_BUILD;
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac DynamicConstants.DEBUG_BUILD = true;
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac try
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac {
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac assertThat(StaticUtils.stackTraceToSingleLineString(t)).startsWith(startOfOutput);
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac }
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac finally
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac {
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac DynamicConstants.DEBUG_BUILD = orig;
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac }
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac }
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac
a2c9c09abc3e6dbb1ce43a191d1f1c6648c999c2JnRouvignac}