/** * 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.rs; import static org.junit.Assert.assertTrue; import javax.ws.rs.core.Response; 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.test.categories.Unit; import com.fujitsu.dc.test.jersey.DcRunner; /** * 本アプリケーションの例外マッパー. ログ出力と適切な形でのエラー応答出力を行う。 */ @RunWith(DcRunner.class) @Category({ Unit.class }) public final class DcCoreExceptionMapperTest { static Logger log = LoggerFactory.getLogger(DcCoreExceptionMapper.class); // ロガー差し替えをするので、ここに避難させておく. static Logger shelterdLogger; /** * BeforeClass. */ @BeforeClass public static void beforeClass() { shelterdLogger = DcCoreExceptionMapper.log; } /** * AfterClass. */ @AfterClass public static void afterClass() { DcCoreExceptionMapper.log = shelterdLogger; } /** * toResponseTestのテスト. */ @Test public void toResponseメソッドが() { DcCoreExceptionMapper mapper = new DcCoreExceptionMapper(); DcCoreExceptionMapper.log = new TestLogger() { @Override public void error(String msg, Throwable t) { log.debug(msg); StackTraceElement[] ste = t.getStackTrace(); // メッセージがthrowableのgetMessage()の内容を含む assertTrue(msg.indexOf(t.getMessage()) > 0); // メッセージがthrowableのStackTrace第1要素のクラス名を含む assertTrue(msg.indexOf(ste[0].getClassName()) > 0); // メッセージがthrowableのStackTrace第1要素のメソッド名を含む assertTrue(msg.indexOf(ste[0].getMethodName()) > 0); // メッセージがthrowableのStackTrace第1要素の行数を含む log.debug(String.valueOf(ste[0].getLineNumber())); assertTrue(msg.indexOf(String.valueOf(ste[0].getLineNumber())) > 0); } }; try { Inner i = new Inner(); i.process(); } catch (Exception exception) { Response res = mapper.toResponse(exception); res.getStatus(); } } /** * テスト用InnerClass. */ private static class Inner { public String process() { int a = 0; return "" + 1 / a; } } /** * 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) { } } }