/** * personium.io * Copyright 2014 FUJITSU LIMITED * * 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. */ package com.fujitsu.dc.core; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.Marker; import com.fujitsu.dc.core.DcCoreMessageUtils.Severity; import com.fujitsu.dc.test.categories.Unit; import com.fujitsu.dc.test.jersey.DcRunner; /** * EsModelの単体テストケース. */ @RunWith(DcRunner.class) @Category({ Unit.class }) public class DcCoreLogTest { static Logger log = LoggerFactory.getLogger(DcCoreLog.class); // ロガー差し替えをするので、ここに避難させておく. static Logger shelterdLogger; /** * BeforeClass. */ @BeforeClass public static void beforeClass() { shelterdLogger = DcCoreLog.log; } /** * AfterClass. */ @AfterClass public static void afterClass() { DcCoreLog.log = shelterdLogger; } /** * ログ出力正常系のテスト. */ @Test public void ログ出力正常系のテスト() { final String replaceValue = "AAAAABBBBBCCCCCDDDDDD"; DcCoreLog coreLog = DcCoreLog.Dav.ROLE_NOT_FOUND; DcCoreLog.log = new TestLogger() { @Override public void info(String msg) { doLog(msg); } @Override public void warn(String msg) { doLog(msg); } @Override public void error(String msg) { doLog(msg); } private void doLog(String msg) { log.debug(msg); // 置き換え文字列が置き換えられてメッセージがフォーマット通り出力されていることの確認 assertTrue(msg.indexOf(replaceValue) > 0); // テストの呼び出し元からの階層 int callStackLevel = 3; StackTraceElement[] ste = (new Throwable()).getStackTrace(); // メッセージにログ出力元のクラス名が含まれていることを確認 log.debug(ste[callStackLevel].getClassName()); assertTrue(msg.indexOf(ste[callStackLevel].getClassName()) > 0); // メッセージにログ出力元のメソッド名が含まれていることを確認 log.debug(ste[callStackLevel].getMethodName()); assertTrue(msg.indexOf(ste[callStackLevel].getMethodName()) > 0); // メッセージにログ出力元の行数が含まれていることを確認 log.debug(String.valueOf(ste[callStackLevel].getLineNumber())); assertTrue(msg.indexOf(String.valueOf(ste[callStackLevel].getLineNumber())) > 0); } }; coreLog.params(replaceValue).writeLog(); } /** * ログレベル設定を省略するとWARNレベルでログが出力されることを確認. */ @Test public void ログレベル設定を省略するとWARNレベルでログが出力されることを確認() { DcCoreLog coreLog = DcCoreLog.Misc.UNREACHABLE_CODE_ERROR; DcCoreLog.log = new TestLogger() { @Override public void info(String msg) { fail("WARNレベル以外でログが出力."); } @Override public void warn(String msg) { doLog(msg); } @Override public void error(String msg) { fail("WARNレベル以外でログが出力."); } private void doLog(String msg) { log.debug(msg); // テストの呼び出し元からの階層 int callStackLevel = 3; StackTraceElement[] ste = (new Throwable()).getStackTrace(); // メッセージにログ出力元のクラス名が含まれていることを確認 log.debug(ste[callStackLevel].getClassName()); assertTrue(msg.indexOf(ste[callStackLevel].getClassName()) > 0); // メッセージにログ出力元のメソッド名が含まれていることを確認 log.debug(ste[callStackLevel].getMethodName()); assertTrue(msg.indexOf(ste[callStackLevel].getMethodName()) > 0); // メッセージにログ出力元の行数が含まれていることを確認 log.debug(String.valueOf(ste[callStackLevel].getLineNumber())); assertTrue(msg.indexOf(String.valueOf(ste[callStackLevel].getLineNumber())) > 0); } }; coreLog.params("test").writeLog(); } /** * 存在しないメッセージIDを指定すると実行時例外が発生すること. * @throws RuntimeException RuntimeException */ @Test(expected = RuntimeException.class) public void 存在しないメッセージIDを指定すると実行時例外が発生すること() throws RuntimeException { DcCoreLog.create("UNKNOWN"); } /** * ログレベル設定を切り替えてDcCoreLogを生成する. */ @Test public void ログレベル設定を切り替えてDcCoreLogを生成する() { final String errorMsg = "ERROR Message."; final String warningMsg = "WARNING Message."; final String infoMsg = "INFO Message."; DcCoreLog.log = new TestLogger() { @Override public void info(String msg) { assertTrue(msg.indexOf(infoMsg) > 0); } @Override public void warn(String msg) { assertTrue(msg.indexOf(warningMsg) > 0); } @Override public void error(String msg) { assertTrue(msg.indexOf(errorMsg) > 0); } }; DcCoreLog infoLog = new DcCoreLog("TEST", Severity.INFO, infoMsg); infoLog.writeLog(); DcCoreLog warningLog = new DcCoreLog("TEST", Severity.WARN, warningMsg); warningLog.writeLog(); DcCoreLog errorLog = new DcCoreLog("TEST", Severity.ERROR, errorMsg); errorLog.writeLog(); } /** * Mockロガー. */ static class TestLogger implements Logger { @Override public void warn(Marker arg0, String arg1, Object arg2, Object arg3) { } @Override public void warn(Marker arg0, String arg1, Throwable arg2) { } @Override public void warn(Marker arg0, String arg1, Object[] arg2) { } @Override public void warn(Marker arg0, String arg1, Object arg2) { } @Override public void warn(String arg0, Object arg1, Object arg2) { } @Override public void warn(Marker arg0, String arg1) { } @Override public void warn(String arg0, Throwable arg1) { } @Override public void warn(String arg0, Object[] arg1) { } @Override public void warn(String arg0, Object arg1) { } @Override public void warn(String arg0) { } @Override public void trace(Marker arg0, String arg1, Object arg2, Object arg3) { } @Override public void trace(Marker arg0, String arg1, Throwable arg2) { } @Override public void trace(Marker arg0, String arg1, Object[] arg2) { } @Override public void trace(Marker arg0, String arg1, Object arg2) { } @Override public void trace(String arg0, Object arg1, Object arg2) { } @Override public void trace(Marker arg0, String arg1) { } @Override public void trace(String arg0, Throwable arg1) { } @Override public void trace(String arg0, Object[] arg1) { } @Override public void trace(String arg0, Object arg1) { } @Override public void trace(String arg0) { } @Override public boolean isWarnEnabled(Marker arg0) { return true; } @Override public boolean isWarnEnabled() { return false; } @Override public boolean isTraceEnabled(Marker arg0) { return false; } @Override public boolean isTraceEnabled() { return false; } @Override public boolean isInfoEnabled(Marker arg0) { return false; } @Override public boolean isInfoEnabled() { return false; } @Override public boolean isErrorEnabled(Marker arg0) { return false; } @Override public boolean isErrorEnabled() { return false; } @Override public boolean isDebugEnabled(Marker arg0) { return false; } @Override public boolean isDebugEnabled() { return false; } @Override public void info(Marker arg0, String arg1, Object arg2, Object arg3) { } @Override public void info(Marker arg0, String arg1, Throwable arg2) { } @Override public void info(Marker arg0, String arg1, Object[] arg2) { } @Override public void info(Marker arg0, String arg1, Object arg2) { } @Override public void info(String arg0, Object arg1, Object arg2) { } @Override public void info(Marker arg0, String arg1) { } @Override public void info(String arg0, Throwable arg1) { } @Override public void info(String arg0, Object[] arg1) { } @Override public void info(String arg0, Object arg1) { } @Override public void info(String arg0) { } @Override public String getName() { return null; } @Override public void error(Marker arg0, String arg1, Object arg2, Object arg3) { } @Override public void error(Marker arg0, String arg1, Throwable arg2) { } @Override public void error(Marker arg0, String arg1, Object[] arg2) { } @Override public void error(Marker arg0, String arg1, Object arg2) { } @Override public void error(String arg0, Object arg1, Object arg2) { } @Override public void error(Marker arg0, String arg1) { } @Override public void error(String msg, Throwable t) { } @Override public void error(String arg0, Object[] arg1) { } @Override public void error(String arg0, Object arg1) { } @Override public void error(String arg0) { } @Override public void debug(Marker arg0, String arg1, Object arg2, Object arg3) { } @Override public void debug(Marker arg0, String arg1, Throwable arg2) { } @Override public void debug(Marker arg0, String arg1, Object[] arg2) { } @Override public void debug(Marker arg0, String arg1, Object arg2) { } @Override public void debug(String arg0, Object arg1, Object arg2) { } @Override public void debug(Marker arg0, String arg1) { } @Override public void debug(String arg0, Throwable arg1) { } @Override public void debug(String arg0, Object[] arg1) { } @Override public void debug(String arg0, Object arg1) { } @Override public void debug(String arg0) { } } }